📜 ⬆️ ⬇️

Is programming a craft?

I bring to your attention translational discussion material criticizing one of the new development methodologies, Software Craftsmanship. The author proposes to talk about what the true purpose of the application software is and how much the modern “romantic” methodologies respond to this, putting adherence to their principles at the center.

image

The “Mastery of Programming” methodology is dangerous in that it prioritizes the program as such, and not the benefit that the program should bring to the customer. This is mainly because many of us are romantics with a big ego. Programming involves the automation of certain operations, such as data compression, processing and presenting information, controlling machines, or, again, automating their functions.

Non-programmers do not bother about the aesthetic side of programming, just as a homeowner does not think about the aesthetics of plumbing pipes. The client only needs his information to be in the right place at the right time, and the landlord to get hot water from the hot tap. True, it is worth making a reservation that quality boiler room service is considered good form.
')
Motivation for "programming skills"

It would be nice if programming was the most common profession. In traditional areas of activity, there is usually a gradual accumulation of skills and experience, be it a lawyer’s degree or postgraduate training or, for example, an internship in which a doctor spends some time before becoming a doctor. In the case of medicine, there are clearly demarcated grades: starting with the nurse, you gradually overcome the years of hardest work 80 hours a week and become an independent practicing consultant.

But this profession is unusual. The “entry barrier” to the programming profession is minimal. Some people have a natural programmer’s vein (two of the coolest programmers I know have never attended college), some learn to program from books, still others just “mess around” in their spare time until something worthwhile is written from them. The skills and abilities of a programmer can only be assessed by a person’s professional reputation: there is no one universal “ranking system” depending on which one could build a career.

To assess how low this input barrier is, it suffices to recall the VisualBasic mission (explicit or implicit) associated with the democratization of programming. Anyone who learns how to drag controls back and forth and master minimal technical skills will be able to “bungle” a workable solution for a specific problem relatively easily. Various installers and other utilities allow advanced users to create sophisticated tables in Excel, even if such a user does not have practical programming skills. For several years now, Eric Mayer, a guru in his field, has been talking about the democratization of clouds, that is, about how you can easily connect online services and so-called "utility computing" to each other. In this case, Meyer draws an analogy with VisualBasic, a language that allows you to “build” ready-made applications. In other words, serious people are actively working to lower the “entrance barrier” of programming, which is not too high anyway. Of course, such an approach can only be considered characteristic of Microsoft, but it was Microsoft that did everything possible and impossible to simplify programming almost to the point of absurdity (some prefer to call it “make it accessible to the masses”).

The IT industry is relatively young, its age does not exceed a couple of generations. As an experiment, you can ask your colleagues if someone from their parents was an IT person. Are you convinced?

This industry is something of a gold mine. Compared to most of the activities, programming is a relatively well-paid office job without any physical exertion and - remember? - practically without entrance barrier. Thus, the whole economic structures that perceive IT as a suspicious lottery have already grown: it is enough to throw a sufficient number of “little ideas” to solve the problem - and the problem will disappear by itself. And if these “thinkers” also turn out to be inexpensive (but still well-paid compared to alternative activities), then a lot of units will be mobilized to solve the problem.

I had a chance to talk with one person who said that he is now working on a project in the public sector. The project is related to the provision of online tax deductions for developers. If you are a developer, you can create an account on this site, and then log in to the system and buy such tax deductions that apply to your annual tax return. In other words, this is a website with user accounts and (third-party) service for working with card accounts - that's all. 400 programmers worked on this project for three years. Think about it: this is more than a man-millennium of work! For web application! In which I can pay to some kind of consortium for giving me tax breaks. But this is a topic for another philippic.

From a purely demographic point of view, it can be stated that the vast majority of IT professionals are employed in this industry because:

a) it is a highly paid alternative for other white-collar office work and even more so for manual labor;

b) many do not even try to present the IT sphere as otherwise than as a massive source of easy money.

