Is programming a craft?
I bring to your attention a translated discussion material criticizing one of the new development methodologies - “Software Craftsmanship”. The author suggests talking about what the true purpose of application software is and how modern “romantic” methodologies correspond to this, putting priority to following their principles.

The “Programming Skill” methodology is dangerous because it puts the program as such at the forefront, rather than the benefit that the program should bring to the customer. This is mainly because many of us are romantics with a big ego. Programming consists in the automation of certain operations, for example, data compression, processing and presentation of information, control of machines or, again, automation of their functions.
Non-programmers do not bother about the aesthetic side of programming, just like a homeowner does not think about the aesthetics of plumbing pipes. The client only needs to have his information at the right time in the right place, and the homeowner - so that hot water flows from the hot tap. True, it is worth mentioning that quality boiler room service is considered a good form.
Motivation for “programming mastery”
It would be nice if programming was the most ordinary profession. In traditional fields of activity, gradual accumulation of skills and experience is usually observed, whether it is studying for a law degree and postgraduate internship or, for example, an internship in which a physician spends some time before becoming a doctor. In the case of medicine, there are clearly delineated ranks: starting with a nurse, you gradually overcome years of hard work of 80 hours a week and become an independent practicing consultant.
But this profession is unusual. The "entry barrier" to the profession of a programmer is minimal. Some people have a natural programmer’s core (two of the coolest programmers I know have never been to college), some learn to program from books, others just “mess around” in their free time until they write something worthwhile. The skills and abilities of a programmer can be assessed only 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 entry barrier is, just recall the VisualBasic mission (explicit or implicit) related to democratization of programming. Anyone who learns to drag controls to and fro and master the minimal technical skills can relatively easily “bungle” a workable solution for a specific problem. Various installers and other utilities allow experienced users to create sophisticated tables in Excel, even if such a user does not have practical programming skills. For several years, Eric Meyer, a guru in his field, has been talking about the democratization of clouds, that is, how you can easily connect online services and the so-called "community computing" with each other. In this case, Mayer draws an analogy with VisualBasic, a language allowing you to "collect" ready-made applications. In other words, serious people are actively working to further reduce the "entry barrier" of programming, which is already not too high. Of course, this approach can be considered characteristic only for 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 whether one of their parents was an IT specialist. Make sure?
This industry is a bit of a gold mine. Compared to most activities, programming is a relatively high-paying office job without any physical exertion and - remember? - virtually no entry barrier. Thus, whole economic structures have already grown that perceive IT as a suspicious lottery: if you throw enough “thoughts” on a solution to a problem, the problem will be removed by itself. And if these “thinkers” also prove to be inexpensive (but still well paid in comparison with 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 currently 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 tax deductions that apply to your annual tax return. In other words, this is a site that has user accounts and a (third-party) service for working with card accounts - that's all. 400 programmers have been working on this project for three years. Think about it: this is more than a thousand years of work! For web application! In which I can pay some consortium to provide me with tax benefits. But this is a topic for another philippics.
From a purely demographic point of view, it can be stated that the vast majority of IT people are employed in this industry because:
a) it is a highly paid alternative for other white-collar office work, and especially for physical labor;
b) many do not even try to present the IT sphere 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 program development is not even a skill, but a whole palette of skills: understanding and modeling of the subject area, understanding of 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 assembly, deployment, release), monitoring and accessibility skills, process automation techniques, knowledge of flexible supply theory, production and product development and, public and cloudy programming, competitive processing and parallelism (the list goes on).
These guys are striving for a certain ranking in their environment. Often figures are given that indicate a tenfold increase in labor productivity by an expert compared to a beginner, but it seems to me that these numbers are underestimated. A truly talented programmer (and over the past years I have worked with several such people) can bypass a programmer who works only for money, hundreds of times. Such a craftsman is able to accomplish as much per day as the average coder will take weeks or 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 qualitatively solves the set tasks, then “beauty” fades into the background. A programmer can boast of beautiful code in front of another programmer, but in other situations the “aesthetic value” of the code should not play a role.
The 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 a picture that are immediately perceived as the main content of this picture. The ability to work with negative space is extremely important for creating a realistic composition. Suppose a model sits sideways to you. Pay attention to the triangle formed by her forearm, shoulder and elbow. The space between the model’s face and the window is rectangular and rather narrow, and the model’s nose “wedges” into this rectangle. Look at the chin, or rather, at the angle that arises between the bend of the lower jaw and the neck. Looking out the window, consider what shapes are stacked 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 contours and colors, located between obvious objects, just determine how realistic a picture you get. If the picture is good, then usually you don’t even pay attention to the negative space.

