It looks like it may be time to learn some new tricks.
I have been programming since the late 70s, so I have had lots of experiences with all sorts of projects in many different environments. Of course, my primary focus has always been game development, since the very first day. However, it took a certain amount of meandering before I was able to make a consistent living working on the development of games that I enjoy.
When I first began programming, like many neophytes, I thought that the measure of a good programmer was the number of computer languages that he knew. With that misunderstanding, plus the time afforded me by being young without a family to support, I began to learn as many languages as possible. I originally learned BASIC and 6502 assembly language, both of which served me in good stead for many years.
After becoming expert in the languages that were actually useful to me, including a number of different BASIC “dialects”, I moved on to learning languages that were considerably less useful to me. Using books, and without access to actually use the languages, I “learned” Fortran, Pascal, LOGO, Forth, LISP, Prolog, and Z-80 assembly. I also, unfortunately, learned COBOL, which was tedious, and attempted to find a book on JCL (Job Control Language) after my stepfather mentioned that he had never known anybody that mastered it (nevermind that I had never used a mainframe in my life). In the meantime, I checked out a book on RPG, and that really put an end to this phase. Claiming that users “programmed” RPG is about equivalent to saying that I programmed my TiVo to record the Formula One Grand Prix of China.
The next stage of my programming life was focused on practical knowledge. I used my existing knowledge of Pascal, Fortran, and COBOL in school, but programmed mostly in 6502 assembly (with a one-line assembler) and BASIC. The latter got me my first two professional gigs, one of which actually gave me a shot at porting Fortran to BASIC. In my next job, I had to learn dBase II/III[*] and did much of my development there using that environment and Clipper. Before that job ended, though, I had begun serious study of the C language and 8088 assembly, correctly predicting that this would be most useful in years to come.
From that point, the real specialization began. I entered the retail game industry working at Quest Software, and that was the last time I worked on a significant project using BASIC, or for Apple II or Commodore 64, for that matter. We transitioned entirely to C and assembly development for IBM PC (DOS) before Quest went out of business. An interim multimedia job began the shift to Windows (Win16), and during my time at Spectrum HoloByte I switched from C to C++ and worked extensively with DOS extenders, which really helps one hone his skills in 80×86.
By the time I took my business full time, it was clear that the days of DOS and Win16 were numbered, so we concentrated on C++ development for Win32 under Microsoft Visual Studio. Gone were the days of Borland C, Watcom, Zortech/Symantec, DOS4GW, and VESA. Instead, we had the Windows API and DirectX, which provided everything we needed for creating excellent games for more than 10 years. This brings us to the present.
Now, it appears that the times they are a-changin’ (again). Microsoft is pushing its .NET platform heavily, despite its significant drawbacks for software intended for the mass market, and Windows Vista (formerly Longhorn) may be released this decade. DirectX support has taken a major nosedive, while Microsoft is simultaneously trying to cripple OpenGL in Vista and is already removing support for Visual Studio 6.x (which is still much better than VS .NET 2003) and any version of Windows older than XP. Meanwhile, much of the game industry has moved on to consoles, which have a huge barrier to entry. All of this warrants expounding in future rants, but suffice it to say that our preferred platform and development environment is eroding.
At the same time, more games are being played online and on portable devices. The Apple Macintosh is becoming a viable platform for game development, with the relative stability of the environment being a significant advantage. Machines with 64-bit processors are now reasonably priced. In addition to C++, which has almost universal support, there is also Java, Lingo (Director), and Flash for online games, and PHP for web server applications. Who knows? The .NET environment may even be an option, and Vista may actually live up to the “game system” hype. In any event, unlike in 1995, there is no game platform that is clearly the way of the future for independent developers.
It appears that after a decade of specialization, we have come full circle. Knowing several languages and platforms may not make one a better programmer, but it may make one much more flexible during this period of change. And that, my friends, is also practical.
[*] Trivia question: Despite common usage, dBase was only the name of the application. The programming language in dBase had its own name. What is the name of the language in dBase (and later, Clipper and FoxPro)? [Answer next week if I can find the reference.]