2012년 4월 23일 월요일

좋은 프로그래머가 되는 24가지 방법

  1. 프로그래밍에 열정이 있어야 한다. 열정이 없고 즐기지 못하면 평생하기 어려운 일이다.
  2. 프로그래밍 기초 원리를 완전히 이해해야 한다. 원리를 모르면 근본적인 해결을 할 수 없다.
  3. 문제 해결 능력을 키워야 한다. 개발자의 가장 중요한 핵심 역량이다.
  4. 창의적인 사람이 되라. 대부분의 좋은 해결책은 창의력에서 나온다.
  5. 다른 사람의 코드를 이해할 수 있는 능력을 키워야 한다. 다른 사람의 코드에서 배운다.
  6. 수학을 잘 해야 한다. 수학을 못하면 값싼 쉬운 개발 밖에 못한다.
  7. 좋은 커뮤니케이션 스킬을 갖도록 노력해야 한다. 프로그래밍은 컴퓨터와 얘기하는 것이 아니고 사람들과 얘기하는 것이다. 
  8. 협업 능력을 키워라. 다른 사람과 일을 나눠서 할 수 있어야 내 몸값이 비싸진다.
  9. 논쟁(debate) 능력을 키워야 한다. 고급 개발자가 될 수록 토론하는 일이 늘어날 것이며, 좋은 토론이 좋은 소프트웨어를 만든다.
  10. OOP를 완전히 이해해야 한다. 협업이 더욱 원활해질 것이다.
  11. 남이 이해할 수 있는 문서를 작성할 수 있어야 한다. 문서 작성은 평생 따라다니는 중요한 업무이다.
  12. 적어도 한가지의 개발언어는 완전히 마스터를 해야 한다. 마스터한 언어로는 어떠한 문제도 풀 수 있어야 한다.
  13. 적어도 한가지의 스크립트 언어를 구사할 수 있어야 한다. 간단한 툴은 쉽게 만들어 쓸 수 있다.
  14. 비즈니스를 이해해야 한다. 훌륭한 아키텍트가 될 것이다.
  15. 주변에 나보다 훨씬 뛰어난 프로그래머를 둬라. 끊임 없이 배울 수 있다.
  16. 끊임 없이 새로운 기술을 익혀라. 전쟁에서 쓸 무기가 많아질 것이다.
  17. 습관적으로 주석을 달아야 한다. 주석은 남을 위해서 다는 것이 아니고 프로그래밍의 일부이다.
  18. 남이 이해하기 쉬운 코드를 작성해야 한다. 나중에 내 발목을 잡지 않을 것이다.
  19. 리뷰와 친해져야 한다. 평생 리뷰를 하며 사는 것이 프로그래머의 인생이다. 리뷰를 하지 않으면 발전하기 어렵다.
  20. 건강을 유지해라. 건강을 잃으면 실력이고 뭐고 다 필요 없다.
  21. 좋은 의자를 사라. 건강을 지켜주고 효율을 높여준다.
  22. 인생을 즐길 줄 알아야 한다. 프로그래머로 오래 지속하고 싶으면 인생 자체를 즐기는 다양한 방법을 익혀야 한다.
  23. 소프트웨어 공학을 익혀라. 주먹구구식 개발에서 벗어나게 해주고 개발을 즐겁게 해줄 것이다.
  24. 높은 연봉을 받일 수 있도록 꾸준히 노력하라. 위 23가지 방법이 도움이 될 것이다.

