Good Ideas in Computer Science

April 21, 2024・3 minute read

Programmers love arguing for their favorite technologies. C++ vs Rust. Mac vs PC. These arguments overshadow the victories of Computer Science — the ideas that we all agree on. To unearth these ideas, I recently asked a simple question on Twitter/X:

What ideas in computer science are universally considered good?

By “universally considered good” I mean they aren’t debated. Ideas so widespread and effective that you might not even think of them as being invented. Each idea may not be suitable in all situations, but you won’t find a programmer that thinks you should never use them. I intentionally focus on ideas, not implementations. For example: Unix contains many good ideas, but is not on the list because it is an implementation.

Here’s my list, including the year each idea appeared:

Intentionally excluded:

  • Garbage Collection

    There are many examples of teams fighting the garbage collector to hit performance goals4. The CPU/Memory performance gap necessitates control over memory to have performant code.

  • Databases

    Databases are more than just one idea, with many ways to combine those ideas into a “database shape”. Some good ideas in databases: Structured query language, B-trees, ACID transactions.

  • Other data structures and algorithms

    There are too many to list. Few are as universal as arrays and hashmaps, which appear in almost all programs.

  • Object Oriented Programming

    There is a large group of programmers that do not consider Object Oriented Programming good5. I recommend data oriented design as a replacement worldview.

By 1974, 50 years ago, we had most of what we call modern computing. Today’s fundamentals are the same — a C programmer from 1974 would feel at home on a modern computer except for the alien-like speed. I hope we have new ideas that in 50 years will be universally considered good.

Discuss on Twitter
Discuss on Lobste.rs

  1. Here’s a look at programming before the call stack ↩︎

  2. It’s unclear to me what language was the first to compile to multiple architectures. Reach out if you know. ↩︎

  3. By “Virtual Address Space” I mean the ability for Program A and Program B to be written without knowledge of each other and run simultaneously without memory interference. This allows both to use the same virtual memory address, say 0x12345678, because it maps to different physical memory addresses. Some people confused this with paging (which moves data from RAM to the hard drive when RAM usage is high), and memory mapping (which allows you to access the hard drive using memory instructions). ↩︎

  4. Twitch, INSIDE, Minecraft, LinkedIn ↩︎

  5. OOP is bad, Clean Code Horrible Performance, What’s wrong with OOP ↩︎