Are MATLAB users increasingly "Reluctant Developers"?
I wanted to share something I've been thinking about to get your reactions. We all know that most MATLAB users are engineers and scientists, using MATLAB to do engineering and science. Of course, some users are professional software developers who build professional software with MATLAB - either MATLAB-based tools for engineers and scientists, or production software with MATLAB Coder, MATLAB Compiler, or MATLAB Web App Server.
I've spent years puzzling about the very large grey area in between - engineers and scientists who build useful-enough stuff in MATLAB that they want their code to work tomorrow, on somebody else's machine, or maybe for a large number of users. My colleagues and I have taken to calling them "Reluctant Developers". I say "them", but I am 1,000% a reluctant developer.
I first hit this problem while working on my Mech Eng Ph.D. in the late 90s. I built some elaborate MATLAB-based tools to run experiments and analysis in our lab. Several of us relied on them day in and day out. I don't think I was out in the real world for more than a month before my advisor pinged me because my software stopped working. And so began a career of building amazing, useful, and wildly unreliable tools for other MATLAB users.
About a decade ago I noticed that people kept trying to nudge me along - "you should really write tests", "why aren't you using source control". I ignored them. These are things software developers do, and I'm an engineer.
I think it finally clicked for me when I listened to a talk at a MATLAB Expo around 2017. An aerospace engineer gave a talk on how his team had adopted git-based workflows for developing flight control algorithms. An attendee asked "how do you have time to do engineering with all this extra time spent using software development tools like git"? The response was something to the effect of "oh, we actually have more time to do engineering. We've eliminated all of the waste from our unamanaged processes, like multiple people making similar updates or losing track of the best version of an algorithm." I still didn't adopt better practices, but at least I started to get a sense of why I might.
Fast-forward to today. I know lots of users who've picked up software dev tools like they are no big deal, but I know lots more who are still holding onto their ad-hoc workflows as long as they can. I'm on a bit of a campaign to try to change this. I'd like to help MATLAB users recognize when they have problems that are best solved by borrowing tools from our software developer friends, and then give a gentle onramp to using these tools with MATLAB.
I recently published this guide as a start:
Waddya think? Does the idea of Reluctant Developer resonate with you? If you take some time to read the guide, I'd love comments here or give suggestions by creating Issues on the guide on GitHub (there I go, sneaking in some software dev stuff ...)
6 Comments
Time DescendingI think it is important to anchor this discussion in the scope statement of the MATLAB Coding Guidelines themselves:
“Primarily targeted at teams of MATLAB developers contributing to a large application or library.”
That qualifier matters.
I fully support good coding practices, and I think version control, testing, and consistency are enormously valuable when developing large, shared codebases. Or even small personal codebases. However, not all MATLAB code lives in that domain.
There is a meaningful distinction between:
- Developing a long-lived application with multiple contributors and external users, and
- Writing mathematical or engineering research code whose primary purpose is to explore, validate, and communicate ideas.
Research code often has:
- No external customer.
- No formal release cycle.
- Rapid, exploratory evolution.
- Forked or adapted versions tied to specific experiments.
- Variable names that must align with established mathematical notation.
For example, consider the quadratic formula which converts directly to MATLAB as something like:
x_p = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
x_m = (-b - sqrt(b^2 - 4*a*c)) / (2*a);
No professor would benefit from renaming a, b, and c to some looooong descriptive names that programmers would have us all using:
x_positive_term = (-quadraticTermCoefficient + sqrt(linearTermCoefficient^2 - 4*quadraticTermCoefficient*constantTerm)) / (2*quadraticTermCoefficient);
x_negative_term = (-quadraticTermCoefficient - sqrt(linearTermCoefficient^2 - 4*quadraticTermCoefficient*constantTerm)) / (2*quadraticTermCoefficient);
This does not scan, cannot be shown sensibly on a slide to a class, does not match the literature. In research code, fidelity to the literature is often more important than descriptive verbosity. The code must map cleanly to equations in papers and textbooks, something that is less commonly a factor in the average programmers life. For researchers the code is a tool which is just a part of a much larger context and must connect with and make sense in relation to their entire research landscape.
Similarly, exploratory research workflows often prioritize iteration speed and conceptual clarity over formal release engineering. The optimization criteria are different: insight and reproducibility to the author and their immediate colleagues, not customer-facing robustness or long-term maintainability across large teams.
That does not mean research code should be sloppy. It means that coding practices should be domain-appropriate. The “right” level of tooling, structure, documentation, and process depends on:
- Team size,
- Expected lifespan,
- Reuse horizon,
- Audience and distribution,
- And the degree/speed to which the code is evolving versus stabilizing.
In my view, the conversation should not be framed as “MATLAB users becoming reluctant developers,” but rather as recognizing that MATLAB serves multiple domains, and each domain has legitimate, distinct equilibria. The key question is not whether everyone should adopt large-project workflows — but when those workflows provide net benefit relative to their cost, and how they can be tailored to suit researchers. Sadly that is the part of the conversation that usually is missing.
It took me a while to get to reading this (see what I did there), but your points resonate with me. Some input from me, I actually have become way more disciplined about "developer stuff" thanks to GenAI. I used to be lazy about tests, specs, and docs. These are such a low bar now, you have to be actively avoiding them. And, I have found out that if you write clear specs and promps, you get much better. So, over three years of learning how to get the best from GenAI output, I have also learned that solid software engineering discipline pays off. Imagine. Ha.
Sign in to participate