In one of my previous articles “Problem of Entering the Field of Information Technology” I talked about the rapid growth of IT and, as a result, the lack of personnel quality. As you know, there are not so many truly talented people, and it is important to find the definition of a talent. One of the definitions is the following: 10,000 hours invested in the business; self-development “while the others are having fun”; the ability to “hit one point”; the ability to believe in the benefits of your efforts; self-control; the ability to stick to the chosen path. In a sense, “predisposition” can be considered a part of talent.
The demand for a particular profession is determined by the market. It defines both the set of products on the shelves and the specialties that can earn by providing these products. The market doesn't work the way science works: all technologies are important to science, and only what can be sold is important to the market. The market adjusts consumers – “gets them hooked” and tune them to some definite trend (such as the increase in the number of pixels in smartphone cameras). IT is generally developed for the market, which is due to the fact that IT mostly develops business.
Many people know the definition of “business” and its essence: to get as much money as possible. Any product that does not give money is considered a side product and its percentage is reduced to a minimum. Any products or actions performed by the company on a regular basis that “do not bring” money at first glance, in fact, they bring indirectly. Companies often act for the sake of their profit and the output is poor, but they try not only to do it in order to save their reputation.Reputation must be maintained to keep revenue. I say it again: the main task of business is to get a guaranteed greatest income.
What specialists does the business hire? Of course, such specialists who manufacture products with an acceptable level of quality at the lowest possible cost. The key here is the acceptable quality level. Among corporate products, there are no 100% quality products. Roughly speaking, the quality requirements look something like this: “we need not more than 2% of users to having problems”. In General, the idea is as follows: it is quite enough to make sure that the discontent with the quality has a minimal impact on sales ability. 99.9% of the problems that can be found in the purchased products have been known to the manufacturers before production.
Product quality is directly related to the amount of money invested in it. In the case of software development, the savings relate mainly to the debugging (fixing bugs) and to the developers themselves. As expected, these two savings always go together. To some extent, the high costs of one can compensate for the other. However, how to find a compromise, if there is them at all? In fact, this compromise is available and it could be called the Grail of modern IT. This Grail is a variety of programming languages and corporate libraries/frameworks. They allow you to save on debugging and developers, and even raise production volumes. However, not everything is as good as it may seem. This “miracle” works on abstractions. Abstraction is the way to a bright future for IT business. It allows you to reduce the number of concerns of a programmer and, as a result, reduce time costs (on the part of the programmer), which leads to the production volume increase.
Using abstractions, you can simplify any principle completely. In this way, you can dramatically reduce the entry threshold for new “specialists”, which allows you to hire employers at a cheaper price. You can even not hire real specialists at all – as the work they are going to deal with has an extremely weak connection with actual processes. However, there are 2 problems: execution efficiency (when abstracting significantly increases the amount of overhead for operations) and implementation efficiency (cheaper specialists know less and can do less, they often write algorithmically less effective solutions). For business, the above problems are quite solvable. The solution of the first problem is “horizontal scaling” (increasing computing power); the solution of the second problem is “vertical scaling” (when abstractness is being increased) and methods (they include, for example, code review, i.e., checking the code of one developer by others). Of course, this “treatment is not a problem, but a symptom”, but it is only important for business that it works, and how it works is not important (only the profit, that working systems bring, is important).
Now, I'm sure you better understand the problem of falling the programming quality. I have already mentioned the decline in quality, being the result of the flow of low-quality personnel, but this is not all. In fact, not only the quality of a new staff is decreasing (as the entry threshold reduces), but also of an old staff as well. This is due, of course, to the business framework… Even a high-level C++ programmer can be forced to write in Python to meet the project deadline (and to get rid of the “low-level” C++ code in the code base, which will allow “non-specialists” to join projects much easier). Yes, a programmer can get angry and leave the company. This really happens, but not as often as it could seem. After C++, Python will be like a kindergarten after University, which is also payed well. That is the salary can be the same for a much easier work. Do you really think that this is often refused? This is how the degradation of specialists occurs – an important negative phenomenon, which is quite rarely mentioned. Very often the initiator of this degradation is the programmer himself: he sees that there is a language in which he can do the same (or almost the same), but do it much easier and faster, and is paid sums comparable to the programmer's salary working with a lower-level language. Development is easier and faster, and high salaries are a plus! The vast majority of people put their comfort above the quality of what they do, and indeed above everything else...
Karl Marx “Capital. Volume I.” – https://www.marxists.org/archive/marx/works/download/pdf/Capital-Volume-I.pdf
Robert Martin “The Clean Coder: A Code of Conduct for Professional Programmers” – https://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073
Howard Gardner “Frames of Mind: The Theory of Multiple Intelligences” – https://www.goodreads.com/book/show/294035.Frames_of_Mind
Erich Fromm “Man for Himself: An Inquiry Into the Psychology of Ethics” – https://www.goodreads.com/book/show/40718037-man-for-himself
Robin Hanson “Why Does Software Rot?” – https://www.overcomingbias.com/2016/06/why-does-software-rot.html
Martin Fowler “What Is Refactoring” – http://wiki.c2.com/?WhatIsRefactoring
Jonas Söderström “Onceability: The consequence of technology rot” – https://www.inuse.se/blogg/onceability-the-consequence-of-technology-rot-inuseful/