What does this story have to do with programming? The thing is that the most successful programmers I have met with do not know how to code, they just write a program for the sole purpose of transmitting 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 themselves the goal of delivering information from point A, where it is now idle idle, to point B, where information can and should benefit. 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 receive from the user exactly the information that will be useful. There should be no more and no less information on the screen, it should be presented concisely and clearly. The program is secondary to information; it is simply a mechanism that should always be ready. Ultimately, there are no irreplaceable programs.
Why programming is not a craft or art.
If this or that creation is a work of art, then inherent beauty is inherent in it. For example, a cathedral is just a big house of worship. 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 majesty and wonder. Such a building plays on those strings of our soul that perceive beauty and greatness. Therefore, we enter the cathedral with modest and elevated feelings, ready to pray. This is a typical example of architecture with not only functional but also aesthetic features.
If you build a solid bridge over the railway from the same stone from which the cathedral is built, then we will be concerned, first of all, with the usefulness 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 kind of traffic accident occurs.
This is precisely the difference between a sculptor carving a grimace on the face of a gargoyle and an architect who builds a multi-story parking lot from ordinary bricks. In the second case, the last thing I would like is for non-standard bricks to be replaced in the masonry because of the “creative personality” of the architect. In such a building, absolutely no “individual” processing of each stone is required; ordinary reliability is sufficient.
Practicing programmers - by the way, many pretty good programmers - often lose their ability to distinguish between the sublime and the earthly. They fall in love with their work and begin to relate to it as "artists."
The simplest qualifications in the world
So we come to the danger that lurks in the “SoftwareCraftsmanship” methodology. If a programmer works on this principle, he often cannot cope with his own rebellious ego. Follow my thought?
When I read the Software Craftsmanship Manifesto, something in me died. True, I hear another laughing voice inside, suggesting that if you do not take such methodologies seriously, it will become much easier to live. Not to mention the fact that this document is simply empty, I note that it reminds me of some kind of oxymoron. If all its meaning is that all programmers should feel like a caste of artisans and that there is something special in it, then it turns out that anyone can join the ranks of this terribly fashionable party.
Do I need to demonstrate any skills? Not. Certificates, diplomas? Not. No work experience needed either? Yes, not at all. (Pragmatic programmers are already rushing to remind me that ten years of experience is not at all the same as one-year experience repeated ten times). In fact, all that is required of me is to declare myself a supporter of the “Programming Skill” methodology and subscribe to the site. Hurrah!!! I am now a member of the community of wizard programmers! Does that just seem funny to me?
Why not be artisans
Let's get back to our plot. I am sure that the "Programming Skill Manifesto" is written with good intentions, I really appreciate the signatures on the website that I have noticed on the site: Kevlin Henny, Bob Martin, Corey Gaines, Glenn Vanderburg. All of them are pragmatic, reasonable, sober 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 huge number of people have already signed up to the manifesto.
I would really like for someone to rewrite this manifesto, focusing on getting results and meeting customer needs. “Gradual increase in value” is not much more important than “stable satisfaction of customer requirements”. A programmer should be able to completely not show his ego, be humble, focus on the result, and not on the beauty of the generated code. I urge you to stop narcissism and take programming correctly - as a complex profession that requires serious skills.
Believe me, the client does not need highly artistic software, but only the capabilities that this software provides are needed. Moreover, it was advisable to manage yesterday. This does not apply only to specialists in the organization of user interactions (user experience). In their work, aesthetics and understanding of human emotions are very important. Continuing the analogy with construction, we can say that UX specialists are engaged in finishing work - beautiful things that should please the customer.
A truly experienced team of programmers is capable of delivering amazing practical results in an incredibly short time. Let's start from this! I'm interested in your experience. Your knowledge. I want you to show me "simplicity behind apparent complexity." You need to be a true 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 sphere of activity, we absolutely do not reduce the desire for professionalism, experience and ability. You would prefer that an experienced electrician do the wiring in your house, rather than a self-taught person. So I also want an experienced programmer to write software for my business. But I definitely won’t use the services of an esthete plumber who will tell me about the elegance and beauty of working with a plunger or will call 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 can not stand it when my information gets stuck in a poorly implemented system with somehow sloppy interfaces.
Conclusion
While working on this article, I mentioned it on Twitter and received some interesting comments. So, one of the readers said that the programmer seems to him a craftsman like a jeweler. But I would argue with that. I believe that all jewelry is expensive only because it is made of precious metals. I would not have thought of using a jewelry trinket for any purpose other than aesthetic. Let them look at her and admire the beauty of this little thing (and at the same time think that its owner is probably quite rich and has good taste).
If an analogy with precious metal products is appropriate here, then I would give an example with a wire from a good microphone, in which the gold contacts are used to improve sound. But I would like, from a structural point of view, the gold cable was identical to the cheaper one.
Since you have read to this place - thank you very much. I believe that the manifesto of “Mastery of Programming” has a right to exist, but it needs to be radically reworked. In addition, I believe that enthusiastic and skillful programmers should be able to stand out from the crowd of coders riveting consumer goods, be able to recognize each other and emphasize their professional value in negotiations with a potential employer. What do you think is needed for this?
Source .

