Organizing complexity is the most important skill in software development
Organization skills are more important than algorithmic wizardry, but harder to teach. So we teach algorithms instead. Managing complexity you learn on a job.
Companies come to us for help data analysis and data privacy. Clients have included Amazon, Google, Microsoft, law firms, start-ups, and smaller businesses.
Visit johndcook.com → RSS feedOn Hacker News Jan 2010 – Sep 2026
Math & Algorithms 44Software Engineering 24Life, Learning & Writing 11Career & Management 11Science & Space 9Programming Languages 6
Organization skills are more important than algorithmic wizardry, but harder to teach. So we teach algorithms instead. Managing complexity you learn on a job.
People have been comparing software components to LEGO blocks for a couple decades. We should be able to assemble applications by snapping together modular components, just like LEGOs. There has been progress, but for the most part we haven't realized the promise LEGO-style software development. Integrating two…
How to combine data spread over two CSV files, like separate tables in a normalized relational database.
OOP, for all its excesses, was a big step forward in software engineering. The way to move past OOP is to replace it with another discipline, not anarchy.
Using the best tool for a job may slow things down. It may be "best" in a sense you don't need. The actual best tool might be relatively crude.
A paper on Kalman filtering and functional folds that I alluded to previously has been split into several papers and posted online.
I've long been impressed by shell one-liners. They seem like magical incantations. Pipe a few terse commands together, et voilà! Out pops the solution to a problem that would seem to require pages of code. Are these one-liners real or mythology? To some extent, they're both. Below I'll give a famous real example. Then…
When OpenAI released their proof that solutions to the Navier-Stokes equations can blow up in finite time, they also released a formal proof in Lean 4.
Here are ten things about numerical linear algebra that you may find surprising if you're not familiar with the field. Numerical linear algebra applies very advanced mathematics to solve problems that can be stated with high school mathematics. Practical applications often require solving enormous systems of…
A good programmer is someone who can write large programs that have a high probability of being correct.
The familiar quadratic formula can give the wrong answer in a program due to numerical precision issues. This post shows what can go wrong and how to fix it. Especially important in low-precision arithmetic.
Functions include in the standard C math library that seem unnecessary at first glance and why they are necessary.
When Mathematica seems to not to know how to simplify an expression, it may be doing the right thing, being more sophisticated than you expect.
The eigenvectors of a circulant matrix do not depend on the matrix itself, only on the size, and the eigenvectors are columns of the FFT matrix.
There is hardly ever a good reason to invert a matrix. What do you do if you need to solve Ax = b where A is an n x n matrix? Isn't the solution A−1 b? Yes, theoretically. But that doesn't mean you need to actually find A−1. Solving the equation Ax = b is
Prime powers have a kinda chaotic pattern in their bits. We bootstrap this idea into a good random number generator, recapitulating history.
I called someone a plumber programmer the other day. The person I was speaking to didn't realize that "plumber programmer" is a term of great respect. The plumber is often the most experienced programmer on a team. As with literal plumbing, software plumbing connects things together. It deals with things other people…
Code that shows how floating point arithmetic can go wrong, and how C and C++ can return different results for similar code.
I recommend using Python for data analysis, and I recommend Wes McKinney's book Python for Data Analysis. I prefer Python to R for mathematical computing because mathematical computing doesn't exist in a vacuum; there's always other stuff to do. I find doing mathematical programming in a general-purpose language is…
I'm fascinated by the myth of the Lisp genius, the eccentric programmer who accomplishes super-human feats writing Lisp. I'm not saying that such geniuses don't exist; they do. Here I'm using "myth" in the sense of a story with archetypical characters that fuels the imagination. I'm thinking myth in the sense of…
Monads and macros have an almost gnostic mystique about them. Why is that? Why does hardly anyone use both?
The soft maximum approximates the maximum function, and approaches it in the limit, but is easier to work with.
What regular expression features work everywhere. Very few unless you relax your definition of "everywhere."
This morning Miroslav Bajtoš asked "Why do C++ folks make things so complicated?" in response to my article on regular expressions in C++. Other people asked similar questions yesterday. My response has two parts: Why I believe C++ libraries are often complicated. Why I don't think it has to be that way. Why would…