Last updated on 2024-02-27 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.