Resources for learning systems programming

A note of caution: Be careful of spending too much time doing the easy work of looking for “resources”, rather than the hard work of consistent practice. Have fun ๐Ÿ™‚

Top Recommendations


Textbooks

Websites

University Course Materials

Youtube

Linux/FreeBSD

Linux/POSIX Userspace

  • The Linux Programming Interface: A Linux and UNIX System Programming Handbook

Blogs:

Concurrency & Parallelism

Turtles all the way down

Everything is an app to the layer below it.

  • A web app is an app to the web browser
  • The web browser is an app to the operating system
  • The operating system is an app to the bootloader
  • The bootloader is an app to the boot ROM
  • The boot ROM is an app to the CPU boot sequence

Tip: When you’re learning a new programming language, look up prominent open source projects and copy their style

Tip: When you’re learning a new programming language, look up prominent open source projects and copy their style.

Aside from the core language, there are many conventions & little details to learn: naming (variables, classes, files), file structuring, literal code formatting

These are things few blogs talk about because it’s highly opinionated. But nevertheless when you’re learning, you’ll benefit from at least some reference for these.

Find a few “professional” open source projects and browse to see what various interpretations of “professional style” are. Then pick one you like most.

Be careful of picking projects that are too old โ€” they might use older style for consistency with legacy, even though they might ideally wish to modernize it.

And ideally pick projects whose contributors are experienced engineers who work on it full-time. Since they “live in” the codebase, they’re less likely to tolerate sloppiness – or are at least more invested in cleaning it up.

The last idea is influenced by @awesomekling, who talks about similar things in his classic “My top advice for programmers looking to improve” car-talk video =]

Even if people already know the plot, they appreciate the way you tell the story

This is something my former colleague, Trent Brunson, told me on Twitter once that I’ll never forget. I tweeted earnestly how there were many things I wanted to share, but was concerned that everyone else knows these things already.

Trent’s (now-deleted) reply was:

I can’t think of a single time where I haven’t learned something from you. Keep sharing! Even if people already know the plot, they appreciate the way you tell the story.

So go forth, share freely, and don’t worry if the topic has already been covered, or if people are already familiar with what you’d like to share.


Accept the constraint and deal with the consequences

I deal a lot with decision paralysis and this has been a helpful mental tool. Decisions I might get stuck on:

  • Which product do I buy of these options
  • Which apartment do I move into
  • Which travel itinerary do I book

Decisions are effectively constraints on your life path. At one point, you have N options open to you, but after the (permanent) decision, you now have only one, the one you chose.

The paralysis comes from worrying about making the wrong decision and suffering because of it. But at a certain point, the decision process saturates. You run out of time and energy, and spending more of them doesn’t create a better decision. (It might worsen it in fact as you second-guess a previously good decision.) But even at this saturation point, you still might be unsure what to do.

Here, I find that it helps to just:

  • Recognize that moving forward is more important than making the “best” decision
  • Pick a promising option and accept that I’ll deal with whatever future consequences
  • Move on

Creative potential energy

Creative potential is to potential energy as creative output is to kinetic energy.

I feel strongly that everyone has potential in them to be creative in some form โ€” “creative potential”. When someone creates something, the potential is released into some kind of output โ€” “creative output”. (This applies even to ephemeral creativity like a live performance.)

Just like how electric potential energy (voltage) is converted to tremendous kinetic energy (current) with lightning, or via a short in a circuit, creative potential can be violently converted into creative output when the conditions are right (a “channel”). Another name for this process is “creative flow”.

The trick is finding the right conditions for a person to unleash their creative potential. The space of environmental conditions is vast with infinite parameters, including:

  • Art form
  • Instruments available
  • Time & place
  • Solo or with others

While I firmly believe people can discover their medium at any age, I think it’s important to focus on finding at least one pre-adulthood. Unfortunately after that point I think people lose confidence in themselves and resign themselves as “uncreative”, which can be a tough hurdle to get over.


I’m happy to say I’ve personally, finally found a channel for my writing practice, right here on this blog. More on that here.

Unpublished content is like cash under your mattress

I think a good reason to publish art sooner than later, and to default to creating in public, is so your art can start accruing interest as soon as possible. (“Art” used loosely; think content & projects also).

If you make art but only ever keep it private, there is a zero chance of it ever being discovered or enjoyed. In that sense, there is some wasted potential, like cash in the mattress.

But if the art is published (not necessarily promoted), there’s a non-zero chance of it being discovered and enjoyed by other people (potentially many others) with no work on your part. That’s what I mean by interest โ€” some potential upside, at no cost to you.

I’ve been practicing this with this very blog. I write a lot and tell no one because that feels good at the moment. However, I already did spot some interest accrued: The “Nixers” newsletter #221 included a link to a recent post where I did zero promotion. Thank you!


P.S. Another advantage is that the work is readily available to be shared if you ever choose to at any point in the future โ€” no need to dig it up and upload it.

Learn to build your own tools

