0. Motivation
이 책을 시작하게 된 이유는, 개발자를 준비하면서 다양한 프로젝트를 준비했고, 그 과정에서 근본적인 개발 능력이 부족했다고 느꼈기 때문입니다. 20~100줄 내외의 Problem Solving에는 자신이 있었지만, 본격적으로 프로젝트를 준비하면서 수천~수만 줄의 코드를 분석하고, 작성하고, 팀과 협업하는 과정에서 뚜렷한 방향 없이 주먹구구식으로 코딩하는 저를 발견했습니다. Coder가 아닌 Programmer가 되기 위해서는, 개발 프로세스에 있어 명확한 기준을 잡아야 한다고 생각합니다. 그래서 Google에서 가장 추천하는 책 중 하나인 Code Complete를 보고 뛰어난 프로그래머가 되기 위한 공부를 하기로 결심했습니다.
1. Software Construction이란?
건축업계에서 "construction"이 의미하는 것은 무엇일까? construction이란 건축의 프로세스를 의미하는데, 보통 건축의 프로세스라 하면 기획, 설계, 실제 건설, 안전검증 등이 포함된 과정이지만, 우선 실제로 "짓는" 행위에 주목할 것이다.
프로그래밍도 비슷하다. 프로그래밍은 다음과 같은 프로세스를 가진다.
- Problem definition
- Requirements development
- Construction planning
- Software architecture, or high-level design
- Detailed design
- Coding and debugging
- Unit testing
- Integration testing
- Integration
- System testing
- Corrective maintenance
조금 고리타분한 느낌이 든다. 실제로 작업 과정을 확실히 하는 대기업으로 갈수록 더욱 그렇다. 하지만 우리 대다수는, 이렇게 확실하게 단계를 구분하지는 않고, 그냥 몇 가지를 통합해서 프로그래밍이라고 생각한다. 우리도 이처럼 construction에 주목할 것이다. 앞서 건축에서의 construction이 "짓는" 행위에 중점을 둔다고 설명했고, 마찬가지로 프로그래밍에서 "construction"을 coding과 debugging에 중점을 두고 gray circle을 그려보면 다음과 같다.
여기에서 저자는 construction이 단순한 coding과는 다르다는 점을 강조한다. 왜냐하면, coding은 컴퓨터 언어로의 기계적인 해석이라고 생각하기 쉽기 때문이다. 따라서 저자는 construction과 호환되는 단어는 programming이라고 주장하는데, 이는 programming에는 프로그래머의 창의성과 판단력이 중요시되기 때문이다. 따라서 coding 과 debugging을 중심으로 생각하되, 그 주변부 프로세스 또한 뛰어난 성과를 내기 위해서 공부해야 한다.
2. Why Is Software Construction Important?
어떤 사업 도메인에서도, 소프트웨어의 퀄리티를 개선하는 것은 개발의 생산성에 있어 굉장히 중요하다. 그렇지만 왜 이 책은 construction에 중점을 두고 있을까? 저자는 다음과 같이 설명한다.
- Construction은 SW개발에서 상당한 영역을 차지한다. 프로젝트의 크기에 따라 다르겠지만, construction은 적게 잡아도 30%, 많으면 80%의 시간을 차지한다. Amdahl's law에 의하면, 가장 많은 시간이 소요되는 construction을 최적화시키는 것이 가장 효율적이다.
- Construction은 SW개발의 핵심이다. 기획이나 아키텍처 설계같은 프로세스는, construction을 효율적으로 진행하기 위한 사전 작업에 해당하고, SW testing은 construction 이후의 단계로, construction이 잘 이루어졌는지 검증하는 단계이다. 따라서 construction이 SW개발 프로세스의 핵심이라고 볼 수 있다.
- Construction의 output인 Source Code는 SW를 정확히 기술하는 유일한 문서이다. programmer들이 작성한, 프로그램의 동작을 정확히 기술한 유일한 문서가 source code이고, 이 source code를 detail하고, correct하게 기술하는 능력이 무엇보다 중요하다.
- Construction은 모든 application 개발에 필수적으로 들어가는 유일한 단계이다. 큰 프로젝트가 아니라, toy project와 같이 기획이 적거나, 심지어는 clone project에서도 construction은 반드시 들어가는 단계이다.
'Software Engineering > Code Complete, 2nd Edition' 카테고리의 다른 글
[Code Complete] CH5: Design in Construction(1) (0) | 2024.12.26 |
---|---|
[Code Complete] CH4: Key Construction Decisions (0) | 2024.12.26 |
[Code Complete] CH3: Measure Twice, Cut Once: Upstream Prerequisites(2) (0) | 2024.12.26 |
[Code Complete] CH3: Measure Twice, Cut Once: Upstream Prerequisites(1) (0) | 2024.12.24 |
[Code Complete] CH2: Metaphors for a Richer Understanding of Software Development (1) | 2024.12.24 |