Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.


Channels ▼
RSS

My Favorite Things



Stan Lippman

Lippman spent more than a decade at Bell Laboratories, where he worked with Bjarne Stroustrup on the early releases of cfront, Stroustrup's implementation of C++. Lippman has served as editor of the C++ Report, and has written several widely read books on the C++ language, including (with Josée Lajoie) The C++ Primer (Addison-Wesley, 1998), now in its third edition, and Inside the C++ Object Model (Addison-Wesley, 1996). After a stint as principal software engineer at Walt Disney Feature Animation, Lippman is now serving as Visual C++ architect at Microsoft.

What tools did you use for your work at Disney and DreamWorks, and how are they different from the tools you now use at Microsoft?

For most of the 1990s, SGI was the almost universal platform for high-end graphics within both the film and aerospace industries, but the SGI toolset was initially awful. SGI provided an oldish version of cfront, Stroustrup's C++ compiler that I had eventually become lead programmer on.

In the Unix world, regardless of the application domain, the primary text editor for people of a certain age is Emacs. But people a bit older, such as myself, began with Bill Joy's vi. This remains the editor of choice for us older types, although we're constantly a source of amusement to those who never weary of pointing out Emacs's superiority. Emacs is a phenomenal program, but I was simply more comfortable and productive using vi. Like ballet and tennis, text editors require training at an early age. Now at Microsoft, I use an internal version of vi, although I also enjoy the embedded Visual Studio editor.

Can all projects benefit from visual development tools?

The benefit of software in general is both in the automation of processes that previously required laborious manual setup—for example, see Bryan Sykes's discussion of his initial attempts at gene sequencing in The Seven Daughters of Eve (Norton, 2001)—and in reducing the discontinuity between performing work and evaluating the outcome. Visualization more easily solves the latter. So, for example, a debugger or profiler is greatly enhanced by visualization, whereas a compiler or text editor gains little, at least currently.

Beyond C++, are there other programming languages that you use or have personal interest in?

What interests me more than a particular language, currently, is the distributed, dynamic nature of the .NET initiative from Microsoft. I suspect that we will not fully realize its potential until we evolve our programming languages to better capture its expression. I do know that C# and Java are not those languages; unfortunately, neither is C++. Currently, I'm working with others to adapt C++ to its new environment under .NET. Then, let natural selection take its course.




Ted Farrell
Prior to joining Oracle as architect and director of strategy for application development tools, Ted Farrell served as CTO for WebGain. During his more than 15 years of experience designing and building software products and companies, Farrell cofounded several small-business software companies, including Night Owl Enterprises, Novasoft Systems Inc. and Tendril Software. At Tendril, Farrell led the development team that built StructureBuilder.

What languages and tools do you regularly turn to in your work at Oracle?

I use Oracle9i JDeveloper with Java, J2EE and XML. I was originally a vi and script programmer, but then I realized the benefits of JDeveloper in that it provides an environment that meets my needs.

What languages intrigue you at the moment? And why?

I'm a big believer in Java and the J2xE standards. This includes XML for data transfer and Web services for interoperability. With the proven robustness and scalability of the J2EE architecture, I have no reason to look for another platform.



Jack Ozzie
Throughout his career, Ozzie has focused on communications software development, and has delivered products for numerous hardware platforms, including minicomputers, communications controllers and PCs at both Wang Laboratories and ZTEL, an early LAN-based PBX startup. Prior to cofounding Groove Networks, where he serves as vice president of development for platform and developer services, Ozzie managed the Lotus Notes component and GUI framework team at Iris Associates. He collaborated with Microsoft on early OLE development, designing and implementing in Lotus Notes the first non-Microsoft OLE object container.

What languages and tools do you regularly turn to when developing Groove software?

With Groove being implemented as a rich client application and framework built on Windows technology—namely, ATL, COM and .NET—we naturally use the Microsoft-provided developer tools as our first choice for development and debugging.

The particular layer of code we're building dictates the language, technology and choice of development tools. For example, our lower-level framework services such as XML storage, security, synchronization and UI framework are built in Visual C++ and make extensive use of templates via ATL. This choice was made due to the performance and robustness achievable with C++. On the other hand, most of the higher-level collaborative applications that ship out of the box with Groove are built with higher-level scripting languages for their business logic, mostly using JScript and our reusable UI components.

