This is definitely an article any programmer/developer should read. I found this article a few days ago on OSNews.com. In it the author speaks to the wide variety of differences between a developer and programmer, two words that many people (myself included) use interchangeably. But, in fact, their are quite a few difference between the two as outlined by the article. As I read I started wondering which category I fell into, so I will go section by section and examine myself based on that section.
I had the great experience of working for a company last year while taking a Software Engineering class at my local University. It was an eye opening class as to what actually goes into making a software product correctly. As I then learned at the business that these process are often shortcut ted (at least in this case) and their is no formal method for doing the application. I always felt this was a weakness of the company, however, I was determined to follow what I was learning in class. Gathering requirements was quite difficult as I was one with very little experience, but I recognized that this was good experience to gain.
I always find it difficult to gain information about the business because I do still have that programmer mentality that doesn’t want to learn about things outside coding. I realize this is a bad mindset to have, but I think its natural to most CS grads as we know coding as that is what we do in College, for the most part.
I remember how amazed at how easy PHP was to pick up and the super cool things I could do. I am more experience and educated now, and far more analytical and spare no feeling for criticizing the tools I use or the solutions I think of. If someone asks me how to solve a problem I even analyze the answer I give them to better my mindset. When my friend Adam (http://www.threadbox.net) mentioned Rails to me a few months ago, I had been hearing about Rails for some time, and decided to give it a try. I was immediately impressed by the ease of which creating a basic Data Driven application was, and how much was done for me automatically. But being the now cautious mind I have become, I could see holes in this marketing facet. What is going on under the hood, whats the availability, how well does it integrate with existing tools like Apache. Anything can be written for one tool set, what determines real value is the extensibility of using it with other tool sets and components. This is one of the reason I like Microsoft’s approach to Ajax over Rails, but that’s another topic.
I will honestly say, I save the playing and the fun stuff for personal projects, I normally clear such things with those above me and around me so that we can remain on the same page. Documentation is important, and I have taken to forcing myself to document (.NET makes this very easy) even my personal projects as if I was doing it for a company. Perhaps the biggest example of Programmer vs. Developer in the modern programming environment is the constant talk about Ajax.
I will only say this about Ajax, as an in depth discussion is outside what I am talking about. The reliance on a particular non-standard technology is fine for any personal non-commercial applications, but this should be a well discussed topic for commercial apps.
Perhaps the most important point this article makes is that programmers like to play whereas developers like to work. I think this is true on the whole. Based on the many conversations I have had with my peers as well as my own tendencies, I like to play when I code. But this feeling is slowly diminishing as I continually enhance my programming skills through practice and reading. However, I think its bad for it to completely be gone, a developer/programming should enjoy coding. However, it is important that interest is developed outside the coding realm as, properly managed software products, are not so much about coding as they are about planning. This concept is the focus of a major problem I have with my University, as I feel they do not underline this principle strongly enough in the various CS classes I have taken. Due to this, test-driven development (and formal testing models in general) was/were quite foreign to me when I took up my first software development intern position.
I am still guilty of not following strict testing procedures when I program on my own. I do tend to test most major changes as I go along, but bugs always crop up in the end. Though, I admit that my planning process (if any) is ad-hoc at best for these personal applications. It is something I am learning, as a year ago I rarely ever planned out what I was going to do. This often resulted in me taking longer to complete a project that I felt it should, so I began to put more emphasis on understanding the program before I tackled it and not doing everything in my head. Rather hard for a programmer, as this is the way we generally do things all through college, were our homework assignments tend to be very simple and less involved then most commercial applications.
It also tends to be the case that students of programming want to “impress” their friends by doing something a certain way to show they can. While this works great for personal and academic programs, its hardly ideal in a business situation where proper development procedures demands following standards and guidelines. It is acceptable, for example, to often tackle a program any way you wish in the classroom as professors generally dont grade on efficiency but rather implementation (though my better CS teachers have made comments on how I can make my code better).
One of my complaints about my CS education is that the idea of Patterns were introduced far too late. In my mind this is something that should be introduced just past the introductory class level before most of the students become firmly ingrained in programming a certain way. Programmers are no different then any other person in that once they become accustomed to doing things a certain way, they will want to continue to do it that way because its familiar. This is also the reason a lot of students feel that what they learn in the classroom is sufficient in the real world.
In reality, a developer is something a programmer becomes by keeping an open mind and exercising temperance and objectivity with new technologies and methodologies. I made the mistake of writing the website for our Computing Honors Society chapter in .NET because it was cool. I later regretted this as I came to find that I didn’t know enough about the framework (or at least nearly as much as I know now) to properly implement the solution so others could easily understand what I did. As a result, the website was scrapped and is set to be rewritten by the next Chapter taking office in November. I considered this an embarrassment. This also one of the reason behind the lengthy development time for my website, I have had to make revisions as I learn more about .NET.
This is, a good experience, I feel because it makes me think twice about taking a new technology and implementing it without doing proper research. Now, when I speak about frameworks and technologies I always keep in mind what has been proven and what is not proven. I have concluded, that most modern frameworks are simply too complex and provide too much depth to really use them to learn and develop and effective and maintainable application at the same time. My current website is much closer to a well written application then its earlier versions. With .NET and Rails I feel the best measure of how well your using the framework is how little code you have to right, as most of what you want can be done for you.
But in the end, the applications maintainability and effectiveness is determined by developers who put forth the time and the effort to properly plan and design an application. A developer properly researches a new technology product and determines how to use it effectively before considering its use in a commercial product. That is the biggest difference between programmer and developer. In my case, I am still a programmer, though I am a lot closer to a developer then I was a year ago. But as a developer is something a programmer becomes, its also necessary to have experience as a programmer to become an effective developer. By learning from ones design mistakes and learning the proper way of using the tools at your disposal to effectively develop software is truly the best means to become a developer; not much different from real life.