
Please feel free to forward this newsletter to as many friends as possible. I have a personal goal of having one million readers. I can achieve it with your help
the Software View: JavaTM, a wonderful brew (Part V)
Welcome back, gentle reader. I'm hooked on the JavaVision Newsfeed. Of course, my favorite quote from Issue 20 is "Good analysis is hard to find and so are good writers. I can remember back far enough, to a time when Jesse Berst and Esther Dyson would exchange e-mails with me before they were both catapulted into prominence. Recently I stumbled across a newsletter written by Mark Kuharich out of West Point. Mark has a great many interesting things to say about Java and the industry and I recommend a subscription to his free newsletter, the Software View." I am honored and humbled that my name was mentioned in the same breath as the preeminent technology pundit, Jesse Berst and the industry's elder stateswoman, Esther Dyson. I will work long and hard to earn the trust that you, dear readers, have placed in me. Please peruse their site at http://www.javavision.org
For those of you with Internet and World Wide Web access and a Netscape Navigator web browser, please point your browser to:
http://www.softwareview.com/
Scroll down the page and you will spy a link entitled, "Current views web log (fresh news daily! Click reload, clear the browser cache)" The daily news page is also known as a "web log". It is en vogue and the fashion of these days to call it that. Click on the link, click "reload" on your browser or clear your browser cache to ensure that you always receive the freshest, hottest daily news concerning Java, Linux, XML, and the software industry! The link never changes, but I will be updating the HTML file page behind it every day. Please, do take a gander at it every day.
Also, some important news, gentle readers. the Software View is now an Associate Internet World Wide Web site of Amazon.com. I would like to extend my sincere, heartfelt gratitude and thanks for your patronage. I am offering links to books, et cetera that you can purchase from my web site. I would greatly appreciate it if you would purchase software industry books from my web site. Help support my newsletter and web site by purchasing items from Amazon.com from my web site. Here is the URL (Uniform Resource Locator):
Click here
Now, dear readers, on with this week's episode of the Software View!
One of my readers, Joe Gilbreth asks, "Mark, for us less technical types, how about spelling out just how one would go about using the existing Java apps. What would one have to do on a typical Windows machine? Are the apps you mentioned freeware, shareware, or what? What would a machine be like that was intended to run only Java apps? Would any of this be worth doing now, in lieu of existing applications? Also, are there OSs written in Java? How long will it take for Windows to be in any real danger from Java apps?" Joe, in order to use the existing Java applications on a typical Windows machine, you just need to ensure that a Java virtual machine is installed on your Windows personal computer. Java virtual machines can come from many sources: whether it's your currently installed Internet browser or the JRE (Java Runtime Environment) from Sun. The applications I mentioned are predominantly commercial versions released by independent software vendors. An example of a machine intended to run only Java applications is the hot, new JavaStation from Sun. It looks sweet. Yes, there are operating systems written in Java. Take a look at JOS and JavaOS. To answer your question about Windows being in danger from Java applications. Right now, Windows is in serious danger when you desire a cross-platform solution. Nothing can beat Java when you have anything other than a completely Windows-only shop.
Another of my readers, Satish Talim, passed along these two Java newsletter tips. Please see intelligence.com and JavaTM Report.com.
Another of my readers, Greg Franklin, passed along two tidbits. One on Futurist Programming and the other, a Manifesto of Futurist Programmers.
I chuckled when I read that in a public poll, by a 5 to 1 margin, Americans oppose state Attorneys General blocking the release of Microsoft Windows 98. Of course, Microsoft commissioned and paid for this poll. The Literary Gazette, during the height of the Great Depression, surveyed a small sample of residences by telephone and predicted in 1936 that Roosevelt would lose by a landslide. He won by a landslide. You never heard of the Literary Gazette? That's because it went bankrupt the year after it predicted that FDR would lose big. It was the leading news magazine of its time. As the quality guru Deming preached, sampling is everything. During the Depression, only upper class Republicans could afford telephones, particularly for small samples. And who was sampled for the Microsoft-paid survey? Would they let us see the sample?
Now, dear reader, on with this week's episode! What is Java? Java, developed by Sun Microsystems, was designed for creating applets and applications for the Internet, intranets, and any other heterogeneous, distributed network. This platform offers the following powerful features. The following examples are not all-inclusive.
Java is simple. Java is similar to C and C++, which many programmers are already familiar with. Some of the more difficult features of C++, including pointers and pointer arithmetic, and extensive automatic coercions, were omitted to make programming with Java easier. A specific type of multiple inheritance can be written by using the implements keyword. The Java automatic garbage collection feature reduces bugs by automatically freeing unused memory. You can explicitly invoke garbage collection by calling system.gc(); Java simplifies programming by eliminating pointers and automating memory management. These features make Java easier to learn than C++. Java's automatic memory management and simplified structure (no pointers) have made it twice as productive as C++ in many shops. Still, Java has semantic power that rivals C++. And Java is more comprehensive than the various SQL derivatives.
Java is small. Living on the Internet requires that Java be small. Java applets are relatively small in size, so they can be downloaded from the Internet and run on computers with little available memory.
Java is object-oriented. Java was object-oriented at its birth and is object-oriented at its core. It includes extensions from Objective C for dynamic method resolution. Some advantages of object-oriented programming include: code is encapsulated in objects, which have a public interface and a private implementation, so you can rapidly develop prototypes and group code into manageable chunks - even for very complex systems. Objects can inherit the characteristics of other objects and override inherited characteristics, so you can easily reuse code, make your code more compact, and fix or update code in one place, which saves time and reduces bugs. I will give you my views of the difference between creating Windows C++ programs and Java applications. I should know, I've done both. Creating a Windows C++ program is what I call the "plum pudding" model of application development. The operating system is the pudding, and all the applications are the plums resting in it. The Windows operating system is an essential facility. Every Windows program takes advantage of underlying operating system calls. This is why Windows grows bigger every year and why Microsoft can crush competitors by folding applications like Internet browsers into their operating system. With Windows, you have to worry about the Windows System 32 directory, DLL's (dynamic link libraries), aggregation, marshalling, and monikers. A Java application is what I call the "LEGO block" model of application development. You only add what you need, versus the Windows operating system which requires you to have everything. So, your Java application can be as small or as big as you wish. You download only the packages you need by using the import keyword. Java employs object-oriented concepts to support reuse of software modules, which will reduce the costs of software application development. The Java language is designed to support distributed dynamic object systems. Java was designed originally for interactive television systems, and then adapted to the Internet and the World Wide Web. C++ is an extension of the C language, and it is used primarily for systems programming. Visual Basic was designed to simplify the creation of forms-based Windows desktop productivity applications. Each language has its different roots.
Java is network-ready versus Windows which grew up on standalone personal computers. Creating network connections is easier in Java than for C or C++ because Java has built-in routines for dealing with TCP/IP, including HTTP and FTP. These routines make it as easy to open and access objects over the Internet through URLs as it is to access a local file system. The java.net package provides classes for network support, including URLs, TCP sockets, UDP sockets, IP addresses, and a binary-to-text converter. Java was designed from the ground up to build applications that run on networks. The language's semantics address network behavior and multi-threaded execution, a first among widely used programming languages.
Java is robust. Java eliminates problems early by requiring declarations, using static typing, having the compiler perform type checks, and not supporting pointers, which can result in overwriting memory or corrupting data.
Java is secure. Because there are no pointers, Java applications can't access data structures or private data that they don't have acess to. This prevents most viruses from taking hold. Applets, when run within a web browser on a local computer, can't read or write to the disk, execute programs on this computer, or connect to any other computers except the web server from which they were downloaded. This is called the "sandbox" model.
Java is architecture-neutral and portable. The Java compiler generates an architecture-neutral object file format and bytecode instructions, so Java code can run on any computer that has a Java runtime system. Bytecodes are instructions that are similar to machine code, but are not platform-specific. During execution, the Java virtual machine either interprets the bytecodes or converts them to machine code. Creating separate applications for different computer platforms is no longer an issue. Goodbye to C++ IFDEF's.
Java is high-performance. Java bytecodes can be translated on the fly to native machine instructions - for example, by a Java enabled browser. Linking is faster than for C or C++. Once the Java bytecodes are converted to machine code by a JIT (Just-In-Time) compiler in a Java virtual machine, the performance is comparable to that of C or C++. Sun's new Project HotSpot increases performance even more by using focus optimization, inlining, and adaptive optimization.
Java is multithreaded. Java can deal with multiple things happening at once with sophisticated synchronization primitives that are integrated into the language, which makes them easier to use and more robust. Multithreading improves interactive responsiveness and real-time behavior, so is critical to high-performance Java applets because applet execution must continue while various image and binary files are being retrieved from one or more web servers. In addition, the ability to control the execution of multiple concurrent threads is crucial for deploying real-world web applications. All you have to do is Thread thread = new Thread(); and use the synchronized keyword versus Windows where you have to implement your own thread manager or use a Windows message pump.
Java is dynamic. New packages or module plug-ins can be added to a Java application with minimal overhead. Java can look up a class definition at runtime from its name versus Windows where you must declare other modules in header files and then link in those modules at compile time. Java's runtime environment can load new software modules on the fly into a live environment. This results in applications that can respond to changeable conditions. Java's ability to load classes and components on the fly makes it flexible enough to cope with fluid application demands.
Sincerely,
Mark Kuharich
Join my free e-mail newsletter called the Software View by clicking here or sending mail to thesoftwareview-owner@west-point.org