Last updated on 2023-03-20 20:38
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.
Robert L. Read's How to be a Programmer, here. I like the long treatment of various soft skills, particularly in the "Intermediate" and "Advanced" sections of the book.
I like the 'code review pyramid'.
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.
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
Interfacing C++ and Python is achieved by the excellent pybind11
project. I sometimes complement
pybind11 with carma
for the conversion between
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.