CIPS CONNECTIONSINTERVIEWS by STEPHEN IBARAKI, I.S.P.
Top-ranking Software Development Expert and Java Authority
This week, Stephen Ibaraki has an exclusive interview with distinguished author, software development and Java expert, Alan Moffet.
Alan is a consultant with over 20 years of experience in software development and management. He specializes in software architecture and design, and development practice. His work has focused on applying emerging technologies, updating legacy systems, and improving organizational effectiveness. His programming experience includes a variety of systems and programming languages. He began to work with Java professionally while it was a beta product and continues to follow its development and use it in his projects. He is a member of the JCP.
Alan has been active in programming since the days of the Mark 8 (Radio Electronics, July 1974) and progressed through the "classics" - SWTP 6800, H-8, Z-100 and finally the PC. He started programming professionally in 1985 when he began writing diagnostics for hardware that he was responsible for repairing. In 1991, he joined BNR, the R&D division of Nortel. There, he began using Java in 1995 for some projects that leveraged Java's built-in support for networking - including code mobility. His group was among the first at Nortel to embrace Java.
Although he also uses other languages and platforms to perform his work, his interest in Java continues. Besides the widely regarded recent offering, “SAMS Teach Yourself JavaServer Pages 2.0 with Apache Tomcat in 24 hours” he has also contributed to "Java P2P Unleashed". In addition, he has served as a technical editor for"XML Unleashed 2nd Edition", "SE Using Enterprise JavaBeans 2.0", "SE Using Java 2 Enterprise Edition", "SE Using JSP and Servlets", "SE Using Java 2 Standard Edition", "SE Using XSLT", "Java APIs for XML", and "Windows Telephony Programming".
Q: Alan, you have such a considerable and proven background in software development, Java, and long-history of successes in computing. We are most fortunate to interview you--thank you!
A: Thank you. I appreciate the opportunity.
Q: You were there when computers first came out in kit form and progressed to the PC--profile your early days working with the Mark 8, SWTP 6800, H-8, Z-100, and PC. Describe your experiences.
A: I’m grateful to have had the opportunity to work with computers through the evolution of the personal computer. It’s been an amazing journey. The first computers I worked with were programmed using your fingers to input machine code with toggle switches. Light Emitting Diodes provided the output, although clever programmers could also use nearby radios as another output device, since the early machines interfered badly with their reception. Writing loops, you could play songs. Memory use was limited to a few kilobytes because that was all the machines had. Once you powered down, everything was lost – there were no inexpensive storage devices then. However, personal computers progressed rapidly. It wasn’t long before you could use a basic operating system, a keyboard and monitor and could save your work to cassette tapes and eventually to floppy and hard disks. I’m not nostalgic for those days, but the experience of working on home-built equipment with limited resources was very valuable. I also appreciate the pioneering.
Q: What was it like to program in the 1970s’ through to the 80s’?
A: First, I need to mention that I essentially grew up with the microprocessor. I didn’t work with mainframes or larger systems until later in my profession. So, while there was opportunity to work with mature operating systems and programming languages during this time, my experience was limited to what became available on the personal computer, or on smaller systems like the PDP-11.
Most of the programming that I did at that time worked in concert with hardware. It was in assembler or C. Programming required a deep understanding of the hardware - the applications themselves were usually architecturally simple. Because of the limited resources, you were careful about your design – making certain that you did not waste memory or CPU cycles.
It was a time of rapid change - The spirit of invention was everywhere.
Microprocessors and other logic advanced quickly. Personal computers multiplied as companies and hobbyists built upon new technology. Personal operating systems eventually abstracted some of the functions away from the hardware and the tools became much better. Platforms stabilized. Gradually, I could stop thinking about how to lay software on top of a machine and focus on the structure of the software itself. Languages like C++ and Smalltalk made programming particularly enjoyable. I think that I was fortunate to be able to watch and participate in the growth of the personal computer.
Q: Describe your experiences at Nortel.
A: Nortel is one of the favorite places I have worked at. The company invested heavily in its employees by providing opportunities to grow. I participated in many exciting projects and worked with some great people.
I worked for BNR (or Bell Northern Research), which was the research and development arm of Nortel. In particular, I worked with a digital PBX. It was an incredible piece of machinery with 25-30 million lines of code and thousands of developers. The breadth of the system provided a never-ending playground for engineering. One week, I would write a new random-number generator for the OS and the next investigating problems within a compiler.
Nortel provided training in many areas and often had instructors or lecturers who were inspiring. I was taught Smalltalk by Graham Glass (Formerly of ObjectSpace and now of The Mind Electric), and listened to Grady Booch lecture on design and methodologies. I was able to parlay my education into my work. After finishing a government contract, my group and I explored technologies that might be useful for application in the PBX. We were particularly excited about the possibilities afforded by Java, which was in Alpha testing at the time.
Q: Detail how Java programming has progressed from the mid-90s’ to the present.
A: There’s much more to learn about now! The release of Java, along with the creation of the World-Wide-Web, inspired thinking about distributed applications. With applets, you could build competent “light-weight” interfaces to back-end applications. With a little understanding about class-loaders and networking, you could build applications that were easily distributed. The language was easy to learn and forgiving – we could create a prototype in a fraction of the time it took to develop the same prototype using X-Windows or Microsoft Windows – and it ran on either platform (although applets were not as portable as you would have liked).
Obviously, the platforms and technologies that exist today did not exist then. Today, the platforms and technologies that make up Java are comprehensive and mature. The patterns and architectures of systems are well defined and broadly understood. Collectively, they make it possible to easily create sophisticated and robust applications of all types.
Q: Your recent book in JavaServer Pages is garnering considerable attention. However, first can you provide ten tips from your other books?
A: That’s a tall order. I’ve also co-authored a book on P2P programming and worked on a number of books for other authors as a technical or developmental editor. The topics vary widely. In fact, people often seem to wonder how I became “well rounded,” yet have also have depth. What if I offered a few tips about that?
1) Love what you are doing. It’s easier to spend time doing something you like. And it takes time and effort to do anything well.
2) Learn what you are good at. Chances are that you like to do this also, since you probably enjoy the satisfaction of a well-done job. You’ll also stumble across the things you’re not very good at. You can decide to avoid doing this kind of work, or to focus on improving your performance.
3) Align your talents and interests with your work. Good managers want to use their resources effectively and you can practice while you work.
4) Become a mentor, or find a mentor. I’m a better student of a topic if I’m teaching it. First, it has to make sense to me before I can help another. Second, repeating something is practice. Allowing somebody else to be a mentor helps them sharpen their own skills, brings you up to speed quickly and helps you avoid the difficult spots on the path to expertise. A good book can help you by providing information and by allowing you to learn from the experience of the author.
5) Set goals. Choose where you will spend your time. I have a regular study schedule for topics I need to know more about, or feel that I’d like to review. Your employer may allow you the privilege of studying for a couple of hours each week at work. After all, they do want qualified employees who demonstrate great initiative, right? Even if they can’t afford the time, you may need to spend some of your off-hours time honing your skills. It’s a competitive marketplace with rapidly changing technologies – you’re contributing to your own value. Finally, borrowing from a recent Family Circus comic strip, remember that “goal” starts with “go.” Accomplish what you set out to do.
Q: Now, let us discuss your book, which you co-authored, “SAMS Teach Yourself JavaServer Pages 2.0 in 24 Hours”. Who is the intended audience? Moreover, why would our readers want to read this book? What is uniquely compelling about this book?
A: The book is written for programmers who are somewhat experienced with Java, and would like to learn how to use JavaServer Pages. If you’ve read about JSPs elsewhere in the past, you’ll want to read this book for its practical and in-depth coverage. We have packed a lot of information into the 24 one-hour sessions without making it difficult to understand. The book will teach you how to use JSPs in real applications. Besides introducing the reader to the features of JSP 2.0, it also introduces useful topics such as how to select an appropriate architecture or how to tune applications for performance. And it will help you to become a proficient developer by providing the background necessary to be able to use JSPs effectively, or debug them when things don’t go as planned.
Q: What new features in JSP 2.0 make it easy and quick to create Web sites?
A: We were able to put quite a bit into the book because of the great work that the specification authors (and everyone else involved in this release) did to simplify web application development using JSPs. It wasn’t difficult to explain new features. That might be one of the best improvements – the “ramp-up” time is significantly smaller. Creating your own tags has become even simpler (pun intended). Tag files are great! Of course, EL and Tag libraries will help also. Finally, in the longer term, these changes, combined with the ability to express JSPs as XML documents and the improvements made to make it easier to debug JSPs, will aid productivity and quality as tool developers release IDEs that are more sophisticated.
Q: Describe working with the built-in expression language and JSP tag libraries.
A: In the past, it has been somewhat difficult to keep the functions of your JSPs “pure”. In other words, if you want to be strict about using JSPs only for presentation, you would often spend a lot of time developing your own custom tags. This meant that you had to understand Servlets. You also needed to know how to work with the underlying mechanisms used to implement custom tags – which were somewhat troublesome. Moreover, the design often didn’t accomplish all that you hoped – the application wasn’t as simple, flexible or maintainable as you would have liked.
JSP Tag libraries and EL help considerably. They allow you to focus on presentation in the JSP. JSP Tag Libraries provide many useful, predefined functions that you can use to build JSPs using syntax page authors are already somewhat familiar with. EL is frequently used with Tags to provide access to expressions involving objects, data, or functions.
The simplicity of EL makes it easier for page authors to develop sophisticated pages without having to dive into the complexities associated with scriptlets. Tool developers will be happier because JSPs can be completely expressed through tags.
It’s easier to develop well organized pages that are architecturally consistent. I like working with these improved features. However, like the developers of JSTL, I would have liked to have these improvements without creating two new primitive “languages” (JSTL Core Tags and EL) and their supporting environment. I expect that we will see continued improvements in these areas. JSP page authors should not create JSPs that consist of a significant amount of logic.
Q: How would you go about debugging your Web applications?
A: As we mention in the book, debugging web applications can be difficult because there are many pieces that interact – including application components and technologies. Well-designed applications are easier to debug. I try to start out with debugging in mind. For example, when an application can be divided so that presentation is decoupled from the underlying data, it’s easier to decide where a problem lies. One of the techniques that is very useful is good logging. Java 1.4 introduced a logging framework that is good. I prefer to continue to use Log4J and a supporting tag library. I found that debugging using logging is enhanced if you are careful about defining the levels of logging. Putting too much detail into the wrong levels isn’t helpful. It’s distracting. A full trace isn’t useful when you’re trying to determine if the user entered something incorrectly.
I’m also careful to write software that is error-aware. As a language, Java has some great mechanisms for dealing with problems. Exceptions are very helpful. I notice that many developers are content to ignore error handling, partly because Java does such a great job when it lets you know about an error. I also find that it’s useful to build testing into components with a framework like JUnit. The Java virtual machine has always had great support for debugging. With the release of 1.4 there are even better facilities, such as the ability to hot-swap classes. With JSR-45, you can debug JSPs directly, since there is a way to correlate byte-codes to JSP source. I use a JPDA capable IDE with integrated debugging capabilities for difficult problems. With these, I can examine the state of the application
Q: Discuss using Servlets and JSP together to build browser-based dynamic applications.
A: JSPs and servlets can have complimentary roles. I use JSPs where the output is more or less “templated.” Looking at the source of a JSP, you can essentially determine what the consumer will see. If I need different “layouts”, I use different JSPs or compose top level JSPs from fragments. I use servlets for control, application logic and other services. In less complicated applications, I use a simple architecture with only a few tiers. In this case, servlets perform functions similar to those ordinarily performed by EJBs. I strongly encourage developers to separate business logic from presentation, and to use JSPs for presentation. In our book, we provide guidelines that help you determine which functions should be handled by JSPs or servlets. We also introduce Model-View-Controller as an example of how to separate responsibilities. Sun’s “Blueprints” are also a great resource for the developer.
Q: Comment on including XML data and XSL stylesheets in JSP applications.
A: It makes perfect sense to use JSPs to produce structured content using XML. XSLT is a great tool for transforming documents and can be used to normalize data to the requirements of the consumer. On the other hand, JSPs should not parse XML data to build data objects or validate documents. Again, the role of JSPs should be restricted to rendering data.
Q: Tell us more about personalizing the users’ experience using cookies.
Q: How can you access databases from JSP applications?
A: The JSTL provides tags used to perform queries or modify tables in databases. They are very easy to use. However, in keeping with my earlier advice, I would limit their use to simply displaying data in the simplest applications.
Q: Describe how you develop applications using Struts and JavaServer Faces.
A: Struts provides a great framework for building applications. JavaServer Faces basically “extends” the Struts model to add presentation components. They can help produce better designed and more flexible software. The key to success with these tools is to understand the model and your own requirements. It’s helpful to start by thinking of your application as message driven and built of resources to which the messages are directed. From there, you can easily create the controllers and other supporting objects that form the basis for Struts. All that is left is to provide the declarative “glue.”
Using the early implementation of the Struts-Faces integration library, you can use JavaServer Faces components for the presentation portion of the application, leveraging the power of both of these superb tools. Of course, the “Devil is in the details”, but I can’t get into that here – there’s simply too much to cover. “SAMS Teach Yourself JavaServer Pages 2.0 in 24 Hours” gives a brief introduction to Struts and JavaServer Faces, and there are some other really good books out there too. Moreover, Sun has a few good forums that can be helpful, particularly for JSF – which is just emerging. Craig McClanahan, Struts creator and development lead for JSF, participates in discussions in the Struts and JSF forums.
Q: Provide more details on creating JSP applications for international audiences.
A: Java has had great support for internationalization for a long time. Through the Format Tag Library, JSTL helps developers create applications suitable for international audiences. The mechanisms are similar to the way that other platforms are programmed for international audiences – you create one or more resource bundles that contain the local-specific translations and use functions that are adapted specifically to use the bundles for output. Currency, numbers, and dates are formatted with utility functions. Like the other JSTL tags, the library is easy to work with. The most difficult part is getting the appropriate translations.
Q: How do you secure your Web site?
A: My web site is hosted on a Linux box that uses IPTables to provide front-line protection. I also use tripwire and network monitoring software. At the application layer, I generally use the facilities of the container for role-based authentication, using modules that tie into standard mechanisms provided by the operating system or other systems. There are a number of single-login technologies such as SAML that I like to use.
Q: Describe your latest projects.
A: I’ve recently been involved in creating a replacement system for a business who has an online store, and uses web based applications for most of their business processes. The client also has several large databases that are made up of content that is sold to the consumer by subscription. I’ve been concerned with the scalability of the application the customer uses to search through the data and retrieve the data sets they are interested in. The application will also help the consumer find data they are interested in or suggest other research avenues.
On other fronts, I’m involved in a couple of start-ups – one focuses on a few good ideas that a friend and I have been talking about for a while. The other is an exciting opportunity to work with wireless broadband and some unique applications involving mobile devices. I can’t say much more about those.
In addition, I still work on books.
Q: Where do you see yourself in five years time?
A: Retired and wealthy. Wouldn’t we all like to be? Retirement for me probably wouldn’t be much more restful than what I do today – I have too many interests to be idle. In actuality, I’d like to see some success in the projects I mentioned earlier and be able to pursue some other professional and personal interests. I’ve always enjoyed the creative end of engineering – and I have lots of ideas to pursue.
Q: You are a well-respected Java expert. What are your top tips in five major areas of Java development—you choose what you consider the five most important areas of Java-related development?
A: Sure! Although I’m certain I’m being given far too much credit. I hope you won’t mind if I generalize, though. I think that the most valuable top tips actually apply to development in general.
Area 1— Develop a solid foundation
An understanding of the language and the idioms is essential. Several good books are available that accelerate your understanding of the language and its use. “Practical Java” and “Effective Java” are two good ones to start with once you’ve learned something about the language. Once you start using more advanced features of the platform, look for specialized training in the topic. Hands-on training is best. If you’re using a book, do the exercises.
Sun does a superb job of producing helpful material. With each release of a platform, they include specifications, a reference implementation, and a set of blueprints that define the best practices. Read the blueprints. Sun also often provides tutorials that are well constructed.
Finally, find an experienced co-worker and “look over his/her shoulder.” Ask to be a part of their code reviews, just so that you can listen and learn. If you’re on your own, pick a mature open source project, such as Apache Commons, and read the source code. Join a user’s group.
Area 2 - Develop an understanding of design
Although the language is incredibly good at protecting you from your own coding errors, and can even enforce some level of good design, it can’t do everything for you. I’ve seen many poorly constructed applications – often written by developers who have years of experience with the language. Start with a great book on Object-Oriented design – such as “Object Oriented Analysis and Design” by Grady Booch. Learn how to develop your ideas on paper and communicate them to others with UML. Another great book that helps in both of the areas I’ve mentioned is “Fundamentals of Object-Oriented Design in UML” by Meiler Page-Jones.
Area 3 - Develop an understanding of construction
Improve your ability to implement high quality software. Now that you have an outstanding design, make it “hit the pavement” so that it performs. Your software should behave correctly, run efficiently, and be maintainable. In the notes for the first area, I already mentioned a few helpful books. Some of my other favorites within this area are “The Practice of Programming” By Brian Kernighan and Rob Pike and “Code Complete” by Steve McConnell. Although these books use other programming languages to illustrate the concepts, the advice is priceless. And, if Java is the only tool in your belt, take the time to become familiar with another language. Java is as close to a Swiss Army Knife as I have found – I’ve done small and large applications with nothing else - but there are occasions when you need an axe or jeweler’s screwdriver. If you learn C++, you’ll be able to read the VM source!
Area 4— Become familiar with patterns
Most developers are familiar with the “Gang of Four” patterns book, “Design Patterns”. If you don’t own it, add it to your library. It’s one of the best investments you’ll make. It will expose you to a few good reusable solutions to common problems. If you really catch on, you’ll approach your work differently – and start “painting” with more than keywords.
To get started using patterns in Java, a good “template” book is one like James Cooper’s “Java Design Patterns”.
Area 5—Learn how to engineer software
I have always appreciated the effort to raise the standards for software and developers. I was exposed to David Parnas’ work a few years ago and became interested in the process of creating software and software theory. E.W. Dijkstra is also interesting reading. Google for some of their papers. To come up to speed more quickly, and for good advice about all aspects of software development, read “The Pragmatic Programmer” by Hunt and Thomas. I also recommend Steve McConnell’s other books. I have all of them.
Area 6— Leave room for the thing you haven’t thought of yet, or for the idea somebody else might think of.
There’s always something. Here is where I would do some listening, if I could, to the readers. There is usually something to be gained from an exchange of ideas.
Q: What kind of computer setup do you have?
A: My primary computer is modest. It’s home-built with an AMD Athlon 1.2 GHz processor and 768 MB of RAM. I use a wireless (Super) 802.11g network connection that provides a 45 Mb/s connection to the rest of my machines. I needed a wireless connection to my office, and I have been pleased with the results. My other machines are slower Athlon based machines. There are three of these – two of which are running Linux. Linux performs very well even on machines like these. These machines host Apache 2.0, MySQL 4, CVS, DNS, email, and the other usual services. I also run Tomcat, and JBoss. For project management, I use GForge. The other is a windows box for doing .NET backend development.
Q: Alan, we were indeed fortunate for the in-depth answers and insights you have given us. Thank you again for your time, and consideration in doing this interview.
A: Thank you.