[Code Complete] CH5: Design in Construction(3)
·
Software Engineering/Code Complete, 2nd Edition
4. Design Practices 이번 섹션에서는 실제로 디자인을 할 때 사용할 수 있는 휴리스틱과, 더 나은 결과를 얻기 위한 단계들을 설명한다. Iterate 디자인은 비결정적이기 때문에, 디자인 사이클을 여러 번 반복(iterate)하면서, 서로 다른 접근 방식을 테스트할 수 있다. 이렇게 사이클을 돌리면서, high-level view와 low-level view를 왔다갔다하게 된다. high-level view에서 나온 큰 그림은, 저수준 설계의 세부사항을 더 잘 이해할 수 있도록 하고, low-level view를 잘 설계한다면 high-level 결정에 더 현실적인 기반을 제시한다.   C++ 예시를 들면 다음과 같다. 처음에 최대값을 찾는 함수를 만들었지만, low level에서 오류가 ..
[Code Complete] CH5: Design in Construction(2)
·
Software Engineering/Code Complete, 2nd Edition
5.3 Design Building Blocks: Heuristics  개발자들은 흔히 개발 프로세스에서 A->B->C -> .... ->Y -> Z 순으로, 즉 순차적으로 처리하면 원하는 소프트웨어를 만들어낼 수 있을 것이라고 생각한다. 근본적으로 개발자는 알고리즘과 같이 결정적이고 시스템화 할 수 있는 방법을 선호하는 사람들이기 때문이다.   그러나 software design이란 전혀 다른 이야기이다. SW 설계란 비결정적(nondeterministic)하기 때문에, 휴리스틱한 스킬의 적용이야 말로 좋은 SW 디자인 방법이라고 할 수 있다. 휴리스틱한 방법은, 시행착오법과 유사하다고 보면 된다. 이후의 subsection들은 이 휴리스틱 각각을 소프트웨어의 주요 기술적 핵심 원칙인 복잡성 관리(ma..
[Code Complete] CH5: Design in Construction(1)
·
Software Engineering/Code Complete, 2nd Edition
1. Design Challenges software design이란 computer software를 운영 소프트웨어로 전환시키는 일종의 컨셉을 의미한다. Design을 잘해야 codding과 debuging을 쉽게 할 수 있으며, 대규모 프로젝트에는 필수적이다. design에 있어 challenge에 대해 알아보자. Design Is a Wicked Problem : wicked problem이란, 문제의 정의가 불명확하며, 해결책의 평가가 복잡하고, 모든 문제가 서로 얽혀 있으며, 문제를 정의하는 과정이 곧 해결의 일부일때 나타난다. 대표적으로 타코마 다리의 붕괴(1976)이 그러하다. 타코마 다리가 "공명" 현상에 약하다는 문제점은, 타코마 다리가 붕괴된 이후에야 파악되었다. 그 이후에야 다른 다..
[Code Complete] CH4: Key Construction Decisions
·
Software Engineering/Code Complete, 2nd Edition
이 장에서는 Programming Language 선택 등 project의 specific design에 대해 다루고 있다. 1. Choice of Programming Language construction의 시작부터 끝까지 같은 programming 언어를 사용해야 하므로 이 선택은 매우 중요하다. 보통 프로그래머들은 자신과 친숙한 언어를 사용하면 더 생산적인 경향이 있다. high-level language를 사용하는 프로그래머들은 더 좋은 생산성과 퀄리티를 가진 코드를 만들 수 있다. C같은 low level에서 발생하는 세부적인 메모리, OS 관련 문제들을 신경쓰지 않아도 되기 때문이다.  그러나 중요한건 각 언어에는 컨셉이 있고, 그 컨셉을 지켰을 때에 높은 생산성을 보이는데, 친숙하지 않은 ..
[Code Complete] CH3: Measure Twice, Cut Once: Upstream Prerequisites(2)
·
Software Engineering/Code Complete, 2nd Edition
3. Problem-Definition Prerequisite 이 장은 프로젝트 수행에서 가장 선행되는, Problem-Definition에 대해 서술한다. 이 책이 Construction이기 때문에 어떻게 definition 할지보다는, Problem-definiton의 중요성에 대해 설명한다. problem definition은 우리가 지향해야 할 목표를 제시하고, 이는 programming process의 가장 기저(foundation)에 해당한다.무엇보다 problem definition에서 명심할 점은, 문제점을 기술적으로 접근하는 게 아니라, 이 기술을 사용할 사용자들의 관점에서 서술하는 것이다. 즉 간단히, 기획을 잘 해야한다는 것이다. "어떤 불편함" 때문에 이 기술을 개발해야 하고, 이 ..
[Code Complete] CH3: Measure Twice, Cut Once: Upstream Prerequisites(1)
·
Software Engineering/Code Complete, 2nd Edition
이 챕터에서는 본격적인 construction에 들어가기 전의 Prerequisites, 즉 groundwork을 설명한다. 건축으로 치면 기초 공사에 해당하는 것이다. 저자는 단계별로 설명하고 있고, 포스팅도 책의 순서대로 이루어질 것이지만, 빨리 construction 파트부터 보고 싶다면 CH5로 이동할 것을 추천한다.(독자의 이탈을 막기 위해 저자는 Importance부터 설명하고 있다..) 그래도 기초 공사는 정말 중요하므로, 귀찮겠지만 공부를 시작해보자. 1. Importance of Prerequisites 높은 퀄리티의 SW를 만드는 프로그래머들의 공통분모는, (high quality sw를 만들기 위해) 많은 훈련을 거쳤다는 것이다. 이러한 연습들은 프로젝트의 모든 부분(처음, 중간, 끝..
[Code Complete] CH2: Metaphors for a Richer Understanding of Software Development
·
Software Engineering/Code Complete, 2nd Edition
1. The Importance of Metaphors 저자는 다양한 필드의 과학들은 모두 은유를 활용해 어떤 개념을 효율적으로 공부할 수 있다는 점에 주목한다. 생각해보면 과학이나 공학을 공부하면서, 물리 화학 법칙들을 은유를 통해 더 잘 이해할 수 있다. 예를 들어, 우리는 당구장에서 쓰리쿠션을 하는 행위로부터 물리학에서 배우는 탄성 충돌에 대해서 이해할 수 있다. 은유적인 상황 속에서 새로운 것을 발견하기도 한다. 예를 들어, 화학자 Kekulé은 뱀이 자기의 꼬리를 물고 빙글빙글 돌아가는 꿈을 꾼 뒤에, 6각형의 고리 형태인 벤젠 구조의 모델을 구상하고, 이를 증명했다.  이처럼 좋은 은유로 간단하며, 이해하기 쉽고, 동작 과정을 설명할 수 있는 '모델'을 만들 수 있다. 그러나 이러한 모델들이 ..
[Code Complete] CH1: Welcome to Software Construction
·
Software Engineering/Code Complete, 2nd Edition
0. Motivation 이 책을 시작하게 된 이유는, 개발자를 준비하면서 다양한 프로젝트를 준비했고, 그 과정에서 근본적인 개발 능력이 부족했다고 느꼈기 때문입니다. 20~100줄 내외의 Problem Solving에는 자신이 있었지만, 본격적으로 프로젝트를 준비하면서 수천~수만 줄의 코드를 분석하고, 작성하고, 팀과 협업하는 과정에서 뚜렷한 방향 없이 주먹구구식으로 코딩하는 저를 발견했습니다. Coder가 아닌 Programmer가 되기 위해서는, 개발 프로세스에 있어 명확한 기준을 잡아야 한다고 생각합니다. 그래서 Google에서 가장 추천하는 책 중 하나인 Code Complete를 보고 뛰어난 프로그래머가 되기 위한 공부를 하기로 결심했습니다.1. Software Construction이란? 건..
gg4ever1724
'Software Engineering/Code Complete, 2nd Edition' 카테고리의 글 목록