January 19, 2008

All we have is less good programmers

The more I learn about programming, the more I want to ask: "why haven't I been taught this before ?". I mean - I graduated from a university, majored in "computer mathematics" or so it said, but I really got nothing useful from professional point of view. A few theoretical courses, such as graph theory is all. As the matter of fact, everything I know about programming I've learned from books and hard work.

The sad truth is that each generation takes a fresh start. I recall how confident I was in having known everything. May be it happens all the time, but programming is special because there is still no notion of software quality. It is surprisingly difficult to convince a beginning programmer that his program is bad. Because you simply have no reliable judgement basis except for your own expert opinion, but then what would you know ?

But then, there is no knowledge transfer and the entire industry is doomed to go around in circles, reinventing the same things every ten years or so, under different names.

I do realize that the software industry didn't get any better in the past decades, it even might have gotten worse by all accounts. The only reason why we could have possibly gotten more good programmers is because there simply appeared more just any programmers, because anyone could perform as one. Therefore it is statistically possible that the upper percentile also got more numerous.

It would also seem a valid guess that it becomes more and more difficult to find good programmers. Because the good ones tend to stick with a company, or a project, or a team, and bad ones may be changing places more often. This makes the problem of creating a strong team more difficult, and your typical team would in general be of lesser quality. As I believe that a strong team is the best thing that could happen to a programming project, this observation leaves even less hope in the future.


2 comments:

ਜਸਦੀਪ said...

Hi Dmitri,

a great blog post, infact a great blog.
I had the same notion about my education.

I ask my self: Am i capable enough to be a programmer? I have some 1.5 years of experience in web development with J2EE(JSP/Servlets/Struts).
But i don't find it good enough. So i learnt python last year, to get myself on the track.

What i do now read some good programming books and solve the problems in them.
One such books is SICP .

Please guide me in this , i am regular reader of your blog. I want to be a good programmer. :)

What should one try to learn everyday to be a good programmer.

Regards,
Jasdeep

Dmitry Dvoinikov said...

Thank you Jasdeep.

First of all, if you really want to be a good programmer, you most likely will become one.

Rather than recommending any specific books I'd say just a few general words.

Keep learning. Stay curious. Engage the strong sides of your personality in your own development - this is the best thing you can do.

Great if you have mathematical background. Professionally disappointed in my education as I may, a few years of math in the university do one great thing - help you develop an analytical mind.

A more concrete advise - work to master any technology that you use. Read a few good books that would help you in this. Be quick, you don't have much time as the technologies change fast.

Otherwise, what you could say in five years ? I worked with JAVA but not really understood much of it ? This gets you nowhere.

Because in the long range, learning minuscule details only helps if you are able to paint them all into a bigger picture. The ultimate goal is not to learn JAVA or what have you, but to understand the principles behind it.

Try different things, particularly those that are of interest to you. The more diverse your knowledge is, the easier is to see the forest for the trees.

Good luck.

P.S. The book that you mention, I haven't read it, but it certainly appears worth reading. May be I will read it after I finish the current one. Anyhow, there is a lot of great books, and no chance of reading them all. You'll have to develop your own taste for the books. Just make sure you read a lot.