댓글 20개:

  1. 개발을개발개발2012년 4월 23일 오전 10:54

    좋은 글입니다만 이런사람이 세상에 있나요...?

    답글삭제
  2. 개인적으로 2,6이 안되서 고생하고 있네요.
    17번은 아래 18번이 되면 안 해도 된다고 생각합니다. 주로 자바를 하는 입장에서는 API나 public method이외에는 거의 주석 작성 안 하죠.
    리뷰는 검사가 아닌 공부기 때문에 저도 강추입니다.

    좋은 글 고맙습니다.

    이런 사람이 되도록 해야 겠네요. 수학만 아니면 될 자신은 있습니다만. ^^;;;

    답글삭제
  3. 좋은 글입니다. 아는 분들과도 공유하고 싶네요~ :)

    답글삭제
  4. 이런 개발자들이 세상에는 바글바글합니다. 제가 친하게 지내는 친구들 중에도 있습니다만 대부분은 미국인입니다. - -;

    물론 우리나라에도 이런 개발자들이 많습니다.
    본인도 이런 개발자가 될 수 있습니다. 이중에서 23번 하나만 하더라도 아주 어려운 항목입니다. 시간이 걸리는 일들이니 꾸준히 노력해보세요.

    답글삭제
  5. 천재배추님 안녕하세요.

    주석은 필요 이상으로 많이 달 필요가 없습니다. Public interface에 대한 함수 주석은 꼭 필요하죠. 그외에는 별도의 주석으로 설명하지 않으면 안되는 곳을 제외하고는 별로 필요 없습니다. 필요도 없는데 기계적으로 많은 주석을 다는 것은 낭비죠.

    제가 관련 글을 올린 적이 있네요.
    http://allofsoftware.net/entry/WhyHardToComment

    수학은 어려운 알고리즘을 만드는데 직접적으로 쓰이기도 하지만 수학적인 Logical한 두뇌가 프로그래밍에 도움이 된다는 의미입니다. 이미 Logical한 두뇌를 가지고 있다면 아무 상관없습니다. ^^

    답글삭제
  6. Citizen Eco-Drive wrist watch by n.zeissig 전규현님이 올리신 "좋은 프로그래머가 되는 24가지 방법"을 읽고, 깨달은 바가 있어 이를 컨설턴트의 덕목으로 바뀌어봤습니다. 1. 컨설팅에 열정이 있어야 한..

    답글삭제
  7. 좋은 글이네요. 좋은 글에 감히 두 개의 항목을 추가해 볼께요.

    25. 타당성 있는 견적을 낼 수 있어야 한다. 이를 통해 근무 여건이 개선될 것이며 공정한 거래가 이루어 질 것이다. 그리고, 이를 통해 충분한 휴식과 여가가 생기게 될 것이며 압박에서 벗어나 창의적인 작업을 할 수 있을 것이다.
    26. 개발에 앞서 약자를 위한 기술인지 고민하는 엔지니어야 한다. 좋은 엔지니어는 단순히 좋은 기술과 많은 보수를 받는 엔지니어가 아니다. 자신이 왜 엔지니어로 생활을 하는지 존재의 이유를 증명할 수 있어야 한다.

    답글삭제
  8. 3번 문제 해결 능력의 좋은 사례를 알 수 있을까요?
    나머지는 어느 정도 감이 잡힙니다만 이건 통 모르겠네요.

    답글삭제
  9. 안녕하세요. 호수님

    25번은 보통 개발자가 직접 견적을 내는 것은 아니므로 "Estimation을 잘 할 수 있어야 한다" 정도로 볼 수 있겠습니다. Estimation을 잘 하기 위해서는 분석을 잘해야 합니다. 분석을 잘 한다는 것은 한문장으로 쓰기 어려울 만큼 방대한 내용이고 많은 경험이 필요합니다.

    그렇다고하더라도 SW를 잘 이해하지 못하는 경영자나 고객과는 합리적인 대화가 되지 않습니다. 분석없이 일정이 정해지고 개발자는 또 일정에 쫓겨서 마구 코딩을 해대곤 합니다.

    결국 소프트웨어 개발에서 가장 중요한 스펙 이슈로 귀결됩니다. ^^ 사실 많은 문제들이 스펙으로 귀결됩니다.

    그리고 26번은 다소 철학적이군요. :)

    답글삭제
  10. 안녕하세요. som님

    소프트웨어를 개발하다보면 (다른 때도 마찬가지죠) 우리는 항상 수많은 문제를 해결해야 합니다. 버그를 잡기도 하고 새로운 아키텍쳐를 만들어야 하고, 서로 상충되는 요구사항을 절묘하게 조합해야 하고, 이루 헤아릴 수 없을 만큼 수많은 문제에 봉착하고 이들을 해결해야 합니다.

    문제를 해결하다보면 여러가지 복합적인 요소를 고려하여 최선의 방법을 도출하기 위해서는 문제의 핵심에 접근하는 방법, 논리적인 사고, 창조적인 아이디어, 복합적인 정리, 다양한 경험과 지식 등 다양한 요소들이 필요합니다.

    문제 해결 능력이 떨어지는 사람들은 그저 그런 비효율적인 방법으로 해결을 하게 됩니다. 그래서 프로그래머 인터뷰에서는 특정 기술이나 도메인 경험자보다는 문제 해결 능력을 갖춘 사람을 뽑으려고 합니다.

    저는 프로그래머로서 문제 해결 능력을 갖춘지 확인하기 위해서 인터뷰때 문제를 제시하곤 합니다. 그리고 무엇이던 하나라도 확실한 개발언어 능력, 문제를 풀어가는 도중에 논리력, 창의력 등을 어떻게 발휘하는지를 보고 사람을 뽑습니다.

    이렇게 뽑다보면 십수년 경력의 guru급 개발자인데 논리력이 부족한 사람도 있었고, 가장 자신있다는 개발언어를 완벽히 사용하지 못하는 사람도 있었습니다. 반대로 연봉도 낮고 경험도 적지만 대단한 창의력을 보인 사람도 있었습니다. 이러면 "삼봤다"입니다. ^^

    스스로 자신이 문제 해결 능력이 좋은지 확인하기는 어렵습니다. 문제 해결능력을 키우려면 우선 개발언어 하나는 완벽하게 이해를 하고 나서 수년간의 리뷰를 통해서 자신보다 우수한 사람들이 어떻게 문제를 분석하고 해결하는지 공유하다보면 점점 나아질 겁니다. ^^

    답글삭제
  11. 멋진 글입니다~!

    답글삭제
  12. 주옥같은 말씀들입니다.
    제 나름대로 생각하고 있던 내용들을 님께서 명쾌하게 정리해 주시니 감사합니다.

    답글삭제
  13. 항상 좋은글 보고 갑니다..

    계속 눈팅만 하다가 용기내어 답글을 적었습니다.

    막연하게만 생각했던 이렇게 하면 좋을텐데하는 그런것들을 많이 다뤄주셔서 항상 감사하게 생각됩니다.

    근데 여기에 올리신 글을 배포해도 되나요?.. 물론 출처를 반드시 표기해서요...^^

    답글삭제
  14. 이경희님 안녕하세요.

    제 글 하단에 보면 CCL표시가 되어 있습니다.
    비상업적 목적, 변경 금지, 저작자 표시(출처 표시)만 지키면 얼마든지 인용이 가능합니다.

    답글삭제
  15. 글의 내용 중, 프로그래밍의 기초 원리가 무엇인지 궁금합니다. 어떤 부분을 배워야 하는지, 어떻게 공부해야하는지, 알고 싶네요.

    좋은 글 감사드립니다. ^^

    답글삭제
  16. 안녕하세요.

    프로그래밍을 너무 High level로만 알지 말고 low level도 알아야 합니다. OS가 어떻게 동작하는지, 컴파일러가 어떻게 Object 파일을 만들어 내는지, Assembly언어는 어떻게 동작하는지, 프로그램이 메모리를 어떻게 관리하는지, 파일 시스템은 어떻게 동작하는지, 함수 호출은 어떻게 동작하는지, 이루 셀수 없을 만큼 많습니다.

    단순히 High level 언어를 사용할줄만 안다면 제대로 개발하기 어렵습니다. 내부적으로 어떻게 동작하는지도 많이 아는 것이 좋습니다.

    답글삭제
  17. 좋은 말씀 감사합니다~ 공유하고 싶은데
    출처하고 공유해도 될런지요^^

    답글삭제
  18. 네, 본문아래 CCL 표시가 있습니다. 블로그 글을 공유하는데 따로 허락받지 않아도 됩니다.
    저작자표시 O, 상업적이용 X, 컨텐츠변경 X 만 지키면 됩니다.
    감사합니다.

    답글삭제
  19. 좋은 말씀 감사합니다. 앞으로 어떤식으로 공부해야 할지 방향이 잡히네요.

    답글삭제