Last updated on 2024-02-02 12:29

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. I re-read this essay about once a year.

  • 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, 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.

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 concede all these points are extremely subjective). When performance is critical for a particular application, I prefer to use 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, if needed. Interfacing C++ and Python is achieved by the excellent pybind11 project.

My mathematical programming problems are today mostly solved with Gurobi. I have also used CPLEX and OR-Tools in the past. I want to use HiGHS more in the future.