Ingresando en la robótica como ingeniero de software.

Most of my career has been working on web services and mobile apps but at some point this got old for me—in high school I was part of a soldering club and I had this lingering feeling that I wanted to get into ‘harder’ problems. Two years ago I started looking around for companies in Amsterdam and came across Monumental where I’m now working to automate construction using robots, starting with masonry. And let me tell you: it’s super satisfying to see a physical result like a wall get built when the system works. And when I see people working on some crypto or fintech nonsense I can’t help but feel I would be extremely bored working on something like that. La mayor parte de mi carrera ha sido trabajando en servicios web y aplicaciones móviles, pero en algún momento esto se volvió aburrido para mí. En la escuela secundaria formaba parte de un club de soldadura y tenía este sentimiento persistente de que quería abordar problemas 'más difíciles'. Hace dos años empecé a buscar empresas en Ámsterdam y encontré Monumental, donde ahora trabajo automatizando la construcción con robots, comenzando por la albañilería. Y déjame decirte: es muy satisfactorio ver un resultado físico como la construcción de un muro cuando el sistema funciona. Y cuando veo a personas trabajando en alguna tontería de criptomonedas o fintech, no puedo evitar sentir que me aburriría enormemente trabajando en algo así.

You can have much higher impact getting out of the world of bits and bytes and into that of atoms and electrons. An app is not going to house people, feed them or put them on Mars. We can’t solve climate change with smarter software, we’ll also need massive amounts of solar panels and energy storage. We need to change how we feed ourselves, how we heat our houses and how will we build housing when half the people will be retired because of our aging population. Puedes tener un impacto mucho mayor al salir del mundo de los bits y bytes y entrar en el de los átomos y electrones. Una aplicación no va a alojar a personas, alimentarlas o llevarlas a Marte. No podemos resolver el cambio climático con software más inteligente, también necesitaremos enormes cantidades de paneles solares y almacenamiento de energía. Necesitamos cambiar cómo nos alimentamos, cómo calentamos nuestras casas y cómo construiremos viviendas cuando la mitad de las personas estén jubiladas debido al envejecimiento de nuestra población.

The solutions for these problems will require software. Control system, data analysis and vision are how we can make hardware come alive. Software is where a whole system comes together. Las soluciones para estos problemas requerirán software. El sistema de control, el análisis de datos y la visión son cómo podemos hacer que el hardware cobre vida. El software es donde todo un sistema se une.

When working on hardware you get to work with engineers specialized in other disciplines, in my case mechanical and electrical engineers. It’s super fun and inspiring to collaborate with people who are extremely capable, and exposure to other worlds will make you a better software engineer. Something you’ll realize while working with mechanical engineers is that they look at the world differently. The world around you is malleable, to a much higher degree than you realize. That’s something I found while doing home improvement—even if you punch a hole in your wall you can always fix it. Al trabajar con hardware, tendrás la oportunidad de colaborar con ingenieros especializados en otras disciplinas, en mi caso ingenieros mecánicos y eléctricos. Es muy divertido e inspirador colaborar con personas extremadamente capaces, y la exposición a otros mundos te convertirá en un mejor ingeniero de software. Algo que te darás cuenta al trabajar con ingenieros mecánicos es que ellos ven el mundo de manera diferente. El mundo que te rodea es maleable, en un grado mucho mayor de lo que te das cuenta. Eso es algo que descubrí al hacer mejoras en casa: incluso si haces un agujero en tu pared, siempre puedes arreglarlo.

As you start working with other engineers you’ll first be intimidated by them: they will be talking about twenty twenty and percussive maintenance and EMI and you’ll have no idea what they’re talking about. Over time you’ll know enough about how they work to communicate across domains and contribute to the discussion. The kinds of programming you’ll be doing is different, more like game programming with 3D trigonometry and scene graphs. Al empezar a trabajar con otros ingenieros, al principio te sentirás intimidado por ellos: estarán hablando de veinte veinte y mantenimiento percusivo y EMI y no tendrás idea de qué están hablando. Con el tiempo, sabrás lo suficiente sobre cómo trabajan para comunicarte entre dominios y contribuir a la discusión. El tipo de programación que harás es diferente, más parecida a la programación de juegos con trigonometría 3D y gráficos de escena.

In the end however, software for robots is just software. You’ll have to do data munging, figure out backups, all that stuff. However, with hardware, there’s new kinds of bugs you’ll have to deal with. I’ve never had to consider a cable being loose before, but now that’s something to look for when debugging a system. People who can work across disciplines are key, someone needs to make sure everything comes together. Sin embargo, al final, el software para robots sigue siendo solo software. Tendrás que hacer manipulación de datos, averiguar copias de seguridad, todas esas cosas. Sin embargo, con el hardware, habrá nuevos tipos de errores con los que tendrás que lidiar. Nunca antes había tenido que considerar que un cable estuviera suelto, pero ahora es algo a tener en cuenta al depurar un sistema. Las personas que pueden trabajar en diferentes disciplinas son clave, alguien tiene que asegurarse de que todo encaje.

