Learning Resources

This is a page full of resources I have used through my career and would recommend to others.

General

General links/course that might be relevant for anyone interested in computer stuff

- Nand2Tetris

This is the single best online course I have ever done. You learn how computers work by building them up from the basic building blocks incrementally. Doing this course was a big Aha! moment for me, where I finally (felt like) I understood what is going on in a computer that makes it think.

I completed this course and read Code at a similar time, and following along with both was great!

- Missing Semester of your CS Education

This is mandatory reading. Explains/Introduces essential tools and techniques that are invaluable for a career software engineer, such as using bash for shell scripting, efficient text editing using vim and tmux, the basics of unix/linux tools, Git etc.

A really good jumping off point for developing your skils as a software engineer.

- Teach Yourself Computer Science

This is a great site that suggests a curriculum based on different resources available online (or in books). I used this alot before and during my CS MSc to see what other topics I felt like I was missing and to direct me what I should be learning. I haven't read or completed everything there, but its great to have somewhere to start to build your own journey. One day I will finish reading SICP!!

- Learn X in Y Minutes

Very useful site for getting a quick overview of a language. I frequently used this when playing about with all sorts of languages in the past and find it a clear reference if I have forgotten some syntax of a language I don't use frequently.

Git

- Learn Git Brancing:

This is a super tutorial, that really helped me get to grips with what is happening in git beyond the normal add commit push pull loop. After doing this tutorial (and a bunch of practice after) I now feel confident I could fix any horrible situation git can throw at me.

If git rebase fills your soul with fear, do this tutorial!!

Embedded Software

- Modern Embedded Systems Programming Course

Miro Sameks Master Class! If you are interested in being an embedded software engineer, this is THE course. I wish someone had sent me this when I was younger!

Do yourself a favour, get a board and follow along.

- Making Embedded Systems

A very nice conversational introduction to embedded systems. Not focused on coding, as much as arming you with the knowledge you need to be a sucessful embedded software engineer. A great book to read if you are just starting out!

Also, the author hosts a podcast Embedded.fm where they chat with interesting people in the embedded space. There are loads of great episodes and I found out about a lot of cool projects and tools from listening

- The Definitive Guide to ARM Cortex M3 and Cortex M4 Processors

It is what it sounds like, and its an absoulte life saver. If you work with a CortexM3/4 microcontroller, you should have this book on your desk. Mine is full of postit notes, cos who has time to remember the difference between a BusFault and a MemManage fault...

- Other References

The following are a few links/articles that helped me figure out different technologies, or that I still look back to:

C Programming

There are loads of C programming books, and I have read several. If you want to get started, then I recommend looking at Beej's guide to C programming/, as this is available online and pretty easy going, while still being comprehensive.

- K&R The C Programming Language

Classic, and still good today!

- Headfirst C

The first book I read about C programming. In 2020, when I was starting my career, I saw a job advert for an embedded software engineer role at ClydeSpace that had the requirement "proficient C programmer". At that point, I knew I wanted that job eventually, and so I ordered this book, having previously read parts of "HeadFirst Design Patterns" and enjoyed it. I then worked my way through the book, doing all the exercises, and a few years later I'm an embedded software engineer at ClydeSpace writing software for CubeSats.

If you are new to programming, like I was at the time, then I would definitely recommend this book; even if you aren't a big reader (the book is very interactive with lots of exercises).

- Expert C Programming: Deep C Secrets

War stories from the sun compiler team. Some of it is dated, but the book is very funny. If you want to learn all the horrible/glorious things you can do with C, this is the book to read.

- C Interfaces and Implementations

I started reading this, but yet to finish it, but what I have read so far is very good. The book is written in a literate style, which I found a bit strange, and the structure is going through different data structures and patterns in C code, designing the interfaces for them, and then going through their implementation. I think finishing this book will be very useful for me at the moment.

- Effective C

A good journeyman C book about writing secure, modern C code.

- Modern C

Another book about writing modern C code. I started this but didn't finish it as I had only just finished reading Effective C, and I think the two share a lot of ground. However, Modern C is freely available online, and a new edition covers C23, so I would be interested to revisit it.

- cppreference.com

The best C reference on the internet. If I need to figure out how to use a standard library function, or what C version/complier implements some modern feature, this is the place I look.

Perl

I've been learning perl recently, by reading Learning Perl (the llama book). Its very easy to read, written in an funny style, and I'll soon be moving onto the next in the series, Intermediate Perl, which I expect to be just as good!

Python

Run python3 to enter the repl, and run help() to get interactive docs.

I never really read any books on python, I learned most of my python through training and solving problems at work and by getting help from colleagues. The python docs are great however.

Terminal Stuff

  • Neovim
  • Tmux

Digital Signal Processing

I want to learn DSP to be able to write synthesiser eventually. I have been using the guide From zero to boutique module manufacture, which is a document written by the creator of mutable instruments to outline what you might need to learn to build synths, and the resources you could use. As such, I have "Understanding Digital Signal Processing" on my shelf, ready to go whenever I decide to commit to reading it!

Typing

You should learn to touch type, here are some resources:

Also, get a split keyboard for better posture/ergonomics:

Lisp

I want to use lisp, but how?

- Clojure for the brave and true!

This is the first programming book I ever read, and clojure is the second language I learned (after python). I never really coded anything in anger in clojure, but reading about it taught me about lisp, functional paradigms and all the myriad ways of doing things in different language. Reading this book also made me realise that many programming books are actually fun to read! (unlike previous textbooks I had read at school or uni)

I would definitely recommend learning something different to what you know, even if you never use it again. Its a great way to widen your perpective.

- The roots of lisp

One of the most enlightening things I have ever read. Very short article explaining the building blocks of a lisp interpreter. Absolutely worth reading!

Forth

- Starting Forth

- JonesForth

- Ratfactor Blog Post

- DuskOS

- lua miniforth

I used this article to implement a forth for neovim

- Udamonic Scamp (FlashForth)