Last updated on 2023-09-28 22:43
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'.
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.
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.