Goal: Become a pro systems programmer

That’s a personal goal of mine. I’m not sure why, but I think it comes from spending a long time in computer security and feeling unsatisfied with just breaking “low level” software โ€” I want to be able to build it too.

But what does “pro” mean? What does “systems programmer” even mean?

Here’s what comes to mind:

Little skillSome skillPractical experience with
Fluent in a systems programming language. Able to write idiomatic code.x
Understanding of modern systems programming concepts โ€” e.g. smart pointers.x
Understanding of operating system and hardware/software interfacex
Competent with C/C++ build concepts โ€” e.g. headers, source, compilation, linkingx
Able to engage professionally in open sourcex
Competent with git โ€” e.g. can rebase, rewrite history and prepare perfect patch series (no stray newlines, commits build on each other, etc)x
Understanding of multithreaded programming and concurrency. Able to write idiomatic multithreaded code.x
Skilled with development tools โ€” e.g. debuggerx
Competent with performance profilingx
Understanding of how to model data with a static type system โ€” e.g. static vs dynamic dispatch, polymorphism, OOP concepts, reference vs value semantics.x
Understanding of I/O programming, esp. async I/O.x
Understanding of different OS platforms โ€” e.g Linux, Windows, macOSx
Experience with a variety of architecturesx

Antigoals:

  • Become highly skilled in C++ template meta-programming

Milestones

  • 2014 โ€” First professional Linux kernel experience (internship)
  • 2016 โ€” Landed a job working on symbolic execution engine (Trail of Bits)
  • 2019 โ€” First professional C++ work (Trail of Bits / osquery)
  • 2019 โ€” Landed commit in lldb
  • 2020 โ€” Landed commit in Linux kernel
  • 2021 โ€” Landed a full time C++ job (Ableton)
  • 2021 โ€” Built significant git competence (Ableton)
  • 2023 โ€” Built significant Linux kernel & hardware / software interface knowledge at work (Ableton)
  • 2023 โ€” Built knowledge of data modeling with static type system (Ableton)

Any thoughts?