I have been reading some good books this weekend that have made me think about an earlier post of mine, "Whats in a name? Programmer or Developer" and my views on the subject.
One of the books that I read was "The Passionate Programmer" by Chad Fowler and "The Pragmatic Programmer" by by Andrew Hunt and David Thomas. Both are excellent sources of ideas and techniques to become a better programmer. And there it is, the word "Programmer".
Interestingly enough, after reading these two books about 'programmers' I feel as though that there is a greater distinction between Programmer and Developer than I had believed. Both of these books discuss knowing more about the trade than just the writing of code. They talk about learning and knowing the business end of programming. They talk of learning more of what the user wants and feels. They both talk about a lot more than writing clean code.
I guess that the terms are also different based on the point of view. A Programmer with a large fiem most likely never deals with users or clients but is more of the assembly line to the finished product whereas a freelance Programmer will spend a lot of time dealing with the client and management of the project in addition to the actual writing of the code. Again, this is by no means any slight on Programmers. At present that is exactly what I am. I am not even the lead Programmer on the project that I am on. So, the question then becomes; do I want to be a better Programmer or do I want to become a Developer?
For me, the answer is simple; I want it all. I want to be a developer to take a clients idea and make it come to life. I do not want to site in an office and be told to program. I want the interaction with the client and I want to know what the end users feel and think about the project. In the end, isn't that what it all comes down to? Satisfying the client and their customers? The best coder in the world does not mean a thing, if that coder does not give the client what they want. Now, there is a gray area there in the fact that a lot if not most clients do NOT know what it is that they really want. A guess a difference between a good developer and a great developer is that the great developer discusses what the client wants and offers options as opposed to just writing the code to satisfy the requirements.
So what to do to become a better developer? Here are my thoughts intermingled with those from the aforementioned books.
- Listen - don't let our egos get in the way. Just because we 'think' we know better does not mean that we do. Listen to the client and hear what they want. Maybe they just cannot put it into words. Don't assume that what you think they want is really what they want. This becomes a gray area in the middle of the project. A different interpretation of a desired functionality can lead to disagreement or creating more work that is out of scope. The best way to prevent this is to listen to the client in the beginning and make sure that you have documented exactly what it is that they are expecting you to give them.
- Learn - Both of the books said the same thing; learn more. Read books, write code, learn new languages. I am going to make it a personal goal for myself to read a new book every two weeks. Whether that book is about coding, or self improvement or other programmer development books, I plan to read one every other week. I am also going to learn a new language this year. In addition to that, I am going to continue to learn more of the languages that I do use.
- Mentors - Both books recommend to find a mentor. I already have a couple of guys that I am learning from and hopefully continue to learn from. Additionally, I hope to get to a point where I can become a mentor for somebody. I plan on giving presentations for our local Ruby user group. I have only given one presentation so far, but I have found that I learn more in the preparation. Try to hang out with the geniuses; they will make you become smarter.
- User Groups - I joined a Ruby user group last year and I attempt to make it to the monthly meetings. There are always new things being presented or basic concepts that I need to learn better. User groups are also a great way to meet fellow programers and create friendships that may help you out.
- Give a Shit - As stated in the Pragmatic Programmer, Tips 1 and 2 are "care about your craft" and "think! about your work" and mean a lot. Strive to write better cleaner code and to be proud of the code that you write. Be proud enough to put your name on it. We are the same as artists, and Picasso was not ashamed or embarrassed by his paintings that he did not leave his signature. In my opinion, it is not a bad thing if you above and beyond what the client wants. I would rather work a few hours for free and have a happy client.
As usual, these are just my thoughts and you can take them for what they are worth. But, hopefully you can come away with something that makes YOU a better Developer!