The essence of software development

For years, I've been pondering a question: Is software a science or an art? Until one day, a new word came into my field of vision, it was software craftsmanship. At that moment, I realized that the question I have been thinking about should be whether software is engineering or art, and software craftsmanship gave me the answer: software is craftsmanship, a combination of engineering and art. I know it's a stretch to interpret craft as engineering and art, and let me call it that for now. This was my first impression when I saw this formulation for the first time.

For years, I have been puzzled by a question: If engineering methods can produce standardized products, why does software with the same function write completely different code in the hands of different people? Fowler said that software is a product of ideas, so I believe that software is closer to art, and every software development process is a process of artistic creation. However, it is too far-fetched to say that software is an art. Even a programmer who understands Java, if you let him read a piece of assembler, he may not be able to get the slightest sense of beauty from it. The term craftsmanship perfectly describes the nature of software development.

The high-tech appearance of software development and the idea of ​​software engineering make it easy for us to ignore the fact that software is an absolute handmade product. I believe that even in the highly developed future of artificial intelligence, even if all products can be produced automatically, the software must be purely manual products, otherwise it will not make sense logically. An automobile manufacturing worker may be completely replaced by machinery in the future, but software development work can never be replaced by machinery, because software is the product of thought, and machinery cannot replace human thinking.

So far I am more convinced that programmers play a decisive role in the software development process. Good design is important, but it by no means guarantees absolute quality in software development. Some people might say that good design has been proven to be effective in many systems, and like design patterns, it will be reused in many systems. But this has been a proven model, and sooner or later, it will be replaced by machinery without the need for programmers to complete it. It costs almost nothing to copy a piece of code, and programmers are always doing things that machines can't do.

The official name of a programmer should be software engineer. The main responsibility of an engineer is to design, not build. When have you ever seen a construction engineer go to Leizhuan in person? Jack Reeves has proposed in his famous paper "What is Software Design" 22 years ago, the source code is the software design, and the construction of the software is done by the compiler. This is where software differs from architecture, it costs almost nothing to build. The process of writing code for software engineers is the process of designing software, so they need to have good quality.

Another important difference between software and other projects is that software modification is relatively easier and cheaper, which is why the impact of refactoring relative to software is much greater than that of other projects.

Thinking about software development continues. . . . . .

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326485087&siteId=291194637