The “Programming Skill” methodology is dangerous because it puts the program as such at the forefront, rather than the benefit that the program should bring to the customer. This is mainly because many of us are romantics with a big ego. Programming consists in the automation of certain operations, for example, data compression, processing and presentation of information, control of machines or, again, automation of their functions.
Non-programmers do not bother about the aesthetic side of programming, just like a homeowner does not think about the aesthetics of plumbing pipes. The client only needs to have his information at the right time in the right place, and the homeowner - so that hot water flows from the hot tap. True, it is worth mentioning that quality boiler room service is considered a good form.
Motivation for “programming mastery”
It would be nice if programming was the most ordinary profession. In traditional fields of activity, gradual accumulation of skills and experience is usually observed, whether it is studying for a law degree and postgraduate internship or, for example, an internship in which a physician spends some time before becoming a doctor. In the case of medicine, there are clearly delineated ranks: starting with a nurse, you gradually overcome years of hard work of 80 hours a week and become an independent practicing consultant.
But this profession is unusual. The "entry barrier" to the profession of a programmer is minimal. Some people have a natural programmer’s core (two of the coolest programmers I know have never been to college), some learn to program from books, others just “mess around” in their free time until they write something worthwhile. The skills and abilities of a programmer can be assessed only 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 entry barrier is, just recall the VisualBasic mission (explicit or implicit) related to democratization of programming. Anyone who learns to drag controls to and fro and master the minimal technical skills can relatively easily “bungle” a workable solution for a specific problem. Various installers and other utilities allow experienced users to create sophisticated tables in Excel, even if such a user does not have practical programming skills. For several years, Eric Meyer, a guru in his field, has been talking about the democratization of clouds, that is, how you can easily connect online services and the so-called "community computing" with each other. In this case, Mayer draws an analogy with VisualBasic, a language allowing you to "collect" ready-made applications. In other words, serious people are actively working to further reduce the "entry barrier" of programming, which is already not too high. Of course, this approach can be considered characteristic only for 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 whether one of their parents was an IT specialist. Make sure?
This industry is a bit of a gold mine. Compared to most activities, programming is a relatively high-paying office job without any physical exertion and - remember? - virtually no entry barrier. Thus, whole economic structures have already grown that perceive IT as a suspicious lottery: if you throw enough “thoughts” on a solution to a problem, the problem will be removed by itself. And if these “thinkers” also prove to be inexpensive (but still well paid in comparison with 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 currently 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 tax deductions that apply to your annual tax return. In other words, this is a site that has user accounts and a (third-party) service for working with card accounts - that's all. 400 programmers have been working on this project for three years. Think about it: this is more than a thousand years of work! For web application! In which I can pay some consortium to provide me with tax benefits. But this is a topic for another philippics.
From a purely demographic point of view, it can be stated that the vast majority of IT people are employed in this industry because:
a) it is a highly paid alternative for other white-collar office work, and especially for physical labor;
b) many do not even try to present the IT sphere 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 program development is not even a skill, but a whole palette of skills: understanding and modeling of the subject area, understanding of 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 assembly, deployment, release), monitoring and accessibility skills, process automation techniques, knowledge of flexible supply theory, production and product development and, public and cloudy programming, competitive processing and parallelism (the list goes on).
These guys are striving for a certain ranking in their environment. Often figures are given that indicate a tenfold increase in labor productivity by an expert compared to a beginner, but it seems to me that these numbers are underestimated. A truly talented programmer (and over the past years I have worked with several such people) can bypass a programmer who works only for money, hundreds of times. Such a craftsman is able to accomplish as much per day as the average coder will take weeks or 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 qualitatively solves the set tasks, then “beauty” fades into the background. A programmer can boast of beautiful code in front of another programmer, but in other situations the “aesthetic value” of the code should not play a role.
The 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 a picture that are immediately perceived as the main content of this picture. The ability to work with negative space is extremely important for creating a realistic composition. Suppose a model sits sideways to you. Pay attention to the triangle formed by her forearm, shoulder and elbow. The space between the model’s face and the window is rectangular and rather narrow, and the model’s nose “wedges” into this rectangle. Look at the chin, or rather, at the angle that arises between the bend of the lower jaw and the neck. Looking out the window, consider what shapes are stacked 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 contours and colors, located between obvious objects, just determine how realistic a picture you get. If the picture is good, then usually you don’t even pay attention to the negative space.

