“A programmer must have the ability of a first-class mathematician for abstraction and logical thinking in combination with Edison's talent to construct anything from zero and ones. He must combine the accuracy of an accountant with the insight of a scout, the fantasy of the author of detective novels, and the sober practicality of an economist. ”Academician A.P. Ershov

Foreword
There is a widespread opinion: “if builders built houses in the same way as programmers write a program, the first flowering woodpecker would destroy civilization”. From the suggestion of the Indian programmer Guru Murali Krishna Chimuturi (
Murali Krishna Chemuturi ), the Internet insistently ascribes the authorship of this quote to Gerald Weinberg, although it is not searched for on Gerald’s personal site. Most likely, the person who first spoke about psychology in programming has nothing to do with this statement. And that's why.
')
This saying is an example of a demagogic receiver. Here the main premise is missing: software development is the same as building a house. This premise, by default, is meant as a reliable fact that does not require proof. The use of this trick causes the inexperienced reader to make the false conclusion that programmers, unlike builders, do not grow their hands from the right place.
Material production (processing of objects of the physical world) has tens of thousands of years of history. On this path, a huge amount of knowledge of the natural sciences was accumulated: mathematics, physics, chemistry, geography, geology, biology, and so on.
Let the seditious thought. Software development is a new kind of human activity whose history goes back a little more than half a century. In a post, I want to present my vision of the fundamental features of software development, which distinguish it from material production and the consequences that flow from them.
Features and their consequences
Feature # 1. Programming - Intellectual Activity
Simplified, the path from the idea of a new building, bridge, car or rocket to its implementation is as follows: Research and Development Project. At the top of this pyramid are industry research institutes that produce ideas and are engaged in designing new products. On the second floor of the pyramid, designers work in design bureaus whose task is to implement a new project in detail drawings, materials specifications, manufacturing and assembly technologies. At the lower level are the production facilities - factories where engineers and workers embody these drawings, specifications and technologies "in hardware".
What programmers produce is intangible - this is brainware, the result of the collective thinking process of the project team, materialized in one of the programming languages.
Programming guru F. Brooks wrote in 1975: “A programmer, like a poet, works almost directly with pure thought. He builds his castles in the air and out of the air, creating by the power of imagination. It is difficult to find other material used in the works, which is just as flexible, easy to grind or recycle, and is available for the realization of grandiose ideas. ”
If we draw an analogy, programmers work exclusively at the top of the described pyramid. Programming is design and only design. The role of the design bureau for the software project is played by the compiler and the program builder. A programmer analogue of the plant, which translates the design documentation into a product available to the consumer, is the computing complex that runs the created program.
Corollary # 1. The performance of programmers with the same experience will still differ tenfold.Brooks talked about the difference in performance 10 times. Robert Glass referred to experiments in which the scatter of performance was demonstrated 27 times.
No one knows what place a person thinks and how he makes it by this place. In any other industry, a specialist in scientific organization of labor was immediately put behind the back of a Stakhanovist worker who would map out a progressive technological process and establish new production standards. And what will this specialist see from behind the programmer's back? Habrahabr.ru?
Corollary # 2. Statistics of failed projects in software development is unlikely to change in the foreseeable future.
Let us remember how much R & D remained on paper, not reaching OCD, and how much OCR ended up closing the subject matter. I believe that the percentage of innovations that have reached the production of the total number of projects implemented in industry research institutes will be comparable to the percentage of successful software projects. And this is despite the fact that scientists in scientific research institutes rely on well-studied laws of mathematics, physics and chemistry, and in programming analogous laws are not yet discovered. And this is the second feature of programming.
Feature # 2. Lack of laws
Software development, IMHO, is mistakenly related to engineering. Engineering is where the achievements of science, technology are applied, the laws of the natural sciences are used to solve specific problems and achieve goals.
In software development, Newton's own laws have not yet been discovered, there are no Lagrange equations, or at least, iron and steel, which would help us to design and prove the correctness of the architecture of a new non-trivial software system. The achievements of mathematicians in the field of logic, information theory, numerical methods, relational algebra, graph theory and some other disciplines do not cover the complexity of industrial programming problems.
Even outstanding programmers will not take the liberty to assert about the architecture of a new software system that it will be successful. Although programming has already accumulated some experience of failures, which may allow the sophisticated programmer to see anti-patterns in the architecture of the new system - sources of serious future problems. But no more than that.

The current state of Software Engineering resembles a large cookbook with numerous descriptions of recipes for once successfully prepared dishes from ingredients that will never be in the future. Tomorrow the new system will be other computers, technologies, programming languages, tools and the surrounding software, new problems of interaction with which will definitely have to be addressed.
Corollary # 3. Programming is a craft.And since this is a craft, a person who has learned to write programs in C ++ will also be far from a professional, like a third-grade student of secondary school who has learned to write in Russian, from A. S. Pushkin or F. M. Dostoevsky. The path to mastery in the craft is only through experience. You can not learn how to develop software products by reading books.
Corollary # 4. Freedom is a prerequisite for the work of a programmer.Due to the absence of open laws, most of the solutions to programmer problems are found through trial and error. Programmers should have a margin for error. This is a normal attribute of creative search. Learn from mistakes. Smart is not the one who does not make mistakes, but the one who does not repeat them.
One of the elements of freedom is the absence of strict deadlines for the task. For professional managers, the absence of strict deadlines may sound like nonsense, but in creative activity this is one of the essential elements. It makes no sense to force programmers to work more, to arrange overtime avraly and Saturday. Work more, it does not mean at all - work more productively. Quite the contrary. Excessive pressure and fuss lead to ill-conceived decisions and numerous subsequent processing.
Feature # 3.Lack of visualization tools
For software products have not yet come up with adequate visualization tools. Brooks spoke about this almost 40 years ago. Therefore, software developers are often likened to blind monks from a Buddhist
parable .
Corollary # 5. The need for constant communication of participants in the development.From experience. On average, each participant of a software development project takes up to 50% of the working time for all conversations. We call this “synchronization of mental models”. It is known that words, timbre and intonation convey only a little less than half of the information. Therefore, the transfer of information to a remote team member is spent twice as much time. The sectoral methodology COCOMO II teaches that if a project is carried out by a distributed team, then its labor intensity should be multiplied by 1.5.
Corollary # 6. EQ is more important than IQ.The ability to dialogue and effective interaction, the ability to argue, ask questions, analyze answers, find a mutually beneficial solution in conflict situations, the mandatory quality of the team fighter. A person's creativity and efficiency is 80% dependent on the level of his emotional intelligence (EQ) and the activity of the right hemisphere, which is responsible for sense of purpose, will, empathy, intuition, ability for heuristic judgments.
If you have insufficient EQ, do not despair. Unlike IQ, which is formed in early youth and then practically does not change, EQ can be increased throughout life.
Conclusion
For collective programmer creativity, the analogy with the creation of a feature film or a theatrical performance is more appropriate. I believe that the number of failed projects in these areas is no less than in programming. God forbid, if at least a third of the movies do not “fall on the shelves” after the first show.
And one more thing that unites software projects with cinema. The presence of even the most stellar actors does not ensure the success of the film. Only a talented director is able to organize and inspire actors to create a masterpiece, discover new stars. But unfortunately there are not so many talented directors, as well as talented managers of software projects, as we would like.