I learned to program because I was tired of wasting my time doing simple, repetitive things that are surpisingly common (and surprisingly well tolerated by otherwise intelligent people) while doing scientific research (neuroscience). I fell in love with building things and thinking about how computers work. Now much of my professional life and personal time is spent playing with programming languages and building things.
I’m always looking to expand my programming toolbox so I can reach for the right tool for the task at hand.
I am most familiar with Python. Python was my first language and is my go-to scripting and quick data exploration/processing language.
You can’t beat R for statistics or scientific graphics, and I use it exclusively for statistical programming, data munging, and visualizations (primarily the dplyr and ggplot2 libraries).
I started exploring Clojure a few years ago after I stumbled across some of Rich Hickey’s talks. I like Clojure because it is a simple, flexible, and well though out language (I built originally built this website when using Clojure). Clojure changed the way I think about programming more than any other language (minimizing dependencies and focusing on data-oriented programming), despite the fact that I rarely use it day to day.
Recently, I started exploring Go, and to a lesser extent (so far) Rust. Over the years, I have built some cool things, but I also felt the pain of distributing software written in scripting languages like Python and R. Try explaining a virtual environment to a scientist who just discovered a terminal and you’ll see what I mean. In my opinion, it is nearly impossible to distribute any non-trivial code written in Python to non-programmers (not going to name names, but go check out the several pages of instructions on setting up any open source projects used by sceintists (chances are they require a programmer and a dedicated Ubuntu machine to use). This is a big problem!
Go appealed to me due to the type safety (this is my first serious experience with a strongly typed, compiled language), and the ease of distribution (compile and send the binary). I’ve been bitten by type errors when refactoring Python code or doing simple analysis a lot, and I’d like that to not be the case anymore.
Go is just my first stop as I move down the stack and start exploring languages a little closer to the machine. I’d like to build fast, reliable, tools, and I’m less convinced than ever that scripting and web languages are the way to do that.
Some tools I’ve worked on
- ABF Explorer A GUI for looking at and simple analysis of ABF files from electrophysiology experiments
- ImageJ/Fiji Microscopy Scripts Plugin for ImageJ/Fiji. Tools for automating common and tedious image processing tasks
- Python image analysis Notes for plotting and image analysis using Python
Is Go (or Rust) a better language for scientific tools than Python?
Building static websites with Clojure: an update
Returning a list of dictionaries from a python SQLite3 query
Write your own CSS
Working with Ilastik HDF5 files using python and h5py
(Implicit) Update in place is evil. How to write in a functional style with mutable defaults in Python
Setting up and using the NEURON simulation environment and python with virtual environments
Building and deploying my website with make
Building ImageJ/Fiji Plugins with Clojure
A YASnippet for org-mode publishing
Org-mode changed my life: resources and notes
Building my static website with Clojure
Helpful git links
Org-reveal and GitHub Pages
Using python in org-mode
PlatformIO and Emacs
Setting up LaTeX on a Mac
Building a static website with Flask