I work in biotech as a full-stack data scientist and solo developer. My work spans everything from building internal user interfaces to designing infrastructure, modeling data, and optimizing lab workflows. I work closely with scientists and build tools that support their day-to-day experiments and decision-making.
Programming is a huge part of how I do that. I came into it relatively late, during my master’s degree in biotechnology, and since then, it’s become one of my core capabilities. Over time, I’ve used R, Python, and Julia professionally. But recently, I’ve found an unexpected favorite: Lua.
A Different Path to Lua
Most people who use Lua either come from:
- Game development (e.g. scripting in Love2D or Roblox)
- Configuration or extension tools (e.g. Neovim)
My path was gradual and practical. I needed a scripting language that was fast to start, lightweight, and simple to manage, something that could power small utilities and internal tools without unnecessary complexity. Lua met all those needs and more.
The Problem with Bigger Tools
Julia was my favorite language for a long time. It felt like what Python should have been, elegant, fast, and scientific by design. But the more I worked, the more friction I encountered:
- Julia’s compilation time is great for heavy computation, but painful for short-lived scripts.
- Managing environments and dependencies, while flexible, adds overhead.
- Debugging often involves heavy IDEs or complex tooling setups.
Python is more mature in its ecosystem, but I’ve found it often encourages relying on heavyweight packages for even basic tasks, and debugging can be slow or bloated in practice.
Lua: Focused, Fast, and Minimal
Lua is what I reach for now when I want things to just work:
- Zero-dependency debugging: I insert a breakpoint and get an interactive REPL on the spot. No IDE required.
- Instant startup: Lua scripts run immediately, no waiting for compilers or virtual environments.
- Flexible data model: Tables in Lua serve as lists, maps, dataframes, graphs, and more.
It’s not about replacing Python or Julia, it’s about choosing the tool that adds the least friction for the job at hand.
Building What I Need
One of the things I love most about Lua is how easy it makes it to build my own tools. I don’t want to pull in a huge library for every small task, especially when most of the functionality is irrelevant to my specific needs.
I’ve published my own helper library, lua-utils, with functions I actually use day-to-day.
Another project I built is brain-ex, a terminal companion for Obsidian. It:
- Parses an Obsidian vault into a structured SQLite database
- Adds task management features
- Lets me search and interact with notes from the command line, without switching to a GUI
This was all built in plain Lua. No frameworks, no overhead, just simple code that does exactly what I need.
Editor, Style, and Simplicity
While I don’t use Neovim, I do use the Micro editor, which uses Lua for plugin development. It fits my style, lightweight, terminal-based, and unobtrusive.
I also prefer procedural over object-oriented Lua. The language doesn’t force any particular style on you, which I appreciate.
A Language That Stays Out of the Way
Coming from scientific computing, 1-based indexing is the most intuitive to me. But beyond that, Lua keeps my cognitive load low:
- No need to vectorize everything like NumPy
- No overly clever pipe chains like in R or Julia
- Fewer decisions to make means more time solving real problems
In short, Lua reduces brain clutter.
Why Lua Works for Me
Most of my work involves:
- Querying databases
- Calling APIs
- Light data wrangling
- Disk I/O
- Scripted automation
Basically, gluing different tools together.
Lua is fast and expressive for all of this. When I need something from a larger ecosystem, I still use Python or Julia, but I start with Lua by default.
Not Without Trade-offs
Lua has its quirks and limitations too:
- REPL experience is not as smooth as in other languages. Because variables are local by default, interactive development (e.g. line-by-line execution) can feel clunky.
- Limited community support for some domains: You won’t find the same level of help from LLMs for Lua as you do for Python.
- Not widely used for ML or data science: If you need access to machine learning frameworks or large scientific libraries, you’ll likely need to fall back on Python or Julia.
Still, for scripting, automation, and building lightweight tools, Lua is perfect for me!
Top comments (0)