|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|||||||||||||||||||||||||||
|
|
|
|
|||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CIPS Connections
Top-ranking Software Development Expert and
Java Authority
This week, Stephen Ibaraki,
I.S.P., 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. Discussion: 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. A: I am impressed with sites that
do a great job personalizing the user’s experience. Each time I visit Amazon, I
am reminded of how effective it can be. They remember which books I’ve looked
at, have suggestions for others that I might be interested in, allow me to
create customized pages made up of items I want to remember, and even form
communities of interest. Amazon does a great job. Most applications can benefit
from personalization. When used properly, cookies can help an application become
aware of the identity of a user before they authenticate through another means.
It’s easy to work with cookies using JSPs or servlets. I prefer to use cookies
for this purpose only, except as they are used to support sessions. Anything
that I want to remember about the client is stored with the session or in
persistent store. If you choose to store any other information, you should
consider disclosing the information that you store to your users. 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.
|
|
|
|
|
|
Copyright © 2000 - 2004 Canadian Information Processing Society All rights reserved. Terms of Use Privacy Statement |