This document has been trimmed to keep to the point, and the dead links neutered.

Here is an email message regarding the ArsDigita Oracle Driver:
... the following highly unprofessional comment in the original
source code:

 /* how the fuck were we supposed to know it was a dml?
    Anyway, it is a DML statement, so we retry with 1 iteration */

Should public domain source have this kind of language in it?  Is
it a good reflection on AD?
Should one judge the author of this code, Cotton Seed, unprofessional because of his colorful source code (never visible to an end-user)? Or does he get credit for having made an honest effort to write a high-quality, useful piece of software and then giving it away for free, with source code so that others can build on his work?" And then further credit for calling attention to a potentially important issue with words that are unlikely to be overlooked?

In another ArsDigita example, when the company was young, we decided to let readers self-select the most appropriate content right from our home page:

Everyone: RemindMe will send you email before your friends' birthdays; TowZone will alert you before your car gets towed for street cleaning; Scorecard will tell you whether your neighborhood is polluted. Our free evening and one-day courses (at MIT) will teach you how to make the best use of the Internet.

Kids: The ArsDigita Foundation will give you $10,000 for developing and maintaining a tasteful non-commercial Web service.

Nerds: Learn how to use our open-source toolkits for community sites and ecommerce. The software is free and we wrote a whole book (also free) explaining how to use it. If you want to build collaborative Web-based applications for the Fortune 500 and well-financed .coms, come work at ArsDigita!

Poor Web Publishers: Our free services will add collaboration to your Web site without you having to install or maintain a relational database management system.

Rich Web Publishers: Challenge us with your innovative Web service idea.

A MIT computer science senior with whom we were working objected "You can't say 'rich and poor' when you mean to say 'rich and poor'!" Why not? "It is unprofessional."

Curious to know what his definition of software engineering professionalism was after four years of MIT education, we probed a bit deeper and established that the way that he thought about professionalism did not differ from the thinking of a Mary Kay cosmetics saleswoman: wear nice clothes, drive a clean car, and don't say anything that might offend anyone.

Professionalism in Medicine

Consider three doctors:
  • Surgeon 1 does the same operation over and over in his Beverly Hills clinic and makes a lot of money
  • Surgeon 2 is competent in all the standard operations but in addition has developed an innovative procedure and, because of the time devoted to innovation, makes less money than Surgeon 1.
  • Surgeon 3 has developed an innovative procedure and practices it regularly, but also makes time for occasional travel to France, China, Japan, and Argentina to teach other doctors how to practice the innovation.
Most of their fellow physicians would agree that Surgeon 3 is the "most professional" doctor of the group. Surgeon 3 has practiced at the state of the art, improved the state of the art, and taught others how to improve their skills.

Professionalism in the Software Industry (circa 1985)

As the packaged software industry reached its middle age around 1985, it was difficult for an individual programmer to have an impact. Software had to be marketed via traditional media, burned onto a physical medium, put into a fancy package, and shipped to a retailer. Consequently, 50 or more people were involved in any piece of code reaching an end-user. It would have been tough for a software engineer to aspire to the same standards of professionalism that put Surgeon 3 over the top. How can the software engineer ensure that his or her innovation will ever reach an end-user if shipping it out the door requires 50 other people to be paid on an ongoing basis? How can the software engineer teach other programmers how to practice the innovation if the software is closed-source and his or her organization's employment agreements mandate secrecy?

The industrial programmer circa 1985 was a factory employee, pure and simple. He or she might aspire to achieve high standards of craftsmanship but never professionalism.

What were a programmer's options, then, if in fact craftsmanship proved to be an unsatisfying career goal? The only escape from the strictures of closed-source and secrecy was the university. A programmer could join a computer science research lab at a university where, very likely, he or she would be permitted to teach others via publication, source code release, and face-to-face instruction of students. However, by going into a university, where the required team of 50 would never be assembled to deliver a software product to market, the programmer was giving up the opportunity to work at the state of the art as well as innovate and teach.

Professionalism in the Software Industry (circa 2000)

Like the MIT senior mentioned above, most industrial programmers have not changed their opinion of what it means to be a successful professional. The closer a programmer gets to Bill Gates in terms of wealth, the more successful a professional he is considered to be. Engineers in Silicon Valley worship John Doerr, a venture capitalist at Kleiner Perkins, Larry Ellison, and Bill Gates.

There is some evidence that standards are shifting. Richard Stallman and Linus Torvalds draw large crowds of admirers worldwide. These pioneers in the open-source software movement are beginning to exhibit some of the elements of Surgeon 3 (above):

  • they practice at the state of the art, writing computer programs that are used by millions of people worldwide (the GNU set of Unix tools and the Linux kernel)
  • they have innovated, Stallman having developed the Emacs text editor (one of the first multi-window systems) and Torvalds having developed a new method for coordinating development worldwide
  • they have taught others how to practice their innovation by releasing their work as open-source software and by writing documentation
The Internet makes it easier for an individual programmer to distribute work to a large audience, thus making it easier to practice at the state of the art. The open-source movement makes it easier for an individual programmer to find a job where it will be practical to release his or her creations to other programmers who might build on that work.

It is thus now within a programmer's power to improve his or her practice as a software engineering professional, where the definition of professional is similar to that used in medicine.

The new definition

We define software engineering professionalism with the following objectives:
  1. a professional programmer picks a worthwhile problem to attack; we are engineers, not scientists, and therefore should attempt solutions that will solve real user problems
  2. a professional programmer has a dedication to the end-user experience; most computer applications built these days are Web applications built by small teams and hence it is now possible for an individual programmer to ensure that end users aren't confused or frustrated (in the case of a programmer working on a tool for other programmers, the goal is defined to be "dedication to ease of use by the recipient programmer")
  3. a professional programmer does high quality work; we preserve the dedication to good system design, maintainability, and documentation, that constituted pride of craftsmanship
  4. a professional programmer innovates; information systems are not good enough, the users are entitled to better, and it is our job to build better systems
  5. a professional programmer teaches by example; open-source is the one true path for a professional software engineer
  6. a professional programmer teaches by documentation; writing is hard but the best software documentation has always been written by programmers who were willing to make an extra effort
  7. a professional programmer teaches face-to-face; we've not found a substitute for face-to-face interaction so a software engineering professional should teach fellow workers via code review, teach short overview lectures to large audiences, and help teach multi-week courses

Epilogue

How well has this new definition of professionalism succeeded within ArsDigita's staff of nearly 100 programmers (April 2000)? The release of our main product, the ArsDigita Community System, is handled by a group of Caltech PhDs and former Caltech faculty in Pasadena, California. Here is the first line, a comment, of the first file in the release:
# ACS 3.2 (MIT Sucks!)