When I got started in the industry†, like many people I was a generalist; designing and programming GUIs, network services, systems and database administration, even a bit of Photoshop, account management (the other sort of clients!) and end-user support. I did Perl, Java and MS VC++, Solaris, NT and IRIX,
sendmail and Netscape Enterprise Server. For my own projects, PowerPlant on the Mac. I soon realized that to stay hands-on technical, and maintain control of my own destiny, I would have to specialize. So I did some analysis and came up with some criteria for what that would be in:
- It had to have high barriers to entry, so the job market wouldn’t be swamped by new entrants jumping onto the bandwagon. I saw this happen around me; for example, in ’97 knowing HTML could get you a good job. The dot-com bust in ’01 showed just how good those jobs really were. By that time I was well along my chosen track.
- It had to be deeply entrenched, something that organizations considered absolutely critical to their operations. Again, “edge” technologies like HTML, Visual Basic, Cold Fusion (it’s a long, long list) have a short shelf life, an investment in mastering those technologies would not pay off in the long term. I wanted something where deep experience would be an asset – a “core” technology.
- It had to be actually in high demand right now (i.e. when I was doing this analysis), and historically, there had to be evidence that people with the skill were in short supply and paid a premium accordingly. That ties in with points 1 and 2. Easy to figure this out from job ads.
- It had to be possible to get into it from where I was presently. That eliminated a few otherwise intriguing things right off the bat; my then-employer didn’t use them, and I didn’t have any personal contacts that did. But I was equally comfortable with programming as with operational work.
The results boiled down to two technologies: C++ and Oracle and it just so happened that I went for Oracle and here I am today. And I am pretty sure, if I repeated the analysis now, I’d reach the same conclusions, with C++0x just around the corner. To thrive in industry an engineer must be able to call on a wide ranges of skills (how many other DBAs are into functional programming? In my experience many aren’t even into basic scripting) and adapt to any situation, technological or commercial – but you have to have a solid foundation to build on
Right now all the talk where I work, where our main application is written in Java, is about Scala. Now, I was getting paid to write Java back in ’96, I have always been ahead of the curve on languages, but at this point in history Java (the language, rather than the VM) isn’t just the new COBOL, it is COBOL. Scala is an OCaml derivative, like F#, and it’s looking increasingly like they could create a foothold in industry for frustrated functional programmers…