Bill Mills, físico y programador interdisciplinario

Foto de Bill Mills
¡Hola, soy Bill Mills!

¿En qué trabajas?

Estos días, ¡mi trabajo es acerca de las muchas maneras en que la buena programación, las interfaces de usuario y la experiencia del usuario pueden ayudar a la ciencia a moverse más rápido y que sea más divertida! Trabajo para TRIUMF, el laboratorio nacional de Canadá para la física nuclear, como un especialista en tecnología web y gerente de proyectos de software para el experimento GRIFFIN. GRIFFIN es un espectrómetro de rayos gamma de vanguardia que entrará en funcionamiento en TRIUMF a finales de 2014, diseñado para registrar datos sobre partículas radiactivas de manera más eficiente y a tasas mucho más altas que cualquier otro experimento anterior, permitiéndonos obtener una visión más detallada del núcleo del átomo como nunca antes.
Para GRIFFIN, mi trabajo se centra en la modernización de la forma en la que los científicos interactúan con su experimento. Experimentos anteriores en mi campo han dependido de visualizaciones rudimentarias para comunicarles a los científicos lo que estaba pasando al momento con su experimento; imagínate largas listas de números organizados en tablas anidadas en más tablas, dispersadas en muchos lugares diferentes. Esto estaba bien hace décadas, cuando un experimento podía solo implicar un número relativamente pequeño de dispositivos sencillos, pero los experimentos modernos pueden tener miles de detectores y flujos de datos (GRIFFIN por sí solo producirá 200 TB de datos cada semana) y una enorme infraestructura de soporte encima de eso.
Nuestros experimentos se han vuelto demasiado grandes y demasiado complicados para ser administrados con interfaces desorganizadas e informes simplistas. Y si eso no fuera suficientemente malo, diferentes equipos de científicos estarán volando para utilizar GRIFFIN todo el tiempo. No tienen el ancho de banda para aprender una interfaz de usuario complicada además de sus experimentos. Por lo tanto, GRIFFIN tiene que tener una interfaz de usuario que sea tan intuitiva y fácil de usar como sea posible, sin sacrificar detalle o poder; es por eso que durante el año pasado, he estado usando todas las ideas y tecnologías geniales que ha construido la comunidad de JavaScript para construir una interfaz de usuario que les permitirá a los científicos empezar a hacer ciencia tan pronto como sea posible cuando lleguen al laboratorio.
Una versión de desarrollo del tablero que construí para GRIFFIN, de la primera prueba en línea del detector SPICE.
Calculadora de eficiencia del detector GRIFFIN y sus detectores hermanos basada en web, que sustituyó a los cálculos en lápiz y papel (!) de los mismos.
Además de mi trabajo de interfaz de usuario, también estoy intentando ayudar a los científicos a modernizar la forma en que escriben código poniéndolos a utilizar las herramientas utilizadas por los desarrolladores de software reales. La computación se ha vuelto tan fundamental en nuestra metodología, que simplemente no puedes ser un físico serio hoy sin tener que escribir mucho código. Pero hasta ahora, la comunidad física todavía tiene que ponerse al día con buena educación y técnicas en computación. La mayoría de los físicos aprende a programar simplemente adivinando hasta que consiguen algo que (más o menos) funciona. Estrategias como control de versiones y la colaboración de software de código abierto fueron desarrolladas por programadores para agilizar el proceso de desarrollo; si los científicos puedieran aprender de estas estrategias, podríamos no solo potenciar la manera en que hacemos ciencia, sino que además hacerla más abierta y reproducible. Los laboratorios en todos los campos necesitan personas que sean capaces de traer ideas frescas desde fuera de su ámbito habitual, de modo que las técnicas científicas puedan continuar creciendo y evolucionar, y eso es exactamente lo que estoy tratando de hacer entre física y computación hoy.

¿Cómo aprendiste a programar?

