Read, read, read. Read everything - trash, classics, good and bad, and see how they do it. Just like a carpenter who works as an apprentice and studies the master. Read! You'll absorb it. Then write. If it is good, you'll find out. If it is not, throw it out the window.
-
William Faulkner
About / Biography
Resume
Contact
Journal / Blog
Recommended Reading
Reviews
View Adam Kahtava's profile
Recent entries
Categories
.NET
AJAX
ASP.NET
ASP.NET AJAX
BarCamp
Book
C++
Calgary
Career News
Code Camp
Community
Contest
Creativity
CSharp
CSS
dasBlog
DOM
Ergonomics
Events
Firebug
Firefox
greasemonkey
IE
Interview
JavaScript
Links
Musings
Open Source
Opera
Ottawa
Personal
Programming Languages
Quality Assurance
Review
Software
Team Work
TechNet
Themes and Skins
Toronto
Unit Testing
Videos
XML
Archives
November, 2008 (2)
October, 2008 (10)
September, 2008 (8)
August, 2008 (2)
July, 2008 (4)
June, 2008 (7)
May, 2008 (6)
April, 2008 (8)
March, 2008 (7)
February, 2008 (3)
January, 2008 (1)
December, 2007 (1)
November, 2007 (2)
October, 2007 (1)
September, 2007 (3)
July, 2007 (1)
May, 2007 (3)
April, 2007 (4)
March, 2007 (4)
February, 2007 (5)
January, 2007 (3)
December, 2006 (1)
November, 2006 (5)
October, 2006 (6)
September, 2006 (8)
August, 2006 (2)
July, 2006 (8)
June, 2006 (9)
May, 2006 (1)
Syndicate this site
Sign In
powered by
dasBlog
Journal / Blog
Sunday, July 27, 2008
The World is Messy and Complex: Why Should Software Be Different?
Politics, religion, famine, pollution, and relationships; these are parts of our world. I’m messy, my hair falls out, and yours might too. The world is messy and complex, so what would make software different?
During my first
real
job after graduating College / University,
I was horrified by the state of my project's source code
. The code was spaghetti; it looked like someone crammed a stack of poorly written technical manuals through a blender that funneled into our source code. Regions (#region) were running willy-nilly, negated values were passing conditions; delegates were calling properties which were in turn calling delegates which were creating infinite loops… SQL rows were being sent across TCP/IP, centralized build servers were taboo, unit testing and TDD was unheard of. Each of the members of our team were build / release masters, developers, and ninjas. Our job was to maintain this juggernaut and affirm the stakeholders that everything was OK.
But were things really that bad?
Remember, I was a recent grad; I was used to creating pristine frameworks (like elevator simulators) crammed with design patterns and fascinating abstract data types. In a way, I was an architecture astronaut being rudely ejected into a toxic
tailings pond
. The courses I had taken in school, the projects I completed, the languages I used were a great start, but not a valid representation of the real world. In the academic world things were clean; out here (like the rest of the planet) everything is a mess.
I started coming to the realization that, producing software is more about managing people than science, technology, or math. Mistakes and human flaws are the norm, software entropy is inevitable, and technical decisions are often based on nontechnical considerations: time constraints, politics, religion, and relationships rather than sound research and science.
There is hope;
realize that you can’t control everything, that the one-size-fits-all solution and silver bullets are myths. Then focus on what and how you can change yourself, your software, and your situation. Developing good software (like living a good life) is about making informed decisions, choosing opportunities that encourage growth, reducing complexity, and having a long term vision or goal. Today I still think software is messy, and I'm still horrified by most source code, but abstractions, n-tiered design and testing sufficiently help me manage the chaos.
Science often exists in a pristine clean vacuum, whereas software deals primarily with people. Software is not a science, and humans (like software) are inherently messy and complex.
Musings
|
Personal
|
Software
PermaLink
|
Digg It
|
Del.icio.us
|
Comments [0]
Related posts:
Blogs, Facebook, Twitter, the Internet, ... are White Noise
Are you a Specialist, Generalist, or a Versatilist?
Vernacular Culture and Heretics: Humanity the Zen of Zen?
Everything I Ever Needed to Know About Software I Learned Somewhere Else, Like Tree Planting
Project Failure is not Personal Failure: Emotional Buy-in to Projects, Languages, and Frameworks is Bad
On Teams: Dysfunction
Name
E-mail
Home page
Remember Me
Comment (Some html is allowed:
a@href@title, b, blockquote@cite, i, img@src, strike, u
) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.
Enter the code shown (prevents robots):
Live Comment Preview
Page rendered at Friday, November 21, 2008 12:28:54 AM (GMT Standard Time, UTC+00:00)
Disclaimer & Copyright
© 2008
Adam Kahtava
(
Adam.Kahtava.com
/
AdamDotCom.com
)
:: Friday, November 21, 2008 12:28:54 AM (GMT Standard Time, UTC+00:00)