I’m the kind of person who has a hard time hitting the iron while it’s hot.

I read through “System Programming You Can Understand in Go”. I bought it a long time ago, but I read it halfway through and neglected it, so I read & studied it again from the beginning.

I think it was soon after I got to know Go when I purchased it. I think the reason why I neglected it is because I couldn’t catch up with the level of knowledge of Go at that time and it was hard to read and study again. Even now, I don’t touch Go in my work. But I participated in Gophere Dojo last year and got basic knowledge of Go, wrote some small tools with Go personally, and recently I sent PR to small OSS written with Go. I think I’ve acquired some knowledge of it. As I expected, I was able to read it more smoothly this time than the last time I read it.

One of the good points of this book is that it doesn’t start from the hard core of system programming, but it also introduces Go itself such as interface, goroutine and channels. For example, chapters 2 and 3 introduce io.Writer and io.Reader, respectively, and explain the role of abstraction in the OS, as well as the relationship with the interface introduced in the previous chapter. Chapter 4 is an introduction to goroutine and channels, with a minimum number of goroutine patterns. From chapter 5 onwards, I explain the system calls, network, file system, processes, signals, memory, and finally, containers, using the functions of Go that I have described so far. It is also good that the chapter that introduces Go itself has questions at the end of the chapter. If you can confirm your understanding of the functions of Go, you can easily start to understand the system programming in the second half of the book.

The book is a compilation of articles originally published in ASCII, so it’s a good idea to skim through the articles before you buy.

Systems programming is kind of a muddy area. I don’t get the impression that a lot of it is that difficult to do if you take a few steps, and I feel that it requires a lot of steadiness. (I say that without knowing 90% of system programming) Even in this industry, which is advancing at a fast pace, this is an area where the gap between the pace of progress and that of a few decades ago is relatively unexplored, and it’s not going to get that much wider in the future. I read through this part of the book with the idea that it might help me later if I know this part of the book now, but the content is interesting and I want more details! I feel like I’m going to be able to do that. Now I’m reading Rui’s compiler book and making C Compiler by myself, and I want to challenge “30 days OS book” after I finish it.

I’d like to continue writing Go as well. The second edition of Real World HTTP by the same author has been published recently and I want to read it. I have a lot of books to read.

My notes, answers to questions and codes I wrote during my study are in the following repository.

Study Repository