It recently occurred to me that most of the software developers I know (at least those on Unixish operating systems) seem to fall into two groups:
- Those who mostly use the basic tools, APIs, and environment they're given.
- Those who, over time, begin to construct their own platforms by layering their own libraries, APIs, and--more fundamentally--their ideas and philosophies on top of the base platform.
It's interesting. At first I figured it had to do with how long someone had been building software on Unixish systems. But that seems to be a poor indicator. I know folks with lots of experience who seem to always go back to basics when building things. I also know of relatively new folks who are already building up their own tool boxes and platform pieces.
When presented with the need to write a new network aware application, hackers in group #1 will drop down to low-level socket calls (or the equivalent in whatever language they're using). Those in group #2 will realize that they've done it (or part of it) before and reuse that code, or re-factor it into a library that both applications can share, or even go looking for some 3rd party library that does the job better.
I'm not sure why I'm bringing this up now. I haven't really concluded anything from these observations. I think that, more than anything else, it brings up more questions in my mind.
- Are those in either group generally "better" software engineers (or maybe architects) than those in the other?
- Is this a conscious decision, a reflection of someone's training, or something else entirely?
- Does this distinction exist in the Windows world too?
In my limited observations, the folks in group #2 tend to be more productive--at least to the extent that they can work within the same general problem domain and stay on the same platform. Those in group #1 seem to be more flexible. They can hop from company to company or platform to platform without substantial drops in productivity.
It seems not to be limited to any particular language. I've seen both groups in the C/C++, Perl, and PHP worlds (those are dominant at work). I assume the same is true of Java, Python, Visual Basic, C#, and so on.
Thoughts? (Aside from the obvious...)
Posted by jzawodn at January 15, 2004 11:34 PM