GN⁺: 프로그래밍은 대부분 사고(思考)의 과정 (2014)
(agileotter.blogspot.com)프로그래밍은 대부분 생각하는 것이다
프로그래밍 시간의 대부분은 실제로 코딩하는 데 사용되지 않음
- 하루 6시간 동안 열심히 프로그래밍한 결과물을 다음 날 다시 입력하는 데는 30분 정도밖에 걸리지 않음
- 12개의 30분 중 1개, 즉 프로그래밍 시간의 1/12만이 실제 타이핑에 사용됨
- 나머지 11/12는 생각하고, 읽고, 연구하고, 결정하고, 확인하고, 검증하고, 컴파일하고, 실행하고, 가설을 세우고 반증하는 데 사용됨
프로그래밍에서 대부분의 작업은 지적인 작업임
- 프로그래밍은 제조 작업이 아니라 설계 작업임
- 코드는 단지 작업의 부산물일 뿐
- 코드를 작성하기 전에 요구사항을 이해하고 적절한 솔루션을 고안하는 것이 중요
- 불필요한 요구사항을 제거하는 것이 솔루션 제공을 가속화시킴
프로그래밍 환경 개선 방안
- 타이핑보다 생각하는 시간을 더 많이 제공해야 함
- 함께 소프트웨어에 대해 생각하고 결정을 쉽게 내릴 수 있는 시스템을 실험적으로 구축해 볼 것
- 생각을 최적화하는 방향으로 생산성 향상을 모색해야 함
GN⁺의 의견
-
프로그래밍에서 실제 코딩은 작은 부분이고, 대부분은 사고와 설계 과정이라는 주장은 일리가 있음. 하지만 이는 경력있는 숙련된 프로그래머의 경우에 해당되는 얘기일 수 있음. 초보자의 경우 실제 코딩에 더 많은 시간이 소요될 수 있음.
-
프로그래밍 과정에서 요구사항 분석, 설계, 코드 리뷰 등 코딩 외적인 활동이 중요하다는 점은 공감함. 하지만 이러한 활동들도 결국은 좋은 코드를 작성하기 위한 과정이므로, 코딩 자체의 중요성을 간과해서는 안됨.
-
프로그래밍 생산성 향상을 위해 생각하는 시간을 더 제공하고 함께 소프트웨어를 설계하는 문화를 만드는 것은 좋은 접근법으로 보임. 하지만 조직 문화나 팀원들의 성향에 따라 적용 방식은 달라질 수 있을 것임.
-
관련해서 TDD(테스트 주도 개발), 페어 프로그래밍, 코드 리뷰 등의 실천 방법들이 프로그래밍에서의 사고 과정을 체계화하고 코드 품질을 높이는 데 도움이 될 수 있음.
Hacker News 의견
요약해보자면,
- 좋은 개발자는 키보드를 만지기 전에 작업의 90% 이상을 한다는 인용구에 대한 반론이 있음. 순수하게 생각만 하는 것은 한계가 있으며, 코드를 작성하며 아이디어를 테스트하는 것이 중요함. 코드 작성 자체가 사고 과정의 일부로 보아야 함.
- 프로그래밍은 크게 2단계로 이루어짐:
- 세상을 이해하기
- 그것을 3살짜리 아이에게 설명하기
- 프로그래밍에서 도메인 지식이 중요함. 비즈니스 로직을 모르고서는 시스템을 어떻게 구현할지 생각할 수 없음.
- 번역가, 변호사, 회계사 등 전문 용어와 비즈니스 용어 간 간극을 메우는 직업군과 비슷함
-
PPP(Programming: Principles and Practice Using C++)
책에서도 프로그래밍에서 생각하는 시간의 중요성을 강조함 - 프로그래밍 시 방해 요소를 최소화하는 것이 생산성 향상에 도움됨
- 연구에 따르면 방해 이후 작업을 재개하는데 10~15분 소요
- 프로그래머는 하루에 방해받지 않는 2시간 세션을 한 번 가질 수 있음
- 편집, 검색, 이해 중인 시점에 방해받는 것이 가장 좋지 않음
- "프로그래밍은 대부분 생각하는 것"이라는 말은 그다지 생산적이지 않음. 모든 지식 노동이 생각하는 것임. 중요한 것은 무엇에 대해 생각하느냐임.
- 프로그래밍은 세상사에 대한 통찰을 형성하고, 그 이론을 코드로 표현하는 것임.