Why Software Suck

By Xah Lee. Date:

I like to make a coherent summary of my views on the Design Patterns and eXtreme Programing stuff.

In my previous articles and other posts posted here recently, their contents are summarized and expanded as follows:

(1) Patterns and XP are wishy-washy, unscientific, unproven, and without any mathematical basis.

(2) there are enough applied mathematics in computer science for a life-time of study.

(3) The programers in computing industry lack sufficient training. They lack sufficient discrete math background, lack mastery of their tools (languages, protocols etc.), and their knowledge of their domain/field are often poor.

(4) It is extremely easy and common for laymen to become a software professional, whose code makes up a significant percentage of code in the industry. (This is in contrast with other engineering disciplines. A desktop computer is sufficient to send a interested laymen into software industry.)

(5) Software engineering is ten thousand times easier than physical engineering such as the building of bridges, airplanes, tunnels, buildings etc.

(6) Computers do not make mistakes, people do, and sloppiness is a common attitude in software industry.

(7) software licenses are irresponsible. The vast majority of software license agreements contain clauses that do not guarantee it works.

Software Quality and Programer Quality

The quality of software depends on primarily of two aspects:

• Programer's mastery of the craft. (Mathematics, programing languages, protocols, operating systems, programing applications.)

• Programer's expertise/knowledge of his field/domain. (Example: a programer writing software for Chemistry Industry should know Chemistry. A programer writing software for e-commerce should known business transactions. A programer in aerospace industry should know the basics and specifics of physics… etc. Not only in terms of pure academics knowledge, but inside out knowledge of the field's dealings, culture, practices, etc.)

Programers should master their tools. Know every detail of their languages, protocols, libraries, specifications, standard bodies, alternatives, real world discrepancies. Then, programers should strive to accumulate knowledge of their respective domain. The academic knowledge, and all associated actual practices and experiences.

When a programer masters his tools and domain expertise, he obtains the expertise any Design Pattern tries to describe.

Design Patterns is a snake oil. Icing on the cake. Fluff. Wishful thinking. Slouch's drug. Idiot's placebo. And that's not all.

Design Patterns is the opium of computing industry. From a addicted individual or company, it may have improved a code or helped a team by placebo effect. But on the whole, it hinders the propagation of quality languages. It stops advancements of language design. It reduces the awareness of real education needs like mastering mathematics and domain expertise. It is a faaking spoon-feeding formula designed to retard the mundane and drug the smart. It curbs creativity. It is a plague, a fashion phenomenon; a jargon-riding dimwit-pleasing epidemic.

For the record, the “Gang of Four” mentioned in this thread who wrote the Design Patterns book are:

These people will be remembered as criminals in the computing history, along with Larry Wall and those faaking jackasses who distributed their home work now known as Unix. [criminals here is defined as those who bring damages to society, including hampering progress in a massive scale.]

[Disclaimer: any mention of real person is opinion only.]

Is Bridge Engineering Easier Than Software Engineering?

I have mentioned above that software engineering is significantly easier then bridge engineering. Let's drill on this a bit.

When we say A is easier then B, we have to define what we mean by “easier”. Before we can say what we mean by “easier”, we need to understand the nature A and B comparably. We can consider Software Writing versus Bridge Building. This would be a easy one. Anyone can start to write a software, but cannot start to built a bridge. So instead, we consider Software Engineering versus Bridge Engineering. This will be a bit difficult. We'll need to further discuss what does “engineering” really encompass here. Coming up with a good definition can be quite involved. Instead of drilling on a sensible definition, I'll simply mention a few comparisons of things in software engineering and bride engineering below. The following items will be somewhat hodgepodge.

• Material cost.

• Size of team.

• Cost of raising (educating/training) engineers.

• The nature involved.

In building bridges, there are lots of unknown factors. There's wind, storm, flood, earthquake all of which we cannot fully control, and can only predict in a limited way. It will involve many science disciplines. geo-science, physics, aerodynamics. Software building requires much lesser disciplines, and significantly much less people.

Building bridge is costly. It can only be done once, and the one time must be right. It cannot go by trial-and-error. Software building on the other hand, can trial-and-error all the way. It is in a sense costless.

The essence of computers can be likened to a abacus. You push the beads and you readout the values. There are no chance events. No storm or flood to worry about. The information are one hundred percent known to you, and you control it one hundred percent one hundred percent of the time.

Which one is ten thousand times easier do you think? Is it bridge engineering, or software engineering?

Responsibilities of Licensing

In the above, i have touched on the problem of software licenses. Namely, they outright disclaims the functionality of the software.

I propose that we raise a awareness of this situation, so that the public (consumer) will start to demand more responsible software (licenses).

See: Responsible Software License .

Excerpt of Major Licenses in the Industry

Feast your eyes. Note the ominous all-caps.

Excerpt of License agreement from Apple Computer Inc's Mac OS 9:

