CHANNELS
HOME
TOP STORIES
COLUMNS
OPINIONS
ZEICHICK'S TAKE
EMBEDDED NEWS
TEST & QA REPORT
ECLIPSESOURCE
SPECIAL REPORTS
SD TIMES 100
JOB BOARD
EVENTS CALENDAR
RESOURCE CENTER
WEBINAR CENTER
ADVANCED SEARCH
RSS
ON THE WEB
SITE MAP
ADVERTISE
EDITORIAL
PRIVACY POLICY
CONTACT US
REPORT A BUG
PRINT EDITION
SUBSCRIBE NOW!
CURRENT ISSUE
BACK ISSUES
SUBSCRIBER SERVICES
BZ MEDIA
ABOUT US
NEWS
BZ RESEARCH
SYSMANNEWS
ST&P MAGAZINE
STPCON
ECLIPSEWORLD
ADVERTISER LINKS
activePDF
Alexsys
Altova
Amyuni Technologies
Automated QA
Axosoft
Business Objects
Codejock Software
ComponentOne
Coverity
Data Dynamics
Developer Express
dtSearch
Dundas
Dynamsoft
Hewlett-Packard
IBM
Imagix
Infragistics
InstallAware Software
InterSystems
iWay
Kovair
LEAD Technologies
McObject
Microsoft
MKS
No Magic
nsoftware
Parasoft
Pegasus Imaging Corp
Perforce
Prezza Technologies
Programmer's Paradise
Programming Research
Rally Software Dev
Red Gate Software
ScaleOut
Seapine
Serena
Software FX
Sparx Systems
Swell Software
Syncfusion
TechExcel
Telerik
UrbanCode
WANdisco
Xceed Software
LOADING...
LOADING...
AS OF 8/7/2008 4:06PM EST
Is Software Engineering an Oxymoron?
By
Allen Holub
March 15, 2005 —
There has been a lot said about education on these pages in the past few weeks. Nonetheless, I want to worry this issue a bit more before going back to the mundane topics Im supposed to be writing about, like Java. I believe theres an underlying issue that is really at the root of the matter: The nature of computer programming has changed radically in the past 30 years, but our definition of computer science has not. Consequently, were approaching the subject in a way thats simply incorrect.
Computer science started out as a kind of mathematics. Computers were little more than glorified adding machines intended to ease the drudge work associated with solving some classes of mathematical problems. The task of programming a computer was little more than presenting an algorithm to the machine so that it could crunch numbers.
Computer science departments, then, sprung from the math departments, like Athena from the head of Zeus, fully armed. Computer science is still sometimes defined as that branch of mathematics that concerns itself with the analysis of computer programs. This topic is interesting but has little relevance when it comes to actually creating computer programs.
Computers are good at solving mathematical problems of course, but the vast majority of programs have little or nothing to do with algorithms and number-crunching. Consequently, training in mathematics is of little or no value when it comes to writing good computer programs. If it were, then mathematicians and physicists would be brilliant programmers. The reality is that this group tends to write miserable code thats focused too much on algorithms and too little on structure.
In fact, computer science is neither a science nor an engineering discipline. Science concerns itself with the formulation and proof of hypotheses. Programmers just dont do that. Similarly, all engineering disciplines except software engineering concern themselves primarily with the mathematical analysis of structures, be they physical structures or electronic circuits. Programmers dont do that, either.
Indeed, software engineering books dont talk about engineering at all, at least not in the way that mechanical or electrical engineering books cover their subjects. Software engineering is about process, not structural analysis. The closest thing that software engineering has to real engineering is the study of design patterns, but even these are nebulous. There is no single correct structure for the realization of a design pattern. Even calling the creation of software engineering is a misnomer in my mind.
As an aside, this is why I believe that its not possible to certify software engineers. You can test structural engineers, for example, by presenting them with a structure and having them tell you if its going to fall down or not. Theres a provable right answer and a wrong answer. You cant do this with software, though. Theres no right design and wrong designjust different designs. The only definition of good is I agree with the test writer, but certification has to be based on an absolute standard of correctness. There is no such thing in the world of software design, however.
So if programming isnt science or engineering, what is it? Its a liberal art. Modern programming bears more similarity to creative writing than to engineering or physics. The design process that you go through (or at least should go through) to create a program is almost identical to the process that you use to write a book: research, formulating a thesis (or problem definition), an orderly exposition of the thesis. These steps are central to both expository writing and object-oriented analysis and design.
UML diagrams are really an application of symbolic linguistics. They diagram the structure of the problem statement and use cases in the same way that a sentence diagram illustrates the structure of a sentence. The best training for doing this sort of design work (and for creating the code that these designs specify) is the study of languages and writing.
We should really give up on the notion of math being the foundation of computer science, drop hard-core mathematics from the curriculum, and replace it with English composition (which teaches you how to write large, complex, documents like computer programs) and Latin (which teaches you how to analyze complex linguistic systems).
Bear in mind that logicthe one mathematical subject that is inarguably part of programmingis traditionally taught by the philosophy, not the math, department. As an added benefit, if programmers were trained as writers, theyd be able to write coherent documentation and put meaningful comments in their code.
The mathematics that is actually relevanta bit of set theory and the likeis easily covered in a one-semester class on the order of the Math-for-English-Majors classes offered by most universities.
The problem, then, is that programming has changed from the study and implementation of algorithms to the study and creation of complex documents. Its moved from math to English. Its about time that our educational system moved in the same direction.
Allen Holub is an architect, consultant and instructor in C/C++, Java and OO Design. Reach him at
www.holub.com
.
EMAIL THIS ARTICLE
SEND FEEDBACK
MORE COLUMNS
 
SUBSCRIBE TODAY!
E-Newsletters:
News on Mon/Thurs.
Test & QA Report
EclipseSource
SUBMIT
 
JOB BOARD
PDF & PRINT EDITION
* Requires Resource Account! 
LOGIN
or
SIGN UP
*
Download Current Issue!
ISSUE 8/1/2008 PDF
*
Need Back Issues?
DOWNLOAD HERE
Receive The Print Edition?
SUBSCRIBE HERE
 
EVENTS CALENDAR
SHARE 2008
8/10/2008 to 8/15/2008
San Jose
SHARE
ACM SIGGRAPH
8/11/2008 to 8/15/2008
Los Angeles
ACM SIGGRAPH
Intel Developer Forum
8/19/2008 to 8/21/2008
San Francisco
Intel
Business of Software 2008
9/3/2008 to 9/4/2008
Boston
Red Gate Software
VSLive New York
9/7/2008 to 9/10/2008
New York City
1105 Media
REGISTER
MORE EVENTS
GET NOTIFIED!
About all of the latest Resources
SD TIMES 100
6th Annual SD Times 100
It's time once again to
recognize the organizations
or individuals that have
demonstrated leadership in
their markets.