Sriram Krishnan’s famous “Lisp is sin” article (shredded to tears in reddit.com) was mentioned in Lambda the Ultimate. In this article, I met for the first time the Mort, Elvis and Einstein trio.
While I did not know them at the time, the concept evoked in me painful memories. You see, nine years ago I worked on a project, which needed a sophisticated control for navigating through an hierarchical decomposition of a widget (tree control, in other words). This control was critical for the project’s ultimate success, so we spent a lot of time trying few versions and polishing it. As the project progressed, we used the control in few places in the software. Since each place had slightly different requirements from the control, I developed it as a C++ class with virtual functions. Each client of the class inherited from it and overrode some functions.
The design was very beautiful, sophisticated and a source of pride for me.
Eventually I finished my work on the project and phased out of it. The project entered a maintenance and enhancements phase. For this phase, other software developers were hired. Few years later I met the project leader and asked him how things are going.
He had me floored by telling me that his programmers had to re-implement the tree control class. The original design was too complicated for them to understand it!
Every time I feel bad about the absence of LISP and its ilk in mundane software development jobs, I recall the above painful anecdote.
Now that I know about Mort, Elvis and Einstein, I can see that my beautiful tree control was Einstein-level work, requiring Einstein types to understand it, apply and extend it. However, the maintenance programmers, who followed me, were Mort types. Groan!
Definitions of the trio can be found in:
- Astaufik uneg-uneg’s blog (pretty detailed definition)
- Ian Blackburn’s Weblog and DonXml’s All Things Techie (concise definitions)
I have an issue with Microsoft’s definition. They define Mort as a VB programmer, Elvis as C# programmer and Einstein as C++ programmer. I feel that this is too narrow spectrum of programmers.
I would like to add to the spectrum a persona to the side of Mort. This persona, called Busy Shula, is a courteous and busy secretary. She is very good at her main work. She just is not trained to program computers. She fiddles with configuration files to optimize the way her PC is facilitating her work flow. Some applications have configuration files which are really programs (like Tcl or Emacs’ elisp). So she sometimes gets exposed to programming concepts.
On the other side, there is Maxwell. He is a programmer, for whom C++ is not expressive enough. He devours the special assembly languages used by microprogrammed processors in the morning, and groks the most convoluted LISP, Haskell and O’Caml concepts at night. He also hold on his own when discussing parallel programming and even hardware design issues. He invents new programming languages and even new processors.
I believe that the best way to accommodate all those personas (Busy Shula, Mort, Elvis, Einstein and Maxwell) is to design a powerful library system for a powerful computer language (Scheme comes to my mind as a candidate). The library will feature high-level abstractions, which are convenient for the Morts and Elvises. The Einsteins and Maxwells will be able to look under the hood, rewire, and extend as necessary.
If a Mort or an Elvis gets bogged down with a problem implementing a new feature, he needs to have an Einstein on call to help him with the difficult parts of his work.
On the other hand, the Einsteins and Maxwells would not be bogged down with the tiny UI tweaks and polishes which differentiate among amateurish&irritating UI look and feel and professional&pleasant one.
Busy Shula also needs to have a Mort around to help her whenever configuration work is so extensive to constitute real programming.
Actually, we dont bracket them as VB, C# and C++ programmers – this is a common misconception. But we do try and target features towards specific personas (features – not languages).
– Sriram Krishnan
(http://livejournal.com/users/)