Programmer vs. Developer vs. Architect
Friday, November 21st, 2008I think it's important to express ourselves clearly when speaking about various IT professions because they represent dramatically different skillsets and mental models. This post have born out of my frustration to hear clueless people misnaming various professionals and it can be an eye opener for some. The descriptions below are not standardized by any means. I personally use these namings in the way I do and don't wanna enforce anyone to use them this way.
- Programmer: I consider programming a pretty primitive transformational process. The related problems are rather easy to solve, like creating a simple Unix utility, think about cat or wc. Programmers are not necessarily clueless, but they often type before they think and many times dont' have any ideas about how resource intensive their code is. Most newbies are happy when succeeding at solving a simple problem and don't think about optimizing their code or cleaning it up. They think in terms of code. (I admire beautiful code, but it's all they can see.)
- Software Developer: I see developers as knowledgable people who have clear mental models in their head about the systems they're working on. They usually know design patterns, can create well-designed class hierarchies, understand the algorithmical complexity behind their code and the framework they use and can develop solid applications. They think in terms of the structure, solidity and elegance of the solution.
- {Software or System} Architect: I think of architecting as assembling complex components into a whole that works in an extremely realible and scalable manner. The various components are usually scattered across hosts which may form clusters in a network. It's not really about implementing low-level algorithms, but rather knowing service interfaces and the high-level mechanics of the services themselves. By services I mean SOA components, and various server applications, like webservers, application servers, message queing systems and so on. Architects are very critical thinkers who mostly think in terms of services, architecture, interfaces and bottlenecks.





