We are at an unprecedented point in American history, and I'm concerned we may lose sight of the American Dream. | Continue reading
With a 13 billion year head start on evolution, why haven't any other forms of life in the universe contacted us by now? teaching the aliens how to exit Vim (Arrival is a fantastic movie. Watch it, but don't stop there - read the Story of | Continue reading
If you haven't been able to keep up with my blistering pace of one blog post per year (if that), I can't blame you. There's a lot going on right now. It's a busy time. But let's pause and take a moment to celebrate that Elon Musk destroyed Twitter. I | Continue reading
I thought Ligaya Turmelle's post on SQL joins was a great primer for novice developers. Since SQL joins appear to be set-based, the use of Venn diagrams to explain them seems, at first blush, to be a natural fit. However, like the commenters to her post, I found that the | Continue reading
Whenever the regular expression topic comes up, I unashamedly recommend the best tool on the market for parsing and building regular expressions -- RegexBuddy. But there's one tiny problem. RegexBuddy costs money. I've always encountered vague resistance when recommending … | Continue reading
Games that run in your web browser are all the rage, and understandably so. Why not build your game for the largest audience in the world, using freely available technology, and pay zero licensing fees? One such game is Evony, formerly known as Civony – a browser-based clon … | Continue reading
It's my honor to announce that John Carmack and I have initiated a friendly bet of $10,000* to the 501(c)(3) charity of the winner’s choice: By January 1st, 2030, completely autonomous self-driving cars meeting SAE J3016 level 5 will be commercially available for passenger use in | Continue reading
Eric Lippert notes the perils of programming in C++: I often think of C++ as my own personal Pit of Despair Programming Language. Unmanaged C++ makes it so easy to fall into traps. Think buffer overruns, memory leaks, double frees, mismatch between allocator and deallocator, usi … | Continue reading
A friend of mine recently returned the book Showstopper! after an extended loan. If you haven't heard of this book, allow me to quote the Amazon.com editorial summary: Showstopper! is a vivid account of the creation of Microsoft Windows NT, perhaps the most complex software p … | Continue reading
In a way, these two books are responsible for my entire professional career. With early computers, you didn't boot up to a fancy schmancy desktop, or a screen full of apps you could easily poke and prod with your finger. No, those computers booted up to the command line. From | Continue reading
You know the feeling. It's happened to all of us at some point: you've pored over the code a dozen times and still can't find a problem with it. But there's some bug or error you can't seem to get | Continue reading
One of the most impressive hacks I've ever read about has to be the Black Sunday kill. Since the original 2001 Slashdot article I read on this is 99.9% quote, I'm going to do the same. I can see why they quoted so extensively; it& | Continue reading
Fair warning: this is a blog post about automated cat feeders. Sort of. But bear with me, because I'm also trying to make a point about software. If you have a sudden urge to click the back button on your browser now, I don't blame you. I don't often talk | Continue reading
In Typing Trumps Pointing, I extolled the virtues of the full-text search included in Vista's new Start Menu. As many commenters pointed out, the feature itself is nothing new: I love keyboard searching, but basically you say you are installing Vista, an entire operating syst … | Continue reading
In my previous post on shuffling, I glossed over something very important. The very first thing that came to mind for a shuffle algorithm is this: for (int i = 0; i < cards.Length; i++) { int n = rand.Next(cards.Length); Swap(ref cards[i], ref cards[n]); } It's a | Continue reading
MG Siegler writes: The PC is over. It will linger, but increasingly as a relic. I now dread using my computer. I want to use a tablet most of the time. And increasingly, I can. I want to use a smartphone all the rest of the time. And I do. | Continue reading
Michael Braude decries the popularity of web programming: The reason most people want to program for the web is that they're not smart enough to do anything else. They don't understand compilers, concurrency, 3D or class inheritance. They haven't got a clue why I& | Continue reading
Anti-aliasing has an intimidating name, but what it does for our computer displays is rather fundamental. Think of it this way -- a line has infinite resolution, but our digital displays do not. So when we "snap" a line to the pixel grid on our display, we can compensate by | Continue reading
Nathan Bowers pointed me to this five year old Cool Tools entry on the book Art & Fear. Although I am not at all ready to call software development "art" -- perhaps "craft" would be more appropriate, or "engineering" if you're feeling | Continue reading
Did you ever get the feeling that the browser address bar is the new command line? I keep forgetting how much functionality Google provides in their search text box; I was reminded when Damien Katz posted a link to a nice little Google search cheat sheet. Google also automaticall … | Continue reading
It's a shame that Beyond Compare isn't listed in more "favorite tool" lists. This amazing little folder and file differencing tool has earned its spot in my core toolset a dozen times over. Here's a screenshot of it in action: I' | Continue reading
I try to avoid using spaces in filenames and URLs. They're great for human readability, but they're remarkably inconvenient in computer resource locators: A filename with spaces has to be surrounded by quotes when referenced at the command line: XCOPY "c:\test files\refer … | Continue reading
You may notice that commenting is currently disabled, and many old Coding Horror posts are missing images. That's because, sometime early on Friday, the server this blog is hosted on suffered catastrophic data loss. Here's what happened: The server experienced routine hard … | Continue reading
A number of people whose opinions I greatly respect have turned me on to Yelp over the last six months or so. Yelp is a community review site, and a great way to discover cool new places in whatever neighborhood you happen to be in. I've enjoyed using | Continue reading
I've talked about computer workstation ergonomics before, but one topic I didn't address is lighting. We computer geeks like it dark. Really dark. Ideally, we'd be in a cave. A cave … with an internet connection. The one thing that we can't abide is direct overhead lighting. E … | Continue reading
One of the hot new features introduced with Windows 95 was the Windows Registry. The Windows Registry offered a centralized database-like location to store application and system settings. No more plain text .INI files splattered all over your system. Instead, issue a few easy AP … | Continue reading
Scott Stanfield forwarded me a link to Roger Sessions' A Better Path to Enterprise Architecture yesterday. Even though it's got the snake-oil word "Enterprise" in the title, the article is surprisingly good. I particularly liked the unusual analogy Roger chose to illus … | Continue reading
As a software developer, how do you sharpen your saw? Sharpening the saw is shorthand for anything you do that isn't programming, necessarily, but (theoretically) makes you a better programmer. It's derived from the Covey book The 7 Habits of Highly Effective People. Ther … | Continue reading
I've often thought that software developers were akin to Magpies, birds notorious for stealing shiny items to decorate their complex nests. Like Magpies, software developers are unusually smart and curious creatures, almost by definition. But we are too easily distracted by shiny … | Continue reading
Hard to believe that I've had the same PC case since 2011, and my last serious upgrade was in 2015. I guess that's yet another sign that the PC is over, because PC upgrades have gotten really boring. It took 5 years for me to muster up the initiative to | Continue reading
Rich Skrenta writes that code is our enemy. Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted. The more code you have, the more places there are for bugs to hide. The longer | Continue reading
I graduated with a Computer Science minor from the University of Virginia in 1992. The reason it's a minor and not a major is because to major in CS at UVa you had to go through the Engineering School, and I was absolutely not cut out for that kind of | Continue reading
I searched for this citation, and like Wes, I remember reading it, but I can't remember the exact place I read it: This echoes another comment from a recently read blog article, the author of which I cannot recall. Good programmers get off their butts. Typically, programmers won … | Continue reading
Masters of Doom is the story of John Carmack and John Romero creating the seminal games Wolfenstein 3D, Doom, and Quake. It's an amazing work on so many levels – but primarily because of the exhaustive research the author undertook to tell this story. To re-create the story o … | Continue reading
I'll just come right out and say it: I love strings. As far as I'm concerned, there isn't a problem that I can't solve with a string and perhaps a regular expression or two. But maybe that's just my lack | Continue reading