Channels ▼

Jocelyn Paine

Dr. Dobb's Bloggers

B&D with Lady Lovelace

September 07, 2008

I've been working with Ada recently, using the free GNAT GPL implementation from AdaCore's Libre site, together with Dmitriy Anisimkov and Pascal Obry's AWS Web server. I tell you this because it reminded me of more entries from the New Hacker's Dictionary.

Ada is notorious for strict type-checking, and the consequent need for type casts. You can get some impression of this from the Ada Programming Wikibook page about strings, whose examples seem to be forever casting bounded strings to unbounded and back. I and my friend Graham Stark are using Ada in a Virtual Worlds economic simulation where financial correctness is crucial, so we have decided to accept the extra finger-typing imposed by Ada data-typing, even if we must then recover by sitting for a month with our fingers in a cast. But not everybody agrees, as the Dictionary's entry for Ada shows:

Ada /n./

A Pascal-descended language that has been made mandatory for Department of Defense software projects by the Pentagon. Hackers are nearly unanimous in observing that, technically, it is precisely what one might expect given that kind of endorsement by fiat; designed by committee, crockish, difficult to use, and overall a disastrous, multi-billion-dollar boondoggle (one common description is "The PL/I of the 1980s"). Hackers find Ada's exception-handling and inter-process communication features particularly hilarious. Ada Lovelace (the daughter of Lord Byron who became the world's first programmer while cooperating with Charles Babbage on the design of his mechanical computing engines in the mid-1800s) would almost certainly blanch at the use to which her name has latterly been put; the kindest thing that has been said about it is that there is probably a good small language screaming to get out from inside its vast, elephantine bulk.

Climbing up the classification tree, I find that Ada is a:

bondage-and-discipline language /n./

A language (such as Pascal, Ada, APL, or Prolog) that, though ostensibly general-purpose, is designed so as to enforce an author's theory of `right programming' even though said theory is demonstrably inadequate for systems hacking or even vanilla general-purpose programming. Often abbreviated `B&D'; thus, one may speak of things "having the B&D nature". See Pascal; oppose languages of choice.

Converse to bondage-and-discipline languages, as the above entry indicates, are:

languages of choice /n./

C, C++, LISP, and Perl. Nearly every hacker knows one of C or LISP, and most good ones are fluent in both. C++, despite some serious drawbacks, is generally preferred to other object-oriented languages (though in 1996 it looks as though Java may soon displace it in the affections of hackers, if not everywhere). Since around 1990 Perl has rapidly been gaining favor, especially as a tool for systems-administration utilities and rapid prototyping. Smalltalk and Prolog are also popular in small but influential communities.

There is also a rapidly dwindling category of older hackers with FORTRAN, or even assembler, as their language of choice. They often prefer to be known as Real Programmers, and other hackers consider them a bit odd (see "The Story of Mel, a Real Programmer" in Appendix A). Assembler is generally no longer considered interesting or appropriate for anything but HLL implementation, glue, and a few time-critical and hardware-specific uses in systems programs. FORTRAN occupies a shrinking niche in scientific programming.

Most hackers tend to frown on languages like Pascal and Ada, which don't give them the near-total freedom considered necessary for hacking (see bondage-and-discipline language), and to regard everything even remotely connected with COBOL or other traditional card walloper languages as a total and unmitigated loss. 

Clearly not a language of choice is:

COBOL /koh'bol/ /n./

[COmmon Business-Oriented Language] (Synonymous with evil.) A weak, verbose, and flabby language used by card wallopers to do boring mindless things on dinosaur mainframes. Hackers believe that all COBOL programmers are suits or code grinders, and no self-respecting hacker will ever admit to having learned the language. Its very name is seldom uttered without ritual expressions of disgust or horror. One popular one is Edsger W. Dijkstra's famous observation that "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense." (from "Selected Writings on Computing: A Personal Perspective") See also fear and loathing, software rot.

You can find the origin of that famous observation at the E. W. Dijkstra archive, in Dijkstra's How do we tell truths that might hurt? It follows an introduction in which he writes:

(For instance: with respect to COBOL you can really do only one of two things: fight the disease or pretend that it does not exist. Most Computer Science Departments have opted for the latter easy way out.)

But that was 1975; what of COBOL now? Out of curiosity, I have just searched for "object oriented Cobol". There is at least one implementation, Fujitsu's NetCOBOL, which I found examples of at Using ADO with Fujitsu NETCOBOL and Fujitsu NetCOBOL for .NET. It is much as I would expect a COBOLised language for handling .NET classes to be; but I'll leave you to read those links, because it's time for my coffee break. I'll just go and use the machine:

PERFORM VARYING C-INDEX
                        FROM 1 BY 1
                        UNTIL HAND-FULL
            MOVE COIN(C-INDEX) FROM POCKET TO HAND
MOVE MY-MUG TO SPOUT
INVOKE COFFEE-MACHINE "GET-DRINK"
                   USING "ESPRESSO" "DOUBLE"
                   RETURNING MY-MUG
INVOKE MY-MOUTH "SET-DRINK"
                   USING MY-MUG
INVOKE NEW-HACKERS-DICTIONARY "READ-ENTRY"
                   USING "COBOL fingers"

Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 


Video