Why assembly still matters in 2026 — and the jobs where I’d actually write it

Derek Chen

Derek Chen

September 18, 2026

Why assembly still matters in 2026 — and the jobs where I’d actually write it

I would not learn assembly to get hired. I learned enough of it to stop guessing. That is a different syllabus, and it is the only reason the language still belongs in a working engineer’s week in 2026.

Most product work will never require a handwritten vmovaps. Compilers are good. JITs are good. The people who write assembly for sport are usually avoiding a profiler. The people who write it for money are usually looking at a listing the compiler already emitted and changing a constraint, not composing a sonnet in AT&T syntax.

Here is where I would still write it, where I would only read it, and the jobs that are lying when they list “x86 assembly” next to “REST APIs” and “team player.”

What “matters” actually means

Assembly matters as a reading language. If you cannot read what clang or gcc or the JIT left in Godbolt, you will argue about C++ or Rust or Java with folklore. I have sat in reviews where someone swore a loop was vectorized because they used a hint, and the listing was a scalar mess because of an alias the type system did not kill. The argument ended when we opened the assembly. It always does.

It matters as a model of cost. Registers, caches, mispredicted branches, a call that is not free, a syscall that is a country. You do not need to write a kernel to use that model. You need it when someone wants to put a log line in a 20-nanosecond function, or when a Go pprof points at runtime and you need to know whether you are looking at allocation or a copy you invented.

It matters as a contract at the edges: boot, a trap handler, a context switch, a trampoline between languages, a few instructions that must be exactly those instructions because the hardware says so. That is writing, not reading. It is rare. Rarity is not the same as nostalgia.

Jobs where I would actually write it

Firmware and bring-up. A SoC that is not yet a Linux box. The first instructions after reset. A vector table. A delay that cannot be a sleep because there is no OS. I have watched teams try to do this from a C file that assumed a CRT. They got a pretty blink and a mysterious hang. The hang was the listing. I would write the tiny start file, then flee back to C.

A codec, a crypto primitive you should not invent, a DSP loop that the compiler will not touch the way the ISA wants. Even here I start with intrinsics — _mm256_*, NEON, SVE if we are on that iron. Intrinsics are assembly with a type checker. I drop to raw asm when the intrinsic version still spills, or when I need an instruction the intrinsic header forgot. I do it in a .S file with tests against a naive reference, not as inline poetry in a header.

A runtime or a VM leaf. Interpreters, JITs, a Go or JVM runtime change, a WASM engine. You will write or patch assembly because the calling convention and the stack map are the product. This is not app work. This is a job you take on purpose.

Security research and exploit analysis — reading more than writing. I am not in that job now. I still open a listing when a crash is in a third-party blob. If you cannot read it, you are negotiating with a vendor using adjectives.

Game and engine inner loops, sometimes. More often the work is “stop doing this in the wrong cache line” and the listing is the proof. I would write assembly only after the profiler and the compiler flags have lost. I have seen studios keep a file of old SSE as a museum. I delete the museum when the compiler caught up.

A hardware bench with a microcontroller, logic probes, and a laptop showing a disassembly listing

Jobs that list it and should not

A CRUD platform team listing MASM is performing seriousness. A web agency listing ARM assembly next to WordPress is a red flag about how they write JDs. I treat “assembly required” on a product-engineer req the way I treat “10 years of Rust” at a two-year-old company: as a sign the document was generated.

What they often mean is “we hope you will care about performance.” Then they should say: we read profiles, we keep a benchmark, we will not merge a hot-path change without a number. That is the skill. Assembly is a tool for that skill, not a substitute for it.

I also distrust interview puzzles that ask you to write a function in assembly on a whiteboard. That filters for a class you took and a kind of anxiety. I would rather hand you Godbolt and a slow C function and ask what you would change first. The second interview predicts the job. The first predicts a hobby.

How I would learn it in 2026 without becoming a hobbyist

Pick one ISA you will actually meet. For me that is x86-64 at work and a bit of AArch64 because the laptops and the phones and the Graviton boxes are not going away. I would not start with 16-bit DOS nostalgia unless I wanted a hobby. Hobbies are fine. They are not a career plan.

I would learn:

  • How to read a listing: prologue, spills, a call, a loop, a branch. AT&T versus Intel syntax enough that Godbolt does not scare me.
  • Calling conventions for the platforms I ship — who owns which register, where the return goes, why a large struct became a secret allocation.
  • What a sanitizer and a compiler do to my mental model. -O3 is a different language than -O0.
  • How to ask Compiler Explorer the right question: this C++ with this flag, this Rust, this Go //go:noinline.

I would not memorize opcode tables. I would not write a bootloader for fun unless I wanted to. I would take one hot function from a system I own, dump the listing, and write three sentences about why it looks like that. Then I would change the C and see the listing change. That loop is the education. A book of ARM is a reference for when the loop gets stuck.

AI assistants will happily emit assembly that assembles. I treat it like generated C++: suspicious, useful as a draft, not a source of truth until a test and a listing I can read agree. I have already seen a model invent an instruction that looked plausible. The assembler was the code review.

Compiler Explorer on a monitor next to a printed CPU optimization note

When I refuse to write it

I refuse when the problem is algorithmic or I/O. No listing saves a quadratic, and no SIMD saves a chatty database. I refuse when the team cannot test it. An untested asm file is a future incident with a small blast radius and a large ego. I refuse when the only reason is “it will be faster.” Faster than what, measured how, on which uarch, after which compiler upgrade?

I refuse to maintain a second implementation in assembly for a function the compiler already does well. Dual implementations drift. The asm becomes the untrusted one or the sacred one. Both are bad. If I must keep it, I keep a property test against the C version and a CI job on the uarch we claim to care about. If we do not have that machine in CI, we do not have that optimization. We have a story.

The jobs I would take, and the ones I would not

I would take a role that is honest about the metal: firmware, a runtime, a codec team, an engine with a real profile culture, a cloud CPU team that reads perf events. I would take a product role that never writes assembly if they let me open Godbolt when the argument needs it.

I would not take a role that wants handwritten asm as an identity and has no benchmark harness. I would not learn assembly to impress a 2026 job market that is already drowning in generated résumés listing “low-level.” The market does not pay for the noun. It pays for a wait you killed and can explain.

Assembly still matters because computers still execute instructions, and someone still has to look at them when the abstraction is lying. I would write it in the small places the hardware or the runtime demands. I would read it anywhere performance is not a vibe. I would not make a career of the syntax. I would make a career of not guessing. That is why it is still on my week, even when it is not on my résumé.

If you have one evening, open the listing for a function you already shipped. If you cannot explain the call and the loop, that is the gap — not a missing course in MASM. Close the gap there. The 2026 jobs that actually need you to write it will find you after you can read it. The ones that only want the word on a JD were never going to interview you honestly anyway.

More articles for you