아하
  • 토픽

  • 스파링

  • 잉크

  • 미션


당찬치타71

당찬치타71

좋은 프로그래밍 습관, 공부방법은?

안녕하세요.

현직 AI 및 데이터 연구원입니다.

제가 묻고싶은 내용은 제목과 같이

좋은 개발자 혹은 연구원이 되기 위해 어떤 방법으로 프로그래밍을 공부해야 하는가 입니다.

현직자라 서술하였지만 단순히 명함에 쓰인 직군일 뿐이며, 이런 질문을 하는 이유는 제 스킬이 평범에 미치지도 못하는 수준이라 생각하기 때문입니다.

저는 정식으로 컴퓨터 관련 수업을 들은적이 없습니다. 예를 들어, 컴퓨터 및 자료 구조 혹은 운영체제나 알고리즘 등 여러 분야에 문외한입니다.

단순히 연구에 필요한 방법론만을 알고있을 뿐이죠.

반면, 제 동료들은 개발업무 경험이 있기도 하고 대학 혹은 대학원에서 컴퓨팅 수업을 이수하였습니다. 그들의 입장에선 저는 야매, 사파일뿐이죠.

이러한 생각이 강하게 드는 상황은 코드 리뷰의 속도입니다.

부족한 저의 실력으로는 단순한 코드도 함수하나하나 살펴봐야합니다. 저자가 작성한 커스텀 함수라면 검중도 해야하지요.

반면, 동료들은 함수명만 보고 대충 동작을 짐작합니다. 제가 어떻게 그게 되냐 물으면 함수명은 '동사'형으로 쓰인다는 말을 합니다.

함수명을 동사형으로 쓴다는 컨셉 역시 저에게 신선했습니다. 여태 제가 작성한 함수를 공유받은 사람들은 어떻게 생각할까... 문득 부끄러워지더군요.

물론, 공부에는 왕도가 없겠지만 보편적인 길이 있다는 것을 강하게 느꼈습니다.

단순히 프로그래밍 실력을 키운다기보다는

