Programmers can either lead the way or get off the merry-go-round. Off Topic/Programming hed: Programming: A bird’s-eye view dek: programmers can either lead the way or get off the merry-go-round. dek: the Internet is big enough to accommodate most programming skills. By Nelson King
Last year the thing to do was program in Java. This year it’s really cool to program with XML. So what’s on for next year? Programming goes through a lot of changes, as many or more than any other technical profession. Unfortunately, people suddenly find themselves with outmoded skills. Jobs using older programming skills tend to go away, and leading-edge skills generally command the best rewards. Yet many people with seemingly old-fashioned skills are happily employed and may stay that way for years. The point is that in this fluid environment, it is possible for somebody to jump into the programming profession in a lot of different ways, and not all will be–or need to be–leading-edge.
I’m making this point because in this sixth and final installment on the joys and rigors of becoming a professional programmer, I’m going to concentrate on the future. No programmer can afford to ignore what’s coming. You need to know where the leading edges are located and what they might mean to you. On the other hand, there’s no obligation to jump onto the various bandwagons.
It’s the Internet, stupid
Of course, the Internet will undoubtedly drive programming in this decade; however, you may have noticed that some of the bloom is off the rose. While the dot-com debacle did not kill the Internet, it did diminish enthusiasm for it. A sense of reality has forced its way through the hype that surrounded the Net: The impetus to immediately deploy the latest and greatest Web technology is being replaced by a more traditional test-and-evaluate cycle. Using the Web for any and all business software is no longer a knee-jerk reaction; some companies are reconsidering client/server or even older application models.
For someone considering programming as a profession, I don’t think these realities change the picture much; the Web is still at the center of the leading edge. Programmers entering the profession should scan the options on the Web first, but be aware that there are other opportunities. Here’s a rundown of the leading technologies.
Perhaps no programming technology has ever had a higher profile than Java. Born out of the need for a programming language for commercial software development that would be easier to handle than C or C++, yet more versatile and elegant than the pervasive (Visual) Basic, Java came along at what seemed to be just the right time (the mid-’90s) and place (the Internet). New mainstream programming languages are rare, but Java achieved this distinction in just two or three years.
I’ve seen no figures, but I would guess that Java far outstrips any other language in attracting new professional programmers. Note the word professional, because HTML and Visual Basic have probably garnered the largest share of new amateur programmers. But for serious commercial development of software used in and around the Internet, Java has had no equal. It seemed like the perfect case of a leading-edge technology that quickly transformed into a golden opportunity for programmers.
Java continues to be a good opportunity for programmers, and scanning the curricula of leading computer-science schools confirms this. Java is typically the first language learned. But the results didn’t even come close to the hype. The hype said that Java was “write once, run everywhere.” These days, the phrase is “write once, debug everywhere.” Version problems and platform variations have damaged Java’s claim of universality. The hype said that Java would replace Microsoft Windows as the platform of choice. It didn’t. The hype said Java would be the language of all Web programming. Unfortunately, downloading of Java applets (much less full programs) turned out to be cumbersome. HTML still rules. Plus, Java had what should have been expected of a new technology-bugs, shortcomings, and controversy. Some of Java’s problems were (and are) the result of being tied to a particular company (Sun Microsystems), with its never-ending struggle to wring some kind of profit from its brainchild and to use Java as a club against its archrival Microsoft. Bad feelings even among Java’s closes allies and the constant fracas with Microsoft (including lawsuits) have managed to tarnish the goodwill Java once had.
The upshot of all the ups and downs in Java’s relatively short career is that it has settled into a very important niche as the language of choice for server-based programs and many kinds of Web applications. But it’s still a niche, and programmers who once thought Java was an unlimited ticket to success have had to do some retrenching and rethinking–just like other programmers.
The many sides of Web programming
The Internet is a vast programming space; it seems clear that no one language, operating system, or programming tool will ever solve all problems. In fact, the Internet is so vast–spanning just about every kind of consumer and business application–that almost every year a major language or tool appears. HTML, the staple of Web page creation from the beginning, is superceded by a stream of enhancements and add-ons such as dynamic HTML (DHTML). Old programming staples such as Perl and Tcl become huge successes among experienced Net programmers. And so it goes.
At the moment, XML is on the leading edge for Internet programming. Created to overcome data management deficiencies in HTML, XML is taking on a life far beyond the Web page, and has spawned literally dozens of related protocols and programming tools. Enterprise application integration (EAI), electronic data interchange (EDI), and distributed processing have all been redefined by XML. For data-oriented programmers this is a bonanza of opportunities.
What are Web services?
If you build it they will come. This seems to be the motto of the hottest and newest area of programming-Web services. If you want to find the cutting surface of the leading edge, look no further. For the most part, Web services don’t exist yet. They’re still being developed and promoted by the likes of Microsoft, Oracle, IBM, Sun, and just about every other software company.
Over the past several months I’ve asked a lot of programmers to define them. The answers ranged from “The what?” to “Hmmm. Seems like a way of repackaging software components for distributed applications over the Internet.” The confusion I’ve heard is not atypical for new technology, but some people in the industry–and especially the trade media–are calling Web services the most important development of the decade. It’s been about a year since Microsoft announced its .Net initiative, the first widely publicized foray into Web services, which makes the confusion unsettling.
I like to explain Web services from three perspectives. The first arises from object-oriented programming: The idea of cobbling together applications from components (objects) has been a longstanding goal of object-oriented programming. Web services extend this idea to pulling components together over the Internet. The second perspective belongs to the software companies that have become disenchanted with selling software and would rather generate a more consistent cash flow by renting it. Web services components provide the opportunity to do this on a global scale. The third perspective comes from large corporations that want a technology for sharing not only data but also chunks of programming with far-flung operations.
All of this does represent a mighty repackaging of technology, which will translate into thousands of jobs in a relatively new skill area that can loosely be called distributed applications. Programmers familiar with existing distributed application technologies such as CORBA, DCOM, and J2EE will have an advantage, but important elements will be contributed by newer technologies such as ebXML and SOAP.
Unfortunately, the industry does not have a good track record with projects that require collaborative software distribution. Among other things, the degree of cooperation required of service providers, the technicalities of binding information from multiple sources to programming, and the sheer complexity of sharing components on a global scale will continue to conspire against unqualified success. In short, there is a risk that Web services won’t pan out as the Next Big Thing. As I said, programmers are under no obligation to respond to the latest and greatest fad.
There are other edges
Although most leading-edge programming is related to the Internet, it would be a mistake to look only in that direction. While there is always programming related to new hardware (e.g., drivers) the majority of job opportunities are in business or consumer applications. A good example is the burgeoning field of software for small-format computers (that is, PocketPC, PalmOS, or handsets). Most of these devices require specialized programming and will eventually have nearly as many applications as the desktop computers.
Somewhat more specialized, but also important for leading-edge programming, are jobs in graphics, animation, and music production. If you saw the movie “Final Fantasy,” you know how far computer-generated images have come toward realism (and how far they have yet to go). Although they’ve had a less-than-stunning track record, voice applications (recognition and production) are finally coming into the mainstream. As they continue to improve, you can expect a high demand for programmers who can integrate this technology with new and existing software.
Don’t forget the open-source movement and its poster child, Linux. A friend and editor recently chided me for not extolling the virtues of this movement. Alas, I said, Linux and most open-source projects are not usually leading-edge, nor are they often professional. Once his face had lost some choler, I explained my controversial opinion. Linux and most open-source projects require a lot of time-consuming cooperation, which is not conducive to the breakneck pace usually found at the leading edge. Most innovation occurs where people think they will be compensated for it–it takes money to take risks. That brings in professionalism. Although many professionals work on Linux and open-source projects, not very many of them get paid for it. That’s sort of the open-source credo. So as important as open source is, it has yet to prove itself a fulsome source of professional employment.
There are other programmers
Unless you’re a one-person show, most programmers work in teams. This is not new, of course, but the leading edge of software development is becoming increasingly team-oriented. Perhaps you’ve heard of Rapid Application Development (RAD) and Xtreme Programming. These are relatively recent developments in programming methodology that structure teams of programmers and users in order to streamline and speed up the software-development process.
These approaches address the oldest and worst problem in programming–too much to do, too little time, and too few resources. RAD puts programmers, designers, project managers, and clients (users) into a joint effort. The emphasis is on producing bare-bones, working code as quickly as possible, and putting it in the hands of users for testing. Extreme programming puts two programmers at one workstation, working on the same code. Both approaches have many variations, but all require programmers to work intensely with other programmers. The leading edge of programming involves more than new tools and technologies; it includes new ways of working with others. Get used to it.
Brave new world
The world of programming is huge, and it gets bigger every year. Because of the challenges and open-ended future, programming is a dynamic profession. That’s why many people like it. Despite the current woes of the economy and the collapse of the dot-coms, the demand for programmers still outstrips the supply. Major and minor technical advances arrive with great regularity, and almost all of them require additional programming. This applies to nearly every field of science and engineering, not just computing. You want a job? No problem. You want a leading-edge job? Not too difficult to find. You want job security and high pay? Good luck.