However, there are other programmers. This is a minority. Those who really like programming, people who want to succeed in it. They understand that developing programs is not even a skill, but a whole palette of skills: understanding and modeling the subject area, understanding programming languages, libraries, paradigms and idioms, choosing the material that is best applied in a particular situation, studying and understanding algorithms, mastering “the path from the idea to the finished product” (consisting of the stages of assembly, deployment, release), monitoring skills and accessibility, automation techniques, knowledge of flexible supply theories, production and development of products and, public and cloudy programming, competitive processing and parallelism (the list goes on).

These guys aim for a certain ranking in their environment. Often there are figures indicating a tenfold increase in labor productivity of an expert compared to a newcomer, but it seems to me that these figures are underestimated. A truly talented programmer (and I have had the opportunity to work with several such people over the past years) can bypass a programmer who works only for money hundreds of times. Such a craftsman is able to perform as much per day as the average coder will take weeks and even months.

The fact is that the program should be evaluated only by the benefits it brings. It may well be written ugly, but if it solves the tasks qualitatively, then the “beauty” fades into the background. A programmer can boast a beautiful code in front of another programmer, but in other situations the “aesthetic value” of the code should not play a role.

Ability to see negative space

My wife is an artist and is interested in negative space. Negative space is the area between such figures and objects in the figure, which are immediately perceived as the main content of this figure. The ability to work with negative space is extremely important for creating a realistic composition. Suppose a model sits sideways to you. Note the triangle formed by her forearm, shoulder, and elbow. The space between the face of the model and the window is rectangular and rather narrow, and the nose of the model is “wedged in” into this rectangle. Look at the chin, more precisely - at the angle that arises between the bend of the lower jaw and the neck. Looking out the window, consider which figures are formed between the bare tree branches in the winter sky. By the way, these parts of the sky differ in shade from the gray-white clouds above the trees. All these outlines and colors, located between obvious objects, determine how realistic the picture will be. If the picture is good, then usually you do not even pay attention to the negative space.

image

What does this story have to do with programming? The thing is that the most successful programmers with whom I have met, do not make the code, they simply write a program for the sole purpose - to transmit information with its help. Information is what really interests them, and the program only defines the framework within which information can move. Such programmers set a goal to deliver information from point A, where it is now idle without work, to point B, where information can and should be useful. The programmer tries to achieve maximum speed and efficiency of this process. For example, in the case of the user interface, it is necessary to display on the screen or to accept exactly that information from the user that will be useful. The screen should be no more and no less information, it should be presented concisely and clearly. A program is secondary to information; it is simply a mechanism that must always be in place. Ultimately, there are no irreplaceable programs.

Why programming is not a craft or an art

If this or that creation is a work of art, then the inherent beauty is inherent in it. For example, a cathedral is just a big prayer house. Yes, cathedrals are built of stone, so they are much more durable than wooden churches, but why are cathedrals always full of architectural decorations? Obviously, this is done in order to emphasize their grandeur and marvelousness. Such a building plays on those strings of our soul that perceive beauty and greatness. Therefore, we enter the cathedral with modest and lofty feelings, ready to pray. This is a typical example of architecture that has not only functional, but also aesthetic features.

If we build a good bridge over the railroad from the same stone from which the cathedral is built, then we will be primarily concerned with the utility and engineering efficiency of this structure. If the bridge is good, then I will not even pay attention to it when I go over the railway! We do not pay attention to the engineering qualities of road architecture, until some traffic accident happens.

This is the difference between the sculptor, carving a grimace on the face of a gargoyle, and the architect, who erects multi-storey parking from ordinary bricks. In the second case, I would like the least because of the “creative individuality” of the architect in the masonry turned out to be non-standard bricks that have nothing to replace. In such a building there is absolutely no need for "individual" processing of each stone, rather ordinary reliability.

Practicing programmers - by the way, many fairly good programmers - often lose the ability to distinguish between the sublime and earthly. They fall in love with their work and begin to treat it as “artists.”

The world's easiest qualification

So we come to the danger that lies in the methodology of “Software Craftsmanship”. If a programmer works on this principle, he often cannot cope with his own rebellious ego. Follow my thought?

