Whenever you engage in some activity, it’s a good idea to have some idea of what the purpose of that activity is. What is the end goal, and why are you doing it? For example, when I sleep, the goal is to be rested. When I talk, the purpose is to communicate and be understood.
Similarly, when we write software, we should have some idea of why we’re doing it, and what the end goal is.
Now, is there some way that you could sum up what the purpose of all software is? If there was such a statement possible, it would give orientation to our whole science of software design, because we’d know what we were going for.
Well, I think I’ve managed to derive a single purpose that would fit all software:
To help people.
For example, Bugzilla exists “to help people track bugs.” Firefox exists “to help people browse the web.” Remember, you could browse the web entirely by reading HTML yourself–but Firefox (or your web browser of choice) sure does help.
Even if you wrote a piece of software to help animals or plants, it would still be “to help people help animals or plants.”
Software is never there “to help inanimate matter.” Software does not exist “to help the computer.” It always exists to help people. Even when you’re writing libraries, you’re writing “to help programmers”, who are people. You are never writing “to help the computer.”
Now, what does “help” mean? Well, that is somewhat a subjective thing, and somewhat not. Look it up in the dictionary. There are many things you could help with–organizing a schedule, writing a book, planning a diet, anything. What you help with is up to you, but the purpose is always to help.
People who cannot conceive of helping another person will write bad software–their software won’t help people. In fact, I might theorize (as a guess based on some personal observations) that your potential ability to write good software is limited only by your ability to conceive of helping another.
The purpose of software is not “to make money” or “to show off how intelligent I am.” Anybody writing with those as their only purposes is violating the purpose of software and is quite likely to get into trouble. Granted, both of those are a way of “helping” yourself, but that’s a pretty limited scope of help and, I would argue, is likely to lead to lower-quality software than software genuinely designed to help individuals do what they need or want to do.
So anyhow, there you have it. When we are making decisions about software, our guiding principle can be how we can help. It’s possible to help more or less, to help fewer or more people or things. With that as a yardstick, it’s possible to understand our Laws Of Software Design and how we should be making decisions about software.
-Max
Sorry to play the devil’s advocate, but how exactly do spam bots help people, except for making money? Actually, a lot of software is written with the ultimate goal to make money (or, to put it your way, to help people make money). And the better the software is, the better it helps to make money. Even putting illegal activities (like bots or trojans) aside, there’s a lot of “corporate” software that just helps to make a bussiness more effective. And for most bussinesses, with a few notable exceptions (like google, or mozilla), more effective just means making more money.
Maybe you should say that the purpose of software is not making money for the programmer who writes it – but satisfying a need of a customer (and the customer’s need can as well be making money, and the customer can be the programmer himself). Which brings me to another little nit – “helping” is too specific for some software, I think.
What do computer games help with? I don’t think you can say that they help people to enjoy themselves, because people are able to enjoy themselves even without computer games (on the other hand, browsing the web, or tracking bugs in a distributed environment can probably be not done without the help of software). On the other hand, few games that has been written with the purpose of making money (for the developer/publisher) have actually been succesful (the best games are usually the ones that break new ground, not the safe games that are guaranteed to make money).
Or screensavers. They’re just eye candy. The most effective screensaver, the one that helps people the most, is the one where it just blanks the screen (and after a while, turns powersaving mode on). Does that mean that any screensaver is by definition bad software?
You could probably generalize that screensavers are helping people satisfy their need for pretty moving pictures, but I’m not sure this is what you originally had in mind.
Spam bots help people advertise.
Computer games help entertain people.
Attractive screen savers either help entertain people or help people create a more aesthetic environment.
-Max
Sorry, but I think bot net are a different part of soft. They do not help people, because no one in mind could say, yeah use my machine for sending that spam(I mean great percent of spam is sent throu botnets).
Spam is not helping to advertise people, things like AdSense help.
Because, anyway you do not get mails on your mailbox from AdSence, but you get spam, and you couldn’t easily say I don’t want to get them.
PS
Sorry for some possible orfografy mistakes.
And of course thing I said, are not truth in last instance, they are my thinking.
Well, botnets aren’t helping the people whose computers they take over. They’re helping the people who take over the computers. A virus isn’t helping the people it infects–it’s helping its author destroy the computers of other people.
Although in a practical sense I’d certainly make a judgment on the value of these pieces of software, their purpose can still be described in terms of “to help people X“. They help people harm others. That might be a good definition for malware.
-Max
Software, including bot nets, would’ve never been written in the first place if it was not to achieve a purpose. In other words, help someone. Automatically written software is written by a software that was written by a person in the first place, therefore, helping people.
Even useless software (I’ve written plenty) is useful for people to understand programming concepts or test the boundaries of programming and languages. Writing software serves, at minimum, for the purpose of learning (some virii falls into that category).
That’s all very true! 🙂
-Max
I think computer games helps people with things like coordination and the likes as well as entertainment.A screen saver can enhance the looks and feel of one’s desktop as well.
Sure. Although I doubt there are many video games whose purpose is to help you with coordination.
-Max
Sorry for resurrecting a really old post (great idea, and great responses on comments) but the Windows version of Solitaire was specifically designed to help people with their mousing skills 🙂
http://en.wikipedia.org/wiki/Solitaire_(Windows)#History
nowadays,purpose of software and the benefits still cannot understanding by many people.can u please explain it to me,step by step?
i really need to know it to complete my learning…………
[…] 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 […]
[…] 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 […]
[…] it may not always seem so, the purpose of software is to help people. Business applications help businesses operate. Games help to entertain. Spam […]
Wow! This is an old thread, but the easy answer you provide about the software purpose was truly shocking (maybe I am overreacting, but I did not quite expect it to be… that simple).
But now that I think about it, my sole purpose as software developer is to make my clients life easier, by automating some tasks or avoiding a lot of manual work, making them happier. Thanks for this post, pretty much needed.
Glad it could help! 🙂 There’s a bit more about this in the book, too, in addition to lots more data that might be useful for you. 🙂
-Max
Excellent post that defines software in way that can’t be possibly simplified any further. Any software written without a purpose in mind is no program. Just random instructions to the computer. We know as programmers, such a program does not even exist except when you are trying out methods of a new API or learning a language. Even test programs need to try and mimic a real situation to give good learning experience. We can establish safely that all software must have a purpose.
Whats important to know, however, the purpose of all software is to “help”. A software is not a goal in its own right but rather is an agent through which an end is reached. (Even if the software is the only agent involved and the end is also another software e.g. IDE) An analogy could be that of paper (something software has somewhat replaced in many contexts). The paper is never the goal but always represents the meaning of something we seek: A degree certificate, bank note, marriage certificate, arrest warrant, stamp, etc. You get the idea…
[…] evil, or good. It’s people that have those qualities. Software is used entirely and only to serve people. They are the product of people, and they are usually the product of a group of those people who […]
[…] o buenos. Es gente que tiene esas cualidades. El software se utiliza enteramente y sólo para servir a la gente . Son el producto de las personas y suelen ser el producto de un grupo de esas personas que […]
[…] The purpose of software is to help people. And code, the building blocks of software, should be geared toward that purpose. (Unless we are explicitly coding for the sake of coding.) […]
[…] The purpose of software is to help people. And code, the building blocks of software, should be geared toward that purpose. (Unless we are explicitly coding for the sake of coding.) […]
[…] The purpose of software is to help people. And code, the building blocks of software, should be geared toward that purpose. (Unless we are explicitly coding for the sake of coding.) […]