Andy is a software developer of over 15 years experience and currently specializes in Java with Seam, Hibernate, Wicket and Spring as well as JSF, JPA and CDI. His own blog at www.andygibson.net is host to his Open Source projects DataValve , Knappsack and JTexGen and provides a home for his articles and tutorials on Java and Java EE of which he is a big supporter. He also has personal interests in 2D and 3D graphics as well as retro computing and gaming. You can follow him on twitter here. Andy is a DZone MVB and is not an employee of DZone and has posted 9 posts at DZone. View Full User Profile

The key to being a good programmer

07.30.2010
| 21880 views |
  • submit to reddit

One blog topic that never seems to get old is what makes a good programmer, or how to be a good programmer, or what you can do to be a better programmer. The same activities are often listed as being the path to successful codesmithing, when really it is just the method by which the true magic happens. With programming, like many things, it isn’t what you do, it’s what you learn from it and the only key ingredient to being a good programmer (besides practice) is exposure to programming. Exposure comes in many forms, whether it is through hands-on practice or looking at someone elses code. Here’s a few of typical examples given and how it exposes us to programming.

Work on projects outside of the office

Working on your own projects outside of work lets you practice programming and exposes yourself to your own code. It also lets you practice problem solving and gives you the opportunity to experiment with alternative solutions. Also, a number of times I’ve gone back and re-read something I wrote and found better ways of doing it. However, it needs to be mixed with exposure to outside code so you don’t just keep yourself in your own rut and writing the same code with the same mistakes.

Works on Open Source projects

Not only does this give you more practice but also the ability to work on other people’s source and see how they code their way around certain problems. It also gives you exposure to the build and testing processes which are tools than that help improve your skills. Usually, in the case of libraries, you don’t even need to work on the project, you can be exposed to some of their ideas just by using the API.

Knows multiple languages

Working with multiple languages does give you exposure to different ideas and ways of doing things, but in itself, doesn’t make a better programmer and can even be detrimental. A native English speaker may improve their vocabulary and be exposed to different phrases by knowing French or German, but it doesn’t make them a much better English speaker or writer. Flip that around and a native French speaker is going to give a better speech than an English speaker who picked up a bit of French. Similarly, a hardcore Java/c#/C++/Delphi guy is going to be better than someone who dabbles in it.

Other Factors

It could be argued that it is obvious that getting more experience leads to being a better programmer, but not so. Solitary practice and accumulation of personal experience may get you so far, even gets some people very far, but for most, external exposure is required to drive new experiences and learning whether it be writing code, drawing pictures or playing the guitar.

Joel Spolsky wrote that good programmers are smart and get things done which also happens to be what makes good lawyers, doctors, accountants and applies to just about every other profession. Obviously being smart is a good thing, but that will only take you to the point where you have to sit down and write some code.

Passion is often stated as a requirement for being a good programmer, but it is just a means to an end. In itself, it doesn’t make a good programmer but can be the fuel that drives the activities that do improve your game. I’ve known a number of capable (not great) programmers who have little passion for it, they enjoy it, but it is purely a 9-5 job for them. The lack of passion shows in that they are content to just use existing skills without spending any time learning new ones or exploring the technical ecosystem available to them.

Summary

Try and expose yourself to as much code as possible, even bad code can be good for you as long as you aren’t copying it. Identify design patterns and more importantly, think about why those patterns were used over other patterns and what possible consequences are there of using that pattern. Learning the thinking behind other architectures will help when the time comes to make your own decisions. After all, when we get stuck as developers the first thing we do is Google it to see what someone else has done. This is just pre-emptive research!

References
Published at DZone with permission of Andy Gibson, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Andrew Arrigoni replied on Fri, 2010/07/30 - 9:09am

I would assert that you're just talking at different abstraction levels when comparing the Smart and Gets Things Done to what you're talking about. If you're Smart, you'll realize (or expose yourself to things that will make you realize) that having a wider breadth of experiences will help you become a better programmer. Then if you Get Things Done, you'll actually follow through on your realizations. To put it as geekily as possible, S&GTD are the specs. Working on lots of projects, picking up new languages and challenging your skills are the implementation.

Suck NR replied on Fri, 2010/07/30 - 9:59am

A good programmer questions both what they think they know and what they don't know and then tries to answer these questions by learning. Rinse, was, repeat.

 Good programmers know their limitations and seeks to expand them.

 Good programmers know that perfect is an unobtainable ideal and thus never profess their work as perfect - there's always room for improvement (at some cost)

Theodor Grip replied on Fri, 2010/07/30 - 12:24pm

Good post and interesting points you mention, but I don't agree on the point of different languages. I, for example, have become a better Java programmer by learning groovy. And the natural languages misses the point that when you speak German you don't mix it with Russian, but in a usual project you mix Java, HTML, CSS, JS and SQL

Viorel Craescu replied on Sat, 2010/07/31 - 1:25am

I agree with everything said except one thing. To be polyglot programmer it really DOES make you a better programmer. I became a better PHP programmer by learning Java and getting certified, and a much better programmer just diving into Ruby or Python. Not an expert in the last two but definitevly made me see other ways of solving problems and coding, ways i never thought of. Look to PHP where it was few years back, and how many technologies have been ported from Java or .NET. Yes, people who ported them are those people who strive to learn more languages and technologies.

Also the programming language itself it's just a tool you use to build things. Knowing to use more tools helps you to build things faster and better. I don't believe a programmer can be compared to a doctor or to lawyer. Because programmer job evolve 100 times faster than any other job.

Your example about natural languages it's not appropiate to programming or software development. A lot of people give same example, likening a natural languages to a programming languages, but personal i don't see any similarity, except the "language" word .:)

Trial and error, workin on personal projects mixed with consistent reading and learning is what really makes you a better programmer.

Suresh Murthy replied on Mon, 2010/08/02 - 10:46am in response to: Viorel Craescu

Hi Andy, Great post. I just couldn't agree more with you. I just had one more point which I feel differentiates a good programmer from an programmer. A good programmer learns from not only his mistakes but also from that of others. If you look at the kind of exposure that one gets to knowledge on the net, I would be surprised if one doesn't put in efforts to improvise his programming skills by just carefully observing the code in some of the existing frameworks or successful open source projects. In specific in you are a Java Programmer, it would be a great idea to just have a look at the JDK library classes source code. They are the outcome of years of experience from some of the best programmers in the world. They give you a lot of insight into best design and coding practices.

Kookee Gacho replied on Tue, 2012/05/29 - 6:26am

The compiler generates a pseudo code, not targeted to any machine, called byte code. This can be interpreted by an interpreter program or hardware accelerator on any computer.-Arthur van der Vant

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.