이런 사소한 습관과 스킬을 익힐 수 있는 방법이 없을까요?

    5개의 답변이 있어요!

    • 길쭉한오색조5

      길쭉한오색조5

      10년 이상 프로그래밍을 현업으로 하고 있는 경험으로 답변 드립니다.

      코드리뷰의 속도에서 문제를 느끼셨다고 말씀 하셨습니다.

      코드를 보는 능력이 좋으면 코드 리뷰를 빨리 할수 있겠지요.

      하지만 보는 사람의 능력보다, 해당 코드 자체의 가독성이 더 중요합니다.

      말씀하신 예제와 같이, 함수명, 변수명이 직관적으로 되어 있으면, 해당 목적을 바로 인지할 수 있고, 굳이 코드를 찾아서보며 변수와 함수의 목적을 파악할 필요가 없습니다.

      따라서 많은 프로그래밍 구루나 프로그래밍 책들이 이러한 코딩 원칙들을 중요시 여기는 것이지요.

      int a;

      int averageSpeed;

      위 두가지 변수가 있을 때, 어떤 경우에 변수의 목적을 파악하기 쉬울지에 대한 답변은 명백할 것입니다.

      함수의 경우도 마찬가지 입니다.

      그럼 이러한 습관과 스킬을 어떻게 느낄 수 있느냐?

      좋은 프로그래밍에 대한 기본 원칙들을 배우고 실제 프로그래밍 또는 코드리뷰에서 체험하는 방법밖에 없다고 생각합니다.

      많은 책들이 있지만, 제대로 시간을 들여 공부해 보고 싶으시다면, 저는 아래 책을 추천해 드립니다.

      - Code Complete 코드 컴플리트 2 더 나은 소프트웨어 구현을 위한 실무 지침서

      저는 위 책의 판매와 전혀 관련이 없습니다. ^^

      따라서 저 책과 유사한 다른 인기있는 책들은 유사한 원칙들을 설명하고 있으므로, 공부해 보시면 되겠습니다.

    • 이런 부분은 잘된 코드를 많이 보는 수밖에 없다고 생각이 됩니다.

      코드리뷰시 다른 사람들의 코드를 잘 보는 것도 많은 도움이 됩니다.

      특히 잘한다고 생각하는 분들 코드를 잘보는 것이 중요합니다 .

      변수명의 경우 해당 언어의 코딩스타일 가이드를 한번쯤 읽어 보는 것도 추천합니다.

      이렇게 학습이후에는 따라서 만들어보고 응용을 해보는 것입니다.

      눈으로 보는것과 실제 해보는 것에는 차이가 있다고 생각됩니다.

      따라해보고 진행하는 프로젝트에 적용해보는 것입니다.

    • 탈퇴한 사용자

      탈퇴한 사용자

      사소한 습관과 스킬이라고 언급했지만 결국 기본기와 경험이 쌓인 것의 결과가 아닌가 생각합니다.

      다른 동료분들은 함수명만 보고 대충 동작을 짐작한다고 하셨는데 일종의 패턴에 훈련이 되었기 때문에 직관적으로 그런 행동을 할 수 있을 것 같습니다. 하지만 그런 패턴을 인식하기 이전에 일단 불편함을 겪어야 합니다.

      예를 들어 어떤 함수의 이름을 aaa 나 bbb 같은 이름으로 짓는다면 만들고 나서는 기억하겠지만 시간이 흐르고 나면 잊혀지고 함수의 내용을 봐야지만 무슨 역할을 하는지 알게 됩니다. 본인이 아니라 제 3자가 본다면 파악하는데 시간이 오래 걸리게 되겠지요.

      도메인 주도 설계로 유명한 에릭 에반스는 소프트웨어의 궁극적인 목적을 "사용자를 만족시키는 것"이라고 합니다. 이런 사용자에는 소프트웨어를 사용하는 사용자를 1차적으로 가리킬 수 있습니다. 하지만 소프트웨어를 만드는 본인 그 자체도 사용자라고 할 수 있습니다. 그 말은 이미 만든 소프트웨어를 유지보수하고 기존의 설계를 변경하기 위해서 만족감을 얻을 수 있어야 한다는 의미이기도 합니다.

      결국 소프트웨어 공학이란 소프트웨어를 만들기 위해 이전에 고민을 한 사람들이 연구하고 노력하여 만들어낸 학문일 것입니다. 소프트웨어의 기본기를 담고 있는 서적을 읽어보시고 실천을 해보신다면 바퀴의 재발명을 줄일 수 있어서 효율적인 학습 방법이 될 수 있을 것으로 생각합니다.

    • 단순한 코드도 함수하나하나 살펴보고 저자가 작성한 커스텀 함수라면 검증도 하시는습관은 대충짐작하는것보다 좋은 습관입니다.

      개발을 지속적으로 하시게되면 함수명에서 어느정도 기능을 짐작할수있는 것은 자연히 생기실것이고요.

      사실 함수명도 작성하기나름이라..

      기능적인 사항을 잘 알수 있도록 가독성있게 작성하는 습관을 들이면 된다고생각합니다.

      다만 자료구조나 알고리즘을 잘모르신다면 틈틈이 이에 대해 공부하시는것은 도움이 되실듯합니다.

    • 질문자님의 글속에 답이 있습니다.

      결국 질문자님이 부족한 것은 경험입니다. 부족한 경험을 채우는 것은 당연하게도 경험을 하는 것입니다.

      컴퓨터공학 관련으로 역량이 부족하다면 배우고 경험하셔야 합니다.

      정도라는 것이 있습니다. 필요한 부분만을 학습하는 것이 아닌 기초부터 탄탄히 하는 방향으로 공부를 하셔야 합니다.

      단순히 학원 몇개월 다녀서 채우질 수 있는 부분이 아닙니다. 시간을 두고 천천히 나아가야 합니다.

      요즘은 KMOOC 과 같은 오픈형 강의 사이트가 많습니다. 이런 사이트를 통해 컴퓨터공학 기본 과목들을 모두 배우세요.

      그리고 이를 바탕으로 프로그래밍을 경험 하셔야 합니다. 하고자 하는 의지가 중요합니다. 지속 하다보면 어느순간

      동료들의 말이 귀에 들리고 코드가 눈에 보이고 왜 이렇게 해야하는지 스스로 느끼게 될 것입니다.

      천리길도 한걸음 부터입니다. 작심삼일이 되지 않고 자기 주도적으로 열심히 공부하셔야 합니다.

      가장 경계해야 하는 것은 모르는 상태의 내가 아니라 그걸 알고도 성장하지 않는 나의 모습입니다.

      이러한 고민을 하고 있는 질문자님은 반드시 성장하실 수 있을 것이라고 생각합니다.

      화이팅 하세요. 응원합니다. !!!