The Two Types of Computer Programmer
“Computer Programming”
When we talk about “programming” on the internet, I fear that two different camps are often talking entirely past each other. I see it especially acutly on Hacker News and other forums when discussing Rust or Protobuf or other projects that are made for specific tasks, and I see it in discussions with my friends who are obstensibly fellow programmers, but seem to have an entirely different understanding and experience of what that job entails. And I see it in in-person and online discussions about the value of college and how much the learning there matters. In all of these discussions, people who are really focussed on computation and data and cache lines and topology clash with people who see the value of programming as helping people in the world do things that they couldn’t before. That is to say, I belive that thare are two types of computer programmer: those for whom the program is the focus, and those for whom the computer is the focus.
When stated like that, it sounds somewhere between insightful and pedantic, so to state it in a slightly less pithy way: Some programmer program to produce a piece of code that priamily does something, with little care about the underlying computer. And some programmers have the underlying computer(s) and their architecture and topology and quirks at the forefront of their mind as they work.
While I will care to elaborate the two here as dispassionately as I can, I must admit that I am firmly of the computer camp of the two. At my day job, I wrangle network packets and PCIe CPLs and cache lines and icache misses and [IO]TLBs. I look at perf for instruction-level timings, and am far more familiar with the AMD PMU than I ever wanted to be. And I love every second of it. So take the rest of this post with a grain of salt, as I will undoubtably impart my own biases and understanding of the world.
Learning Programming
One way that this divide strikes me is from the various ways that people learn their first programming. My first CS class in college was in Python, writing simple little bits of logic to manipulate strings and sort lists and the like1. This is the approach that UC Irvine in 2017 (and to my knowledge most other colleges) take towards learning: ease kids into it with basic logic and a very forgiving lanuage. We started at basic logic, and went downwards to learn C and then MIPS assembly afterwards2. This is not how the graybeards I talk with learned about programming. Many of the older folks I talk to come from a time before
AI disclaimer: No AI was used in preparing the content of this blog post. AI was used extensively to get this cache-line counter to understand web technologies. Other disclaimers: I work for Big Tech, but all words here are my own. No employer, current or former has read this content before publication.
-
It’s maybe worth stating that I in particular came into college with quite significant programming experience. My high school classes were ok, and my experiences in First Robotics gave me a shocking amount of background in CLI use, sockets and threading. ↩︎
-
Our first C class in particular was a bit of a weeder, as many students struggled with things like writing a memory allocator. ↩︎