Faceless code will kill programming, and we will do nothing with it.
During the next dispute, a friend voiced a thought that hurt me very much. “In most popular YaPs there are so many different ways to do the same thing. This leads to problems. But in Go, everything is wrong. The philosophy of the language is such that on Go different developers solve the same problems in the same way. Therefore, their code is easy to read, predictable and reliable. And that's why big business chooses Go. ” This is a powerful enough argument that you need to think about how to refute.
Therefore, I smeared it in two accounts, clinging to the lack of generics, and took a clever idea, lived with it for several days, and at some point formed my gloomy vision.
My job is to choose the most suitable solution from an infinite number of combinations. This is what I get paid for, and this is what I love my job for, and therefore my life. But they tell me - a super solution is not needed. We need the usual. Because the finished product is more important than its implementation.
If I get thrown out into the street, and some fool is taken in my place, he can easily work with my code. So the company will be much more comfortable. Business does not want to depend on chance. The idea that the bad mood of a lead developer takes a piece of profit from a business doesn’t like top managers. They became top managers, because they are well able to avoid situations where their sacred business loses money. And we now live at a time when “well done” and “profitable” are two different things.
And I perfectly understand how we came to this. Let me explain, watch your fingers:
I, like most engineers, believe that I do great things. What I invent, automate, do with my work and brains the life of all mankind is better, while all obscurantists only grind the language. But then I pull my nose out of my code editor, and am horrified at how cruelly mistaken.
What the hell am I doing?
So I think over the architecture of a high-loaded system, but in 95% of cases it will be used in order to quickly sort out the self-made pictures and photos of your favorite dog on your phone. Here I am developing a VPN client, and what will they do with it? Watch all porn and stupid pirated movies?
My brains are served by minutely minute Wishlist, so that people bring me money, so that I, too, can satisfy my Wishlist.
In IT, they do good things, but their percentage is negligible. Most cater to stupid needs that previously simply did not exist, because there was no IT. That is, engineers do not do great things, engineers simply support the infrastructure of pumping dough between people.
In such conditions, writing good code is no longer necessary. This is only necessary so that it would be more fun for me to work and I would not burn out any longer. But sooner or later a top manager comes and says: “That's it, you knock it on with nails and shoot. It's time to cut the loot. "
Instead of an abstract “universal good”, IT has learned to indulge low-profile women, and only through this has it grown into a gigantic industry employing hundreds of millions of people. Previously, programming was the work of the elect, now any sucker will sit on the courses for a year and go to write code.
And when it gets into the industry, there will be no time to dig deep - the product is needed tonight, otherwise we will miss the money. Digging deep and learning technology turns into a hobby, necessary only in order not to go crazy with the awareness of their own worthlessness.
In the system, where you have to throw a new feature onto the market once a week, you need simple approaches and primitive tools. When a cool developer comes up with a new technology, he tries to make it so that it is claimed by the majority, because being in demand by the majority is the main value of the modern world. That is why such philosophies and such Go appear.
And I think - I don't need all this fucking. This all causes rejection.
If you take a good look, my VSCode is full of dangerous symptoms. My tslint does not allow me to add an extra space. My code does not build if I called the variable with the wrong letter. My compiler will not work, because I have not added comments to the public method. Everything is simple - write, guys, the same code. Faceless code. This is not a novel for you, what the hell is the author's style ?!
I generally agree that such conventions are a good thing, but only as long as they concern the appearance of the code. The moment when you take away the opportunity to choose how this code will work - my worst nightmare. Imagine a case: you wrote a complex performance sensitive module, and you are told: “Listen, it is too complicated. Come on you make it easier, no matter what work will be worse. " Sounds absurd? And so it will be. Seriously. Yes, it is already there. They didn't add generics to Go, because generics are complex.
Go is a business effect, not an engineering solution. He contradicts himself. Here he wants reliability, and for this goes from complexity. But complexity in the industry appeared for the sake of reliability. Generics exist precisely for the sake of reliability, in order to anticipate potential dev-time bugs. And yes, they are quite complex.
Programming, I want to be creative. I want to have a huge number of options when designing a system. We model reality in the world of cars, and I know for sure: reality is not a simple thing, there are no right and wrong answers in it. And I have a feeling that technologies like Go are a search for simple answers. Like, let's have one correct solution for each task. But this is a hoax! It may work, but there is always a better solution. And under the pressure of the fact that we do not have budgets for high-quality solutions, we ourselves kill the software, and then we are disappointed that everything is not working well.
The philosophy of faceless code wants to make me a machine that copies boilerplate. And thinking about it, I come to an even more terrible contradiction.
I have always believed that the basic message of the development is: "Everything that can be automated should be automated." But here's the irony - my promise is also fatal.
I'm not ready to do something that a machine that I can build could do. This is irrational, and I was taught to be rational. But since I have to automate everything, I have to automate everything and automate - that is, development. And it turns out to be happy languages that gradually lead us to this. That is, my profession, like most others, should not exist in an ideal world.
Progress does not stop. But he can go in different ways, of that I am sure for sure. If programming now turns into Go and faceless practices, then we will come to the curve itself and not the optimized automation that one can imagine.
My solution to the problem is utopian, and will not withstand any criticism. I understand that it is too late to offer it, but still.
I would separate business and IT, so that only non-profit organizations could be engaged in programming. And so that their priority was the deep improvement of technology, free from the daily flow. So that the requirement “we release what we have, otherwise the profit will go away” was morally unacceptable. I would by all means keep the threshold for entering programming as high as possible so that the tools do not adjust to the average developer when an experienced engineer and yesterday's graduate of courses are forced to write the same code.
Yes, it will slow down the progress for centuries and will deprive our life of all the pleasant buns that we stick to every day. But at least it will bring the idea of progress back to the kind in which we believe in the moments of our strongest idealistic impulses.