New programming languages ​​quietly kill our connection with reality



    One day the day will come when the teams in programming will look like "hey computer, give me this fucking thing."

    What will be under the hood, no living soul will understand. The “crap” command is interpreted in the paragraph with the description, which is interpreted into keywords, which is interpreted into a set of vector notation, which is interpreted in some C, which is compiled into ...

    and somewhere down below it will turn into electrical impulses on pieces of iron.

    The programmers will be polished humanities with "high verbal abilities, communication skills and the ability to be a nanny in the team." Thank God until this day, as to Alaska on a team, but each time inventing another Kotlin, we bring this day closer.

    I just wondered if our YaPs had become something like that already. A little smarter equivalent of the phrase "computer, make a damn thing." A bunch of formalized protocols for electricity, which we already forgot about. A thing that is increasingly tearing our connection with mechanical reality.

    I often hear the phrase: "Phil, back off, stop thinking about all sorts of nonsense." But damn, damn that day when they write on the Habré "stop thinking."



    I have many small projects at work, and we use different stacks - .net, React.ts, c ++, Java. In what you are at least a little rummaged, then they will hang on you. I came as a donor, but there are tasks on the board for all applications, access to repositories, too.

    A case arose when all the tasks on my stack were complete shit, which only a madman would take. I am not a madman, and began to take task with typscript and react, then with Java. All applications do about the same thing, but are designed for different platforms. I had no problems.

    So I wrote a thing that selects the best vpn server on sharps, here I went to do the same in Java. Same thing, exactly the same way. At first, he did not attach any importance, but at some point it was already very difficult not to notice the pattern.

    I just did the same thing in different programming languages. This code was very similar, with the exception of details that did not affect the task at all. After all, business does not come to me with the words: “Hey Phil! We need to use abstract classes to show the client the state of the connection. ” Business and users want the device to show them a picture. Yes, and I really also just want to show them this picture.

    But I can not. You can’t just tell the car: do what I need. So far, I’m the intermediate interpreter that turns the phrase “make a fuck” into commands, while I still have to explain in detail and step by step to the processor where and how to put the fucking bytes.

    But I no longer work with bytes. I work at a very abstract level with the pieces that make up the factory of the mechanism factories that control these bytes. There is a piece of iron down there, and it is even more complicated - I have no idea how what is being done there. But it is done through a hundred prisms, which I also have no idea about. She “thinks out” half of what I want to tell the car herself, and I don’t know how.

    It was as if I had sealed the hood of the car and began to repair it through the exhaust pipe, which is getting longer and longer every year, and once, to fix the engine, I just have to scream into the pipe, and not get my hands on it.

    The subcompiler turns my sisharp into an intermediate language (IL) that goes to the client’s car, where in turn another subcompiler (which is just-in-time) on the fly turns my IL into platform-specific code, which in turn is fed to the processor ...

    And somewhere there, all my formal descriptions, all the differences between YaPs are erased, and they do the same thing. On the fingers:

    I know that the processor knows the O1 command. Having received it, he will blow electricity into the built-in microdynamic speaker, something will close somewhere and a beep will sound.

    And here I am writing on the sycharpe:

    using System;
    Console.Beep(500,500);

    This line will turn into O1 for me.

    I write on the pros:

    #include 
    Beep(500,500);

    And she, too, will turn into O1.

    What, I should think, why is System.Console here, and windows.h there? But my brain remembers it, and such specific details of dofig, they are completely different. Sooner or later, there are so many details that my choice of YaP becomes not logical, but simply because I like it more.

    At a previous job, I was forced to write code with restrictions, because under it was a not-so-smart transporter. I was told how long ago they did librari on the sisharpe, and when they realized that they were missing out on profit, they decided to do it on Java and on the pluses. But by that time there was so much code that they decided it would be cheaper to hire a team of developers who would write a converter of sisharpa to Java and pluses.

    And it worked. With a lot of caveats and problems, but they just automatically turned the sisharp code into a Java code, and fired any clients. All these beliefs that “each language solves its problem” were thrown into the trash.

    And now, sitting over the design of the next module, I thought - what would old von Neumann and his team say when they heard about my problems? Those guys who designed their principles of data storage and proved to idiots that a binary system for machines is better than a decimal.

    They would not be awesome from our number of abstractions for the sake of abstractions? We could accept that in 2019, more and more often they choose abstractions purely aesthetically and this erodes the connection with execution on a machine.

    A processor, a computer is a very, very complicated thing. And we reduced it to simple abstractions in order to think that we were supposedly managing this. As a result, not a single today's software engineer understands how the machine is arranged, but since he seems to be able to control it, it seems to him that the machine is obeying him and he is cool. This is an illusion.

    Every time another startup thinks “yes what will happen to my node there, when I transfer everything from x86 to ARM. All this low-level garbage does not concern me, ”we are further and further from real control over tasks. The language of communication with the machine has become almost human. But it does not seem to work as intended.



    Almost any of the common YAPs sold today as a tool to solve all problems. But that does not work. First, a tool appears that makes life easier when solving one small task, everyone starts to hype it, creates its infrastructure, does everything to become applicable everywhere - and now we have another too complex and too abstract tool, which is all doing badly. Someone somewhere is already sawing a new one for him to replace. To confuse still more.

    One humanitarian friend of mine (hey, remove the revolvers, we all pretend that you can be friends with the humanities, I am no exception) wrote a story. He told me that I, as a friend, should read it. I have been fishing for a long time. But he got me, and I read. And this turned out to be one of those cases when humanitarian knowledge improved my developer skills. Take a look.

    The story itself is fantastic. At the center of design is the problem of verbal interaction between people. There the whole world fell ill with a disease when it seems to you that you are speaking normally, but those around you hear some incoherent nonsense. The story in the end about this is how to convey your perception with the help of language, and what to do if you do not have a language. I had previously thought that between the programming language and natural languages ​​you can draw parallels, but I thought, of course, not seriously. I read and thought better.

    When a business brings me the “Hey Phil, do a damn thing” task, what’s going on in my brain? How many steps of interpretation pass, while the sound wave, bouncing off my ears, turns into signals and runs through the neurons of the brain where necessary. I don’t think about it at all, it happens on its own.

    And because of this unconsciousness, due to the fact that I calmly gave the brain to automatically interpret “heard” into “understood”, a bunch of bugs appeared that I do not control. For three hours, the manager explains the business task to me, and I leave him with one thought: “what kind of bullshit did he carry !? Let him write in jir, then I’ll do it. ”

    No matter how much he speaks, he could not compile his vision into me, although he can convey it to himself in his head in a second.
    Because in our brains a bunch of abstractions has grown over millions of years. Understood at the same time, and understanding, and the grandest misunderstanding, with which we can not do anything.

    Programming languages ​​have not yet been a century old, and the layer of abstractions between my programming and real work is already frighteningly thick. And when I thought about it, I was anxious because the control was leaving.

    When in 20 years the abstractions will become another three orders of magnitude thicker, and the YaPs will be almost human, I will no longer understand how the computer will fulfill my request, how it will understand it. Because I completely automate the process of understanding it.

    And when someone writes another “my disappointment in the software” and complains about everything that is cumbersome, incorrect and clumsy - nothing can be done about it. In an effort to simplify our life, we lose control over it. And this is very bad.

    But even more, I'm afraid of the other. High-level YaPs will change my thinking so much that the thought “everything is bad” simply cannot physically originate in my head. I am sure that the natural language I speak very seriously affects my mind. If I am Russian, then ten generations of my ancestors dictate to me how I should think with the help of the language that I inherited from them. A language that is arranged, for example, in such a way that in any sentence about a problem that has happened, it should be to blame. Even if I say "garbage happened" - garbage is still to blame. And, for example, in Spanish this is not. Happened and happened (and even now in Russian it is understood that “something” happened).

    I spoke in Russian a quarter of a century every day - and now physically do not believe in chance. Or I believe that men are more important than women, because the whole language is tied to the masculine gender. My article was translated into English, Americans came to the comments with requests to replace the pronouns with gender-neutral ones - and I don’t know what to do with my indignation. But the Germans, for example, have no such problems. Their language has long been gender-flexible. And there everyone goes to the same bathhouse, and a woman leads the country.

    Language rules me no less than I do it, and this is not the choice I would make. Other people made it for me. But the natural language is an ancient and clumsy thing, I can’t take it and give it to the creators if I don’t like something in it. And I can’t change it, at least easily.

    With programming almost as well. He learned OOP language, then looked at the functional and broke his brain. YaP is not just a tool that serves you, but a large part of your life, which largely determines your thinking not only at work. Because at the deepest level, PL affects not how the task will be done, but how you think about it. This is not a wrench in your garage - this is a piece of your consciousness.

    And the more abstract language becomes, the more your real nature is washed out of your thinking - to control electricity in iron. All these pictures on your monitor, tsiferki, libraries, animations - they are not real. The present is only electricity. Only iron. I am not ready to lose control of him.

    Also popular now: