I am learning what it really takes to succeed as a programmer. To set context, let me tell you about two programmers that I have had the opportunity to work with in the last ten years.
The first programmer, X (not his real name) and I worked together at the start of my career and the opportunity to learn from X was massive. He was scary smart. The problem was that X was extremely acerbic in his delivery and more often than not alienated myself and others. I began to realize he was more scary than smart. It got to the point where it was just too much of a hit or miss to go over and engage in dialogue and so it was easier to sit and flounder for an indeterminate amount of time. Conversations with X just did not provide value.
The second programmer, Y (also not his real name) was the complete opposite. Y was not only razor sharp, but incredibly articulate and always positive. Working with Y dramatically affected my abilities as a programmer, but also profoundly defined the kind of programmer that I wanted to become.
Eventually X was siphoned off into isolation to work on “special projects” so he would not have to interact with the team. He was so good that the company did not want to let him go, but he was such a liability they needed to insulate him from the rest of the team. The end result yielded a fraction of the value that X could have provided the organization.
Y on the other hand was eventually given a golden ticket to simply go and fix whatever in the company he wanted. He was so good at fixing problems and engaging his peers that he was given ultimate lateral freedom to move as he pleased. This was the full realization of the value that Y provided his organization.
We have two equally talented and impressive programmers and the outcomes were totally opposite. Why is this? And this brings me to my point.
Success is more about mindset than skill set.
Providing value is rarely about skill set and more about perspective. The internet has given us a false sense of protection and I cringe at some of the things people say in public forums. It is in part amusing because their behavior is so unprofessional that they could never act like that in real life and stay employed for long. It is also sad because they lacked the mindset to provide value. Instead of saying, “You suck! You should have used X instead of Y! Die!”, they could have said, “I disagree with your approach. X is more effective than Y and these are the reasons…”. We are not infallible and most of us actually respect this kind of feedback.
I want us all to succeed as programmers, but to do so we are going to have to try really hard. It is true that we are going to have to write a lot of code, read a lot of books, scour StackOverflow for answers, etc., but more importantly, we have to try really hard to keep a positive mindset that provides value for those around us. We have to catch ourselves before we are about to dive into a rant about why something sucks, and instead try very hard to reframe everything around why that same thing could be better.
It is really easy to let the world know when we do not like the way something works, but it requires quite a bit of effort and character to simply go and fix it. Are you using a library that has a glaring feature that drives you crazy? Is it open source? Do they accept pull requests? We are no longer faced with an annoyance, but an opportunity to make ourselves valuable.
Here is a specific example of how we can apply this idea. A recurring theme that I hear is how much the AngularJS documentation “sucks”, and I can only imagine how much more the core team has had to listen to this. The AngularJS documentation is open sourced just like the rest of the code! Do you know how easy it is to fix a spelling or grammar error right from GitHub? Helping out in this area is not even a task that requires an extensive background in programming. A 12 year old with a solid grasp of the English language could make themselves invaluable to the AngularJS team by taking ownership of parts of the documentation.
The evolution of being right is to provide value.
The different between seeing a problem or an opportunity is not necessarily skill set, but our mindset. We can be absolutely right and still be totally wrong because we have missed the opportunity to make a positive impact. We succeed at programming by providing value, and not just by being right.