For creating and debugging these higher-level apps, our developers most frequently use either Microsoft Visual InterDev or VS .NET in conjunction with script-based apps, running under the Windows Script host.

Each of these development tools appeals to our development staff and me in different ways. Visual coding and debugging obviously yield developer productivity benefits. Lots of our developers building and prototyping script-based Groove solutions particularly like the flexibility within the interpretive script debuggers such as Visual InterDev and VS .NET to do immediate code evaluation, which reduces the build-and-debug cycle time. Personally, I'm really starting to appreciate the productivity afforded by VS .NET, especially with the ability to consume Web services from managed code—it's amazingly easy.

When working on personal projects, are there languages and tools that interest you (and that are different from the ones you use at Groove)?

Most of the personal development projects that I dabble in now are related to Groove's interaction with Web services, and my first choice of languages is C#. As for development environment, it's VS .NET. I'm really digging the rapid application prototyping afforded by VS .NET and Windows Forms, and I'm appreciating not only C# as a language, but also as the strength of the underlying .NET framework classes. It's way easier than using COM, but still powerful enough to build reusable components across programming language boundaries.



Donald F. Ferguson

One of 55 IBM Fellows in IBM's engineering community of 160,000 technical professionals, Ferguson joined IBM in 1987 and has led research and development efforts in the areas of operating system performance, database tuning, scalable transaction processing, object transaction monitors and Web application servers. A principal contributor to Enterprise JavaBeans, he has served as chief technical lead for IBM's WebSphere family of products since 1993.

How will application development tools change as Web services become more commonplace both inside and outside the enterprise?

I think we will see three main trends:
First, increased emphasis on visual tools like BPEL4WS composers, XSLT builders and so on. Second, more focus on "declarative" specification of things like binding, out-calls to business policies and control descriptors. Finally, a dramatic change in debugging because of the much more loosely coupled, message brokering approach to aggregating Web services. Debugging may become more like debugging network problems and less like classical, language-based debugging.



Steve McConnell
McConnell is the author of Code Complete: A Practical Handbook of Software Construction (Microsoft, 1993), Rapid Development: Taming Wild Software Schedules (Microsoft, 1996) and the Software Development Jolt-award-winning After the Gold Rush: Creating a True Profession of Software Engineering (Microsoft, 1999). McConnell served as editor in chief of IEEE Software from 1999 to 2002 and was editor of its "Best Practices" column from 1996 to 1998. Currently, he is the CEO and chief software engineer at Construx Software.

What role do tools play in software projects?

Good tools definitely help, but what I think more important is the knowledge of why, when and how to use a tool. Otherwise, the "garbage in, garbage out" principle will apply. If Tiger Woods and I play golf, his score will be better than mine even if I get to use his clubs and he has to use mine.

Success is probably 95 percent technique and only 5 percent tool support. Thirty-five years ago, on the famous IBM Chief Programmer Team project, Harlan Mills wrote about 80,000 lines of high-quality production code in one year. The level of tool support on that project was very primitive compared to what programmers work with today, yet he achieved a rate of personal productivity that is four to five times the rate achieved by the best programmers today.

Having said all that, Tiger Woods would prefer to play with his clubs instead of mine, and software experts will likewise find some leverage in good tools.

What tools do you use on a regular basis for planning, coding, compiling, debugging and so on?

I tend to want to do very specific things with the tools I use, so I find myself using general-purpose tools like Word, Excel and Access that I can adapt to my specific needs. I think people get too wrapped up in what the tool can do rather than in what they want the tool to do. When I use a tool like Excel to plan a project, I can focus entirely on what I want the tool to do.

One use of tools we've had great success with is revision control. We put all our project documentation and all company documentation into our revision control system. And our executive staff, sales and marketing staff, admin staff and all other employees know how to use it.

In a past IEEE Software column, as editor in chief, you wrote that lack of training is a barrier to software innovation. Are there any tools that reduce the learning curve?

I don't see this so much as a matter of looking for tools that reduce the learning curve as much as one of looking for approaches that minimize wasted effort in all the learning that does occur.

