[aduni.org logo] [classroom photo]

Home
A History of ADU
Courses
Faculty and Alumni
Colloquia
   One Colloquium

Speaker Directory
PG FM RS
CH MH PG
AS DP GS
MS RS JR

FAQ  ||  donate  ||  USB drive


up Software Engineering Professionalism

   previous | next 

Speaker: Philip Greenspun
Date: November 1, 2000
Real Video: 288 MB


A talk based on Greenspun's article:

Professionalism for Software Engineers

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

How we do it at ArsDigita

At ArsDigita, we encourage programmers to become better professionals. We assist them by
  1. 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.
  2. 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 end-user experience.
  3. 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).
  4. 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
  5. having a strict open-source software policy; reusable code is documented and open-sourced in the hope that it will aid other programmers worldwide
  6. 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.
  7. 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.

    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!)
    

    License

    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.


[horizontal rule]

Site last updated: May 14, 2013
Comments? Questions?

Creative Commons License

[spacer]