When I read the Software Craftsmanifesto Manifesto, something in me died. True, I hear another laughing voice inside, prompting that if you do not take such methodologies seriously, then life will become much easier. Not to mention the fact that this document is just empty, I note that it reminds me of some kind of an oxymoron. If its whole point is that all programmers need to feel like a caste of artisans and that there is something special about this, then it turns out that anyone can join the ranks of this scary fashionable party.

Are I required to demonstrate some skills? Not. Certificates, diplomas? Not. Experience is also not needed? Yes, not much. (Pragmatic programmers are already rushing to remind me that a decade of experience is not at all the same thing as a one-year experiment repeated ten times). In fact, all I have to do is declare myself to be a supporter of the “Programming Skills” methodology and subscribe to the site. Hooray!!! I am now a member of the community of programmers-masters! Does it just seem funny to me?

Why not be artisans

Let's return to our plot. I am sure that the “Manifest of Programming Excellence” was written with good intentions, I really appreciate the signatures of Kevlin Henney, Bob Martin, Corey Gaines, Glenn Vanderburg noticed on the site. All of them are pragmatic, reasonable, sober-minded and, most importantly, very modest people. My only concern is that the form of this manifesto prevails over the content. Largely because of this, a great many people have already signed up under the manifesto.

I would really like someone to rewrite this manifesto, putting the results and customer satisfaction at the forefront. “Gradual value increase” is not that; much more important is “stable customer satisfaction.” The programmer must be able to completely show his ego, be modest, focus on the result, and not on the beauty of the generated code. I strongly urge to stop narcissism and to perceive programming correctly - as a complex profession that requires serious skills.

Believe me, the client does not need highly artistic software, but only the possibilities that this software provides. And it was desirable to manage yesterday. This does not apply only to specialists in the organization of user interactions (user experience). In their work both aesthetics and understanding of human emotions are very important. Continuing the analogy with the construction, we can say that UX specialists are engaged in finishing works - beautiful, which should please the customer.

A truly experienced team of programmers is capable of delivering amazing practical results in insanely short periods. Let's start from this! I am interested in your experience. Your knowledge. I want you to show me "simplicity beyond seeming complexity." You need to be a real specialist and master in order not only to achieve simplicity in a large corporate application for working with communications, but also to be able to present this simplicity in a favorable light.

Perceiving programming as a strict field of activity, we absolutely do not reduce the desire for professionalism, experience and skill. You would prefer an experienced electrician to do the wiring in your house, rather than a self-taught person. So I want a software programmer to write an experienced programmer. But I definitely will not use the services of a plumber-esthete, who will tell me about the elegance and beauty of working with a plunger or will call upon me to “deal only with outstanding plumbers who use only copper parts in their practice”. The best programs should be restrained and unobtrusive - as, perhaps, the best programmers. I hate it when my information gets stuck in a poorly implemented system with a bit of a messy interface.

Conclusion

While working on this article, I mentioned it on Twitter and received some interesting comments. So, one of the readers said that a programmer seems to him to be an artisan like a jeweler. But I would like to argue with that. I believe that all jewelry is expensive because it is made of precious metals. I would not have thought of using a jewelry bauble for any purpose other than aesthetic. Let it be looked at and admired by the beauty of this thing (and at the same time they think that its owner is probably quite rich and has good taste).

If the analogy with products from noble metals is appropriate here, then I would give an example of a wire from a good microphone in which gold contacts are used to improve the sound. But I would like, from a constructive point of view, a gold cable to be identical to a cheaper one.

Since you've read this far, thank you very much. I believe that the manifesto of "Mastery of Programming" has a right to exist, but it needs to be radically revised. In addition, I believe that enthusiastic and skilled programmers should be able to stand out from the crowd of coders who rivet consumer goods, be able to get to know each other and emphasize their professional value when negotiating with a potential employer. What do you think is needed for this?

Source of

Source: https://habr.com/ru/post/183244/


All Articles