4. Disclaimer of Warranty on Apple Software.  You expressly
acknowledge and agree that use of the Apple Software is at your sole
risk.  The Apple Software is provided "AS IS" and without warranty of
any kind and Apple and Apple's licensor(s) (for the purposes of
provisions 4 and 5, Apple and Apple's licensor(s) shall be
collectively referred to as "Apple") EXPRESSLY DISCLAIM ALL WARRANTIES
AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY OR
SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE DOES NOT WARRANT THAT
THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR
REQUIREMENTS, OR THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE
UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE
WILL BE CORRECTED.  FURTHERMORE, APPLE DOES NOT WARRANT OR MAKE ANY
REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE
APPLE SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS,
ACCURACY, RELIABILITY, OR OTHERWISE.  NO ORAL OR WRITTEN INFORMATION
OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL
CREATE A WARRANTY OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY.
SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU (AND NOT APPLE OR AN
APPLE AUTHORIZED REPRESENTATIVE) ASSUME THE ENTIRE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.  SOME JURISDICTIONS DO NOT
ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY
NOT APPLY TO YOU.  THE TERMS OF THIS DISCLAIMER DO NOT AFFECT OR
PREJUDICE THE STATUTORY RIGHTS OF A CONSUMER ACQUIRING APPLE PRODUCTS
OTHERWISE THAN IN THE COURSE OF A BUSINESS, NEITHER DO THEY LIMIT OR
EXCLUDE ANY LIABILITY FOR DEATH OR PERSONAL INJURY CAUSED BY APPLE'S
NEGLIGENCE.

5. Limitation of Liability.  UNDER NO CIRCUMSTANCES, INCLUDING
NEGLIGENCE, SHALL APPLE BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
INDIRECT OR CONSEQUENTIAL DAMAGES  ARISING OUT OF OR RELATING TO THIS
LICENSE.  SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL
OR CONSEQUENTIAL DAMAGES SO THIS LIMITATION MAY NOT APPLY TO YOU. In
no event shall Apple's total liability to you for all damages exceed
the amount of fifty dollars ($50.00).

We can see here, that Apple actually allowed a liability of $50, which is about half of the price of the software this particular license is sold for. (Mac OS 9, circa 1998.)


Excerpt of License agreement from Free Software Foundation's license, known as GPL:

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

Free Software Foundation's software and many Open Source software using this license are actually free of charge. In some respects, it is reasonable because it is not sensible to stipulate warranties from largess.


END-USER LICENSE AGREEMENT FOR MICROSOFT WINDOWS 98, excerpt:

LIMITED WARRANTY

LIMITED WARRANTY.
Microsoft warrants that (a) the SOFTWARE PRODUCT will perform
substantially in accordance with the accompanying written materials
for a period of ninety (90) days from the date of receipt, and (b) any
Support Services provided by Microsoft shall be substantially as
described in applicable written materials provided to you by
Microsoft, and Microsoft support engineers will make commercially
reasonable efforts to solve any problem. To the extent allowed by
applicable law, implied warranties on the SOFTWARE PRODUCT, if any,
are limited to ninety (90) days. Some states/jurisdictions do not
allow limitations on duration of an implied warranty, so the above
limitation may not apply to you.

CUSTOMER REMEDIES.
 Microsoft's and its suppliers' entire liability and your exclusive
remedy shall be, at Microsoft's option, either (a) return of the price
paid, if any, or (b) repair or replacement of the SOFTWARE PRODUCT
that does not meet Microsoft's Limited Warranty and that is returned
to Microsoft with a copy of your receipt. This Limited Warranty is
void if failure of the SOFTWARE PRODUCT has resulted from accident,
abuse, or misapplication. Any replacement SOFTWARE PRODUCT will be
warranted for the remainder of the original warranty period or thirty
(30) days, whichever is longer. Outside the United States, neither
these remedies nor any product support services offered by Microsoft
are available without proof of purchase from an authorized
international source.

NO OTHER WARRANTIES.
 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND ITS
SUPPLIERS DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS, EITHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OR
CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
AND NON-INFRINGEMENT, WITH REGARD TO THE SOFTWARE PRODUCT, AND THE
PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES. THIS LIMITED
WARRANTY GIVES YOU SPECIFIC LEGAL RIGHTS. YOU MAY HAVE OTHERS, WHICH
VARY FROM STATE/JURISDICTION TO STATE/JURISDICTION.

LIMITATION OF LIABILITY.
 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT
LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY
LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE
PRODUCT OR THE FAILURE TO PROVIDE SUPPORT SERVICES, EVEN IF MICROSOFT
HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN ANY CASE,
MICROSOFT'S ENTIRE LIABILITY UNDER ANY PROVISION OF THIS EULA SHALL BE
LIMITED TO THE GREATER OF THE AMOUNT ACTUALLY PAID BY YOU FOR THE
SOFTWARE PRODUCT OR U.S.$5.00; PROVIDED, HOWEVER, IF YOU HAVE ENTERED
INTO A MICROSOFT SUPPORT SERVICES AGREEMENT, MICROSOFT'S ENTIRE
LIABILITY REGARDING SUPPORT SERVICES SHALL BE GOVERNED BY THE TERMS OF
THAT AGREEMENT. BECAUSE SOME STATES/JURISDICTIONS DO NOT ALLOW THE
EXCLUSION OR LIMITATION OF LIABILITY, THE ABOVE LIMITATION MAY NOT
APPLY TO YOU.

Among the 3 cited licenses of the largest software in terms of quantity, it appears at least Microsoft guarantees some functionality.