A talk based on Greenspun's article:
Professionalism for Software Engineers
Here is an email message regarding the
ArsDigita Oracle Driver:
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
... the following highly unprofessional comment in the original
/* 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?
In another ArsDigita example, when the company was young, we decided
to let readers self-select the most appropriate content right from our
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.
evening and one-day courses
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
and ecommerce. The software is free and we wrote
a whole book (also free)
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
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:
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.
- 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
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):
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
- 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
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
- 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
- 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")
- a professional programmer does high quality work; we
preserve the dedication to good system design, maintainability, and
documentation, that constituted pride of craftsmanship
- 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
- a professional programmer teaches by example; open-source
is the one true path for a professional software engineer
- 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
- 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
How we do it at ArsDigita
At ArsDigita, we encourage programmers to become better professionals.
We assist them by
- committing to attack the hardest problems for a wide range of
computer users; niche software products are easy and profitable to
build but most of the programmers on such a product are putting in the
10,000th feature. At ArsDigita, we simultaneously attack the problems
of public online community, B2B ecommerce, B2C ecommerce, cooperative
work inside an organization, cooperative work across organizations,
running a university, accounting and HR for a services company, etc.
This gives our programmers plenty of room to grow.
- staying lean on the sales, account management, user interface,
and user experience specialists; a programming team is in direct
contact with the Web service operator and oftentimes with end-users.
The programmers have a lot of control over and responsiblity for the
- hiring good people and paying them well; it is only possible to
build a high-quality system if one has high-quality colleagues. Thus
at ArsDigita we don't hire people unless they've demonstrated an
ability to produce high-quality code on a set of problem sets
(originally developed for a course at MIT).
- giving little respect to our old code and not striving for
compatibility with too many substrate systems; we let our
programmers build their professional reputation for innovation rather
than become embroiled in worrying about whether a new thing will
inconvenience legacy users (we have support contracts for them) or how
to make sure that new code works on every brand of RDBMS
- having a strict open-source software policy; reusable code is
documented and open-sourced in the hope that it will aid other
- dragging people out to writing retreats; most programmers
say that they can't write but experience shows that peoples' writing
skills improve dramatically if they will only practice writing. At
ArsDigita, we have beach and ski houses near our larger offices and
drag people out for long weekends to finish writing projects with help
from other programmers who are completing writing projects.
- establishing our own university, TAing at existing
universities, and mentoring within our offices; a lot of PhD
computer scientists are reluctant to leave academia because they won't
be able to teach. But we have our own ArsDigita University
teaching the normal undergrad computer science curriculum and we are
happy to pay a developer to spend a month there teaching a course. We
encourage our developers to volunteer as TAs or lecturers at
universities near our offices (e.g., Caltech, MIT, Stanford, UC
Berkeley, University of Pennsylvania). We insist that senior
developers review junior developers' code internally.
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
# ACS 3.2 (MIT Sucks!)
The colloquium series videos are licensed slightly differently than our normal classes. These are covered by the Creative Commons Attribution-NoDerivs license which allows free copying but does not allow for the creation of derivative works.