a research engineer

May 8, 2024.

Many people often ask me why I chose to become a research engineer rather than a software engineer, and what the difference between the two roles is. Besides the obvious point that we read a lot of papers—which, by the way, is something I think software engineers should get more accustomed to— the aspect I value most about research engineering is our relationship to code. Now, I say this as someone someone with a background in software engineering. My bachelor is a classic CS degree and I only discovered my passion for research and ML two years ago; halfway through my master's degree. In software engineering, code is a product: it is rigid, predefined, rigorously tested and written with a known future in mind. In research, however, code is dynamic; it evolves alongside your understanding of the problem and adapts as you gain new insights. It is iterative and responsive, consistently providing fresh perspectives to guide your work. This might sound like a pompous characterization, but bear with me.

Documenting this process is challenging. It is usually driven by nothing more than a gut feeling about the problem. There are many talented engineers who possess this intuitive sense—they instinctively know what to try and when to try it. These individuals can be pivotal to the success of your research because the potential paths to explore are too numerous for an exhaustive search. Developing this intuition takes years of experience and a lot of trial and error. From interacting with more people in the research community, its clear to me that I'm still trying to find this intuition.

Although I have a preference for the researcher's approach to coding, the importance of engineering, particularly in this field, cannot be overstated. I highly regard my background in software engineering because classical programming skills are essential in our solution space, and writing good code is hard. But ultimately, it is the intuitive, exploratory nature of research coding that captivates me. You are continually probing the problem, seeking ways to understand it better. After weeks of focusing on a small aspect and iterating through various approaches, you might discover a solution that works. During this process, you often uncover numerous new aspects to investigate.