Today is the end of an era. I have handed in my badge, and I am no longer an employee of IBM. Off on a new adventure.
The above badge is not my first IBM badge, but it is my first IBM badge picture, taken in May of 2009. Though I have not been an IBM employee for all eight years since then, I have worked with IBM teams continuously in that time.
I started working with IBM as a 16 month intern on the Toronto Portable Optimizer (TPO) team in May of 2016, having been connected to that job by a professor at the University of Alberta who had supervised an NSERC USRA the summer before. That professor would go on to be my Master's supervisor, and an a guest at my wedding.
In the TPO team we were working on a 'high level optimizer', which both consumed and produced the IBM intermediate representation W-Code, and performed high level compiler transformations like loop optimizations. During my 16 months there I worked on a number of different projects, ranging from helping a researcher make changes to a polyhedral compilation system in TPO, to trying to productize a research quality memory-layout transformation.
After the end of my internship, I continued working with the team part time remote, through an IBM program called Student-on-Call. It wasn't that long before I had a chat with my manager at the time, who said, "We are working on building the runtime system for Transactional Memory support for Blue Gene/Q, and there's an opportunity to do some work around it". And so I started learning about transactional memory.
Not that long after, I was admitted to the graduate program at the University of Alberta, and pursuing Transactional Memory on Blue Gene/Q seemed like a really sensible choice. It was in a fairly real sense the first shipping commercial hardware transactional memory system, and I had the opportunity to be involved in publishing about it. The entire time of my Masters, I was working closely with the IBM teams. I took a detour into investigating transactional memory on the IBM z/Architecture, in particular using it for lock elision on Java, though, that work didn't end up in my thesis.
As graduation approached, I took a full time job with IBM. I had been told about a new project that the Java compilers team was pursuing, which they were calling at the time Open Managed Runtimes. The goal was to cut apart the IBM Java Virtual Machine, splitting out the technology that wasn't inherently java specific, and creating an open source project upon which new runtimes could be built, and pre-existing language runtimes could be enhanced. It was a very different kind of project, but I was excited by the possibility of making it happen.
My full time career at IBM started as a fairly complete left turn into software engineering: Trying to figure out how to structure a large complex system in such a way that we could open source the code, while still supporting all the proprietary code bases interior to IBM. It was hard work! There's a longer story to be told here about the history of OMR, but not today. Suffice it to say, as of September of 2016, we accomplished the goal, open sourcing 500,000 lines of compiler code. Shortly after that, plans were announced to open source the entire IBM JVM, which happened less than a year later.
In April of 2017, after trying to weather the stormy real estate market of Toronto, Andrea and I decided we would move to Ottawa, where we could afford a house. We took possession of our house in July, and I transferred to the IBM team in Ottawa. My own role started to shift at that point, as I started to focus on the question more directly of "How do you test Testarossa", the compiler technology in OMR.
Leaving IBM is something I do with very mixed emotion. I'm excited for my new role, and the changes that come with that. However, I leave behind a team that has been supportive, and where I have had visible impact. I am leaving behind work that I feel strongly about, and people who I care deeply about. Having seen (and helped set) the trajectory of the team, I hope they succeed beyond my wildest dreams.