This post is inspired by the article "
I, the user! ", Which caused a lot of controversy, and was very coolly received by the community. Discussion in the comments showed that the idea, which the Author expressed rather harshly and aggressively, was perceived as a call to return to windmills. However, in my opinion, the problem touched by the author is much deeper.
What is programming for you?
According to my observations, many people believe that programming is the compilation of programs in a computer language. But it seems to me that programming is, first of all, a way to think, to operate in the mind with abstract entities, such a “game of beads”. A programmer creates complex constructions in his mind, using various models and concepts, such as imperative or functional programming, or, recently, causing a lot of controversy, an object-oriented approach. The most talented create their own models, and then we begin to discuss the advantages and disadvantages of dynamic typing or NOSQL databases.
The concepts mentioned are not directly related to the programming language. A good programmer is not limited to the language, he can express his thoughts in any language that includes the relevant concepts. There can only be questions: how are cycles written in this language? Does this language support higher order functions? Can I use multiple inheritance implementation?
A programming language may not support higher-order functions at the syntax level. However, this rarely prevents programmers from passing functions as parameters. To implement this idea can be used by different means (however, not always elegant). But this only underlines the fact that the language is secondary in comparison with the ideas and concepts of programming.
A programming language is the way a programmer implements his ideas. The language embodies some concepts, the study of new programming languages ​​helps the programmer to expand his “inner language”, to use new concepts in his work.
')
In process of development of methods and methods of work with abstractions, programming languages ​​develop. There are new models, algorithms, ideas, looking for ways to simplify the solution of routine tasks. Languages ​​of a higher level of abstraction and libraries of ready-made solutions appear. This is natural and natural. The presence of high-level languages, libraries and frameworks allows the programmer to focus on solving important problems without wasting time on solving routine problems. Ideally, this means the possibility of creating more complex, more efficient, more convenient programs in substantially less time, i.e.
access to a qualitatively different level .
However, let's look at some side effects of this phenomenon.
Let's go back 15-20 years. Compared to the current situation, all programming languages ​​are rather low. It is quite difficult to use them, there are few public libraries. This leads to the formation of a high threshold for entering the profession. To become a programmer you need to study a lot of things, starting from standard algorithms and ending with means of working with the operating system. Ie a programmer is a specialist who can program, he knows how the algorithms are arranged, he can write a complex program, and if some function is not in the library, he will write it himself.
Back in our days. And we see a monstrous, in my opinion, the situation! To compose a program for the computer is no longer required to be able to program! It is enough to be able to add a simple designer to get a program that does something. What are the design patterns, what are you talking about? This is all nonsense and remnants of the past. Here you have a website, it works, the pictures are beautiful, what else do you need? Architecture, say bad? But I made it on a super-modern engine! And in just half an hour!
High-level languages ​​and frameworks were created in order to be able to create qualitatively more complex programs that could not be done without them, since there is a limit to the complexity of the structures that the human brain can operate on. But in order to create such programs
you need to be able to program , i.e. intertwine in the mind entities and algorithms, based on the base that frameworks give us. The programmer of the last century was able to do it, because without it he could not even start working. The level of abstraction of modern development tools allows you to create programs almost without knowing anything about programming. And many believe that this is enough for them. Judging by the reports in the programmer forums, a whole generation of programmers is growing up, who do not even know what they are deprived of.
Employer:
- There are such data structures, an array and a list.
Which do you think is better to use in your programs?
Applicant:
- Well, the list is certainly better!
From personal experience of interviewing.
Note.To my great happiness, this phenomenon, although it is becoming widespread, still did not become universal.
Finally.
I believe that modern development tools, frameworks, scripting languages, and a lot of available libraries that solve almost any applied task is just a miracle that you definitely need to use. But at the same time, so
if you are brought into the programmers , in any case,
do not lose the pleasure of programming .