Writing computer software is one of the purest creative activities in the history of the human race. Programmers aren’t bound by practical limitations such as the laws of physics; we can create exciting virtual worlds with behaviors that could never exist in the real world. Programming doesn’t require great physical skill or coordination, like ballet or basketball. All programming requires is a creative mind and the ability to organize your thoughts. If you can visualize a system, you can probably implement it in a computer program.
This means that the greatest limitation in writing software is our ability to understand the systems we are creating. As a program evolves and acquires more features, it becomes complicated, with subtle dependencies between its components. Over time, complexity accumulates, and it becomes harder and harder for programmers to keep all of the relevant factors in their minds as they modify the system. This slows down development and leads to bugs, which slow development even more and add to its cost. Complexity increases inevitably over the life of any program. The larger the program, and the more people that work on it, the more difficult it is to manage complexity.
这意味着，编写程序最大的限制，就是理解当前创造中的系统的能力。当程序进化并获得更多的特性，它就变得复杂，与它的组件之间保持着微妙的相互依赖。随着时间推移，复杂性积累，在需要调整系统的时候，要让程序员记住这些相关因素就会越来越难。这样就让开发变得缓慢，并产生更多的 BUG，这些 BUG 又回减慢开发，恶性循环让开发成本增加。任何程序的开发周期中，复杂性都是逐渐增加的。越大的程序，需要越多人开发，控制复杂性也就越难。
Good development tools can help us deal with complexity, and many great tools have been created over the last several decades. But there is a limit to what we can do with tools alone. If we want to make it easier to write software, so that we can build more powerful systems more cheaply, we must find ways to make software simpler. Complexity will still increase over time, in spite of our best efforts, but simpler designs allow us to build larger and more powerful systems before complexity becomes overwhelming.