Concurrency
Three Classes of Concurrency Bugs
Would a visual debugger like gotrace have caught three concurrency bugs found via static code reading in a production Go library? The answer reveals a fundamental taxonomy that holds across all programming languages.
Concurrency Models Explained: How Go, Node.js, Java, Erlang, Rust, and Python Actually Work
Go, Node.js, Java virtual threads, Erlang, Rust, Python, Kotlin: each language’s concurrency model is a different engineering trade-off against the same physics. This article builds the framework for understanding all of them, starting from the OS scheduler and working upward.
Go Structs Are Not C++ Classes: Why Similar Modeling Roles Produce Different Hardware Execution Patterns
Structs with methods look like classes, but the hardware tells a different story. Go makes contiguous values + static calls the path of least resistance. In inheritance-heavy C++ designs, you often end up with pointers + virtual dispatch + scattered memory. This isn’t syntax - it’s what the CPU executes.
How Multicore CPUs Changed Object-Oriented Programming
OOP’s implicit reference semantics were manageable in single-threaded code. But when CPUs went multicore in 2005, hidden shared state went from ‘confusing’ to ‘catastrophic.’ This is why Go and Rust refined OOP: keeping methods and encapsulation while replacing inheritance with composition and implicit references with value semantics.
Go's Value Philosophy: Part 1 - Why Everything Is a Value, Not an Object
In Python, everything is an object. In Java, everything is a class. In Go, everything is a value. These are fundamental design philosophies that shape how you write concurrent code, manage memory, and reason about performance.
The Python Paradox: How Python Dominates Big Data Despite the GIL
Discover why Python dominates big data despite the GIL: Python coordinates, C/Rust/JVM executes. Learn how NumPy, pandas, Polars, and PySpark bypass the GIL for true parallelism.