Wednesday, December 15, 2010

My Dusty Deck

I started programming when I was about twelve, and I have enjoyed it ever since.  I was lucky to have spent many years in academia, so I was my own master.  Even when I consulted for a data-security company, I was responsible for security- and performance-critical code, and was never pressured to compromise on quality.

Sadly, most developers aren't that fortunate.  The results are all around us, from the daily annoyances on personal computers to lost lives and property.  (For some non-bedtime reading about the latter, see Computer-Related Risks by Peter Neumann.)

Can we do something about this?  There are many factors involved in producing high-quality maintainable software.  There are technical, psychological, and educational issues, and no one can claim to cover them all.  The Dusty Deck is my attempt to present my own point of view, shaped by my own experience in developing software and teaching computer science.

I am fascinated by good tools.  I want to have the best tools possible to do my job, and I get very frustrated when a tool doesn't understand what I want to do and gets in the way instead of helping me do it faster and better.  Because I know what tools I want to have for my own use, most of my research is focused on the creation of tools I can believe in.  In pursuing this goal, I spent four years at the Programmer's Apprentice project in MIT's AI lab, where I learned many things that I used in later research, most notably the plan calculus representation of programs.  (For more information, see The Programmer's Apprentice by Rich and Waters.)  Work with students and colleagues over the years led me into the field of static analysis of programs, which I am continuing now at IBM Research.

Over the years, I have been exposed to many languages, development environments, platforms, operating systems, and frameworks.  I started with Fortran on punched cards on a CDC 6600, went on to Pascal in the Introduction to Computer Science course at Tel Aviv University, played with many other languages (Prolog, APL, various assembly languages), and used Lisp on the Lisp Machine at MIT (happy days!).  C became my language for low-level work, and Java for higher-level programming, and various scripting languages for small tasks.  During all this work I developed some strong views, likes and dislikes, which I will share here.

I have taught core courses based on the books Structure and Interpretation of Computer Programs by Abelson and Sussman and Object-Oriented Software Construction by Meyer, and using Scheme, Eiffel, and Java (although the specific language was never a goal in itself).  For several years I have also been serving on the Israel Ministry of Education's Computer Science Curriculum Committee.  These experiences shaped my thinking about education.

To start with something controversial, in the next post I'll discuss the relationships between programmers and children.  Let me know what you think!

P.S. If you aren't familiar with the term "dusty deck," see its definition in the Jargon File.

No comments:

Post a Comment