Last updated on 2023-09-28 22:43
Useful resources
This page contains a number of essays and books I found particularly instructive, and software packages I frequently use. The resource list below is obviously not exhaustive.
Readings in programming
Various materials available online:
-
Peter Norvig's classic Teach Yourself Programming in Ten Years, here.
-
MIT's The Missing Semester of Your CS Education, here.
-
Ben Kuhn's Essays on programming I think about a lot, here. Equally interesting are the many blogs people reference in the comments.
-
I like the 'code review pyramid'.
Physical books:
-
GoF's Design Patterns. This is best read once or twice, and then kept as a reference book.
-
Martin Fowler's Refactoring. Combined with GoF, this is a great resource on how to do OOP right, and improve the structure of existing code.
-
Kent Beck's Test-Driven Development. This book is short, to the point, and really hammers down the concepts of TDD. I often sin against the TDD premise of "test first, code later", but do agree that (almost all) code should - and can - be supported by meaningful tests or validation tools.
-
Andrew Hunt and David Thomas' The Pragmatic Programmer. This book is a classic, touching upon many aspects of software development. I like this book so much, it has not been on my book shelf for years: I keep lending it to friends and colleagues to read.
Software
Most of my personal projects are in Python because that language covers almost all of my needs, is extremely flexible, and I find its code structure visually pleasing (I am the first to concede all these points are extremely subjective). When performance is critical for a particular application, I often switch to C or C++, sometimes with Python bindings.
Most of my projects use numbers in some way, so in Python I often work with
numpy, pandas and the like.
In C++ I use Armadillo (arma
) as a
numpy
-equivalent.
Interfacing C++ and Python is achieved by the excellent pybind11
project. I sometimes complement pybind11
with carma
for the conversion between numpy
and arma
types.
My mathematical programming problems are mostly solved with Gurobi,
but I have also used IBM's CPLEX
and Google's OR-Tools in the past.
For an open-source project, OR-Tools
works really well and I intend to use it
more often in the future.