/ programming

"Two truths and a lie" or programmer's super skills (L)

Kent Beck - a legendary Software Engineer, a creator of the extreme programming methodology and TDD (Test Driven Development) and an author of multiple books said once: "I'm not a great programmer; I'm just a good programmer with great habits". What kind of habits and skills "rock-star" programmers have ?!

Let's have a look at 3 popular statements about super-programmers, so we can understand what is true and what is false (or exaggeration).

tyler-lastovich-454484

Thinking outside of the box

One of the most popular ability that programmers have is that they can give a non-straightforward solution in a right moment. There are a lot of success stories built on top of those solutions.

Peter Blain - software engineer and a citizen of Quora tells a story, where a newly hired engineer gave a great solution to a problem without having exposure to the whole picture because he just joined the company recently and he didn't have enough time to familiarize with the problem. The solution he suggested was not really related to the way software works, but more about the architecture in general, where combining couple open-source products helped to fix the problem. Of course, the solution came from nowhere, however, not only experience and great programming skills helped to fix that issue, but also a fresh look of a new programmer at the picture. As Peter says, to be able to think outside of the box helps an engineer to transform from a usual programmer to a grandmaster.

By the way, there are more than 700 questions on Quora related to "Thinking outside of the box" topic and most of them are trying to understand how to achieve that skill. There are a lot of different answers to that question:

  • do physical exercises during the day
  • solve programming puzzles
  • read books related to your field and not

Microsoft, however, made their own research (as they usually do), where they tried to understand what is the difference between regular software engineer and a great software engineer. Turned out, those software engineers, who were surveyed by Microsoft put up a detailed description that describes "outside of the box" skill. They called it: "seeing forest and trees", meaning looking at the case from 4 different abstracts: technical parts, industry trends, company vision, client's needs. Well, for sure, this way of doing things won't make you a genius, however, its a great way of analyzing a case/issue, which will work better than solving puzzles the whole day:

  • What client needs?
  • Does this technology has a future or it will die soon?
  • Does this solution correspond to company's values?

This approach can be developed, at least according to 59 interviews within 13 departments that were made in Microsoft and by Microsoft (I'm not a Microsoft fan FYI :P).

rawpixel-com-250087

Collective mind

The other very important skill that stands out THE grand master software engineer (researchers from Washington pointed out) from others - being able to ask for help and to help others in a right moment. Robert C Martin in his book The Clean Coder points out even a stronger statement: programming is that difficult that none can do it by himself alone. Even if you are an experienced programmer - your peer's thoughts and input will bring you benefits. It's actually one of the biggest thing of a success story and to prove it - lookup for all the resources where people ask questions and help each other: StackOverflow, Reddit, Quora and many more. Have a look at this Reddit post, where question author was trying to learn how to program on Ruby and couldn't move forward alone...so people helped out: 968 upvotes, 169 comments with great advice, sometimes detailed tutorials and code examples. This is awesome!!

Some software engineers think that being able to ask right questions and give good answers - its an art. There is another Ruby software engineer Steven Hirlston, who says: "A good programmer knows how to ask questions without being annoying. A great programmer knows how to answer questions without being a jerk." Pretty good explanation eh?!

Communication, in general, is an important part of a teamwork. Jeff Atwood, one of the co-founders of StackOverflow, said in his blog: Don't be "the guy in the room." Don't be the guy coding in the dark office emerging only to buy cola. The guy in the room is out of touch, out of sight, and out of control and has no place in an open, collaborative environment.

ben-white-124388

10х programming

One of the oldest and probably the most tenacious concepts of being a software engineer star is being more productive than others not only by 10% - 15%, but 10x more productive. That's crazy right. Let's see where this idea came from and how it's supported.

Steve McConnell, CEO and software engineer at Construx Software, author of multiple books, talks about interesting things in his article regarding 10x programming. There was a research done in the 60's by Sackman, Erikson, and Grant, where they measured programming productivity between different engineers, approx. experience of the engineers was around 7 years. The difference in coding speed between the worst and the best results was 20 to 1, in debugging 25 to 1, in code length 5 to 1, in software performance 10 to 1. The interesting part is that they couldn't see the connection between engineer's experience and code quality. That looks impressive right?! On the other hand, Software Engineer from Adobe - Ashraful Alam, notes, that software at that time was way less complex than today, that is why it doesn't make sense to compare engineers from different epochs. On the other side though, those engineers from the past didn't have access to all the libraries, frameworks and resources that we have today, that's why they dedicated more effort to actual coding. There is one more thing against this theory - apparently, no one repeated that experiment from the 60's. hehe.

Let's keep going. October last year (2017), Belitsoft PHP Development interviewed "rock-stars" software engineers (yes, yes, those 10x engineers) - they tried to get an idea what exactly help them to be 10 times more productive than others. Turned out that almost none of them think that they have some special "rock-star" skills.

Of course, there is a difference between experienced engineers and juniors, great talents and just good programmers. The other question is that even rock-star engineers don't have a light speed productivity skills :)

So, let's summarize the whole thing. Turns out that only the last point is a lie, the first two are actually true. Well, there are extremely fast coders out there.. in movies :)

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
– Martin Golding

material