This document has been trimmed to keep to the point, and the dead links neutered.
... 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
- 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.
Professionalism in the Software Industry (circa 1985)
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)
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
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
- 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 multi-week courses
Epilogue
# ACS 3.2 (MIT Sucks!)
