What Is A Computer?
What is a computer? You’d think that would be a fairly simple question. After all, I’m using one to type this up, I ought to know what it is, right? I mean obviously, it’s a…computer! I mean, it’s got...
View ArticleSimplicity and Security
A big part of writing secure software (probably the biggest part) is simplicity. When we think about software security, the first question that we ask is, “How many different ways could this program...
View ArticleStructure, Action, and Results
There’s a very popular model for designing software that we’ve all heard of if we’re web developers, and probably most desktop developers have heard of too: our old friend MVC. This works well because...
View Article(I)SAR Clarified
In my previous post, I said that there are three major parts to any computer program: Structure, Action, and Results. Also, a program has Input, which could be considered a fourth part of the program,...
View ArticleFeatures, Simplicity, and the Purpose of Software
One of the best ways to keep an app simple is, of course, to limit how many features you implement. Twitter, for example, has very few features, but is enormously successful. The limited number of...
View Article“Consistency” Does Not Mean “Uniformity”
In a user interface, similar things should look the same. But different things should look different. Why do over 75% of Facebook’s users think that the new Facebook UI is bad? Because it makes...
View ArticleThe Secret of Success: Suck Less
When I started working on Bugzilla in 2004, it was a difficult time for the whole project. There were tremendous problems with the code, we hadn’t gotten a major release out in two years, and a lot of...
View ArticleHow We Figured Out What Sucked
So, after my last post, a few people asked, “Okay, but how do you figure out what sucks?” Well, some of it’s really obvious. You press a button and the program takes 10 minutes to respond. That sucks...
View ArticleThe Engineer Attitude
The attitude that every engineer should have, in every field of engineering, is: I can solve this problem the right way. Whatever the problem is, there’s always a right way to solve it. The right way...
View ArticleThe Singular Secret of the Rockstar Programmer
Before all the laws of software, before the purpose of software, before the science of software design itself, there is a singular fact that determines the success or failure of a software developer....
View ArticleWhy Programmers Suck
A long time ago, I wrote an essay called “Why Computers Suck” (it was given the title “Computers” and “What’s Wrong With Computers” in two later revisions, and the original title never saw the light...
View ArticlePrivacy, Simplified
So, there’s a lot of talk on the Internet about privacy. Some people say that privacy is only desired by those who have something to hide. Some people insist that privacy is a human right that should...
View ArticleThe Equation of Software Design
So today I was playing around with a little equation that may in fact explain nearly all of the principles of software design. I don’t know that it’s actually mathematically solvable in terms of...
View ArticleSoftware Design, In Two Sentences
In the context of The Equation of Software Design, it is now possible to reduce the primary principles of software design into just two statements: It is more important to reduce the Effort of...
View ArticleBefore You Begin….
One of the major goals that I have with researching software design is the hope that we can take people who are “bad programmers” or mediocre programmers and, with some simple education and only a...
View ArticleThe Power Of No
How many times have you used a piece of software that was full of incredibly convoluted features, strange decisions, and unusable interfaces? Have you ever wanted to physically or verbally abuse a...
View ArticleReadability and Naming Things
Many people think that the readability of code has to do with the letters and symbols used. They believe it is the adding, removing, or changing of those symbols that makes code more readable. In some...
View ArticleOpen Source Community, Simplified
Growing and maintaining an open-source community depends essentially on three things: Getting people interested in contributing Removing the barriers to entering the project and contributing Retaining...
View ArticleDeveloper Hubris
Your program is not important to me. I don’t care about its user interface. I don’t care what its name is. I don’t care that you made it, or what version it is. The only thing I care about is that your...
View ArticleClues to Complexity
Here are some clues that tell you that your code may be too complex: You have to add “hacks” to make things keep working. Other developers keep asking you how some part of the code works. Other...
View Article