If you have chosen for yourself the profession of a programmer, study, as a rule, becomes your constant companion, whether you like it or not. In this area, “learning something once and for all” is unlikely - new solutions are constantly emerging, new frameworks, and eventually new languages. In today's article, we will explain why it is important for developers to remain “eternal students”, what Stack Overflow statistics says about learning new languages, and why programming is gradually turning into a method for learning
other disciplines.
Photo hackNY.org CC-BYFrom the field of the obvious
The habit of clinging to the old and ignoring the new (even if the new for you is Java or Python) may sooner or later play a cruel joke with the developer. In this, for example,
sure John Graham-Cumming (John Graham-Cumming), CTO Cloudflare. Speaking about what he was taught by the programming years, he remarks: “Some people are overly addicted to some specific language and write only on it. This is mistake. There is no one single language ideal for all tasks. ”
')
John recommends that everyone involved in development study as many different solutions, languages, and libraries as possible. He is supported by developer Josh Bragger (Josh Braegger) in his
compilation of “anti-recommendations” on how to burn out the most quickly and effectively writing code.
To strive to learn new things, even if this is an obvious advice, it is nonetheless important. And the more experienced a programmer you become, the harder it is to follow — as John Graham-Cumming rightly points out: “I'm not young enough to know [about development] everything”.
Who and what studies: some statistics
Jeff Atwood, co-founder of Stack Overflow, in his article on Coding Horror,
draws an even more dramatic picture: “Cool developers are very good at programming, one might say, fantastically good. If they are somewhat similar to me, they spend almost every second of wakefulness at the computer - for almost the entire life. ”
However, even if this is so, the time spent in working at a computer can be spent in different ways - someone devotes it only to business projects, and someone finds time for third-party tasks and training exercises. The first option, according to Josh Braggger, who is already familiar to us, can easily lead to burnout: “You started programming because you liked it, so why not continue in the same vein? Spend some free time trying to solve a problem that interests you. ”
Not only beautiful words speak in favor of this decision, but also statistics. Analysts studied data from the Stack Overflow portal and came to interesting conclusions: programmers use different languages ​​and technologies on weekdays and weekends (as well as in the afternoon and in the evening).
In other words, among all the technology analysts trace the division into two groups - those that are used in the work, and those that are interesting to explore or useful to use in their own project.
For example, tags related to Microsoft technologies (C #, ASP.NET, SQL Server, Excel, VBA) are in the “working” group. And in the "interest group" were relatively new languages ​​(like Swift), as well as Node.js, C and C ++. By the way, Scala and Ruby on Rails, which several years ago were in this group, have now moved into the category of “working” languages ​​and have become less used on weekends. Another example of technology, the interest in which wakes up on weekends - solutions for the development of mobile applications and the game engine Unity3D.
In addition, analysts have found that among the four languages ​​(C #, C, Java, Python), C # programmers are the most “corporate” and work “mostly from 9 to 5”, while C-programmers are more like “free artists” : get up later, work longer, often leave tasks for late evening. Java and Python were somewhere between these two extremes (in
this application, you can compare the graphs of the dynamics of calls to different technologies on Stack Overflow within a day).
A detailed story about how the study was conducted can be found
here and
here .
By the way, the universal “
task book ” for the developer (regardless of the chosen language) was made by one of the software engineers at Google. The list contains tasks for the main programming sections, from working with numbers to operations with graphics and multimedia files. And since this is a project on GitHub, it contains not only the tasks themselves, but also
solution options (most often in Java and Python, but also solutions in Swift, Go, and even Befunge).
When learning new is pain
However, in the process of learning a new one, one can encounter completely unexpected (and even shocking) tasks. This story leads the developer Joe Logri (Joe Loughry), who wrote the
text entitled "The worst programming environment in the world." In 1990, Joe came to work at a company that used the
BANCStar language. Therefore, on the first day of work, Joe saw something like the following:
8607,,,1
11547,15475,22002,22002
1316,1629,1,1649
3001,1316,3,30078
11528,22052,22002,22002
9301,0,1528,1528
31568,10001,800,107
8560,,,1568
8550,210,,
3001,,,
3100,1316,3,30089
11547,15475,22002,22002
3001,1316,3,30089
3001,1317,3,10000
8400,,,
8550,700,801,
3001,,,
9301,0,522,522
3000,1284,3,10001
8500,,3,
8500,,5,
1547,,1,-2301
By the way, it took two weeks for Joe to get used to the language and start using it actively. Joe came to the aid of his favorite developer tools on BANCStar - a dot matrix printer, color highlighters and a folder-folder in which printouts of dozens of table values ​​from the system were collected. By the way, the printouts in the folder “were fanatically updated as soon as someone changed something more or less significant” - all this, of course, manually.
As Joe stated in his
article on this language, first published in 1997, “[I’m citing part of the source code] I’m not too worried about the dissemination of internal corporate information, as ten people on the planet can read this code.” In fact, in the early 1990s, banking structures really did use this language - although it looks like an esoteric programming language.
By the way, the only valid characters in this language are numbers, a minus sign, a comma (and also a line break), and it is strictly forbidden to comment on the code. At the same time, the average length of the work file written in BANCStar reached, according to Joe’s recollections, several hundred (in rare cases, thousands) lines.
Compared to BANCStar, most of the currently popular languages ​​are clearly "more humane" and much easier to learn and use. Although, as John Graham-Cumming rightly points out, “[Language wars] are for the most part the lot of losers, because this is not a matter of dispute.” For example, when I write in PHP, the result is terrible, but other people can work wonders with this language. ” Who knows, maybe among 1350 files written on BANCStar, there are also their masterpieces, however, very few people can now appreciate them.
Programming as a way of thinking
Of course, the example of BANCStar is an exception to the rule. The vast majority of modern programming languages ​​are really easy to learn. Moreover, some developers and scientists even believe that the process of learning programming changes our approach to the perception of new concepts.
Allen Downey, a professor of computer science at Olin College of Engineering in Massachusetts and author of
several books on programming, adheres to this position. He
recalls that in the past, a bunch of “natural language — mathematical notation — pseudocode — code” was often used to study programming.
Natural language is expressive and understandable, pseudocode is more accurate, mathematical notation provides brevity, and the code itself can be directly used in the work. On the other hand, modern programming languages ​​have all these qualities (expressiveness, accuracy, brevity and performance) and therefore can themselves be used not only as an end goal, but also as a means of learning.
As an example, Allen Downey cites signal processing - on the one hand, this section of radio engineering can be studied “from the bottom up” - that is, you can first disassemble the theory of signal processing (mathematical methods for converting analog signals), and then proceed to writing applications. However, modern programming languages ​​make it possible to reverse the whole process - start with the use of libraries that implement the most important algorithms, and only then understand in detail how they work.
Such an approach, at first glance, seems, to put it mildly, “non-traditional”, but it helps to make the learning process more interactive and to keep the motivation to study throughout the course.
Maybe this format of “immersion into a task” does not look like classical training, but it is worth trying - there is a chance that the ability to program in the future will become the same basic requirement for learning new disciplines as reading, writing and knowledge of the main sections of mathematics.
And yet programming is not the main thing.
Even successful programmers say: programming in their work is not the main thing. Jeff Atwood
cites the example of Bill Gates, who in one of the speeches stated that after 3-4 years in the profession the programmer will no longer be able to drastically improve his skills - if in 3-4 years he didn’t become a “star”, then »Subsequently.
This leads us to a paradox - it turns out, the experience and knowledge that we gain over the years will not turn us from a “strong middling” into a “super coder”. Then what determines this possibility? If we discard the innate genius, Atwood says the following: our level is largely determined by how we perceive everything that is not directly related to development - this is about studying users, business processes, and the characteristics of the industry in which the developer is engaged.
And this, in turn, additionally expands the “learning horizons” - it turns out that a “well-educated programmer” should not only “code in the breaks from work” (in a new and more interesting language for him), be ready to use the developer’s skills when learning others disciplines (for example, sections of physics or mathematics), but also should pay close attention to all processes that take place "around the development". The picture, of course, is utopian, but imagine what it would be for you to implement these tips if you had the BANCStar language and a folder with the tables.
Share your “lifelong learning” experience in the comments: what languages ​​/ frameworks are you learning now and for what? What non-programming “third-party disciplines, in your opinion, help you better cope with writing code?