[This has been one of my more popular posts on programming on Quora. It has also been translated to Portuguese.]

Here’s my 2-penny’s worth.

Unwillingness to learn on their own. A programmer needs to keep learning and re-learning newer technologies as they come up, and this is a given.

Let me cite an incident to illustrate this. I know of a young lad whose father, a friend of mine, was worried since he was unwilling to apply for jobs though he had graduated several months back. When I asked the young chap the reason for this, he said that he wanted to join a startup and was waiting for the right opportunity. I told him that most startups nowadays work with platforms and languages like Python, RoR, JavaScript, and so on and so forth, so had he done any reading in that direction? His reply left me feeling sorry for his father who had already spent a considerable sum of money sending him to Europe for his IT degree: “We did not have any of these languages in our curriculum.”

Of course, I did not say as much to his father, but then I know that he may turn out to be, at best, an average, 9-5 programmer who would have been better off in a more traditional industry like, say, accounting & finance. (Mind you, I don’t mean to run down this profession, which *does* require a high degree of knowledge, skills, and an eye for detail; all I’m saying is that accounting & finance tends not to change as rapidly as the technology industry does.)

Learning is a chore. Learning is fun for a programmer! If someone lacks that vital element called excitement while starting to learn something new, this is a clear indicator that they’re in the wrong profession. Each time you run into a problem like, say, a compiler- or a runtime-error, you should be motivated enough to turn to Google for help. Finding solutions for problems that you keep running in to during your daily coding job should seem like an adventure. If it’s otherwise, we have a problem there. As a corollary, you should have an ability and also be willing to run through long discussion threads and several dozens of lines of code to figure out where you may have gone wrong.

An inability to draw out patterns. I once read a well-known computer scientist say that as programmers we are paid to think. Think about this: writing code is just by-the-way, a tool to get the job done. Thinking invariably involves dwelling on a problem, sleeping over it, and then coming up with a solution that fits best. This kind of analytical thinking requires a very good ability to get to the meat of things and understanding the most core issues, and this is what I call being “pattern-oriented.”

Programmers need to be able to extract patterns from the problem domains for which they potentially want to create software solutions. These problems are typically defined as situational things, but then, a programmer needs to have an uncanny ability to drill down to the problem’s most fundamental defining characteristic, and then go on to identify and develop the most appropriate solution for that.

Coding to get the job done. A programmer should consider himself no less than an artist, like a painter, for instance. Programming is an art, and the science part merely supports it. and every programmer should take as much pride in their work as, say, a painter would take in their painting. The only thing programmers have to show for their work is code, and great programmers treat their code as works of art, no less!

Rarely will you find a good programmer who doesn’t have a consistent style, in terms of how their code is formatted. Secondly, during long compilation cycles, a good programmer’s code will not throw any warnings like unused variables, and so on. And if there are inevitable situations when such warnings could be thrown, they will use proper constructs and compiler directives to thoughtfully subdue them. Rarely will you find a good programmer being careless about their code.

Too conventional. There is no human problem that cannot be solved with code 😉 But then, on a more serious note, programmers need to have a knack for innovatively thinking through problems to arrive at their solutions, and many a times, this requires what is popularly known as thinking out-of-the-box.

Programmers as a tribe just cannot afford to be conventional in their thinking and understanding of problems. Think about it this way: if the solution were a piece of cake, somebody would already have eaten it by now, and the programmer wouldn’t have been needed, anyway.

Too conservative. This is a bit difficult to explain since it may seem irrelevant to the question at hand. However, most great programmers whom I know (and I know many of them!) are independent thinkers and mavericks who rarely conform to society’s norms. (I am not talking about breaking the law here!) I invariably find them to be sharp thinkers, whose understanding of things always stands out from other folks’ worldview.

Another aspect of this conservative thingy is that, professionally too, they are mavericks and rarely fit in with “Dad’s” view of work ethics. They are more prone to be bitten by the entrepreneurial bug, and their ideas about their work and their profession depart radically from those of others in more conservative professions.

Not having a wide range of interests. Great programmers feel a constant need to keep their minds stimulated with different kinds of activities. Their interests range from anything to everything, as long as it catches their fancy.

Not interested in reading. This is a BIG problem. There is not a single good to great programmer I know, who is *not* interested in reading. Good programmers invariably tend to have large libraries at home, and are voracious readers, at times devouring books and articles several hours a day.

Original post:

 

Please spread the word among your friends & associates