The Fruits of Civilization (11) Software


Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build, and test, it introduces security challenges, and it causes end-user and administrator frustration. ~ American software entrepreneur Ray Ozzie

Computer hardware is to software what the brain is to the mind: a substrate for processing data. Unlike all other technologies, in its ethereality software is entirely a product of the mind. Thus, software typifies human intellectual acumen like no other technology.

Program designers tend to think of the users as idiots who need to be controlled. ~ American computer scientist John McCarthy in 1983

Anyone who has extensively used a desktop computer – regardless of operating system – has noticed that application programs regularly sport somewhat different user interfaces. This owes to modern operating systems, which do offer common services, such as windowing, but do not make it easy for programmers to create consistent user interfaces.

The application programming interface (API) to the operating system renders creating programs an onerous and problematic process. Thus, application programmers find bypassing the OS to create their own feature set advantageous from both development and maintenance standpoints.

A more telling aspect of modern software is a randomness in robustness. Beyond usability issues lies glitches which bedevil users with crashes: programs abruptly terminating.

If debugging is the process of removing bugs, then programming must be the process of putting them in. ~ Dutch computer scientist Edsger Dijkstra

Finally, the greatest evil that may infect a computer is malware: malicious software that steals data, deletes files, takes control, or otherwise compromises peace of mind in computing.

A modest but continually annoying aspect of this malevolence is junk email. Over 90% of the email sent is spam (a common slang term for junk email).

Crashes, inconsistent GUIs, malware, and spam are all failures of operating systems to adroitly provide for application programmers and computer users.

Microsoft has never been able to deliver a decent Windows OS to its customers. The microprocessor you have may be a supercomputer on a chip, but Microsoft Word can’t keep up with your typing. Configuring home networking is ridiculously vexatious; in Windows 10 it is practically impossible. Bugs, crashes, inadequacies, and inconveniences remain rife. Windows 10, the latest OS, frequently crashes and must restart itself. Windows 10 is so fundamentally unstable that it often commits suicide within months, refusing to load itself and run. Microsoft updates to its OS often cause the death.

Since the release of Windows 8 in 2012, Windows has had something of a schizophrenic interface at both the user and programmer levels, with 2 incompatible application types. The newer “apps” are rinky-dink compared to traditional applications, which are much more difficult to develop because of Windows’ arduous API. Microsoft has never been adept at software design.

In the 21st century, Apple has done better by dint of laying its imitative GUI over a Unix core, after the company failed to create a dependable foundation on its own after over a decade of effort. The Macintosh OS was solidified by using a well-worn kernel that was already a quarter century old when adopted by Apple. Like Microsoft, Apple codes its OS in C++.

The cause of the software malaise rampant throughout the industry can be traced to a single source: the language in which computers are programmed.

These problems appear disparate and systemically unsolvable only because of the failure to comprehend the importance of language as the foundation for a holistic computing solution. The history of programming languages illustrates the dilemma and shows software developers as dolts failing to see the forest for the trees.

Give a man a program, frustrate him for a day. Teach a man to program, frustrate him for a lifetime. ~ Pakistani programmer Waseem Latif