How programming allows you to logically express thoughts
It is widely believed that programs can only execute a set of commands embedded in them and nothing more. Is it really? One of the founders of MIT Media Lab, Marvin Minsky, asks
this question in one of his articles . He is trying to dispel the myth that the program is just a set of strict rules and instructions. Minsky writes: “This false belief arises from the fact that people confuse the form with the content [...] The developer must clearly follow the syntax of the selected language, but the content that he wants to express through it is not limited to anything.”
The STUDENT program , developed by Daniel Bobrow , an employee of the Palo Alto Research Center back in 1964, solved school problems in algebra in the following form:
Masha was twice older than Ani when Masha was as old as Anya. If Masha is 24, how old is Anya?
The program copes with most tasks, as it can more or less accurately extract a series of data from the problem and compose and solve the equation on its basis.
Further, Minsky draws attention to another common misconception. Naturally, when writing a program, its syntax must be strictly observed. But this does not mean at all that you have a full understanding of what your program will do.
If you write a program in Fortran and want to call an existing procedure, you need to use one of the strictly fixed commands, for example, GO TO. You cannot replace it with another team, but you can use it to go anywhere in the program, that is, you have a certain freedom of action.
Worse, when a person believes that the reason for such severity lies in the computer itself. In fact, the reason is in the programming language. The essence of any programming language is to translate your thoughts into a set of zeros and ones that will be understandable to a computer, that is, a language is a means by which a programmer can express any, sometimes even the most complex ideas.
It is appropriate to recall the theorySepira-Wharf, according to which the language we use determines our thinking. This theory applies to programming languages. Any programming language is a tool, and for different tasks we use different tools.
Languages are often chosen based on their convenience, safety, and speed — like transport — according to their current task. Therefore, we usually choose the language that suits us best. Some developers choose Ruby for its flexibility; others prefer the rigor of Java. But sometimes there are those who do not like object-oriented programming: these people do not use its advantages simply because they worked more with methods of procedural languages.
Thus, the features of language really limit our thinking. However, we ourselves can overcome these limitations. For example, expressions in Lisp such as “cons”, “sexp”, “car”, “cdr” may not have analogues in a number of other languages. And yet Lisp gives us the freedom to express our ideas within the framework of this language.
In the bookDesign Patterns shows how to express thoughts in C ++. More than half of the patterns from the book are absent in Lisp, as they can be expressed in it without changing the structure of the language. It turns out that programming languages form the course of our thoughts, and each in its own way.
To make sure of this, it is enough to write the same program in different languages and see what results they will produce. Then translate the program from one language to another. Despite the fact that you should choose significantly different languages, for example, the same Lisp and C ++. As a result, you will understand that the language does not express all your thoughts, but the most important thing is that it allows you to evaluate what is easy to implement and what is difficult.
All languages are united by the fact that they can express almost any human thoughts and ideas. A student who constantly leaves a USB flash drive in a computer class can solve his problem by writing the client and server parts of the application for storing files in the cloud in Python. So, for example, Dropbox appeared.
Continuing the Python theme, you can recall the open-source Django project written on it. In 2003, the World Online news agency decided to start developing a web framework that would save developers time. Two years later, the project became open. Python is good because it is simple, and most importantly - it allows the developer to quickly create a working prototype.
Former Microsoft employee Mike Bolodzin in an interview with Business Insider talks about the importance of the ability to express your thoughts. Programmers must be able to correctly express even the most ordinary ideas in writing (in addition to programming).
This will help not only communicate more effectively with management, but also claim rights to the results of their work. Bolodzin recalls how one day they did not recognize his contribution to the work: "I argued that it was my idea, and I knew that they could not help but notice it." A clearer presentation of your ideas will allow you to avoid such situations.
In addition, if you write good software, you will probably have to communicate more with other people. According to Bolodzin, if you show a good result, then you will have to write in your native language as much as you usually write in Java or Objective C. To do this, it’s enough to develop the habit of writing regularly: it’s no more difficult than maintaining your blog.
PS We regularly analyze such (and other) issues at our events: the founders exchange experience and can turn to colleagues and experts for help. Here here you can see the calendar of seminars that we hold across the country.
As an additional reading on the topic - a couple of our publications on Habré: