Contact information (last updated 10/13/04):
Mitchell L Model MLM Consultingmailto:mlm@acm.org 42 Oxbow Road(508) 358-8055 Wayland, MA 01778Myers-Briggs INFP [until reconsidering circa 1995 either was, or thought I was, INTP]
Kolbe Innovator: Quick Start insistent; Fact Finder, Follow Through, and Implementor resistant [cf. http://www.kolbe.com]
I have spent most of my career teaching and supporting students and software developers in their use of object technologies. My programming work has always focused on tool-building and prototyping. GUI design & implementation, usability, layered architectures, and distributed computing are my main technical concerns. My primary commitment is to the effectiveness and creativity of the developers I support and students I teach.
I am currently:
History
I was at Millennium Pharmaceuticals as a half-time consultant 10/94 - 3/96, then as an employee in its large Informatics group until 11/01. This was not the first time I'd been seduced by an exciting startup: I worked for Applied Expert Systems ("ApEx?", 1983-84), Stepstone (for a few months in 1988), and Object Design ("ODI", 1989-90). In all these jobs I provided the same sort of consulting support, either to the company's developers or those of their customers as I did to my clients as an independent consultant when I wasn't working at one of these companies.
I started programming in 1966, at age 14, taking courses on Saturdays in an NSF "Science Honors Program" at Columbia University and using an IBM 1620. It was obsession at first sight. One of my greatest thrills in those days was finding discarded system and language manuals in dumpsters and reading them cover to cover. The 1620, as opposed to inaccessible machines of the IBM 709x and 360 series, introduced me to interactive debugging: its console had a row of lights displaying the contents of one register (one light per bit), and a large dial to select which register you wanted to see. Very hands-on.
I first encountered Lisp in an introductory Artificial Intelligence Programming course at Yale (1969-1973), and it changed my computational life. Here was a language that fit the way my mind worked! [It was many years before I understood how warped that was.] Lisp led me to AI which led me to a solution to my dilemma about choosing from among Philosophy, Computer Science, and Linguistics for graduate work: by going on in AI, I wouldn't ever have to choose. [I am a very strong Myers-Briggs P.]
I did my graduate work at Stanford (1973-1978) under Terry Winograd, at the Stanford Artificial Intelligence Laboratory for the first two years, then Xerox PARC. After four years immersed in the problems of natural language understanding, I gave up -- all the easy thesis topics had just been exhausted, and there didn't seem to be much between easy and lifelong in that field -- and produced a poor excuse for a dissertation based on some tools I had been building for the KRL (Knowledge Representation Language) project at PARC. Those tools were developed in a prototype of Warren Teitelman's ground-breaking Interlisp display system, for which I was an experimental user while it was being developed. My dissertation, "Monitoring System Behavior in a Complex Computational Environment" (published as PARC memo CSL-79-1) addressed technical and cognitive issues in understanding and debugging high-level programs such as rule- and frame-based AI systems. (In a minor part of that work I demonstrated what I believe to be the world's first graphical (fill in the bar style) progress indicator and offered a cognition-based explanation of its power.) The AI group at PARC was next to the Smalltalk group, and along the way I played with and was strongly influenced by Smalltalk-76.
I was a Visiting Assistant Professor at Brown University for the 1978-79 academic year, then an Assistant Professor at Brandeis University 1979-83. I took a one-leave year of absence to join my first startup, and never made it back to a full-time academic position.
When the AI Winter descended mid-1986 my consulting business starved. I hid out at Prime Computer for 1 1/2 years in a small Symbolic Computation Group, where I began to focus more on object-oriented programming and less on AI. (Most of what I had been doing in AI was object-oriented: frames, knowledge representation, Loops, etc.) I continued working in Lisp, but re-immersed myself in Smalltalk.
I eventually escaped Prime and went to work for Tom Love at Stepstone, as head of its training department. Unfortunately, that was just about when C++ started to become widely available, and Stepstone ended up shrinking that year rather than expanding as planned. I soon found myself irrelevant there and returned to independent consulting. Six months later I joined Object Design to provide training and consulting services for design-partner customers of ODI's ObjectStore OODBMS as it was being developed.
Just before and during the two years I was at Object Design I acceded to market forces that seemed to require my abandoning the True Path and living among the Pagans of the C++ world. This continued after I left Object Design and returned to independent consulting, writing courses (and one of the first C++-based data structures text books, Data Structures, Data Abstractions: A Contemporary Introduction Using C++, Prentice-Hall, 1994), teaching courses, and mentoring developers new to OOP and C++.
Eventually, as I grew more and more disgusted with the tawdriness of C++ and everything associated with it, I began finding opportunities to return to the purity of Smalltalk. By 1994 most of my writing, training, and consulting was about Smalltalk. By the end of the 90's I found myself investigating Java and even teaching a few Java courses. Java is better than C++ and has great libraries, but it's not Smalltalk (or Lisp). I just hope that Smalltalk is still alive when everyone fantasizing about Java solving their problems realizes it won't. [I now, late 2004, have a different view than I did when I wrote that statement several years ago. We have witnessed the near-complete failure of Java applets as a client-side mechanism for delivery dynamic web content and the proliferation of server-side programming efforts. Meanwhile, the Java API's continued to explode -- "expand" is just not a strong enough word -- to the extent that every time you started with an area of Java you haven't used before you ended up buying two or three 1000-page tomes (more like 1500-page by now). On top of that, EJB began to supplant other object persistence and communication mechanisms, then J2EE distributed service-based architectures, all with an enormously elaborate set of concepts, techniques, and API's to learn. And with the just-released version 1.5, the base Java language is approaching the complexity and sophistication of C++. I suppose this demonstrates some inevitable force towards overwhelming complexity inherent in all attempts to supply comprehensive technology, but it's pretty funny that what started out as a language for washing machines, then was touted as a small, easy to learn and use, client-side language is now the back-end, server and even behind-the-server, enterprise technology of choice.]
Lately (I said in 2001) I've been experimenting with various advanced web technologies, but I still think the web is a lousy vehicle for delivering usable interfaces and complex applications. At the same time I discovered Python and was instantly smitten, recognizing it as a pure and simple blend of many of the important Quality aspects of Lisp and Smalltalk, with a beautifully simplified syntax. (I was always a big fan of whitespace as syntax: curly braces are essentially redundant in well-formatted code.) And thrilled to find that Python had a community and software repository analagous to Perl's. (My work in Bioinformatics was pushing my face into Perl intolerably often, and Python is to Perl as Java is to C++, only more so was my arch summary of those experiences.) I taught an introductory programming course to 125 students at Wesleyan in the 2002-03 academic year, as well as an introductory Bioinformatics programming course, both using Python. I would have used it for my data structures course too, but the department got nervous about that since it was part of the required sequence for the major. It is stunning how appropriate Python over such a wide range of programming tasks and levels of experience, from simple scripts to enterprise applications and from complete novice to sophisticated expert.
Wow, wonderful story on SimplestVersusRight! Thanks for posting that! --BenKovitz