HomeDigital EditionSys-Con RadioSearch Java Cd
Advanced Java AWT Book Reviews/Excerpts Client Server Corba Editorials Embedded Java Enterprise Java IDE's Industry Watch Integration Interviews Java Applet Java & Databases Java & Web Services Java Fundamentals Java Native Interface Java Servlets Java Beans J2ME Libraries .NET Object Orientation Observations/IMHO Product Reviews Scalability & Performance Security Server Side Source Code Straight Talking Swing Threads Using Java with others Wireless XML

Software Development: Science or Art?

Many of the problems related to software development are at the individual level, with those who create bad code rather than with any specific technology issue. Therefore the goal of anyone staffing a project is to attract employees most likely to ensure success. The infamous 1968 study by Sackman, Erikson, and Grant, "Exploratory experimental studies comparing online and offline programming performance," concluded that productivity variation between good and bad developers was a factor of 10. The test was based on how quickly their subjects could write a program to solve a maze algorithm, and implicit in this was the assumption that the coders who solved it fastest were superior. It's not an illogical conclusion to make. Most computer science faculties do the same when they grade students based on their ability to write sort routines or their intimate knowledge of Knuth's programming fundamentals.

Frederick P. Brooks in The Mythical Man-Month writes, "The hard part of building software is the specification, design, and testing of the conceptual construct, not the labor of representing it." In other words, it's the thought process that is essential to success, rather than coding horsepower. If the act of programming is more aligned to a creative process than to one requiring a traditional engineering discipline, why is this not encouraged and recognized more? The most successful teams I've worked on are usually composed of well-rounded individuals who aren't chasing the latest technology fad to pump up their résumé. These people have both feet firmly on the ground. They stay focused on delivering sensible solutions to the immediate problems.

Writing good software involves foregoing gratuitous complexity, concentrating rather on such concepts as reuse, maintainability, and reliability. Often those most qualified for this aren't professional computer scientists but instead graduates of other disciplines who, instead of focusing on being one-person programming machines, have developed their analytical, creative, and communication skills while at college. It's hard to formalize what traits good programmers need, but I think people interested in subjects outside of computing, the musically minded for instance, make the best coders.

Mathematics disciplines are often separated into pure and applied: number theory versus building a bridge that won't fall down. Perhaps computer science needs the same, so that future generations of programmers will be more grounded in the practicalities of building and maintaining application code. The two most important movements in software of recent years - design patterns and extreme programming - were not born out of any academic research institute but instead came from experienced developers looking for ways to improve the production process.

In "Hackers and Painters", Paul Graham draws parallels between a programmer and an artist. The artist doesn't need to know the chemistry of paint, but instead is responsible for knowing how to mix and match colors to create the finished canvas. The best coders likewise are not immersed in esoteric computing theory, but have a picture of the finished product in their minds and understand the techniques required and the tools available to arrive at completion.

In terms of degree results and employment placements, the safe route for college computer science departments is to recruit mathematically minded students. These can be drilled with little effort, or thought, frankly, into the next generation of speed coders. Each year they collect their degrees only to join business IT departments or software companies. Computer science was born out of a marriage of mathematics and engineering, but surely it's time for the faculty to take a step away from academic roots and try to attract and nurture the more practical side of programming. Universities must attract creative individuals as the next generation of programmers, and dispel the myth that successful software development is a sport practiced by mathmo nerds. Instead it's more akin to poetry for machines, with computer language syntax being the artist's medium.

References

  • Sackman, Erikson, and Grant: Click Here !
  • The Mythical Man-Month: www.awbc.com
  • Hackers and Painters: www.paulgraham.com/hp.html

    Author Bio
    Henry Roswell is a veteran consultant who would like to think he's seen it all, but is constantly amazed by new events everyday. [email protected]

    All Rights Reserved
    Copyright ©  2004 SYS-CON Media, Inc.
      E-mail: [email protected]

    Java and Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. SYS-CON Publications, Inc. is independent of Sun Microsystems, Inc.