What Is Software Design?

February 25, 2008
5
On my last blog, one of the commenters very correctly pointed out that I hadn’t actually told you what I meant by “software design.” And, in fact, looking around the web a bit, I’m finding that what I mean by “software design” isn’t fully covered by most current definitions. For the sake of this definition, let’s say that the process…

The Primary Law of Software Design

February 21, 2008
Ideally, any science should have, as its base, a series of unbreakable laws from which others are derived. What is a law? Well, in the field of science, it’s something that: Is universally true, without exception. Predicts phenomena that, when looked for, will be found to exist in the real world. Some of the best laws are axiomatic, a big…

There Is No Science Of Software

February 19, 2008
What we think of today as being “computers” started out in the minds of mathematicians as purely abstract devices–thoughts about how to solve math problems using machines instead of the mind. These mathematicians are the people we would consider the modern founders of “computer science.” Computer Science is actually the mathematical study of information processing. It is not, as some…

Simplicity and Strictness

February 13, 2008
As a general rule, the stricter your application is, the simpler it is to write. For example, imagine a program that accepts only the numbers 1 and 2 as input and rejects everything else. Even a tiny variation in the input, like adding a space before or after “1” would cause the program to throw an error. That would be…

When Is Backwards-Compatibility Not Worth It?

February 11, 2008
4
This title might seem a bit like a contradiction to my last post! Well, you really shouldn’t break your API, if you can help it. But sometimes, maintaining backwards compatibility for any area of your application can lead to a point of diminishing returns. This applies to everything about a program, not just its API. A great example of the…

Ways To Create Complexity: Break Your API

February 7, 2008
5
An API is a sort of a promise–“You can always interact with our program this way, safely and exactly like we said.” When you release a new version of your product that doesn’t support the API from your old version, you’re breaking that promise. Above and beyond any vague philosophical or moral considerations about this, the technical problem here is…

What Is Overengineering?

January 29, 2008
Software developers throw around this word, “overengineering,” quite a bit. “That code was overengineered.” “This is an overengineered solution.” Strangely enough, though, it’s hard to find an actual definition for the word online! People are always giving examples of overengineered code, but rarely do they say what the word actually means. The dictionary just defines it as a combination of…

How Simple Do You Have To Be?

January 25, 2008
6
Sometimes, when you’re working on a project, there’s a question of, “How simple do we really have to be?” “How much do we have to simplify this thing?” “Is it simple enough?” Well, of course, simplicity is relative. But even so, you can still be more or less simple. From the relative viewpoint of your user, your product can be…

Complexity Is a Prison

January 22, 2008
7
Sometimes, I think, people are worried that if they make their code too simple, then either: Somehow they’re not demonstrating how intelligent they are, or how valuable they are, to their managers, or The project will become so simple to work on that anybody can just steal their job! It’s almost as though if they actually did their job right,…

Purpose and Simplicity

January 18, 2008
A fast way to get complicated is to violate the purpose of what you’re doing. For example, what’s the purpose of a web page? To give and receive information. Mostly to give information, and then some websites also take information, such as when you’re buying something. How many complicated web pages have you seen that think they’re doing something else…
1 6 7 8 9
Go toTop