오늘은 Software Engineering의 고전인 No Silver Bullet 을 읽었다. 내용 발췌와 함께 나의 생각을 남기자.
관련 링크
- No Silver Bullet – Essence and Accidents of Software Engineering
- No Silver Bullet, From Wikipedia
- 프레드릭 P. 브룩스(Frederick P. Brooks) : 인간의 편에 선 소프트웨어 공학
서론
Skepticism is not pessimism, however. …… There is no royal road, but there is a road.
Does it have to be hard? –Essential difficulties
The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. …… The essence of a software entity is a construct of interlocking concepts ….. In most cases, the elements interact with each other in some nonlinear fashion, and the complexity of the whole increases much more than linearly.
Not only technical problems, but management problems as well come from the complexity.
Change
The software entity is constantly subject to pressures for change.
Constantly 할뿐 아니라 frequently 하게 변한다.
Invisibility
In spite of progress in restricting and simplifying the structures of software, they remain inherently unvisualizable, and thus do not permit the mind to use some of its most powerful conceptual tools. This lack not only impedes the process of design within one mind, it severely hinders communication among minds.
Past Breakthroughs involved Accidental Difficulties
High-level languages.
It frees a program from much of its accidental complexity. An abstract program consists of conceptual constructs: operations, data types, sequences, and communication.
Moreover, at some point the elaboration of a high-level language creates a tool mastery burden that increases, not reduces, the intellectual task of the user who rarely uses the esoteric constructs.
Timesharing
Time-sharing preserves immediacy, and hence enables one to maintain an overview of complexity.
메인프레임 시절에 Batch-processing과 같은 작업에서는 개발자는 컴퓨터의 즉각적인 반응을 기대하기 힘들었다. 인간의 인식 능력은 지속적인 상호작용 없이 복잡한 시스템에 대한 개요를 유지하기 힘들다. 요즘 같이 PC가 생활의 일부가 된 시대에는 상상하기 힘든 일이다. 하지만 이러한 통찰이 지속적인 통합을 요구하는 Extreme Programming 등에 분명한 영향을 주었다고 생각한다.
Integrated Program Development Environments
VS.NET 이나 Eclipse 등의 IDE 덕분에 인생이 편해지지 않았는가? 선구자들에게 감사할 뿐이다.
Hopes for the silver
Object-oriented programming에 대한 비판이 주를 이룬다. 하지만 피플웨어에는 Brooks가 견해를 바꾸었다는 내용이 있다.
Artificial intelligence.
AI에 대한 기대가 사라진지 오래되었으니 굳이 요약하거나 발췌할 필요를 못 느낀다.
Requirements refinement and rapid prototyping.
The hardest single part of building a software system is deciding precisely what to build. …… Therefore, the most important function that the software builder performs for the client is the iterative extraction and refinement of the product requirements. For the truth is, the client does not know what he wants.
여기에서 Brooks는 Protype과 같은 방법으로 essential difficulties를 줄이자고 말한다. 그 당시만 하더라도 Prototyping이나 iteration에 대한 인식이 많지 않았을 것이다. 아직도 한국의 대표적인 SI 업체들이 사용하는 방법론 중에 절반 이상이 ‘폭포수’식이라는 사실을 상기해보자.