What does this story have to do with programming? The thing is that the most successful programmers I have met with do not know how to code, they just write a program for the sole purpose of transmitting 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 themselves the goal of delivering information from point A, where it is now idle idle, to point B, where information can and should benefit. 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 receive from the user exactly the information that will be useful. There should be no more and no less information on the screen, it should be presented concisely and clearly. The program is secondary to information; it is simply a mechanism that should always be ready. Ultimately, there are no irreplaceable programs.
Why programming is not a craft or art.
If this or that creation is a work of art, then inherent beauty is inherent in it. For example, a cathedral is just a big house of worship. 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 majesty and wonder. Such a building plays on those strings of our soul that perceive beauty and greatness. Therefore, we enter the cathedral with modest and elevated feelings, ready to pray. This is a typical example of architecture with not only functional but also aesthetic features.
If you build a solid bridge over the railway from the same stone from which the cathedral is built, then we will be concerned, first of all, with the usefulness 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 kind of traffic accident occurs.
This is precisely the difference between a sculptor carving a grimace on the face of a gargoyle and an architect who builds a multi-story parking lot from ordinary bricks. In the second case, the last thing I would like is for non-standard bricks to be replaced in the masonry because of the “creative personality” of the architect. In such a building, absolutely no “individual” processing of each stone is required; ordinary reliability is sufficient.
Practicing programmers - by the way, many pretty good programmers - often lose their ability to distinguish between the sublime and the earthly. They fall in love with their work and begin to relate to it as "artists."
The simplest qualifications in the world
So we come to the danger that lurks in the “SoftwareCraftsmanship” methodology. If a programmer works on this principle, he often cannot cope with his own rebellious ego. Follow my thought?
When I read the Software Craftsmanship Manifesto, something in me died. True, I hear another laughing voice inside, suggesting that if you do not take such methodologies seriously, it will become much easier to live. Not to mention the fact that this document is simply empty, I note that it reminds me of some kind of oxymoron. If all its meaning is that all programmers should feel like a caste of artisans and that there is something special in it, then it turns out that anyone can join the ranks of this terribly fashionable party.
Do I need to demonstrate any skills? Not. Certificates, diplomas? Not. No work experience needed either? Yes, not at all. (Pragmatic programmers are already rushing to remind me that ten years of experience is not at all the same as one-year experience repeated ten times). In fact, all that is required of me is to declare myself a supporter of the “Programming Skill” methodology and subscribe to the site. Hurrah!!! I am now a member of the community of wizard programmers! Does that just seem funny to me?
Why not be artisans
Let's get back to our plot. I am sure that the "Programming Skill Manifesto" is written with good intentions, I really appreciate the signatures on the website that I have noticed on the site: Kevlin Henny, Bob Martin, Corey Gaines, Glenn Vanderburg. All of them are pragmatic, reasonable, sober 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 huge number of people have already signed up to the manifesto.
I would really like for someone to rewrite this manifesto, focusing on getting results and meeting customer needs. “Gradual increase in value” is not much more important than “stable satisfaction of customer requirements”. A programmer should be able to completely not show his ego, be humble, focus on the result, and not on the beauty of the generated code. I urge you to stop narcissism and take programming correctly - as a complex profession that requires serious skills.
Believe me, the client does not need highly artistic software, but only the capabilities that this software provides are needed. Moreover, it was advisable to manage yesterday. This does not apply only to specialists in the organization of user interactions (user experience). In their work, aesthetics and understanding of human emotions are very important. Continuing the analogy with construction, we can say that UX specialists are engaged in finishing work - beautiful things that should please the customer.
A truly experienced team of programmers is capable of delivering amazing practical results in an incredibly short time. Let's start from this! I'm interested in your experience. Your knowledge. I want you to show me "simplicity behind apparent complexity." You need to be a true 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 sphere of activity, we absolutely do not reduce the desire for professionalism, experience and ability. You would prefer that an experienced electrician do the wiring in your house, rather than a self-taught person. So I also want an experienced programmer to write software for my business. But I definitely won’t use the services of an esthete plumber who will tell me about the elegance and beauty of working with a plunger or will call 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 can not stand it when my information gets stuck in a poorly implemented system with somehow sloppy interfaces.
Conclusion
While working on this article, I mentioned it on Twitter and received some interesting comments. So, one of the readers said that the programmer seems to him a craftsman like a jeweler. But I would argue with that. I believe that all jewelry is expensive only because it is made of precious metals. I would not have thought of using a jewelry trinket for any purpose other than aesthetic. Let them look at her and admire the beauty of this little thing (and at the same time think that its owner is probably quite rich and has good taste).
If an analogy with precious metal products is appropriate here, then I would give an example with a wire from a good microphone, in which the gold contacts are used to improve sound. But I would like, from a structural point of view, the gold cable was identical to the cheaper one.
Since you have read to this place - thank you very much. I believe that the manifesto of “Mastery of Programming” has a right to exist, but it needs to be radically reworked. In addition, I believe that enthusiastic and skillful programmers should be able to stand out from the crowd of coders riveting consumer goods, be able to recognize each other and emphasize their professional value in negotiations with a potential employer. What do you think is needed for this?
Source .