Software development is a young field, and there hasn't been a well-defined career path for developers. Most developers' careers consist of working on a sequence of projects and learning a sequence of technologies. I think this lack of career pathing is part of what contributes to lack of training—when developers think of training, they mainly think of training needed to complete their current project rather than training that would permanently enhance their professional capabilities. As a result, the training benefit is fleeting and doesn't build up cumulatively over time.



Eve L. Maler

Coauthor (with Jeanne El Andaloussi) of Developing SGML DTDs: From Text to Model to Markup (Prentice Hall PTR, 1996), Maler was a charter member of the World Wide Web Consortium working group that created XML, and for two years coordinated all of Sun Microsystems' W3C activities. As XML standards architect at Sun, she specializes in standards and vocabularies for security and B2B. Maler holds a B.A. degree in linguistics from Brandeis University and lives in Burlington, Mass.

Many people find Document Type Definitions (DTDs) difficult to read and write. What tools, if any, do you rely on when working with DTDs?

In the past, I have used a lot of pencil and paper for design work, as with the "elm tree diagram" notation and the methodology described in my book, Developing SGML DTDs: From Text to Model to Markup. And I've used regular text editors for implementation. But increasingly I use XML Spy for visualizing the results and generating reference documentation.

I use Arbortext Epic frequently for creating documents. And I do most of my "real writing" in XML, typically using XHTML, DocBook or the XMLspec DTD. XMLspec is used by many editors of W3C specifications.



Guido van Rossum

At the Netherlands' National Research Institute for Mathematics and Computer Science in the early 1990s, van Rossum created Python, and is still actively involved in its development. In 1995 he moved to the U.S., where he now lives and works in Reston, Va. After a research position at CNRI and a brief stint for startup BeOpen.com, he moved to Zope Corporation as director of PythonLabs, the core Python development group. In February 2002, he was given the Free Software Federation's fourth annual Award for the Advancement of Free Software.

Which Python development tools do you use regularly?

I use only a few tools for writing Python: XEmacs and Barry Warsaw's python-mode.el for editing source code, and Neal Norwitz's PyChecker for detecting errors in Python code without running it.

On Windows I use IDLE to edit and run my Python programs. It's a simple IDE that is part of the Python distribution. There's now also a separate IDLEfork project at SourceForge that is adding exciting new functionality to IDLE.

If a developer can't find one language that meets the needs of his project, would you encourage him to create his own language?

Creating a complete language is an incredibly complex task—much more complex than most people realize when they start. (It was certainly very true in my case.)

It's much easier to create a minilanguage that does one thing well without trying to solve other problems. Declarative languages, especially, can be very useful. For example, configuration files are usually small programs written in declarative languages (if you squint a little).

But if you can't find a single language to write all your code in, you should consider writing components in two or three different existing languages, and use a component mechanism, or other, simpler solutions, to glue the pieces together. A language like Python can also serve a purpose here, by acting as a "glue language." Many successful Python projects use it as a glue language. But I should add that just as many use Python as the main implementation language, like Zope does.



Bjarne Stroustrup

After earning his doctorate in computer science from Cambridge University in 1979, Stroustrup went on to invent C++ and to head the AT&T Lab's Large-Scale Programming Research department. In addition to writing five books, Stroustrup pioneered the use of object-oriented and generic programming techniques in efficiency-critical application areas. He is currently a computer science professor in the College of Engineering at Texas A&M University.

How important are modeling tools for application design?
If by "modeling tools" you mean things that run on a computer, I hardly ever use any. I use parser generators to check grammars for ambiguities, but that's very specialized and relatively rare. Most of my designs emerge on my blackboard during discussions with colleagues, go through iterations as diagrams on sheets of paper and then migrate into code.

I find that many high-level design decisions aren't really easy to represent graphically (for example, "no resource will be leaked") and many lower-level decisions are best represented directly in code.

Which compilers and debuggers do you use on a regular basis?

Since most of my work involves C++ and because I value portability highly, I tend to use several C++ compilers, such as Borland C++ Builder, GNU C++ [gcc], Microsoft [Visual] C++, Metrowerks C++ and SGI C++.