It’s worth it to learn to build your own tools. If you don’t, the only tools you’ll be able to use are those that someone else made, created a company around, then brought to mass market (henceforth, “the song and dance”).

That’s a herculean task, even for software tools which are the easiest to do all that with.

But just because someone didn’t do the song and dance (or failed at any of the infinite points to do so along the way, possibly even due to sheer bad luck) doesn’t mean that tool couldn’t exist today and be actively improving your life, right now.

There is a mind-boggling effort difference between making a prototype product that provides value today, and productionizing that product for the mass market and doing the song and dance.

Prototype products which are only ever used by the creator (i.e. expert user) for utilitarian reasons don’t need to have clean UIs, graceful error handling, or intuitive, consistent, and discoverable UX. They just need to kind of do the job.

The unreal effort required for mass market means that the actual products on the market today are only a tiny subset of the actual products possible in the world now without a technological breakthrough.

You, personally, would probably benefit from some of both sets of products; some that exist today on the market, some that could but no one did yet. Some of the latter might have even been game-changing for you.

But if you know how to build your own tools, you can access that superset of possible products today. Even if it’s just prototype quality tools, that might be good enough.

I’m talking mostly about digital tools but argument applies to anything. What I find especially interesting is how trends in technology continually decrease the effort to build prototype software. This used to require code. Then no-code came around. And finally AI generated code is here. People at large already do this today with tools like Excel, but I wouldn’t be surprised if many more people in the future are using bespoke one-off prototype mobile apps, desktop apps, and web software they’ve built for themselves to solve specific everyday problems.

Personally I do this a bunch already using code and no-code solutions:

And a few no-code apps I’ve built for myself using AppSheet:

  • Personal metrics tracking app
  • Simple personal finance and budgeting app
  • Simple personal CRM

I’ve also created a custom calendar in Google Sheets which has really improved my life in 2023. Maybe I’ll write about that later.

Life is a business; life is a game; life is art

Here are three ways to view your life:

Life as a business

Life is a business, and you are the Founder & CEO.

You have goals, resources, and agency. The idea is to build the strongest business and life for yourself. You do this by making good decisions and generating profit.

The most savvy founders look for holes in the fabric of society, the market, their industry โ€” and exploit them. They seek trends that allow them to be ahead of the curve.

Life as a game

Life is a game, and you are a player.

You are initialized with random parameters that inform your strengths, weaknesses, and initial environment. There’s an endless world in front of you to explore and play in.

The idea is to do well at the game โ€” build points, power, connections. You encounter other players, transact with them, exchange moves, determine if they are trustworthy or hostile.

You learn the rules over time and understand what game you are even playing. You discover that within the greater context of “the game”, there are many sub-games you can play.

Randomness and luck are all built into the game.

Life as an art piece

Life is an art project, and you are the artist.

You have a blank canvas in front of you and an infinite number of creative decisions to make. The idea is to find a beautiful & satisfying creative endpoint for your piece.

There are many creative paths to take, leading to different ends. There is no best end, but some ends are better than others.

Like any other artist, you must apply techniques to manage the decision space. You apply constraints โ€” sometimes artificially, sometimes destructively โ€” to move forward.

Art/Artist Fit

Product/Market fit is when you’ve made a product that people actually want.

Product/Founder fit is when your product is a good fit for you, personally, as a founder.1

Art/Artist fit (something I just made up) is a generalization of Product/Founder given the point of view that products are art and making a product is an artistic practice.

Given that art is a reflection of the artist, it makes sense that certain kinds of art will be more or less natural for someone to make, given their personal inclinations.

A few examples from the wild:

In this episode of the Art of Product podcast (1:11:00), Adam Wathan talks about how a subscription-model content business isn’t a good fit for him, while it is a good fit for a friend. Adam doesn’t like the idea of “being on a treadmill” to constantly create new content for the subscribers but conversely his friend appreciates the continuous dopamine hits as opposed to a longer 4 month long effort to create something like an e-book or course.

Next is from Dan Luu, one of my favorite bloggers:

[Paul Graham’s writing] uses multiple aspects of what’s sometimes called classic style. […] . What that means is really too long to reasonably describe in this post, but I’ll say that one part of it is that the prose is clean, straightforward, and simple. […]

My style is opposite in many ways. I often have long, meandering, sentences, not for any particular literary purpose, but just because it reflects how I think

Dan Luu, https://danluu.com/writing-non-advice/

Last is from Kareful, one of my favorite musicians:

“does anyone have tips for finishing a song? these days i can only write the intro and 1st drop, and i can’t get passed this point” – Vavn

Maybe you’re not meant to write long music, I also had this discovery recently, now all my tracks are around 2 minutes, but I find this means I now finish 3/4 tracks a week.

Kareful

Personally, I find short, several-paragraph posts about a specific thought very much a fit for me right now. This blog started in a very different way, doing long, deeply technical researched pieces which were a fit for me at the time (gap year) but no longer are.

Musically, I loved hyper-technical electronic music production ~2020 (also during my gap year) but recently have been doing simpler, more “beatsy” music.