The Curious Engineer

All blogs / Software / engineering practice

Yossi Kreinin

yosefk.com/blog

Worse is better

Software / engineering practiceC++Performance / optimizationEngineering management / careers

Posts
123 from 6 Jan 2008 to 18 Sep 2026
Posting
now and then (5 in the last year)
Kind
personal blog
Feed
https://yosefk.com/blog/feed

2026 4

  1. Unit tests mark territory more than squash bugs
  2. Doing everyone else's job
  3. LLMs struggle with the shell, too
  4. All means are fair except solving the problem

2025 4

  1. "Enabling" C threads in a Python / Wasm environment
  2. LLMs aren’t world models
  3. 0+0 > 0: C++ thread-local storage performance
  4. Profiling in production with function call traces

2024 7

  1. Advantages of incompetent management
  2. Profiling with Ctrl-C
  3. A 100x speedup with unsafe Python
  4. The state of AI for hand-drawn animation inbetweening
  5. Managers have no human rights
  6. refix: fast, debuggable, reproducible builds
  7. I have risen

2019 1

  1. Don't ask if a monorepo is good for you – ask if you're good enough for a monorepo

2018 1

  1. Patents: how and why to get them

2017 1

  1. Things want to work, not punish errors

2016 6

  1. Hiring (self-driving algos, HLL compiler research)
  2. Fun won't get it done
  3. The habitat of hardware bugs
  4. Evil tip: avoid "easy" things
  5. Love thy coworker; thy work, not necessarily
  6. The overblown frequency vs cost efficiency trade-off

2015 8

  1. People can read their manager's mind
  2. Stock options: a balanced approach
  3. A manager's pitfall: striving to "add value"
  4. The C++ FQA is on GitHub
  5. Fun with UB in C: returning uninitialized floats
  6. Accidentally quadratic: rm -rf??
  7. "Information asymmetry" cuts both ways
  8. A Sokoban levels design programming contest

2014 9

  1. Capital vs labor: who risks more?
  2. Do company names actually matter?
  3. A better future
  4. Things from Python I'd miss in Go
  5. How to make a heap profiler
  6. Why bad scientific code beats code following "best practices"
  7. Working simultaneously vs waiting simultaneously
  8. Can your static type system handle linear algebra?
  9. A simple way to "get more people to code"

2013 13

  1. Very funny, gdb. Ve-ery funny.
  2. Delayed printf for real-time logging
  3. Coroutines in one page of C
  4. Do call yourself a programmer, and other career advice
  5. How FPGAs work, and why you'll buy one
  6. The bright side of dark silicon
  7. Parallelism and concurrency need different tools
  8. 10x more selective
  9. checkedthreads: bug-free shared memory parallelism
  10. Amdahl's law in reverse: the wimpy core advantage
  11. Is program speed less important than X?
  12. Efficiency is fundamentally at odds with elegance
  13. How profilers lie: the cases of gprof and KCachegrind

2012 17

  1. It's "locking" if it's blocking
  2. C++ template fuckwittery
  3. Why custom allocators/pools are hard
  4. "Value", the irksome euphemism
  5. Will OpenCL help displace GPGPU? Parallella, P2012, ...
  6. Do you really want to be making this much money when you're 50?
  7. C as an intermediate language
  8. Error codes vs exceptions: critical code vs typical code
  9. Aren't side effects fundamental in complexity analysis?
  10. What "Worse is Better vs The Right Thing" is really about
  11. "It's done in hardware so it's cheap"
  12. Work on unimportant problems
  13. Hardware macroarchitecture vs microarchitecture
  14. Which of those would you like me to write?
  15. Passing shell script arguments to a subprocess
  16. Why programming isn't for everyone
  17. Compensation, rationality and the project/person fit

2011 8

  1. Cycles, memory, fuel and parking
  2. Could SOPA give us back a decentralized Internet?
  3. Coding standards: is consistency prettier than freedom?
  4. Graham & Coase: when big companies are a good idea
  5. Engineers vs managers: economics vs business
  6. SIMD < SIMT < SMT: parallelism in NVIDIA GPUs
  7. An unusual hardware architecture: APA (Associative Processing Array)
  8. Machine code monkey patching

2010 9

  1. Making data races manifest themselves
  2. The Iron Fist Coding Standard
  3. My history with Forth & stack machines
  4. The Internet age/reputation paradox
  5. If a tree falls in a forest, it kills Schrödinger's cat
  6. Applied mathematics in business consulting
  7. Lack of wealth through lack of empathy
  8. API users & API wrappers
  9. Digital asses in the computing industry

2009 8

  1. The Virtue of a Manager
  2. Getting the call stack without a frame pointer
  3. What makes cover-up preferable to error handling
  4. The C++ Sucks Series: petrifying functions
  5. Coding standards: having more errors in code than code
  6. The nomadic programmer
  7. Humans and compilers need each other: the VLIW SIMD case
  8. Pearls of wisdom

2008 27

  1. The C++ Sucks Series: the quest for the entry point
  2. The internal free market
  3. Consistency: how to defeat the purpose of IEEE floating point
  4. I want a struct linker
  5. The cardinal programming jokes
  6. I love globals, or Google Core Dump
  7. Extreme Programming Explained
  8. OO C is passable
  9. Redundancy vs dependencies: which is worse?
  10. I can't believe I'm praising Tcl
  11. Python: teaching kids and biting bits don't mix
  12. Side effects or not, aliasing kills you
  13. Optimal processor size
  14. IHateCamelCase
  15. Code, data and interactive programming
  16. The Algorithmic Virtual Machine
  17. "High-level CPU": follow-up
  18. The "high-level CPU" challenge
  19. Everybody agrees with yosefk
  20. Fun at the Turing tar pit
  21. Interrupt? Let the Bastard handle it!
  22. Why don't we have a word for it?
  23. Teeth marks at the rear end
  24. AI problems
  25. A writer of the lame kind
  26. Low-level is easy
  27. Blogging is hard