Foreword
"If a program is useful, it will have to be changed."
?span class="docEmphasis">ACM SIGPLAN Notices (vol 2, no. 2), 1965
"To attain knowledge, add things every day; to obtain wisdom, remove things every day."
桳ao-tsu, Tao Te Ching
"One must learn by doing the thing; For though you think you know it, you have no certainty until you try."
桽ophocles, Trachiniae With the delivery of the Java™ 2 Platform, Micro Edition (J2ME™), Java technology has come full circle. The Java technology we know today originally sprang from a project whose goal was to investigate the potential impact of digital technologies outside the mainstream of the computer industry. It was clear that this big expanse of interesting territory was the space close to everyday people. Consumer electronics, telephony, and embedded systems were increasingly becoming a part of the fabric of everyday life. Being a group with a very hands-on engineering background, we decided to build an artifact as a way to lead our understanding into the details. We built a small (for its day!) handheld device, not unlike today's PDAs. As we considered the implications of this new world, we encountered serious issues with the underlying tools we were using to build the software:
Heterogeneity was a fact of life.
The consumer world has many different CPU and system architectures. In the desktop world, these differences ("WinTel" versus Macintosh) partition the market based on low-level details that most people know little about. In the consumer/embedded world, there are many more architectures than the two of the desktop world. The fragmented chaos that would ensue would cause serious problems. Heterogeneity becomes an even more urgent issue when these devices are connected in a network and then start sharing software.
Reliability is a huge issue.
Non-technophiles have a justifiably low tolerance for systems that malfunction. There are a number of areas where low-level issues in the programming language design (memory integrity being one) have a large impact.
Security must be addressed.
There is no bigger threat to a network than a "teenage guy" out to have fun. (I know, I was one!) Security is not something that can be painted on afterwards梚t has to be built in from the beginning.
Consumer devices have a long life span.
They live within a world that evolves. This drives a lot of issues in system construction, versioning, and modularity.
These systems were becoming distributed and needed to run on more than one machine.
They needed to span many machines that would work together to provide a cohesive experience梖rom small systems such as cell phones, at the edge of the network, to large systems such as the switches that connect them.
These pressures came together and caused a problem. My job on the project was to tackle this, and the result was the Java programming language. The early implementations were targeted at low-end devices. We released the language to the world in 1995, and it experienced phenomenal popularity. One of the side effects of that popularity was that it quickly moved upscale and was very heavily used in large industrial-strength applications. The smaller-scale fringes of the network got left behind in the enthusiasm. J2ME brings the technology back to its roots. Programming for these smaller devices can be much more challenging than for large-scale systems because of the constraints in size and speed, but it is generally more rewarding because they have a more personal interaction with their users. With this book you will learn how J2ME is applied in the wireless world. Wireless applications are a major milestone in making this technology accessible to a much wider community of software developers. The most important opportunities are those that are unexpected, that come from curious people experimenting. Read. Enjoy. Join in the fun. James Gosling Mountain View, California, USA
 |