Who Can Program?
I found Steve Jones's recent editorial entitled 'Who Can Program?' and the discussions he incited extremely interesting and refreshing. I had just struggled through a re-read of Steve McConnell's book, "Code Complete", and after many years of programming I sometimes despair of ever reaching the professional programming levels McConnell describes. Steve Jones's editorial, the discussions following it, and the Jeff Attwood blog he refers to gave me new hope. I am not going to discuss the job market aspects, just the "good programmer" issues.
Bill Gates suggested many years ago that after first three or four years, it's pretty cast in concrete whether you're a good programmer or not. Especially, if after a few years you, like most developers, simply use old programs as templates to write new programs. This practice causes you to avoid going back to think how to make the program faster or how to make the process run more smoothly. You stop thinking about improvements and concentrate on production. You can never advance to the "guru" level and are probably not even the "good" programmer Gates, Steve Jones, and others describe.
I agree with these folks because in some way, there is nature and nurture in almost everything we do. Just as in music and athletics, some lucky people are born with talent -- that is "nature". Some of those people spend hour after hour of training -- and that is "nurture". If they do, they may become great. I think that clearly applies to developers and DBAs as well. But that doesn't leave the rest of us out in the cold. Just because we don't have all that natural talent doesn't mean we can't be "good" developers and DBAs.
Programming is abstract and pure logic. Unfortunately there are also people who were not born to be a programmer and no matter how hard they tried to learn, they just could not get the concept. Coding a program to solve a problem requires creativity and a logical mind. Even they become developers, they may be able to write some programs that run, but those programs are often hard to debug and understand. Most of these people jump into the profession just because of the good paycheck. I advise these people to find another profession.
Just look around you. You know that some of the people around you are very good
developers and DBAs even though you know they weren't born to be computer
programmers or developers. They are still logical, fast learners, and have a passion for technical knowledge. And if you have been around very long you know full well some people you originally thought were mediocre programmers and developers have become good developers that you are very happy to have on your teams. And then there are developers who just know how to do sweet talk and pretend they know everything, in fact they do nothing right, you just do not know how they can stay in the business.
What does "Good" mean anyhow?
According to McConnell's book "Code Complete", there are four levels of
programmer/developers. Level 1 includes the beginners who are just starting to learn programming. Level 2 includes the intermediate developers who are capable of using multiple languages or are very comfortable of using at least one language. Level 3 includes the specialists who specialize in a particular language or an environment, and are competent in both. They are valuable to their companies, but I don't think McConnell would call them "good". Level 4 is the Guru who writes code for people, not computers, and is McConnell's top level. He or she has graduated from Level 3. Many developers remain as level 3 and never able to go up to level 4. As McConnell says, it is "no sin" to
be something less than a guru; the sin is "in how long you remain a beginner or a specialist after you know what you have to do to improve." Although McConnell's book was written in 1993, I don't think things have changed much.
I agree with McConnell in general, but I have a few additional observations on the various levels based on my own experience. First, I suggest that the gurus I have seen never pretended to be experts. I don't know whether to call that modesty or diplomacy, but the real gurus don't advertise their expertise. They admit they made mistakes and learned from their mistakes. A lot of people make mistakes, correct them, and then life goes on. They do not care about why or how they make the mistake; they have no desire to do a better job so they can avoid the mistake. They just want to get the job done. They never put their mind in doing the job. They do not test the system thoroughly and do things carelessly. Those people will never advance to a higher level. Their jobs become their habit. They will never think about how to make the system run better and faster.
Second, I have often observed that when the gurus design a system, they try to make it easy for others to understand, they try to break down a very complicated system into simple pieces. When you read their programs, they already have comments and their code is easy enough to understand. They always check their work very carefully and test the system very thoroughly. For example, they use variables that mean something to people. Guru programmers do not write programs that use x, y, z as variables. The worst I ever saw was a program that used the names of characters in Star Wars as variable names! Guru designed programs are never like that.
And of course, the guru has kept up with technology. Technology changes so much it is frightening. Someone said somewhere that programmers must execute a brain dump and load every three or four years just to keep up. Keeping up with technical changes is a must.
Of course there are some developers who keep up just to ensure a good paycheck. They learn new technologies because the job requires them to do so. I have always found it hard to believe, but some programmers actually refuse to learn new technology. I don't understand it. They want to do what they have always done. I knew some mainframe COBOL programmers who refused to do anything but write COBOL programs. Other programmers don't refuse to learn new technology; they just procrastinate or come up with excuses for not trying. Some developers say they have no time to learn new technology. Others say that if the company wants them to learn new technology the company should send them to a training class. These are just excuses. Those programmers are lazy. There are a lot of books and websites that offer very good information and training. People who want to can learn pretty much anything they want to about any area in programming. Good developers must have the will to learn; they do not wait for the company to send them to training classes. Sometimes learning about some successful projects, reading some good developer's programs or even reading
manuals and periodicals will keep your technical knowledge up-to-date.
Good developers learn new technology is to fulfill their curiosity and job satisfaction. They always apply the new technology to their work and hope to make their work better. Some people just keep asking to take training classes so they can put them on their resume and brag about what they know. You never actually see them using the new technology.
Finally, no matter what position you are in, you still need to communicate with people. Even if you work in a technical environment; you need to communicate to other developers or users in a professional way. A good developer spends a lot of time talking to the users to understand what they need. A guru probably spends as much time talking to other developers as he does with users. A 'guru' has good interpersonal communication skills.
Are You a Good Developer?
There is no correlation between experience, performance and skills. Sometimes a developer with only two years experiences has done a better job than a ten years experiences developer. I have worked with a lot of developers and DBAs in my career. A significant number of these have been what I would call "good programmers", and quite a few of those would be classified as "gurus" even by McConnell's definition. Of course in every company there are some programmers who only talk about what they can do but never see they do anything productive. I have never worked at a company that did not have at least some "good programmers". And some companies seemed to be filled with "good programmers" and "gurus". There are never too many. So if you are not a "good programmer" or a 'guru", you should work to become one. And even if you were not born a "guru" you can come close to becoming one.
A good developer/DBA needs to have a passion for the job. Sometimes the job is tedious. Sometime you have to support a very old system with lines and lines of spaghetti code. The users and the management may demand that the project be completed on an unrealistic timeline. That can be very stressful. But if you are working on a challenging project with a bunch of good developers that stressful job will become a fun job. Your passion to become a good developer or guru will help everyone on the team. Becoming a "good programmer" or a "guru" is not easy. And it is easy to become discouraged. But you do not have to be one of Gates born to code employees to become a "good" programmer, developer or DBA.