Nick George
Science Programming

Programming

(Jump to posts)

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.

Experience

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

Programming posts