Bill Mills, Physicist and Interdisciplinary Programmer

Photo of Bill Mills
Hi, I'm Bill Mills!

What do you work on?

These days, my work is all about the many ways good programming, user interfaces, and computing user experience can help science move faster and be more fun! I work for TRIUMF, Canada’s national lab for nuclear physics, as a web technology specialist and software project manager for the GRIFFIN experiment. GRIFFIN is a cutting edge new gamma ray spectrometer coming online at TRIUMF in late 2014, designed to record data about radioactive particles more efficiently and at much higher rates than any previous experiment, allowing us to get a more detailed picture of the nucleus of the atom than ever before.
For GRIFFIN, my work focuses on modernizing the way scientists interact with their experiment. Past experiments in my field have relied on rudimentary displays to communicate to scientists what was going on at the moment with their experiment; imagine long lists of numbers arranged in tables nested in more tables, scattered across a lot of different places. This was fine decades ago, when an experiment might only involve a relatively small number of simple devices - but modern experiments can have thousands of detectors and data streams (GRIFFIN alone will produce 200 TB of data every week), and an enormous support infrastructure on top of that.
Our experiments have grown too big and too complicated to manage with disorganized interfaces and simplistic reporting. And if that wasn’t bad enough, different teams of scientists will be flying in to use GRIFFIN all the time - they don’t have the bandwidth to learn a complicated user interface on top of conducting their experiments. Therefore, GRIFFIN has to have a user interface that is as intuitive and easy to use as possible, without sacrificing detail or power; that’s why for the past year, I’ve been using all the cool ideas and technologies the JavaScript community has built to make a user interface that will let scientists get started doing science as fast as possible when they arrive at the lab.
A development version of the dashboard I built for GRIFFIN, from the first online test of the SPICE detector.
Web based detector efficiency calculator for GRIFFIN and its sister detectors, which replaced pen-and-paper (!) calculations of the same.
In addition to my user interface work, I’m also trying to help scientists modernize the way they write code by getting them to use the tools used by real software developers. Computing has become so central to our methodology, that you simply cannot be a serious physicist today without writing a lot of code - but up until now, the physics community has yet to catch up with good computing education and techniques. Most physicists learn to program by simply guessing until they get something that (sort of) works. Strategies like version control and open source software collaboration were developed by programmers to streamline the development process; if scientists could learn from these strategies, we could not only supercharge how we do science, but make it more open and reproducible too. Labs in all fields need people who are able to bring in fresh ideas from outside their usual sphere, so that scientific techniques can continue to grow and evolve, and that’s exactly what I’m trying to do between physics and computing today.

How did you learn to program?

I started my programming life as a grad student working on the ATLAS experiment on the LHC at CERN - and it was a disaster! I had had exactly one class in programming as an undergraduate - which I failed. I knew nothing about coding, at all, and was convinced I was terrible at it - and then suddenly as a PhD student, I was writing code full time. For five years, I muddled through writing a sophisticated analysis package which formed the core of my dissertation - but it actually wasn’t then that I really learned to program. What I learned from my experiences in grad school was how lost and adrift professional science was in terms of a culture of good computing - and what an enormous leap forward we could make if we learned to do it right.
After grad school is when I really learned to program. As was the case for a lot of professional academics, science jobs were few and far between after grad school. While I was looking for work, my partner, a noted web developer in the Vancouver web development scene, suggested I teach myself some JavaScript, and start showing up to the local software meetup groups around town. This was brilliant advice, since it turned out that Vancouver had (and still has) a vibrant software startup scene which welcomed me with open arms, supporting me as I taught myself the basics of web design and development. By interacting with the Vancouver scene, I realized that there was a very rich culture not only of computing technology, but technique as well. It was this refined craftspersonship that was missing from computing in science, and I’ve been working to bring those two worlds together ever since.

What do you do when you're not working?

When I’m not programming, I’m probably teaching about programming! I’ve mentored for Ladies Learning Code, an educational outreach program to help break down barriers for women interested in learning to code, and I’m very excited to be almost finished my certification to teach for Software Carpentry, a bootcamp workshop program designed to teach coding to scientists. I’m also currently building, a free service to match volunteer developers with scientists looking for coding mentorship, and am exploring the possibility of bringing the maker movement to lab by helping my colleagues in ecology and agriculture learn about Arduino electronics prototyping and other open hardware options for modernizing their experiments.
I also try to get to as many conferences as possible to talk to programmers about working together to make science faster and better - here’s me at LXJS in Lisbon, Portugal in 2013 with the brilliant Angelina Fabbro, speaking about scientists and programmers teaming up:
When I’m really properly away from the computer, I try and find time to volunteer with environmental groups in my community; I am passionate about correcting our relationship with nature, and wrote content and research for SPEC in Vancouver for some time.

What’s your one piece of advice for new programmers?

Never forget that there is no such thing as an inborn skill. It’s easy to look at great programmers and feel really inadequate, like you’ll never measure up or be a ‘real’ programmer. But I have had the privilege of meeting some of the greatest programmers on the web today, and they all have had the same experience - they all felt like fakes and impostors when they were starting out, and none of them thought it was easy at first, no matter how easy they make it look now. If you have written one single line of code, then you are a real programmer - and if you keep on coding and learning, you will one day be a master, too.