News, code, articles, rants; a daily dose of programming rigmarole.

Friday, February 9, 2007

How To Be A Great Programmer

When first starting out as a programmer, it can be quite difficult to discern what steps to take to grow your skills and flourish. This difficutly is compounded when working around others who have radical, pernicious ideas of how to write software. How does one overcome this? How can you continue to grow as a developer, even while working around others who can perpetuate bad habits? How can one identify when the ideas of those around them are actually "bad"?

Well, as it turns out, there's a method to the madness. In this multipart series, I plan on covering many steps to unravel the mystery behind becoming great, especially since it's really always a work in progress, and never a desitination (did I just say that greatness can never be achieved?). But in this particular post, we'll start with some of the more basic steps I took to help my skills flourish.

How To Choose A Language

The language you finally settle on dictates what path you should follow, but your choice of languages should start with a solid, low level language. I started with C (via K&R/CC classes). Learning C first laid an excellent foundation for what has so far become a great journey in the world of writing software. There is lot's of great software originally written (and still maintained) in C. If you're gonna learn C, make sure to have the K&R book handy (it was co-authored by the creator of the C language, Dennis Ritche, who is one of the greatest contributors to computing in general). Even if you've been a programmer for a number of years, and even if you have no use for C, learn it anyway.

Note: Whatever you do in software, it all comes down to one thing: hard work. If you're unwilling to put in the hard work necessary to be good at writing software, then you will waste the time and money of many people (including yourself). The hard work never really ends, and you must be able to persevere.

This is the path I chose when I decided I wanted to write software:
  • Learned C: I attended a class at my local CC, read K&R, and wrote as much code as I could.
  • Learned C++: I mostly read C++ Primer Plus (great book on C++), and wrote more code.
  • Learned VB6: I again attended a class at my local CC, and wrote more code still.
  • Learned C#: I started learning C# around the time I was attending classes for VB6, shortly before the .NETFX 1.0 was released (pre-beta+).
  • Learned Java: Because of my familiarity with C based languages, I figured I would have an easy time with this, and I did. Syntactically, Java is very similar to C# (some would say C# was derived from Java), and so for me Java was like learning European English while already knowing American (U.S.) English (in other words, a rather easy transition).
  • Learning(ed) Python: This is a work in progress, though I have written a calculator with some minor scientific calculations.
Currently, I work mostly in C# and .NET 2.0 professionally, with most free time spent in Python. A great book, Pragmatic Programmer, says you should learn one language every year; I tend to think this is great advice.

My next step was to join and actively participate in the Open Source community. I feel this was one of the best steps I ever made. My skills grew tremendously, as I was reading code written by others (two of the best I found in C# were the Jabber library for C# - jabber-net, and the MySQL .NET Connector), and I was writing code to be viewed by others (now the world is really watching!). I also participated in as many C# and Java forums as I could register for and still get work done throughout the day.


In my next post, I plan on discussing more about learning programming languages, as well as beginning discussion on more advanced topics, like design patterns, methodologies, and so on.

1 comment:

Anonymous said...

In order to write a blog about being a great programmer, shouldn’t you first have to be a great programmer?