Been Where Done What?
Currently, I'm enjoying life in Golden, BC spending a lot of time in the Rockies, Purcells and Columbia mountains. I'm looking for ways to contribute to our community, presumably by using my CS skills to collect and analyze data, or build tools, or put together systems. There seem to be many pockets of society where a little data analytics in the not for profit sector could have a huge impact. (Forestry comes to mind)
In May 2020 I finished a five year, full time, "contract limited term appointment" professor position at the University of Toronto. I taught CSC300 (Computers and Society) and CSC301 (Software Engineering) and CSC302 (Software Engineering Large Systems). For SGS, the school of graduate Studies, I taught CSC2702 (Software Entrepreneurship) 2015 through 2020. In fall 2020 and winter/spring 2021 I continued to teach CSC302 online as a sessional lecturer.
I defended my dissertation in late December, 2007 at the Department of Computer Science, University of Toronto. (A year short of turning 50..)
For those looking for a brief, business-style, description of positions I have held, please see my linkedin profile.
Brief synopsis of preceding 30 years
Up to about 2000, I was one of the partners of Mountain Lake Software Corporation. (An independent URL for mtnlake.com no longer exists.) I was involved in planning and executing several interesting software projects since we started up in early 1994.
Prior to co-founding Mountain Lake, I participated in the development of Alias StudioPaint, a C++ image processing and conceptual design system for SGI computers. The GUI of the new product was built on top of Interviews and the image processing subsystem used SGI's ImageVision framework.
I spent five years at IBM in the compiler organization, initially developing the register allocator for TOBEY, the optimizer behind IBM's family of RS/6000 AIX compilers. (C, FORTRAN, PASCAL). Later, I used my UNIX skills to assist in the bringup of AIX 3.1. (while team leader for TOBEY's third release.) The optimizer was very successful. (See Steven S Muchnick, Advanced Compiler Design and Construction, Morgan Kaufman, 1997, Chapter 21.)
Earlier, I wrote fixed-price contract software for NASA Ames Research station and consulted at SoftQuad, a Toronto desktop publishing company, where I wrote early versions of the automatic hyphenator and PostScript device drivers for the sqtroff product.
My early schooling consisted of a BASc (Engineering Science, Computer Science option), Faculty of Applied Science (aka engineering) University of Toronto, 1983) and a MASc (Industrial Engineering, UofT, 1984.)
Academic and Research Interests (This is ancient history, for background only!)
Modern languages are very dynamic. For various pragmatic reasons the initial implementation of almost every dynamic new language should be an interpreter. These are simple and easy to modify but perform poorly. Current method-based approaches to Just In Time compilation perform very well but are challenging to implement. Furthermore, today JIT compilers must duplicate much of the functionality already implemented by an interpreter. This makes extending an interpreter with a JIT a costly and time consuming process.
Supervised by Professor Angela Demke Brown, my dissertation focused on how an interpreter can be gradually extended with a JIT compiler. We identify and compile hot, interprocedural paths, or traces, instead of methods and describe a novel architecture for a high level language virtual machine.
Several years in the optimizing compiler business helped develop an appreciation for the intimate relationship between CPU architecture and compilation in the pursuit of good performance. I was lucky to participate in the evolution of super scalar machines and compilers for them.
In 1983, my MASc supervisor, Neville Moray, helped me understand the importance of managing the user's mental model of his or her software environment. Later experience at Alias underscored the value of carefully designing the mental model you want the user to have as well as making sure that application software carefully and consistently maintains it. That’s the “soft” side of my interests.
I've found that teaching advanced courses is both very interesting and challenging. I'm trying to combine my academic, industrial, business and management experience to teach courses like "Computers in Society (CSC300)" as well as "Software Engineering CSC301" and "Technical Entrepreneurship (CSC2702)". I'm finding there is a lot to learn.
I'm uncomfortable praising my own management and leadership abilities on a public web page, so I won't. I am confident that my references, when consulted, will vouch for my communication and leadership skills.
Defining complete application development projects, especially in the early stages is probably my principal technical strength. Object oriented application architecture was my main technical contribution during the 1990's. Retrospectively I can't say that the results have been as conceptually clean as I would have liked but they have resulted in real products that have been bought and used by real people. I am interested in, and have done a fair bit of, GUI development but (probably like so many others) really have trouble feeling like an expert in any particular development environment on any particular platform.
I aim to be a Renaissance man. I have been warned that sometimes I overshoot and wind up merely eccentric. Now that we live in the mountains I bike, hike, climb, backcountry ski a couple times per week. Some amount of paddling and (even) resort skiing gets done in-between. Happily married for almost 40 years. Two sons. Our beloved dog Toby passed away recently. Newest (autumn 2021) member of the family is Rufus.