Do you know how good I am in Java? Do you have any clue how many classes and methods I can use in my code without even looking at the API documentation? Do you know how many complex problems I solve at work? What do you mean I need to improve my skills? Give me a break…why would you even bother me asking such an insane thing!
Does this sound familiar? Have you heard someone say such things when either you or someone else raises the point that reading and practicing constantly is an absolute must? I suppose so. Or even worse…have you ever said this yourself to anyone?! It’s sooo easy to fall into some comfort zone and not even bother about evaluating your competencies as a developer. When was the last time you worked to improve your skills? Oh! By the way, if that was within your comfort zone, the answer by default is NO! Forget about the process that HR normally set-up for everyone. There is a fancy form which has some standard headings and you type whatever you did that year and all that blah blah and then you rate yourself on scale of 5 or 10 or whatever. That, as far as I am concerned, will never give you a good feedback about what you really are. So, how do we evaluate ourselves? How would we rate our skills? How would we rate ourselves? I don’t know how and don’t think it’s so straight forward either.
Programmers are generally referred to as Knowledge Workers. A Knowledge worker, by definition in Wiki, goes as follows:
A knowledge worker in today’s workforce is an individual that is valued for their ability to interpret information within a specific subject area. They will often advance the overall understanding of that subject through focused analysis, design and/or development. They use research skills to define problems and to identify alternatives. Fueled by their expertise and insight, they work to solve those problems, in an effort to influence company decisions, priorities and strategies.
That’s a mouth full. If we really understand the above definition, we will come to realize how critical it is for us to practice our art. In most of the cases, constant study and practice is what we seriously lack. You might be great at your present job but is that where you draw the line and say you know all you need to know? Sure, you know what your employer needs you to know but do you really know what you need to know for becoming better and better? Think about that! It’s really an eye-opener.
Many of us either under-estimate or even ignore the importance of the need for constant reading, studying and practicing. What you do at office will surely get you your bills paid but if that’s all is what you are looking at, by being in this field then it’s very questionable how far you will get by being so. Practice is absolutely critical. There is no replacement for it. Having this constant learning mind-set is what majorly sets the great programmers apart from the rest of the crowd. If you don’t know something, admit it and seek to learn. Don’t worry about whether you will look dumb or otherwise. Learn and practice.
There are three kinds of people in this world. One who make things happen, second, the ones who watch things happen, and the third, the ones who wonder what the hell happened. This applies perfectly in software. How many of us really make things happen? How hard do you push yourself to be the one who makes things happen and more importantly, how hard do you push yourself to evaluate and know how much you need to get better at, in order to be able to make things happen?
Tiger Woods is well known for what he is…one of the greatest Golfers ever, according to many. Ever wondered what makes him so great? It’s nothing but non-stop practice, practice and more practice! How hard you push yourself makes a major difference in your overall productivity and how much better you become slowly.
I just loved this post by Steve Yegge where he takes an example and explains this averageness syndrome so beautifully…let me quote that paragraph for you here because I cannot explain this syndrome better than Steve! :-D
Let’s posit some hypothetical average programmer out there named Bob. He thinks he’s about as good at programming as you can get. He knows there are folks who know some languages he isn’t familiar with, or who type a lot faster than he does, or who seem to be real whizzes with networking or filesystems or whatever. I can tell you this: Bob’s not thinking: “Those folks are better programmers than I am.”
What Bob’s thinking, if he stops to consider those people at all, is this: “They have their specialties, and I have mine. We’re all about equally competent.”
Bob knows he’s better than he was when he started, and that he’s better than a lot of newer programmers, on account of having more experience at it. He knows he might spot a potential error condition faster than a more junior programmer, and that he comes up with better designs. But that’s all just part of being a bit more seasoned. He’s known how to program computers for a long time, and anything he doesn’t know, well, he’ll just figure it out if he needs it.
Bob knows this guy Joe who’s just amazing. Joe’s like the best programmer Bob’s ever known. I mean, Bob and his peers, they’ve all got their strengths and weaknesses, but Joe is really stellar, a programming genius. He’s a natural at it. One of them whiz kids.
In Bob’s view of the world, there are essentially three programmer skill levels: folks learning how to program, folks like Bob who know how to program, and the inevitable whizzes, but they’re few and far between. There are always a few whizzes out there, the ones who used to be child geniuses or whatever. But most programmers are like Bob, and Bob knows how to get his work done.
Bob has no incentive whatsoever to try to improve his skills:
1. He knows he’s not as good as Joe. But Joe’s great on account of his genes, not because he practiced or
studied more than Bob did, back in school. Obviously Bob can’t compete with people who were kid
geniuses, and he shouldn’t exert himself unduly on their account.
2. Bob knows everything he needs to know about actual programming. He knows how to write code, and
how to debug it if there are problems. He can eventually get stuff to work. As far as Bob is concerned,
he’s a programmer, and that’s all there is to it.
3. Bob realizes there are technologies, data structures, algorithms and techniques that he knows little to
nothing about. But that’s OK. He doesn’t know them because he doesn’t need them for his job.
Whenever he does need to learn something new, he gets out a book and figures it out.
Bob’s content. He goes to work and programs at a reasonable pace. At night he goes home and watches TV or sings Karaoke or plays video games or does just about anything other than programming.
Bob, Joe, and Sue are all fictional characters, and are not intended to resemble any particular real person or persons, anywhere.
Yeah right. Now let’s be honest…how many of us do this? How many of us have this “Bob” within us. It’s never too late to start practicing and making ourselves better! It’s very critical that we constantly question ourselves if we are inside this Bob-paradox and stay way out of it!