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
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.
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
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.
I thought of this 7 years ago and I still think it rings true. In my experience, school projects were tightly scoped and had things like a basic build system and boilerplate runnable code (e.g.
main) already provided. Maybe even some tests. It trains a specific muscle in a certain way.
With personal projects, you do all of this yourself and incidentally also train the equivalent “stabilizer” muscles. Things like: making the repo, writing the
main and boilerplate code, setting up unit tests, setting up CI, setting up dependencies and their management.
And in my experience, it’s all these “stabilizer” activities that define what it means to be a senior engineer. Junior engineers work within an existing project; senior engineers own the entire thing, including these “little” (critical) parts.
The point here isn’t to necessarily criticize CS education; there are good, practical reasons for setting up such project structure to ensure all students have a good experience, given the time constraints. The point is that students should be wary of not doing any personal projects at all throughout a CS education. Maybe it would be possible so students don’t have to do this in their free time, and build it into some kind of flexible course. I suppose this is the point of final capstone projects, but I think senior year is far too late to be doing this for the first time.
A lot of my friends have been sucked up into UFOs lately
I’m happy for them
at least i try to be
I want to be sucked into a UFO too
I’m working hard at it
at least i try to be
we didn’t think it could happen
but then it did
took about ten years
it wasn’t a fluke
i’m happy for them
at least i try to be
it’s not always easy
but i try to be more proud than envious
more inspired than jealous
but i have a confession
i write this from a UFO
yes, i got sucked up too
in my own special ufo, in my own way
i once dreamed of it
but now it’s not enough
i want a bigger, newer one
maybe I should be more grateful
i’ll try to be
This poem was inspired by watching people in various areas of my life achieve incredible success. Y’all rock and I look up to you.
I was learning about the different types of RAM recently (e.g. SRAM and DRAM) and it occurred to me that “computer memory” is just an abstraction. This is obvious once you think about it but I think as a programmer, it’s very easy to not realize this. The idea of memory as a linear array of bits is an abstraction created and implemented by an electrical device.
Most programmers when they think of memory are thinking of virtual memory, which is a completely different abstraction. While it’s also a linear array of bits, the abstraction is created by the operating system and lives at a higher level.
One level below, the abstraction the operating system itself uses — “physical memory” — is the one I’m talking about, created by a a set of electrical devices connected to the CPU with wires (the memory bus).
I’m projecting without any basis, but I presume the reason so few programmers think of memory as an abstraction is because the abstraction is so strong. Nearly all of the time, it “just works” — you write bits and read them out later.1 The abstraction can leak slightly during programming disciplines that require awareness of low level details like the memory hierarchy and cache coherence (i.e. lockfree) but this is a leak of the abstraction of the memory hierarchy. The core abstraction of physical memory stays in tact — for example, programmers never need to be aware of the internal refresh mechanism of DRAM.2
Of course, you can go infinitely far with this — it’s turtles all the way down.
For the last three years, I’ve invested into learning to write. The main reason: strong writing skill is generally a shared quality among all the greatest thinkers, leaders and generally wise people of history.
How has it gone?
Really well. It’s paying off in many ways, and I only feel more inspired to keep doing it. I find that it gets more fun then more you do — the more ideas you have and the easier and faster it is to express them.
It’s paid off in my personal life with my offlinemark project. My writing (and general public creative efforts) has reached some unexpected places and put me in touch with some very interesting people. My most prized accomplishment is being cited in the Linux Kernel security mailing list.
It’s paid off in many ways at work. As a software engineer, I do a lot of writing at work, and I pride myself in having great written communication there. I write a lot of documentation, hold it up to a high standard, and people notice. I get points for this because most engineers don’t like writing docs, but I’ve trained myself to enjoy it.
Beyond these, modern life generally involves a good amount of written communication. I’ve found that putting in these reps has simply made this part of life a bit easier.
P.S. Something else I’ve observed is that I find myself having more ideas and being more aware of them. Whether they’re good or insightful is a different matter, but I’d like to believe that over time they’ll get there.
This has become crystal clear to me at my current job. As much as I’ve had success teaching myself things about computers, nothing, nothing, beats spending time with experts and learning from them.
I had never truly experienced this before and was shocked at how much I was able to learn, in such little time — about C++, git, Linux, and more.
It can be a significant price to pay, but nothing beats literally becoming an employee at a company with experts in a field you care about and joining their team. This is ideal from a learning perspective because as a team member, the experts become invested in your growth and are incentivized to transfer knowledge to you. You just need to be ready to receive it.
Once you’ve tasted this, this truth is also bittersweet. You can only work at so many places. If you have many interests, you now have to live with the fact that for most areas, your learning will be stunted relative to what it could be.
My deep gratitude to the experts in my life: STK, DIR, CSK, MKL, RYB, MZA — thank you.