In memory of G. I. KozhukhinIt may seem strange to someone to publish an article on such a subjective issue in a scientific journal. The history of science, however, shows that at certain periods aesthetic, organizational, and generally external to the technical content of a scientific discipline sometimes made a decisive contribution to the formation and development of a given discipline. Now, when programming as a science and as a profession enters a period of its self-determination, the analysis of human factors in programming seems to be relevant to the author.
The fact is that, despite the fact that, and perhaps due to the fact that programming is now recognized as the key point in expanding and deepening the sphere of application of computers, difficult times are coming for programmers. The volume and complexity of programs increase disproportionately with respect to salary. The romantic aura of the incomprehensibility of this profession, if it ever existed, begins to fade. In the West, softverses melt away like yesterday’s snow, and programmers begin to replenish the army of the unemployed. Even the desire to consider programmers as professionals of a special kind is challenged. The main thing is that the free army of programmers is gradually captured by administrators and managers who are striving to make the work of the programmer planned, measured, homogeneous and impersonal.
The reader should not get the impression that the author considers this trend wrong. The lack of efficiency in the work of programmers is perhaps the main reason for the existing gap between the needs and possibilities of successful computer applications.
From this point of view, it is necessary to agree that, as a profession, programming has not yet reached its maturity. In the West, a wave of small businesses connected with the so-called software houses has been a typical testimony to this over the past few years. Such a software house, or better to say software hut, was built within a few weeks by a group of intelligent programmers who, as a rule, left the large organization in which they received initial experience. In most cases, the motive for such an initiative was the thirst for profit, the half-child desire to get rid of unnecessary guardianship, of course, in combination with some interesting and useful idea in the field of software development. However, later on, only such groups turned out to be viable, in which this partisan spirit was quickly replaced by the economy mode, the hierarchy of relations, and rigid discipline — in a word, by all that once pushed them out of the parental home. As a joke, you can see that this whole story resembles the tale of three little pigs: the programmer brothers eventually gathered in a strong software house, but only after the first two were carried away by a wolf wind of merciless commerce.
It should be noted that, although in other manifestations, similar phenomena were observed in our country, when several years ago, thoughtless optimism and naive faith in the omnipotence of the machine in some projects replaced with sober calculation, strong organization and high-quality programming. Thus, the subordination of programming to industrial methods of work is an inevitable fact. The author believes, however, that this trend should be balanced by a reciprocal initiative, consisting in the fact that the programmer must find some system of internal values in his business, the possession of which will allow him to more easily assimilate the industrial methods of work, where it is necessary to overcome them.
The author is convinced that this system of values in programming objectively exists, but is not fully realized, is not known to everyone, and therefore requires distribution and protection. This system has many components, perhaps the most important of them is the professional statute of the programmer (it should be noted that the author speaks about programmers in a broad sense, including system analysts as well), but at the moment I want to say more about aesthetic or the emotional side of programming, not only that rewards the programmer when he goes with his product to the consumer, but also about what constitutes his moral support when he is left alone with the program or machine.
Programming becomes a mass profession. However, it must be borne in mind that now it is perhaps the most difficult of all the mass professions, and, unfortunately, this difficulty is not adequately recognized.
The difficulty lies in the fact that it is programmers who directly run into the limits of human cognition in the form of algorithmically unsolvable problems and deep secrets of the work of the brain.
The difficulty is that the programmer’s own stack does not have to be in 5-6 depth positions, as psychologists have discovered in the average person, but the same depth as the stack in his next task to be programmed, plus two or three more positions.
The difficulty also lies in the fact that the 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 one. 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. And besides, the programmer must have a taste for teamwork, understand the interests of the user and much more.
In this work, this difficulty can be overcome only by a great deal of emotional stress, which requires a special self-awareness and internal positive attitude from the programmer. An understanding of this setup is necessary for those who manage programmers, and especially for those who educate and train them. As an example, you can list a number of organizational alternatives or simply difficult issues that can be properly resolved only with full consideration of the factors discussed:
- Is it possible and necessary to organize the development of software on the principle of a conveyor line?
- Who and why is harder to find for the implementation of a software project - a manager or a contractor?
- How to combine the elitism of system programming with its mass character?
- How to educate a programmer, through the world (university) or through professional skills (technical institute)?
- What are individual skills in programming, are they specific and are they needed?
- Is it possible and necessary to separate the design of a large program from its production?
These questions are part of a common problem, so we will make only private comments when trying to link their formulation with the analysis of the human factor in programming.
About conveyor
In a sense, the pipeline is a devilish invention. Raising productivity to an unprecedented level, he at the same time, to the maximum extent, turns a person into an appendage of a machine. Conveyor method in programming can either kill the intellectual component in the work of the programmer, or cause neuroses due to the contradiction between monotony and difficulty of work. Imagine a person who is obliged to 8 hours a day, 5 days a week, 50 weeks a year, to solve only crosswords, and you will understand what a programmer is, specializing, for example, in writing editing programs. In a word, setting people apart for elementary operations in a multi-module system is far from an easy task.
About managers and executives
Do not rush to put the leader in the first place, explaining that, by definition, the leader is harder to find or create. Let's think about why, all along, the project leader prefers to start with young specialists who graduated from a university two or three years ago than with people whose work experience exceeds five years? Is it because we prefer to use a clean sheet and the plasticity of a young man, rather than overcome the passive resistance of a more mature and less clear for us 33-year-old head of the family. But this, in particular, means that we do not know how to harmoniously develop the professional merit of the performer so that they do not fall with age and would be useful not only for the manager, but also for himself and his future superiors.
The elitism of programmers seems obvious to the author and in this form is a serious challenge to humanity as a whole, and one can hope that the challenge will be accepted and overcome. This idea will be deciphered later.
Worldview and professionalism
The problem, of course, is not only to objectively evaluate the required ratio of candidates of science and graduated software engineers, although around this a fair amount of well-known personnel problems arise. The essence of the problem is to recognize that programming requires from a person a somewhat special view of the world, its needs and evolution, and a special moral readiness for its duty. A programmer is a soldier of the scientific and technological revolution and as such must possess revolutionary thinking.
Now we come to formulating the central thesis of the article. It consists in the statement that programming possesses a rich, deep and original aesthetics, which lies at the basis of the internal attitude of the programmer to his profession, being a source of intellectual power, vivid experiences and deep satisfaction. The roots of this aesthetics lie in the creative nature of programming, its difficulties and social significance.
Here, before continuing the main idea, the author would like to emphasize the importance of a person’s internal attitude to his work. Now there is a lot of controversy about whether programming is a specific profession. This is not an abstract dispute, but a discussion, the result of which has direct organizational, legal and educational implications. The main guarantee of the successful outcome of this discussion should be, first of all, self-awareness and the ability to understand those who consider themselves to be programmers. The well-known proverb "fisherman sees fisherman from afar" should find its interpretation in the programmer's environment.
Select the aesthetic essence of any kind of professional activity is not easy. It is essentially implemented in subjective categories and is deeply intertwined with the ethical code of the profession, with its technical content and legal statute. Therefore, the listing of the aesthetic component of programming in this article will also be subjective and very preliminary.
First, we make some comments reflecting the internal nature of programming.
The creative and constructive nature of programming does not require much evidence. The author would like to express, perhaps, a more controversial idea that, in its creative nature, programming goes much further than most other professions, approaching mathematics and writing. In most other professions, we only “tame” with the help of the forces of nature certain physical or biological phenomena, without necessarily comprehending their essence. In programming, we are in a sense going to the end. One of the theses of the modern theory of knowledge: “we know something, if we can program it” - this maximalism of our profession characterizes very vividly.
Another very important aesthetic principle of programming is its highest demands on the completeness of the product. Of course, this is typical of many engineering professions. However, programming continues here. Although this property almost disappears in multi-million software conglomerates, at the level of individual work there is always a striking contrast between almost done and completely done work. This one hundred percent programming is the source of his difficulty and at the same time the deepest satisfaction with the working program.
A machine equipped with a program behaves intelligently. At this climax, the programmer is aware that his program, while obtaining an independent life, materially embodies his intellectual efforts, which now become the common property. This triumph of intelligence is probably the strongest and most specific aspect of programming.
In relation to the machine from a bona fide programmer, there is another feature. In a sense, he treats her like a good jockey to his horse. Knowing and understanding the capabilities of the machine, he will never allow himself to compensate for the laziness of his mind with the carefree waste of computer resources. This purely aesthetic attitude is the most effective preservative against mindless “pessimization” of the software, which sometimes negates the efficiency of using the machine.
Another part of the aesthetic essence of programming consists of its components that are associated with the social, or social, function of programming. Whenever we consider a social phenomenon of a large scale (and the emergence and use of computers are, of course, those), we must look for some broad historical analogies that can provide some kind of support for extrapolation and foresight. The fact that computers brought with them the scientific and technological revolution and the associated industrialization of mental labor has already been mentioned. In this place I would like to draw another analogy, which is more directly related to the profession of a programmer. The development and distribution of software is in many ways reminiscent of what happened as a result of the appearance of typography. As the books accumulate the external image of the world in the eyes of their authors and allow to reproduce the process of its knowledge, so the programs and data banks accumulate information and operational models of the world and allow not only to reproduce, but also to predict its evolution, thereby giving an unprecedented power over nature.
Now being a good programmer is the same privilege as being a literate person in the XIV century. This privilege gives the programmer the right to expect similar recognition and respect from society. Unfortunately, these expectations are not always justified. However, it should be noted that the implementation of such recognition requires work on both sides. In particular, it is necessary for a programmer to follow a single ethical principle, which is of a general nature for every professional, but has a special interpretation for a programmer. Three options are simpler: work for work, work for money, work for a goal.
In the programmer's coordinate system, the first two motives are in the foreground, although only the third is important in the absolute coordinate system. In this regard, we must always remember that a programmer will be able to achieve complete harmony with society only if the loyalty of the goal, in the achievement of which his program is only a part, becomes its internal setting.
Speaking about the public function of programming, it is impossible not to notice that on the way to the realization of this function lies one unsolved technical problem - the provision of the accumulative effect of programming. This is a very difficult, but absolutely necessary problem to solve. The range of opinions about it is endless. Some people say that only a few percent of the compiled programs are currently working, others consider that OS / 360 is already an almost immortal set of programs. Returning to the topic of the article, I would like to say that providing the programmer with the perspective of a long and stable use of his work product will have a decisive impact on his professional self-awareness.
Now, the author would like, from the standpoint of the statements just made, to end the discussion of the previously listed alternatives and difficult problems.
About individual abilities in programming
We need an image of an ideal programmer. Of course, it will be a mythical person. But who said that we do not need myths and tales about programmers? Each of us must at least once in our life see or at least hear about a miracle programmer, from the program of which no team can be removed or who writes a thousand commands a day, or finds an error at the initial chance of one in a million, etc. look for landmarks and examples. It is from these positions that, apparently, the dispute about the notorious “prima donnas” in the teams of programmers should be resolved. To declare them undesirable is at least short-sightedness or envy of their exceptional qualities. The author was lucky to meet in his life several such divas from programming who, for all their individuality and even extravagance, made an invaluable contribution to the work of the group, especially in difficult situations. So a very wide range of individual programming abilities must be recognized and fully taken into account.
On the separation of the design and manufacture of software
There is ambivalence on this issue. Managers responsible for long-term projects, and many others are looking for ways to formalize the development stages and transfer the project from one hand to another.
On the other hand, the case itself desperately resists such a division. Apparently, the correct solution of this question is impossible without taking into account the human factor and the aesthetic need, which prevents one from engaging in the realization of the ideas of others or not seeing the actualization of the idea. To give a technical project to other hands is the same thing as sending your children to a boarding school.. , , , . , . 1970 . . , . , - , - , . , , , , .
, , , , ,— , .
- . , , 1000 , , , . , . ?
, , 1000 , . , . , -- , , , . , , , , .
, . , . , . -, , , 50 , 30-. 30 . , , , , .
[
]