33장: 개발자의 성격
33장: 개발자의 성격
- 소프트웨어 공학자의 재료와 도구는 결국 자기 자신이므로, 지능과 성격은 타당한 연구 영역임.
33.1 성격은 주제를 벗어난 것 아닌가?
- 프로그래밍 작업은 관리 불가능하고 강요될 수 없으므로, 훌륭한 개발자가 되는 것은 개인적 성격 문제임.
- 지성에 대해서는 어떻게 할 수가 없지만, 개인의 성격에 대해서는 무언가를 할 수 있음.
33.2 지성과 겸손
- 뛰어난 지성은 뛰어난 개발자가 되는 것과 직접 관계가 없음; 필요한 건 세부 사항을 받아들이고 파악하는 능력임.
- 데이크스트라는 “The Humble Programmer”에서 뛰어난 프로그래머는 자신의 두뇌가 작다는 것을 인정하는 겸손한 사람이라 주장함.
- 분해, 재검토, 짧은 루틴, 문제 도메인 관점, 규약 등은 두뇌의 부담을 줄여주는 좋은 습관임.
- 겸손하게 정신적 버팀목을 쓰는 개발자가 오히려 이해하기 쉽고 오류 적은 코드를 작성함.
33.3 호기심
-
개발 과정에 대한 인식을 구축하라: 프로세스를 알수록 변경을 이해하고 좋은 방향으로 나아갈 수 있음.
-
실험하라: 언어 기능을 모르면 간단한 프로그램을 작성해 확인해보고, 실수로부터 배워라.
-
문제 해결에 관한 책을 읽어라: 현명한 전략도 스스로는 잘 찾아내지 못하므로 책에서 배워야 함.
-
행동하기 전에 분석하고 계획을 세워라: 대부분의 문제는 과도한 분석이 아니라 분석 부족임.
-
성공적인 프로젝트를 학습하라: 훌륭한 개발자의 코드를 읽고 자신의 코드와 비교해보라.
-
문서를 읽어라: 문서 공포증을 극복해야 얻는 게 많으며, 라이브러리 설명서도 정기적으로 훑어봐야 함.
-
다른 책과 정기 간행물을 읽어라: 업계 평균은 책을 거의 안 읽으므로 꾸준히 읽으면 쉽게 차별화됨.
-
다른 전문가들과 관계를 맺어라: 컨퍼런스, 지역 사용자 그룹, 온라인 토론에 참여하라.
-
전문적인 개발자가 되도록 노력하라: 초보→입문→유능→리더십 4단계로 성장하며, 리더는 의사소통(사람 85%)의 비중이 큼을 이해함.
33.4 지적인 정직함
- 전문가는 실수를 인정하고 컴파일러 경고를 이해하려 노력하며, 현실적 상황·일정을 보고하는 지적 정직함을 갖춤.
- 컴파일해서 작동 여부만 확인하는 습관은 이해 부족의 신호이며, 테스트는 오류의 존재만 보여줄 뿐임.
- 일정은 “협상”할 수 없고, 기능·인원·범위 등 다른 변수만 조정 가능함.
33.5 의사소통과 협동
- 가독성 있는 코드 작성은 팀워크의 일부이며, 프로그래밍은 컴퓨터보다 사람과의 의사소통이 우선임.
33.6 창의성과 훈련
- 표준과 규약은 창의력을 억제하지 않고, 오히려 중요하지 않은 부분에 규약을 둬 중요한 부분에 창의력을 집중시킴.
- 뛰어난 예술가·건축가처럼 제약과 규율이 오히려 걸작을 가능케 함.
33.7 게으름
- 게으름은 재미없는 작업을 미루거나, 빨리 처리하거나, 툴을 만들어 다시 안 하게 하는 형태로 나타남.
- 툴을 만드는 “장기적 게으름”이 가장 생산적임; 바쁨을 생산성과 혼동하지 말아야 함.
33.8 덜 중요한 특성
인내심
- 인내심은 상황에 따라 자산(끈기)일 수도 부채(고집)일 수도 있음.
- 안 되는 접근법에 매달리기보다 다른 방법을 시도하거나 잠시 놓아두는 편이 나음.
경험
- 소프트웨어 분야는 기초 지식조차 빠르게 바뀌므로, 다른 분야에 비해 직접 경험의 가치가 작음.
- 지속적으로 학습하지 않으면 10년 경험이 아니라 1년 경험을 10번 반복한 것에 불과함.
별난 프로그래밍
- 밤새우는 “영웅적” 프로그래밍에 대한 찬사는 거짓말이며 실패로 가는 지름길임.
- 프로그래밍에 흥분해야 하지만, 흥분이 유능함을 대체할 수는 없음.
33.9 습관
- 개발자는 대부분의 일을 습관적으로 처리하므로 좋은 습관이 중요함.
- 좋거나 나쁜 개발자가 되는 것은 반복된 행동, 즉 습관의 결과임.
- 나쁜 습관은 없애기보다 좋은 습관으로 대체하는 편이 쉬움.
참고 자료
- 에츠허르 데이크스트라, “The Humble Programmer” (튜링상 강의, 1972)
- 제럴드 M. 와인버그, 『프로그래밍 심리학』(인사이트, 2014)
- 로버트 피어시그, 『선과 모터사이클 관리술』(문학과지성사, 2006)
- 빌 커티스, 『Tutorial: Human Factors in Software Development』(IEEE Computer Society Press, 1985)
- 스티브 맥코넬, 『Professional 소프트웨어 개발』(인사이트, 2003) 7장
요점 정리
- 성격은 컴퓨터 프로그램을 작성하는 능력에 직접 영향을 미친다.
- 가장 중요한 성격은 겸손과 호기심, 지적인 정직함, 창의성과 훈련, 현명한 게으름이다.
- 뛰어난 개발자의 성격은 대부분 재능과는 상관없이 개인적인 발전을 위한 노력과 연관이 있다.
- 놀랍게도 지력과 경험, 인내심, 자구력은 이로운 만큼 해롭다.
- 많은 개발자가 능동적으로 새로운 정보를 찾지 않지만, 약간의 시간을 투자해 읽고 배우면 다른 개발자와 차별화될 수 있다.
- 훌륭한 성격은 주로 올바른 습관 형성의 문제다.