Visual Basic is arguably the most successful programming language in the history of programming languages. The number of VB components and applications out there is staggering, and the number of VB programmers is even more so. However, there is a not so silent contender for the World's Most Popular Language. It's OO, multithreaded and Internet-ready. It's an expressive and flexible language capable of industrial-strength server-side computing and, for the C++ crowd, here's the real rub: it's idiot-proof. It's Java. Java not only promises enterprise solution-capable software, it promises to do so with VB-style ease of use and with an unrivaled adoption rate. Therein lies the central issue: The combination of ease of use, power and popularity makes Java an important language for the software engineering community.
Consider distributed computing. There has been an evolution of technologies including socket programming, RPC and distributed objects. For a while, however, we had distributed objects with a little baggage - you had to muck with your application logic and you had to generate stub and skeleton code. This model is rapidly being eclipsed in favor of easier and more seamless programming models. Clients of remote objects often need to know that the server object is remote to be prepared to deal with the inevitable "gotchas" of network computing. However, there is no justification for coupling the server object to the distribution layer - it need not know how it's being accessed. Therefore, some distributed computing platforms are removing this burden from the programmer and allowing any class to be remote-enabled without modification. In fact, even the tedious and error-prone proxy class generation step now happens on demand at runtime. It no longer requires intervention from the programmer. What does this mean? Distributed computing in Java is approaching the theoretical limits of ease of use!
The beauty of this is that it's just the beginning. Distributed computing is just one tool in a software engineer's bag of tricks. The entire gamut of software engineering is subject to this level of ease of use. Java's thread model has almost made platform-independent, multithreaded application development a non-issue. Garbage collection almost makes memory management a non-issue. Dynamic class loading greatly facilitates mobile agent platforms and applications. JavaBeansª is quickly making GUI development a matter of connecting the dots. EJB promises to work similar magic for server-side transactional programming and persistence integration. JECF is on the way to solving the problem of developing electronic commerce software. The list goes on and on. Many of yesterday's programming nightmares are evaporating before our very eyes. As layer upon layer is added, we'll find more software development issues being taken care of automatically. Expect it and demand it.
Microsoft Windows NT 5.0 is supposedly comprised of no less than 25 million lines of code. That is significant by any standard. Now, imagine if the authors had to write this opus, not in C and C++, but in binary. Imagine the complexity of such a task. The number and quality of minds needed would be tremendous. You could make a strong case that human sociological development has not yet advanced to the stage that such a group project is possible. It would seem that an accomplishment like NT 5.0 is simply not feasible (perhaps not even possible) without the higher levels of abstraction provided by C, C++, COM and the rest. My own experience in building distributed computing technology provides at least a modicum of evidence that Java, with its flexibility, ease of use and power, has the potential to go even further. Java makes it possible to achieve instant distributed computing, and there is every indication that there is much more to come.
Let's step back and consider the big picture. Why do we even care that software is easy to build? Does it matter that Java technologies are easy to use? Definitely, because by making it easier for us to build software, we are improving our ability to solve problems. The human race advances by the number of operations it can perform without thinking about them. When Alfred North Whitehead said this, he probably wasn't thinking about software engineering abstractions, but his words couldn't be more applicable. Let's face it, software runs the world. Many improvements in the nature of medicine, government, quality of life, science and economy can be directly linked to improvements in software. By making it easier to build software, we're making it easier to advance as a people.
The last thing the Java community needs is more hype. It is certainly not my point to compound the hype problem. My contention is that Java and the emerging frameworks do, or at least can, facilitate software engineering better than the commercially viable alternatives on the market. I offer the ease and growing adoption of distributed computing in Java as a success story. Java isn't the solution for world hunger. It does, however, offer a compelling combination of popularity, ease of use and power. Software engineering is getting easier, and the Java platform is an important reason why.
About the Author
Rhett Guthrie is a Senior Technologist at ObjectSpace, Inc. working on ObjectSpace Voyagerª, ObjectSpace's innovative distributed computing
platform. Rhett can be reached at