“It’s not news that at the heart of successful software projects (and, frankly, fulfilling software careers) is good design. Also not news is that defining what “good design” really means has been at the heart of an infinite array of debates, papers, talks, books, discussions, and more for ages. To help, J.B. Rainsberger and Scott Bellware offer some advice to follow until that one true definition comes along. “
Read the full article here: http://www.infoq.com/news/2009/01/dont-need-def-for-good-design
To me, designing is all about learning, communicating, minimizing dependencies and of course certain element of tradeoffs. Another great article that I came across at http://jamesshore.com/Articles/Quality-With-a-Name.html talks about good design traits and I would like to quote this piece straight off the article as is:
Let me digress for a moment. Software doesn’t exist. Okay, I exaggerate… but not that much. Think about it. When you run a program on your computer, it’s loaded off the hard drive (where it exists as a very long series of magnetic fields) into RAM (where it exists as a whole lot of teeny capacitances). The CPU uses transistors to interpret those charges, switching them from one path to another, rather quickly, and sends the resulting electrical charges out to things like your video card. The video card routes those charges again, sending some to your monitor, which has still more transistors that selectively let light shine through colored dots, making things light up on the screen. It’s pretty amazing.
Ahem. Anyway, software isn’t even ones and zeroes. Its magnets, electricity, and light. Smoke and mirrors. The only way to create software is to toggle electrical switches up and down (and nobody does that any more) or use some existing software to create it for you.
“Okay, smarty-pants,” you may be thinking, “that’s a funny trick, but I write software.”
Actually, you don’t. You write a very detailed specification. You hand the specification to a program and it writes the software for you. It translates your specification into machine instructions then directs the computer’s operating system to save those instructions as magnetic fields on the hard drive. Once you’ve got ‘em there, you can run the program, copy it, share it, not share it, sue for intellectual property infringement, etc.
You can already see the punch line coming. The specification is called “source code” and the program that translates the specification into software is called a “compiler.”
…. Amazing isn’t it!!!??? What do you think forms a good design?