Programming is considered as the process of creating computer programs. The word process in this definition is not superfluous. Usually they argue in the spirit of “see what a wonderful data structure can be described in a given programming language”. Programming philosophy implies looking around and digging deeper.
Actually, the division into coding, and the creation of algorithms is already specific, first life goes on, that is, a person relies on some thought like “I will write a framework with such and such properties”. And this initial direction is a question of philosophy. The problem is that often the programmer’s wife knows better than himself, at the philosophical level, what he does and why. Elementary philosophical categories: thinking, consciousness, conditionality to the programmer are unknown. And it is strange if you compare the ability of a programmer to think, for example, reading articles on functional programming or search algorithms, in conjunction with articles of prominent Russian or European philosophers, it turns out that the actual thinking skills of programmers are developed not less, and even more. That's just the language of the programmer is very rich while he talks about pattern matching and is pathetic and organic when he needs to get out of his sandbox, break away from the IDE and the file manager.
Pragmatism is one of the heights of philosophy. Just as Marxism at one time stated that confusion in questions of consciousness is insurmountable, and called for reasoning in terms of economics, reducible to natural numbers — pragmatism narrows the field even further and calls for solving obvious problems in the most effective way. In this sense, the programmer as a philosopher is close to pragmatism.
There is such a thing as the history of mathematics, for example the names of mathematicians are the names of basic mathematical terms. In Russia, mathematics is often taught separately from the history of its discoveries; the European school contains a culture of narration about the process of how this or that formula of scientific thinking was discovered.
')
For example the following story:
trying to color the map of the districts of England, Francis Guthrie formulated the problem of four colors, noting that four colors are enough to color the map so that any two adjacent regions have different colors. His brother referred the question to his math teacher, Augustus de Morgan, who mentioned it in his letter to William Hamilton in 1852. Arthur Cayley raised this issue at a meeting in London in 1878. In the same year, Tate proposed the first solution to this problem.
Do you understand? Social dimension That is, you learn not only the code, but you also know the names of those who invented this code, you are not learning just the C language, but also the history of its creation. This gives you the opportunity to move further in the historical perspective, gives you the opportunity to realize your location in the social structure and find where to apply your strength in a new direction for all of humanity. Russians are constantly inventing new programming languages ​​and algorithms, there are no problems with this, simply because of ignorance of the history and philosophy of programming you invent something that has already been invented. Or, worse, you invent something new, but you have no idea where to put it, what “Lord Hamilton” should write about his work, and at what “meeting of the London club” read the report. You will write the report, and it will most likely be perfect from a technical point of view.
Although system engineering involves the analysis and formulation of the problem before the actual design, algorithmization, the development of data structures, coding and debugging, but the task puts the customer. The customer is the "Lord God" in the philosophy of programming, he is not understood, because it can not be understood, it is absolute and the highest power. One can only comprehend its individual instructions and complain about the imperfection of "God's creations." The relations of the programmer and the customer in the textbook on Java do not raise, it is Marxism or Protestant ethics: the metaphysics of subordination and the conditionality of material values. In America, there is a class of "super programmers", "start-ups", people do not have a customer, they know life so that they themselves can see the needs. That is, he does not sit and wait until someone who understands life better than him comes and tells him what to do, he comprehends life and finds where to move in order to earn and be realized as an actor. He does not write a program that people request, but creates a request himself and satisfies it himself. Was there an iphone request when Jobs came up with it? Or did Jobs create the query itself?
Philologists and philosophers, that is, the same guys as programmers, only from a different faculty, consider all engineers as non-people. For them, a programmer is like an animal, it can do wonderful tricks with technology, but not a human being. That is, you are sitting in a room with a computer, but you do not understand why you are sitting in it. That is, you think that you understand, but if the philologist asks you "why and why" you will begin to describe the program you are writing. An elementary skill for a philosopher: to list your social connections and conditionings, to recognize your own history and how it brought you to this chair here and now, this is the alphabet of self-consciousness.
A person is considered a thinking creature, and it would be very easy for a programmer to understand thinking if he compared it with a computer program. A person, like a program, cannot work in a vacuum; a person, simply put, thinks what he sees. You look at the code, think about how to improve it, look at the error message - think about how to fix it. Try to turn away from the screen and continue to solve the same problem, you will see - it smoothly, but quickly disappears from the head. This is called thinking what you see, relying on input signals, conditionality of consciousness. Therefore, a second programming vector appears. I write the program, it manages the processes in the computer, in the chips, but I myself also look at the source code written by me, and what I see is my personal input signal and allows me to think further. Hence the constant research in the field of new programming languages. Hence the desire to learn another, and another programming language (PL). A person wants to program himself, to expand his capabilities.
There is a saying that iteration is peculiar to man, and recursion is characteristic of God. In the search for truth, there has long been no right direction, people have dispersed, relativism, pluralism. When we refer to an object, our statement immediately becomes an object itself, to which you can refer, or you can even go to a person, so in any discussion, in the comments, we immediately get postmodernism (replacing the object with a link) and phenomenalism - transition on the person in an attempt to avoid drowning in the graph of meanings.
Accordingly, pluralism in the choice of the PL, the development environment, the framework, is a single pole. And the desire to use the same PL, a framework like many other people, is collectivism, a manifestation of atomization, alienation. The programmer is very lonely and at the same time overloaded with communication. This is an open field for research. Higher nervous activity, working with structures and text, learning languages ​​- and this is just a daily activity. A programmer would surprise people of the nineteenth century with the capacity and power of his thought. He would have surprised the people of the twenty-first, if he could communicate with them at the level at which he works daily. The more surprising is the blindness of the programmer. Programmers are often distinguished by their appearance. And this is not a dress code, a man just does not pay attention to what he looks like and what he is wearing. That is, he knows what is dressed on it, but why it is it or even how it is correctly called this for him a distant cosmos. Do you know how a sweater differs from a pullover? Cardigan sweater? Why should I?
A programmer is like a slave to a lamp, like a matrix battery - if he suddenly starts using his brain, his unprecedented abilities in operating languages, logic, working with data volumes in ordinary life - he can become one-eyed who is king in the country of the blind. The sweater fits the neck and body, the pullover has a wide hole to make it easier to pull (over), the jacket has buttons. At a jumper instead of a wide opening a fastener. This is elementary, you can write in one line of code. But one thing is not clear to the programmer that this information is not about clothes, it is part of the description of life. True, some Europeans are different, there is a culture of programming life, especially among the British. Long ago they discovered that you could write a letter, for example, “I send you three bags of cloth, send me six gold coins” and suddenly it can be repeated again and again and you can manage life just sitting at your desk and writing letters. Venice, Hansa, Cambrian. Americans also inherited this quality, and since they also fell in love with computers and programming, they reached an unattainable level. They see the third vector of programming: any code, any program programs not only the computer, not only the processor, but also the users.
Users are not just people who want something, and you can give it to them in exchange for money. Users are the same thinking beings and their thinking is driven by signals from the outside as well as yours. They think what they see. They will see the interface of the program and will think and act accordingly. Each decision made by the programmer in minutes when he looks into the code leads to changes in the user's activity. You program it. This implies opportunities, responsibility and results research. These are elementary philosophical categories. Although the latter is close to the programmer, it’s just an iteration of development, it’s debugging and versioning. I wrote, listened to what the user said, again made changes to the code. But no, I didn’t listen, I didn’t just listen, but I looked at its behavior as if it were a program, I analyzed it, I thought.
Three-way programming. Computer, programmer, user. It is impossible to make changes to the code without making changes to the future of the user and the programmer. But you can not think about it. It's easier. Not to think is always easier. Of all the inputs, a person prefers to accept those that do not require reflection, but only sensations. The taste of beer, clean shirt, praise, or even insults and hitting superiors. Emotional decision-making follows from these emotions. Nice framework. Idiotic programming language. Dumb comment. Cool article. I had an idea to write my own implementation of b-trees. Why? Well, I liked the idea. Communication of programmers, the most logically occupied minds, is reduced to the exchange of emotions. These are two raging streams, colliding, repelling, creating whirlwinds - how can they even program? Very simple, after an hour of emotion, they disperse to read books. Here the thought turns on. Throw a link, I read. I liked it, is there anything to read on this topic? Two lives. The programmer is especially interesting because for him even coding is an emotional exercise, he throws his feelings into a cold screen, he tries to sense logic and shape himself as a mind as a result. Russian programmers are especially inherent, and not inherent in them - to argue, especially aloud, especially in writing. Moreover, a person who is able to talk about his project causes distrust - he seems to be a liar, who instead of looking at the code, being aware of the structure of the algorithm, for some reason thinking about social manifestations, is promoted - tales about Elbrus and Phantom.
Therefore, in Russia there is no open source. Because open source is not the ability to program, it is the ability to communicate. This knowledge of the history of programs and programmers. You can put your creation on the githab and even write articles and instructions to it, but there will be no one to read it. Or they will read and write “I want to join the project, but I don’t know what to do.” “Student, I know Java a little, a very interesting project, tell me what to do.” Why does an American student who knows Java immediately know what to do? Why he can create one open source project and join another? The question is more social than philosophical, our society is in a different state. But the philosopher is clear - a person does not realize himself. As Guzeeva says in “Let's get married” - “I don’t understand anything about myself.” He is sitting in his room at the computer, his mother says to him, "well, what have you got so unsuitable for life?" "Oh, you would have lagged behind, she herself is something smart." But mom is smart, you are a fool. More precisely, it has other inputs, you look at the monitor, it looks around. Even lagging behind intellectually, in the skills of logic and working with information, the presence of extensive input signals from life, about people, about relationships - makes a person understand life better than a programmer.
Mom is not a fool, even your clothes and plates can be predicted by your future without knowing asynchronous data processing. It is not difficult, and you could, if you looked at society and knew the language of description and programming. On instances to patter. The valuable frame grows. An intelligent guy appeared. Straighten documents. The authorities noticed. This is an API. Nothing complicated. Programmers can and should rule the world. But for now, only a small layer of American programmers understood this. Gates realized that the program may fail when its instructions are executed in the computer, but it should not fail when the user executes its instructions. It is not only cynicism, it is an understanding of its role, it is a study of behavior, it is the study of the user API and the whole society. Click here, what happens if the user clicks this button? And if the text is entered here, how to make it enter the text and here? The file selection window has opened, in which default folder should it be open? How many hours did you spend on debugging code, why didn't you spend ten times more studying user behavior? Gates spent.
People record the behavior of the user on the video program, and from the moment of entering the room. The funny thing is that these people are not programmers, they are invited people - sociologists, even trainers. They sit and do the work that the programmer is supposed to do more efficiently, because this is debugging the code. Changes are being made. But the program does not work faster after these changes, it may be slower and more often buggy, in the processor, on the computer is buggy, but in the user’s behavior it works better, it performs the operations faster (performance), it reaches the target (debug) more often, it is satisfied (energy saving). He pays in the end. All Jobs did was user programming. How did he come to this? culture of the environment? drugs? personal talent? Philosophy. Kant-Hegel, Husserli-Russell, Wittgensteins-Sartre, thousands of them. They created a lot of languages ​​to describe the reality and the API for its understanding. Most of the clever words that we use intuitively, were once introduced and formulated. You can not use the word "culture" and think about the conservatory, say "conservatory" and not know that this is primarily a system of teaching and selection of teachers. Conservative and conservative experience. For the programmer, everything he uses comes from nowhere. Clever people will understand, teachers in the university are there for this.
By the way, a programming teacher usually does not know how to program or teach. A separate song, as it happened, Stalin sent millions of dense peasants to study engineering, now the same is happening in India. Three million graduates annually. It is clear that people tend to streamline teaching, throwing away all unnecessary. Why do you need to know this, you teach it - it will come in handy. The history of Maxwell's experiments is very fascinating, but you have no time to learn it, you will learn the Maxwell equation right away. Well, at least you tell the students that before Maxwell there was nothing, after him the science of electricity was already developed. What an example for programmers! There is nothing - there is something. At least tell me how Stroustrup and Torvalds worked. As from nothing, it turns out something. That is, the teacher is just as philosophically naked as the student.
You laugh that Americans cannot find Iraq on the globe. And you laugh at yourself, can you find Hegel on the globe of the history of logic? You use BASH, do you know who created it and when, and how it interprets its creation after dozens of years? Do you know why the terminal is called the terminal? How is it connected to the teletype? Did you know that IBM did a population census in the United States more than a hundred years ago with the money of the central bank, and then delivered these mechanical computers to Hitler? Can you imagine that the device and the terminology of databases leads the history of those punch cards, and they are from the catalogers brought from England in the early nineteenth century? Do you know how the creator of Atari Bushnell did not understand the ideas of his employee Jobs? Do you even imagine the role of Atari in the history of computing? Who copied Atari or Sinclair? It’s not enough to know the devices and their history; first of all, we need to know people, thoughts and their history. Gödel's father was a priest, and St. Francis's father was a banker and merchant. What is the Lviv-Warsaw school of logic?
Well, okay, this is your three-way programming, of course, you need to know not only the code and programming language, but also the history of the language, know yourself and the user, and history and languages, but what about debugging? And what about debugging? Why do I need a debugger? You just don’t know how to think, you still react and wait for prompts, you don’t understand your program, you stop it and you expect that the debugger will show you something. Then, you hope, ideas will appear in your head. "In your debugger, it is inconvenient to set up breakpoints." Metaprogramming is when a program creates a program, also a kind of recursion. Similarly, the program can debug a program, meta-debugging, but for this, the programmer must be twice as smart, he must keep two programs in his head at once. People who use printf () and laugh at debuggers just understand better what they are doing.
By the way, the linker is also not needed, a rudiment of the first translators. And typed languages ​​are needed only because out of a hundred programmers only one can program, the rest need to be led by the pen. Even one monkey will print War and Peace if you unlock only the keys you need and in the correct order. That is why we love syntax highlighting and theme design - this is a way to influence ourselves, our minds, focus attention, help ourselves see more. Now the boundaries are blurred, where the built-in documentation is, where the Internet is, where the compiler is, where the interpreter is, where to go to work, and where is self-employment. In such circumstances, the desire to rely on authority develops, like a child's desire to grab an adult by the sleeve. Devotional look into the eyes of Google when they roll out the next technology for developers. You have to get up on your feet and look around in a big adult world where you don’t study technologies, but create them, where you see not only the manual, but also the hand that gives it to you and you know the story of both. This is fundamentals, this is called programming philosophy.
Programming philosophy6: Product and Project5: Reactos and Hummingbirds4: Chapito Technology3: Chichikov and programmer2: Myth and Language1: Three-way programming