Skip to main content

Command Palette

Search for a command to run...

My Target Audience

Updated
5 min read
My Target Audience
M

A scientific software developer with over a decade of experience in academia, startups and industry. My mission is to turn you into an elite numerical computing professional.

What kind of people do I have in mind while writing this blog? People who share my professional mission of course! What is that mission you ask? Let me elaborate.

From Research to Engineering

I am a scientist who danced with startups and moved into industry. I've spend years doing research, and years doing software product development. During those years I have gotten slightly frustrated with the process of moving ideas from research to production, primarily in my favorite field of scientific computing.

The typical problem is that the time from research to production can be long, often spanning multiple years per project, and the process can be error prone. Some common smaller issues I see arising in many of our projects:

  1. Unreproducible, unexplainable scripts or notebooks in research

  2. Effort to translate from one technology to another

  3. Difficulty optimizing the idea for direct product integration

One typical constraint problem I observed is the following. The researchers quickly write a prototype, management wants it turned into a product, the software engineers then spend ages deciphering the prototype and converting it for the specifics of the production systems. Because the researchers are not the bottleneck they continue tinkering with the prototype and bothering the software engineers with new insights, which further reduces the overall efficiency. Meanwhile other researchers find new prototypes and hand them over to these software engineering teams. This can result in a never ending cycle of downwards productivity.

While many improvements in this scenario are possible and needed, one aspect attracts a lot of attention: the technology differences. For many years it was taken for granted that we need different tools in the separate phases between research and product development. For quick research and exploration you use an easy to use programming language, for example Python. For high performance, reliable, scalable production environments, you use a language like C++, sacrificing ease-of-use in favor of these important utilities. This two language problem immediately creates a bottleneck in handing over ideas smoothly for development.

The Two Culture Problem

The “two language problem” was globally accepted for several decades. You just learn to live with it. Until one day it was challenged by the Julia language, a programming language that promises both speed and ease of use. As I feel the pain of the two language problem deeply, I wanted to try out this new solution. So together with several allies I went on a mission to adopt this new technology at work, and remove the bottleneck.

While we had initial success and attention, we quickly stumbled into resistance from the existing groups of researchers/scientists and developers. Over time I have named this the “two culture problem”. In the beginning I didn’t see the cultures clearly, which limited our success. I was too focused on the technological problem itself.

I will refer to the two cultures as “scientists” versus “developers”. However, the “scientists” group generalizes to anyone who codes quick and dirty to explore, such as domain experts, data analysts and others like that. I do hope everyone is doing their exploration somewhat scientifically, so the generalization should makes sense. Scientists typically want to get their stuff done, perhaps with code, but they don't care about the code. Software developers care deeply about the code craftmanship, sometimes obsessively so, but often developers barely understand the business domain or science. There are people near the middle, trying to balance both, but they are a rare breed.

The benefit of these two names "scientist" versus "developer" is that I can call the middle ground "scientific developers", or "scientific coders", or "scientific software engineers", which is the kind of people I have in mind to form the bridge between these two cultures. I want more of these super engineers and give them the tools they need to succeed.

Bridging The Two Cultures

I have discussed some of my attempted changes in my blog post Organizational Refactoring. People who walk between cultures feel friction, their skills not always acknowledged, yet they get to see the problems and the opportunities from multiple perspectives. Often an individual can become immensely valuable by learning the skills that people stuck in a single mindset are unwilling to pick up.

So let's start a new culture right there in the middle, by connecting people who share this passion for improvement. The Julia language is a tool designed for scientific coders, though not necessarily available to use in their current organization which may force upon them the tools of the dominant cultures. I have spoken with many who see the bottleneck between science and production, but are frustrated that they are not allowed to solve it. This is a good sign! There is a desire for bottom-up change!

I am not saying the Julia language is the answer to everything. You can do fine with a combination of tools, especially if you do not write your own high performance algorithms. Many data scientists I worked with only use off-the-shelf Python packages with a C/Fortran/C++ backend. They barely look under the hood of their favorite packages, and never try to write a performant algorithm themselves. So they are dependent on the small group of interested software developers who can juggle multiple technologies.

Numerical computing professionals are a different breed, they want to write their own high performant code. They are often unsatisfied with the features of the libraries embedded in Python. These professionals will run into the problems I described, especially in larger organizations. It's the same struggles I have run into over the years. So there you have my target audience: scientific software engineers. In the end it's not about betting on a single technology, but about betting on the right kind of people.

This audience is a smaller group of people than either scientists or pure software engineers. Yet I believe that if we band together there are plenty of us. Unfortunately, it can be difficult to find each other.

Do you feel the pains I describe? Do you feel a desire for improvement? Do you share my professional mission for better numerical product development? Then this blog is for you! Subscribe to the newsletter and let me know what kind of knowledge would help you in your personal struggles!

J

Hey Matthijs Cox! Just came across this post linked from the most recent JuliaHub blog post. Not sure if you were aware when writing this, but I actually gave a talk at the third JuliaCon on this very subject! (The comment engine won't let me link directly, but if you search YouTube for "JuliaCon 2016 The Two Cultures of Programming" it should pop right up.)

Really neat to see I'm not alone in this view :-)

M

Hi Joshua, I almost forgot about your talk, but I remember watching it and you definitely inspired me years ago. I should have included a link to your talk, thanks for reminding me! Let me know if you ever want to chat about this topic.

A

Great read! I think you should checkout the Research Software Engineering communities, for example US-RSE (I can't post a link unfortunately). It feels like target audience you are writing about.

1
M

Thanks! I recently found BSSw, will also check out US-RSE. I am also curious if there are EU counterparts.

1
A

There are! The most prominent one is UK-RSE, I think, but DE-RSE is also developing well. Matthijs Cox

F

great post. I feel like the set of people is larger in pure research environments. like you have "only" scientists who previously have stayed away from difficult languages like C and Fortran, leaving those use cases to a small group of people. the arrival of julia and the prospect of writing performant code in a more user friendly way has opened many doors.

1
M

I fully agree. Recently I saw Chris Rackauckas use the same kind of argument to explain why Julia development will overtake Python development (at least in niche scientific computing cases), simply because no one maintains and upgrades the fortran/c/c++ libraries anymore, let alone write new algorithms for solvers.

S

Great post. But after reading this I am confused about the definition of 'scientific coder'. Are there truly developers that want to, and then are allowed to by their employer, to dive into the science behind what they are 'developing'? It seems like two completely different worlds to me. I do understand it the other way around though, it is really painful to read code written by some scientists even though it 'works'. I am in academia but I spend a lot of time trying to improve the quality of my code. Mostly out of the frustration I feel when I read somebody else's code and I don't understand it. Not because it's difficult but because it's poorly written. I don't wish that on anyone

M

Thanks for the question actually! Perhaps my description is still too generic.

I agree that in many cases we can just teach scientists to code better. There seems to be a whole industry of converting scientists into software engineers. You can find lots of vacancies for scientific software engineer or scientific programmer if you google for it.

Those people still tend to use lots of science and numerical computing principles in their code.

Finding pure software engineers and teaching them more science is a much rarer path, though I have found some during my career.

I do intend to interview scientific coders and ask what they do, how they work and what products they make. Hopefully things will become clearer with such examples.

S

Matthijs Cox

Yes, that's exactly what I meant. I look forward to the interviews.

M

Feel free to leave a comment! I learning how this blogging platform works together with you :)

More from this blog