Kent Beck, a legendary software developer, creator of extreme programming methodologies and test-driven development, and author of many books on programming, once
said : “I’m not a great programmer, I’m just a good programmer with great habits.” What habits and abilities do "rock stars" have in programming?
Let's try to make out three popular statements about “superprogrammers”, in order to understand which of them is true and which is rather an exaggeration.
/ photo by Connie CC')
Thinking outside of the box
One of the most popular opinions about super-developers is that they know how to give a non-standard solution to the problem at the right moment. Such solutions usually underlie many development success stories.
One of them is shared by Quora resident and programmer Peter Blain. He
says that in one of the difficult situations, a working solution for the “stalled” project was suddenly proposed by a new developer, who had minimal time to familiarize himself with the task.
His approach concerned not so much implementation as architecture: he allowed to localize the problem and combine several open-source products to solve it. Of course, this proposal was not spontaneous - nevertheless, its role in solving the problem was played not only by experience and exceptional abilities, but also by a fresh look at the new person in the project. According to Peter, the ability to go beyond traditional approaches allows the developer to reach a new level - and literally turn from “just a good programmer” into a “grandmaster”.
By the way, more than 700 questions are devoted to the topic of Thinking outside of the box on Quora - and most of the topic starters want to understand how to develop this ability in themselves. The answers are very different - from advice to take regular breaks and physical exercises to suggestions to solve puzzles and read books in areas related (or not at all) with your current activity. A more systematic approach to the study of this phenomenon as applied to programmers was applied by scientists from the University of Washington together with representatives of Microsoft.
They conducted a
study , trying to figure out what distinguishes an outstanding programmer from just "good." It turned out that the developers interviewed by them noted a characteristic that, by description, corresponds to the notorious “outside of the box”. They called it the ability to “see both forest and trees” - that is, to consider the situation at four different levels of abstraction, including technical nuances, industrial trends, the company's vision and customer needs.
Of course, such an approach will not give sudden brilliant insights, but a sound assessment of the situation and answers to the questions: “What does the client really want to get?”, “Does this technology have a future, or will it soon leave the market?”, “Does this solution values ​​of our company? ”can give a better result than daily solving puzzles.
This approach, at a minimum, suggests that the ability to “see both forest and trees” can be developed - 59 interviews with representatives of 13 Microsoft divisions are proof of that.
Collective mind
Another important feature of an outstanding programmer, which was noted by researchers from Washington, is the ability to ask for help at the right time and help others. Bob Martin (Robert C. Martin) in his
book “The Perfect Programmer. How to become a software development professional makes an even stronger statement in this regard: he
writes that programming is so difficult that no one person can do it well alone. Even if you are a very experienced developer, your colleague’s ideas and ideas will certainly benefit you.
It may sound banal, but this item is another important component of success. In the end, there is a huge amount of resources (including the same Habr), where developers strongly encourage each other to share their experience and will come to the aid not only of a project colleague with pleasure.
For example, the topic-starter of
this thread on Reddit unsuccessfully tried for two and a half months to learn how to program in Ruby. Users of the platform left 169 comments with specific advice, and some of them even personally contacted the author of the question to help him in practice. In the first post in the thread, you can see how grateful the author was - fellow programmers not only helped him, but also motivated him to continue to develop in this direction.
Some programmers consider the ability to correctly ask questions and give competent answers as a special skill. Another Ruby developer Steven Hirlston (Steven Hirlston)
notes that one of the main things he learned during his work is this: a good programmer knows how to ask questions without irritating others, and an outstanding programmer knows how to answer them without arrogance.
Communication as a whole is an important element of teamwork. Returning to the study of Washington University and Microsoft: Scientists have identified as many as 17 characteristics of an "excellent programmer" related to communication and teamwork.
Including the ability to “find positive sides in compromise solutions”, politeness, the ability not to take remarks about the code or work to heart and attention to the surrounding context in the process of communication.
It turns out that when it comes to large team projects, the image of a closed and unsociable developer in a hood pulled over his eyes is far from the truth. And this idea is not new - an American scientist Gerald Weinberg wrote about this in his
book The Psychology of Computer Programming back in 1971.
And later, Jeff Atwood, one of the creators of StackOverflow,
expressed it in his blog:
"Don't be that guy." Do not be a guy who writes code in a dark office and appears in public only when he needs to buy colas. "No one knows this guy, nobody sees, and he has no place in the team where everyone is open and ready to help each other."
10x programming
One of the oldest (and enduring)
concepts about the "stars" of software development is that super-developers are more productive than usual developers by no 10-15%, but many times - more precisely, 10 times. Let's try to figure out how this idea appeared and what is behind this statement.
Steve McConnell, CEO and Lead Developer of Construx Software and author of many well-known
books , in his
article on 10x sources tells about the following. In the late sixties, researchers Sackman, Erickson and Grant (Sackman, Erikson, Grant) made the first attempt to analyze the performance of professional programmers (developers took part in the study, whose average work experience was about 7 years).
The results showed that the difference in the time of writing the code between the best and worst results was 20 to 1, the difference in debugging time was 25 to 1, the difference in the code length between the “worst” and “best” was 5 to 1, and the speed of program execution was 10 to 1. At the same time, they did not find a connection between the experience of the programmer and the quality of his code.
It looks impressive. On the other hand, as Autodesk developer Ashraful Alam rightly
points out (Ashraful Alam), the software created in those years was much simpler than the products that are being created now.
Therefore, it makes no sense to compare developers "from different centuries." On the other hand, the programmers of that time did not have a rich choice of libraries, tools and frameworks that exist now. This means that those developers paid more attention and effort directly to writing the code. This theory is also opposed by the fact that the experiment conducted in the 60s, apparently, has
never been repeated .
In October of this year, Belitsoft PHP development
surveyed the "rock stars" of programming (that is, potential 10x programmers) - the company wanted to find out what allows them to work 10 times better than the rest. It turned out that not all of the surveyed super developers considered their abilities to be so outstanding.
For example, Victor Volkman (
Victor Volkman ), a leading developer of ProQuest, believes that the tenfold difference between the productivity of two programmers is a great exaggeration: after all, the volume of a program does not always correlate with its quality. Therefore, the success of a project is much more often dependent not on the speed of writing code, but on the ability to find simple and elegant solutions to problems — and this is much more difficult to track and measure.
Of course, there are differences between experienced developers and novices, great talents, and just good programmers. Another thing is that even stars, most likely, do not own the technology of "cosmic acceleration".
It turns out that among the characteristics of "superprogrammers" this one is the least plausible. In the end, the developers, at a breakneck speed writing incomprehensible code, are in demand only in the cinema.
PS What else do we write in the First blog about corporate IaaS: