Biographical Information

I'm a software developer tools writer; I create the programs that help other people write computer programs. I’ve worked on many different sorts of developer tools: compilers, static analysis tools for automatically finding bugs or visualizing software, performance analysis and other tools that observe the runtime behavior of programs, IDEs and programming environments. I’ve also got a decent background in system software, and can probably still recite exactly how a Mac OS X process gets started. I’m particularly interested in refactoring tools -- tools for turning programs inside-out so that changes can be added easier.

Here is my current resume.

I’m currently working at a "stealthy startup." We're not talking about it yet; check back later for details. For now, let's just say I'm working on a very ambitious problem with a great team of coworkers, doing an awful lot of coding in Swift, and exploring an area a bit outside my usual work.

xray logo
From 2008 through 2015, I was at Google where I worked on several projects including a million line C++ API conversion, Go servers for gathering constant profiles of all programs running in a data center, and tools for translating Java code to run in web pages. I also helped create the XRay tools for precise profiling tools for diagnosing the cause of slow RPCs, helping with the high-performance sampling code, writing our web-based profile browser in Python, and leading work to get teams inside Google using our tools. The Xray tools are in the process of being open-sourced by the Bigtable team. I worked to release the Closure Compiler to the world - Google's JavaScript minifier tool. I also managed a software tools team for a stretch; folks on that team developed error-prone, the Java static analysis tool. The same team later produced the Tricorder infrastructure for giving Google programmers meaningful and useful static analysis warnings at code review time. The Tricorder paper (Sadowski, van Gogh, Japan, Soderbergh, and Winter, from ICSE 2015) is worth reading if you have any interest in helping programmers find errors in their code.

Before Google, I was part of the Developer Tools group at Apple. My last (and favorite) project was Xcode 3.0's refactoring feature for Objective C programs. I championed refactoring support for Xcode, and was responsible for the backend -- parsing and the transformations. Also at Apple, I helped maintain Apple's version of the gcc compiler and maintained Apple's performance analysis tools. I created two of those tools: Thread Viewer (a tool for visualizing a process's activity) and Spin Control (which automatically profiles applications that appear unresponsive in hopes of understanding intermittent slowdowns).

In between these projects, I worked on prebinding utilities for speeding application launches in Mac OS X. (If you've seen your Mac declare "optimizing system performance" after an install, that's my fault. I always hoped I would have an impact on the world, I just had hoped it would be positive.) I also helped get the Rosetta PowerPC emulation environment running on Apple's Intel-based computers; I shared a bit about working on a double-secret-probation project when answering "How does Apple keep secrets so well?" on Quora. (I won't do that again, not after finding myself misquoted everywhere.)

In between Google and Apple, I took some serious time off.

Before Apple, I worked for Intrinsa in Mountain View, California. Intrinsa created tools for finding memory smasher bugs in programs. Intrinsa was purchased by Microsoft soon after I hired on, and most of the technical folk are now part of the Programmer Productivity Research Center at Microsoft Research.

From 1996 to 1999, I was a Research Staff Member at IBM Research's Watson Research Center in Hawthorne, New York. At IBM, I created programming tools based on the IBM VisualAge C++ 4.0 "Montana" compiler and development environment, creating the Find Uses syntactic search facility, evangelizing and supporting APIs for the compiler's innards, and creating research tools for restructuring C++ programs.

I defended my Ph.D. dissertation at U.C. San Diego in December, 1995. My dissertation, "Supporting the Restructuring of Data Abstractions through Manipulation of a Program Visualization" was completed under the guidance of Dr. William G. Griswold. I also was a member of his Software Evolution Laboratory.

My research is described on a separate page.

I did my undergrad work at the University of California, Berkeley, where I also learned how to glaze windows and sheetrock at the Cloyne Court student co-op. I satisfied way too much of my liberal arts requirements taking theater lighting courses, but I learned a lot about working with roadies and high voltages as a result.

While at Berkeley, I worked for Berkeley Softworks, later known as Geoworks, where I and two other interns ported the Commodore 64 GEOS package to the Apple II. I dredged up old memories during an interview with Quinn Dunkl and Mike Maginnis of Episode #52 of their Open Apple podcast.

As far as personal details, I can modestly quote this review of a talk I gave at Apple's developer conference in 2001:

"Den forsta demonstrationen, vilken holls av Robert Bowdidge (som liknade Edward Norton en hel del), var mycket intressant och gav en bra bild av nar tradar bor anvandas."

Sadly, I have no clue what they're saying, but isn't it amazing how things sound more flattering in languages you don't understand?

So what did I do in graduate school?

For my dissertation, I discovered the benefits and drawbacks of restructuring computer programs through representations other than the source code. Specifically, I created one visualization, called the star diagram, that helps a program encapsulate data structures into a new abstract data type.

The star diagram work has taken on a life of its own, thanks to Bill Griswold's persistence. During some user studies conducted for my dissertation, we noticed that people sometimes used the star diagram for planning their actions -- sometimes restructuring a program merely to hold a design idea. Bill's other students have tried to leverage this idea by creating a star diagram tool that is primarily for understanding a program and planning restructuring actions.

Morison Chen implemented a version for C. Walter Korman's Elbereth system (publically available) created star diagrams for Java. Jim Hayes expanded it to work on programs coded in multiple languages.

The star diagram was also great because we were working on refactoring tools before they were cool. I can safely say that Bill and I created the coolest Scheme refactoring tool known to man. I've spent a good deal of the intervening years hoping I'd be able to use such tool in my daily work. There's a more detailed description of my research and publications available on a separate page.

Personal Projects

I also have several computer-related projects I keep up outside of work:

SwitchList: : I developed SwitchList, a Mac program to help model railroaders operate their railroads more realistically. Model railroad operations - trying to recreate the actual movements and jobs on a model railroad - has become a big deal in recent years; SwitchList chooses realistic movements for the boxcars, and prints out switch lists to tell the model railroaders what work to do.

As a programmer working on infrastructure and tools, SwitchList gives me a chance to write end-user software and experiment with both Mac and iOS development. My big themes for SwitchList - generating realistic paperwork, providing a user interface that’s easy to pick up and avoids the sea-of-check-boxes seen in similar PC programs - forces me to think about what would make SwitchList both useful and unique.

SwitchList also represents an example of end-user programming - in this case, to program a simulation by specifying general rules and constraints. Diagnosing and explaining the cause of problems in the simulation turns out to be about as easy as providing helpful warning messages for C++ templates.

SwitchList is available for free download, and is also available on Apple’s Mac App Store. Sources are available on github.

Crowdsourcing Railroad History: As part of my interest in history and railroads, I advised Stanford’s Center for Spacial and Textual Analysis on ways to get the rail fan community interested in their Living with the Railroads project. The key goal for this project was to learn how to use crowdsourcing to collect historical documents usable by local historian, railfans, and academics.

Cross-reference Information for Canneries: I also approached the issue of crowdsourcing history by creating a wiki, Packing Houses of Santa Clara County, as a place to collect and share what I’ve learned about the Santa Clara valley fruit industry. As with my programming tools, I’m very interested in hidden connections between abstractions. In the case of canneries, I can highlight different owners or occupants of particular canneries, list ownership changes, and identify businesses operated by the same managers in order to expose hidden details of their history. (Example: what were the ownership changes at the Los Gatos Fruit Packing Company between 1882 and 1940? What did George Hooke do after he sold out to Hunt's?)

3D Printing as a way to share history: My work on using 3d printers to build more accurate scale railroad models has matched my interests in history, historical research, and software. It also gave me a much healthier respect for the effort required to mass produce physical objects. My models are for sale at

"Daddy, what did you do at the dawn of the Internet?"

I used to maintain Railroad-related Internet Resources, the second railroad-related site on the Web. My goal was to create a great catalog of interesting links, and give enough commentary and structure to help folks learn where to look for interesting content. The pages were described by one Web-reviewer as follows:

It's about as austere as a line of tracks through the Siberian tundra in winter, but Webmaster Robert Bowdidge sees to it that this hyper-index of WWW railroad resources delivers a payload.

(I think that's a compliment.)
I spent an awful lot of time procrastinating about my dissertation as I added to that web site. Once I graduated and moved to the East Coast, the (then) miserable speed of cross-country internet connections made updating the pages a chore. The pages got further and further out of date til I finally pulled the plug on 'em.

Out of date photo, First West Coast Computer Faire, 1977. (July 1977 issue of Byte) The caption's wrong; a bunch of students got to practice math drills on that Imsai 8080, but there were only three or four of us who did any significant programming. I still wish I'd learned about toggling in machine code on that cool machine!