Everything2
Near Matches
Ignore Exact
Full Text
Everything2

Software design

created by StrawberryFrog

(idea) by StrawberryFrog (1.7 hr) (print)   ?   (I like it!) 1 C! Mon Oct 04 2004 at 22:26:06

Any fool can write a program that the computer can understand. It takes a good programmer to write a program that other people can understand.
- Martin Fowler.

Software design is, broadly speaking, the activity of sitting around thinking about how you are going to structure the computer program that you are about to write. Often this design is done while thinking about what a pain it is to work on the current project's code base, and how those mistakes are going to be rendered impossible in future by the new design.

Alternately you can do software by experimentation, by hacking up some code, and refactoring it until it looks optimal for the task at hand.

Software design does not directly refer to the way that the program looks to the user - that is Interface design. Software design refers to the internals of the program, the source code. However those internals must allow the front end to exist, and so are severely constrained by it.

An enormous number of structured methodologies, techniques and vocabularies have been brought to bear on software design, but it still remains an art or a craft, not a science. IT is still governed by experience, gut feel and rules of thumb. Some of the most successful aids developed so far are UML, design patterns and refactoring. Modern programming languages are arguably also aids to good design, nudging programmers in the right directions with features such as modularisation, object orientation and strong typing.

Software design, as opposed to the de facto design resulting from unplanned construction, aims to produce readable, maintainable, flexible, robust and elegant code by forethought about the structure of the program constructed. The more ambitious the program, the more forethought is needed.

I do not regard software design as completely separated from software construction. Each procedure implemented involves some decisions about how it will behave; and design decisions taken in vacuum, without the reality checks of implementation, may not work as well as intended.

Software design is concerned with programming on a larger scale than how to phrase a single line of code. It aims to make the large-scale structure of a system understandable by means of consistently used metaphors. It adds an aesthetic. In order to make good software, it is often necessary to create one or more levels of abstraction between the vocabulary of the problem domain and the vocabulary of the programming language. Doing this, and doing it well, is software design.


See also:


printable version
chaos

Interface design The three golden rules of user interface design virtues of a good programmer Software development is not an engineering discipline
Unified Modeling Language Gallery of False Principles in Design User interface design for night time Cohesion and coupling
Structured Programming methodology Law of Demeter design debt
Learn to Program: Philosophies of Coding What it takes to be a good programmer Good programmers Martin Fowler
ball of mud Hollywood principle postcondition Programming as art
Code Complete User Centered Design Manifesto for Agile Software Development Software that tries to work in situations it cannot control will inevitably fail
Y'know, if you log in, you can write something here, or contact authors directly on the site. Create a New User if you don't already have an account.
  Epicenter
Login
Password

password reminder
register

Everything2 Help

Cool Staff Picks
Nodes your sibling would have liked:
Bovine Selective Visual Impairment
Through this warm electricity I will give you bark branches and leaves curling upward into a safe sky
Ulcerative colitis
Gone in Sixty Seconds - Theatre Quest Entries
Pablo Neruda
Marvel Comics
Bozo the Clown
Beer snob
laser
Hammond B-3
gongfu cha
Which way should you move your brush when doing Japanese calligraphy?
Somebody Blew Up America
New Writeups
octillion369
Frost wyrm(person)
kalen
Three "T"s(idea)
octillion369
Undead(idea)
archiewood
Ico(fiction)
Heisenberg
Why I love Everything2(log)
octillion369
Death Knight(person)
XWiz
Are you hoping for a miracle?(review)
santo
The Host(review)
LostPsion
"Shut the Fuck Up" Theaters(idea)
Vanish
The line between normal and not(place)
Vanish
insanity(thing)
beatrice
You've been slowly taking me over for nearly a year, do you know that?(idea)
Berek
YouTube(thing)
shaogo
How to Pretend to Have a Job(idea)
hapax
Les Provinciales(review)
Everything 2 is brought to you by the letter C and The Everything Development Company