Comencé mi vida de programación como un estudiante de posgrado trabajando en el experimento ATLAS en el LHC en el CERN, ¡y fue un desastre! Había tenido exactamente un curso de programación como estudiante de licenciatura, el cual había reprobado. Yo no sabía nada en absoluto acerca de codificar, y estaba convencido que yo era terrible, y entonces de repente como estudiante de doctorado, estaba escribiendo código de tiempo completo. Durante cinco años, me enredé en escribir un paquete sofisticado de análisis que formó la base de mi disertación, pero en realidad no fue ahí cuando realmente aprendí a programar. Lo que aprendí de mis experiencias en el posgrado fue qué tan perdida y a la deriva la ciencia estaba en términos de una cultura de buena computación, y el salto tan grande hacia adelante que podíamos dar si aprendiéramos a hacerlo bien.
Después del posgrado es cuando realmente aprendí a programar. Como fue el caso para muchos profesionales académicos, después del posgrado había pocos trabajos en ciencia y estaban lejos. Mientras estaba buscando trabajo, mi compañero, un desarrollador web destacado en la escena de desarrollo web de Vancouver, me sugirió aprender un poco de JavaScript y empezar a asistir a las reuniones de grupos locales de software alrededor de la ciudad. Este fue un consejo brillante, puesto que resultó ser que Vancouver tuvo (y todavía tiene) un ambiente vibrante para iniciarse en software que me recibió con los brazos abiertos, apoyándome a medida que aprendía los conceptos básicos de diseño y desarrollo web. Al interactuar con el ambiente de Vancouver, me di cuenta que había una cultura muy rica no solo de tecnología en computación, sino también técnica. Esta hermandad refinada era lo que estaba faltando en ciencias de la computación, y desde entonces he estado trabajando para juntar esos dos mundos.

¿Qué haces cuando no estás trabajando?

Cuando no estoy programando, ¡probablemente estoy enseñando programación! He sido mentor para Damas Aprendiendo Código, un programa educativo para ayudar a romper las barreras para las mujeres interesadas en aprender a codificar, y estoy muy emocionado de casi terminar mi certificación para enseñar en Carpintería de Software, un programa de talleres de entrenamiento diseñado para enseñar codificación a los científicos. Actualmente también estoy construyendo InterdisciplinaryProgramming.com, un servicio gratuito para hacer coincidir desarrolladores voluntarios con científicos que están buscando mentores de codificación, y estoy explorando la posibilidad de traer el movimiento creador al laboratorio ayudando a mis colegas en ecología y agricultura a aprender sobre electrónica Arduino para hacer prototipos y otras opciones de hardware abierto para modernizar sus experimentos.
También intento ir a tantas conferencias como sea posible para hablar con programadores acerca de trabajar juntos para hacer ciencia más rápido y mejor. Aquí estoy en LXJS en Lisboa, Portugal en 2013 con la brillante Angelina Fabbro, hablando acerca de los científicos y los programadores que se están juntando:
Cuando estoy realmente lejos de la computadora, trato de encontrar tiempo para ser voluntario con grupos ambientales en mi comunidad; soy un apasionado de corregir nuestra relación con la naturaleza y escribí el contenido y la investigación para SPEC en Vancouver durante algún tiempo.

¿Cuál es tu consejo para nuevos programadores?

Nunca olviden que no existe tal cosa como una habilidad innata. Es fácil mirar a grandes programadores y sentirse realmente inadecuado, como que nunca estarás a la altura o no serás un programador ‘real’. Pero he tenido el privilegio de conocer a algunos de los mejores programadores en la web hoy en día, y todos ellos han tenido la misma experiencia: todos se sentían como falsos e impostores cuando estaban empezando, y ninguno de ellos pensó que era fácil al principio, sin importar qué tan fácil lo hacen ver ahora. Si has escrito una sola línea de código, entonces eres un programador real, y si sigues codificando y aprendiendo, algún día también serás un maestro.