We are developing software products every day. It is necessary to think about the features of the software products. I have reviewed the relevant materials and made a summary:
Knowledge Intensive
Creativity
Virtual (invisible)
Implementation is not unique
Complex
High Value-Added
Strong logic (*)
These five features of the software lead to the complexity of software development. The intensive knowledge of software development means that we need a group with high IQ to accomplish this. Creativity also puts high requirements on people. Virtual, invisible, cannot be verified, and unexpected tasks will be suspended. Therefore, software development must do everything possible to make it visible, documents and models are all required in the design phase.
Invisible problems also make it difficult for customers to express their needs. This difficulty is exactly one of the most difficult problems for software development.
Implementation is not unique, and this is troublesome. Everyone can have their own practices to achieve behaviors that look like the outside of the software product. However, only professionals can understand how it works, this also led to many opportunistic behaviors.
Complexity: This dijistra made a summary over the past few decades. The general idea is that the complexity of software systems from the bottom layer to the top layer is 9.
High value-added, this does not know whether it is good or bad, the good is that this feature illustrates the importance of the software, the bad, it also shows the seriousness of the accident. Once the software is put into use, it may affect all aspects of an enterprise.
In general, software products are the result of pure mental labor, which is different from our previous products. We cannot require Van Gogh to draw a picture every day, but society does require our engineers to produce software at this speed.
We are mental workers, but we are asked as knowledge workers.