--- lastmod: "2021-09-12T22:47:44.0000000+01:00" author: patrick categories: - programming comments: true date: "2021-02-03T00:00:00Z" title: Software engineer syllabus summary: "An incomplete but growing list of things I would make mandatory reading if I were building a software engineering syllabus." --- This is an ad-hoc list of posts or books that would form part of my software engineering syllabus if I were to make one. The list grows when I remember something I've read before or discover something new. # Source control * [Pro Git](https://git-scm.com/book/en/v2). # Testing * Property-based testing. Since many people start with Python, I'd start with the [Hypothesis docs](https://hypothesis.readthedocs.io/en/latest/). # Design * [Domain-driven design](https://fsharpforfunandprofit.com/series/designing-with-types.html). # People skills * Turn The Ship Around, and its sequel, Leadership Is Language, by David Marquet. # Documentation * Look at some examples of truly first-class documentation. https://reference.wolfram.com/language/ref/Graph.html is interactive documentation (if you have Mathematica) that is absolutely superlative. From another angle, the [Rust book](https://doc.rust-lang.org/book/) is widely agreed to be excellent. * The nature of documentation: https://documentation.divio.com/ # Things everyone always gets wrong Things are in this section to make sure that you recognise that they are *hard*. * [Unicode](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/). The article is from 2003, but the only thing which has aged is that everyone agrees now that UTF8 is the correct way to go (it was pretty new at the time of the article). * [Time](https://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time) * [Names](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/) * [Addresses](https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/) * [Cryptography](https://security.stackexchange.com/a/18198) * [Package managers](https://medium.com/@sdboyer/so-you-want-to-write-a-package-manager-4ae9c17d9527)