I tend to choose compilers based on their standards conformance and the quality of their standard libraries. Given a suitable degree of standards conformance, I like compilers with good optimizers. I emphasize standards conformance—that is, conformance to formal and publicly developed standards, such as the ISO C++ standard—because they are one of the few things that protect users from vendor lock-in and capriciousness.

I rarely use debuggers for more than getting a stack trace.

If a developer can't find one language that meets the needs of his project, would you encourage him to create his own language?

Except possibly for a very specialized domain-specific language, I would not. The success rate for general-purpose languages is miniscule, and the ones that succeed require a decade's work or more. Few projects are worth that kind of risk and effort.

Many languages today are great and there are very few projects that can't be cleanly and affordably handled by some existing language or a combination of existing languages.




Richard Stallman
After working as a staff hacker at the MIT Artificial Intelligence Lab and earning a B.A. in physics from Harvard, where he developed the first Emacs text editor, Richard Stallman went on to found the GNU Project in 1984, thereby "giving computer users the freedom that most of them have lost." Stallman also gave voice to what is now a global movement by forming the Free Software Foundation. He zealously defends the semantic difference between free and open-source software.

How do you select the tools that you use?

When I judge development tools or any other software, I don't judge primarily by technical qualities. I do have opinions about technical merits of programs, of course; but when I'm thinking of using a program, my most important question is whether it respects the user's freedom (my freedom, when I'm the user). If the program doesn't qualify as free software, if I as user would not have the freedom to study and change the source and redistribute copies to you, then it's poison and I reject it. As an ethical principle, if I can't share the program with you, I shouldn't accept a copy for myself.

If user freedom is your primary criterion for choosing tools, have you ever run into a situation in which a selected tool doesn't have all the features that you need, technically speaking?

There are two ways I can hold onto my freedom in such a situation: either make do with the existing free software, or develop a new free program to do the job.

I have in fact been in this situation. In 1983, there was hardly any free software, and there was no free operating system for modern computers. Merely to try to use a computer put one in a situation of this kind. I began developing the GNU operating system as a solution to that problem. Since there was no usable free editor, I wrote GNU Emacs. Since there was no good free C compiler, I wrote GCC. Since there was no free debugger, I wrote GDB.

Nowadays, though, the things that we lack aren't so essential, and usually it isn't hard to do without them.

Are there cases in which it's acceptable for developers to use tools that don't adhere to the Free Software philosophy?

There is one situation where it is legitimate to use a non-free program: to develop the free replacement for that very program. For instance, we used Unix to bootstrap GNU; this was legitimate because GNU was a free replacement for Unix.

What tools do you find yourself returning to again and again?

The tools I use are mainly GCC and GDB. For version control, I use CVS. These are the programs that are useful for developing Emacs, which is where I do my programming nowadays.




Blake Stone
As architect of the JBuilder product line and Borland's chief scientist, Stone has extensive experience with large-scale Java development, and direct exposure to companies using Java for a vast range of projects. Author (with Cary Jensen and Loy Anderson) of JBuilder Essentials (Osborne, 1997) and Oracle JDeveloper (McGraw-Hill, 1998), Stone gives presentations at conferences around the world, ranging from keynote speeches to in-depth technical sessions.

What design and development products do you find yourself returning to over and over again?

I'm still a big believer in the whiteboard, 3x5 cards and other less-than-technical tools as a part of the design process. Getting caught in a formalized way of capturing thought too early in the planning of a project is a common trap. Only when ideas begin to gel and the change process slows down do I try to capture things in more structured diagrams. And even at that stage, I'm inclined to look at UML as a way of communicating ideas, not expressing implementation.