Things will be harder because you’re dealing with physical objects. Managing what version of a service you have running in the cloud was figured out during the DevOps/GitOps era: you always deploy the latest version you have on git and do a rolling or phased rollout. You don’t worry about state staying around on your running system because you throw away your container/VM on every deployment. This is the cattle, not pets approach to software development. Las cosas serán más difíciles porque estás tratando con objetos físicos. Gestionar qué versión de un servicio tienes en ejecución en la nube se resolvió durante la era de DevOps/GitOps: siempre implementas la última versión que tienes en git y realizas una implementación gradual o por fases. No te preocupas por que el estado permanezca en tu sistema en ejecución porque desechas tu contenedor/VM en cada implementación. Este es el enfoque de ganado, no mascotas para el desarrollo de software.

Now imagine you have 3 robots in the office, each running multiple services with different colleagues working on them at the same time. And there’s software running on the operator’s computer that needs to be up-to-date. And you have robots working on-site that you want to keep stable and up-to-date while all these changes are happening. How do you manage all this? You can’t throw away your robot every time you want to update the software! Ahora imagina que tienes 3 robots en la oficina, cada uno ejecutando múltiples servicios con diferentes colegas trabajando en ellos al mismo tiempo. Y hay software ejecutándose en la computadora del operador que necesita estar actualizado. Y tienes robots trabajando en el sitio que deseas mantener estables y actualizados mientras ocurren todos estos cambios. ¿Cómo manejas todo esto? ¡No puedes desechar tu robot cada vez que quieras actualizar el software!

These are problems we can engineer ourselves out of! One indispensable tool in my own toolkit is Nix, which allows me to manage the whole system config in our git repository and have the system automatically pull and apply that. This gives us the benefits of throwaway VMs on top of a stateful system. Because of problems like this there will be days where you wish you were working on a simple CRUD app, however. ¡Estos son problemas de los que podemos ingeniar una solución! Una herramienta indispensable en mi propio arsenal es Nix, que me permite gestionar toda la configuración del sistema en nuestro repositorio de git y hacer que el sistema tire y aplique eso automáticamente. Esto nos brinda los beneficios de las VM desechables sobre un sistema persistente. Debido a problemas como este, habrá días en los que desearás estar trabajando en una simple aplicación CRUD, sin embargo.

You’ll want to learn C or C++ because microcontrollers are programmed using it, you can’t get around it. And honestly, modern C++ is not that bad, but it does require discipline. You’ll have to brace yourself for any code written by embedded engineers, because it’s going to be piles of macro-filled C. Some straightforward OOP with classes and separation of concerns will instantly make you an S-tier great embedded software engineer. Get yourself a Raspberry Pi Pico, a breadboard, servos and LEDs and start messing around with it. Querrás aprender C o C++ porque los microcontroladores se programan con eso, no puedes evitarlo. Y honestamente, el C++ moderno no es tan malo, pero requiere disciplina. Tendrás que prepararte para cualquier código escrito por ingenieros integrados, porque será montones de C llenos de macros. Un poco de programación orientada a objetos con clases y separación de responsabilidades te convertirá instantáneamente en un gran ingeniero de software integrado de nivel S. Consigue un Raspberry Pi Pico, una protoboard, servos y LEDs y comienza a experimentar con ello.

Also, if you’re not already, you should get into writing Rust. The powerful type system and safety is incredible. The build tooling and ecosystem is much better than C++ et al. Rust for embedded is not there yet, but improving all the time. Además, si aún no lo estás, deberías empezar a escribir en Rust. El potente sistema de tipos y la seguridad son increíbles. La herramienta de compilación y el ecosistema son mucho mejores que los de C++ y otros. Rust para integrados aún no está ahí, pero está mejorando todo el tiempo.

As you start branching out, you’ll want to learn CAD and 3D printing. Because it’s cool to make physical objects and learn a new skill. But also because you’ll understand your colleague’s hair pulling when Fusion 360 crashes better. Then learn soldering as well, because then you can do simple fixes and learn about how electronics are developed. Know that prototyping hardware is easier than ever. CAD tooling is approachable with lots of YouTube tutorials available. Consumer-level 3D printers are becoming easier and better all the time. Al ir ampliando tus horizontes, querrás aprender CAD e impresión 3D. Porque es genial crear objetos físicos y aprender una nueva habilidad. Pero también porque comprenderás mejor el desespero de tus colegas cuando Fusion 360 se bloquea. Luego aprende a soldar también, porque entonces podrás hacer arreglos simples y aprender cómo se desarrollan los componentes electrónicos. Ten en cuenta que prototipar hardware es más fácil que nunca. Las herramientas de CAD son accesibles con muchos tutoriales disponibles en YouTube. Las impresoras 3D de nivel de consumidor se están volviendo más fáciles y mejores todo el tiempo.

Go do it! Go build robots! Send me pictures of the robots you’re making! Life is too short to build another Candy Crush clone! ¡Hazlo! ¡Construye robots! ¡Envíame fotos de los robots que estás creando! ¡La vida es demasiado corta para construir otro clon de Candy Crush!

And if the idea of working on construction robots excites you, come work with me! Y si la idea de trabajar en robots de construcción te emociona, ¡ven a trabajar conmigo!

Thanks to Xavier and Phatho for reading drafts of this. Gracias a Xavier y Phatho por leer borradores de esto.

Feb 2024 Feb 2024