There are a few basic tools of the trade that see daily use for me. CVS is a good example of a fairly solid solution, though it's showing its age. I'm willing to forgive some of its limitations because it stays out of my way most of the time. [Kent Beck and Erich Gamma's] JUnit testing framework has been another positive experience. It doesn't try to solve every imaginable problem, but what it does, it does well.

I've always got a soft spot for elegant solutions to complex problems. I thought NeXTstep's Distributed Objects and [Recursion's] Voyager showed real promise as distributed computing models. Both had a real focus on relative transparency of design, but they were swept aside by more complete but less elegant standards.

Beyond Java, what other programming languages intrigue you at the moment?

The D programming language is one of a few that have grabbed my attention recently, in part because I believe programming by contract is overdue for exposure to a larger audience. UnrealScript, while it was hardly a general-purpose language, had some really clever ideas about distributed programming models. That said, I'm still looking for "the next big thing." I fully expect new languages to emerge that address the problems evident in today's most influential languages:

  • Better visibility solutions than C++ "friends" to avoid incidental API definition.
  • Multilayered language dialects that expose system programming, component construction and scripting to different audiences.
  • Languages with runtime specifications that explicitly avoid bottlenecking dynamic compilers.



Grady Booch
Recognized for his innovative work on software architecture, modeling and software engineering process, Booch is one of the original developers of the Unified Modeling Language. He has served as architect and architectural mentor for many complex software systems throughout the world, and is currently chief scientist at Rational.

What role does modeling play in the development of software?

It depends on what kind of software you're building. The analogy that you've probably heard me use is that if you're building a doghouse, you can get a pile of lumber and some tools, and just build it. But for a house, you need to start with the blueprints. The challenge is that even those small things end up as big things sometimes. This is happening with e-commerce. Ebay and E*Trade are growing up and going through changes in architecture.

But whether the design is in someone's head or on a whiteboard—that's modeling. Everybody does modeling, but then it's a matter of formalizing the model.

Are there software projects that don't need modeling tools?

Find me a project that doesn't have a whiteboard in a cubby somewhere.

Is there a language that you turn to time and again?

I develop in Java and C++. That's partly for the object-oriented nature of the languages and partly for historical reasons. I once thought God intended us to develop in Ada, but then I realized that She thought differently. I also find that there are more mature tools for Java and C++ than some other languages.

My absolute favorite language is Smalltalk. I wish it had survived.

What other tools do you use?

I use [Microsoft] VS .NET and [IBM] Eclipse, primarily because in the work that I do, I cut some code for myself. For customers, I mainly do architectural models. For a recent project, I used VS .NET with Rational's XDE. This allows me to be pretty much language-neutral, and I can hack out prototypes pretty quickly. I also use [Altova] XMLSpy and Emacs. And although it's not a typical development tool, I use WebEx a great deal to collaborate on design. I do use [Microsoft] NetMeeting on occasion, but WebEx has incrementally better performance.




Rebecca Wirfs-Brock

Author (with Alan McKean) of Object Design: Roles, Responsibilities and Collaborations (Addison-Wesley, to be published in 2003), and (with Brian Wilkerson and Lauren Wiener) Designing Object-Oriented Software (Prentice Hall PTR, 1990), Wirfs-Brock has been involved with object technology since its infancy. President and director of consulting services for Wirfs-Brock Associates, she is the inventor of use case conversations and object role stereotypes, as well as the set of development practices known as Responsibility-Driven Design.

You say that you take a "very dim view" of most tools. Could you explain why?

I was spoiled on the Smalltalk application development environment. There isn't anything that compares to that first blast of power I got when I switched from assembly language programming to using early Smalltalk programming environments. I like tools that let you poke around, make changes, test them and do so in a supportive way. Incremental compilation and powerful browsing and team-oriented environments are key.

I found that early Java programming environments were a step backward from that idea, especially when you throw in the extra steps you had to take to construct and deploy an EJB application.

What role do doc tools play in the development of software projects?

Is this a trick question? Documentation can be a big part of communication on a project, but it can also be a drag, too. My favorite documentation tool is a text editor. I can do almost anything I want there. But sometimes a picture or a drawing or a UML diagram is good, too.

My favorite design documentation tool? Well, I wish I could put in a vote for some specific vendor tools, but I can't point to a favorite. I've used several, and each one has its strengths and weaknesses. I'm a big advocate of describing designs instead of just pointing people to the code and saying, "Go figure." And I also like to see different perspectives on a design. What are the use cases? What are some key collaborations? What are the major design objects and important subsystems? And what are the important parts? Sometimes diagrams are appropriate, sometimes words or charts or tables and sometimes it's easier to read code. So I need flexibility. And wouldn't it be nice if I could knit all these views together?


Amit Asaravala is an independent San Francisco-based journalist; most recently, he was founding editor of CMP Media's New Architect magazine.



Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.