# Eppur si sugat

Joe Armstrong joe@REDACTED
Tue May 27 10:40:00 CEST 2003

```
Eppur si sugat (was that right?)

Hi Chris,

Now I shall have to write a rebuttal to your rebuttal - this is
"pens at dawn" stuff ...

One of  the problems about  attacking OO programming is  that nobody
can actually agree on what it is.

When we were researching the Erlang book Robert V. and I went into
the library and  borrowed *every* book there was  that had anything to
say  about OO  programming  - most  of  theses books  gave some  loose
definitions as to what they  thought OOP was - unfortunately there was
little agreement as to what the core ideas in OOP were.

<< This is not quite true - they did agree over one point - they all
agreed that OOP was great - wonderful - amazingly spiffy etc >>

I strongly  disagree with  the "Everything is  an object"  school of
thinking - I know some people like this but it's not for me.

Take a <<<simple???>> thing like an integer. Integers
can be defined by simple recursion equations, thus:

If X is an integer then X ++ "1" is an integer (recursive case)
"0" is an integer (base case)

So "0" "01" "011" ... "011111111111111111111111" are all integers.

Since it is  a bit of a bother  keeping track of all the  1's we use
use simplified notations like "XIV" as an alias for "01111111111111",
but the basic idea is the same.

(And yes I know this is NOT how we implement it - but at least this
defines what integers are)

Piano would no  doubt have been greatly surprised  if he was reading
"Java in  a Nutshell"  - he'd look  up integer  in the index  and find

public final call Integer extends Number implements Comparable {
// Public Constructors
public Integer(String s) throws NumberFormatException;
...

At which point he would no  doubt burst into tears and start banging
his head against the wall ...

<< and yes, I guess you will response that "Joe is attacking Java and
not OOP. He has confused the ideas of OOP with what is present in Java".
To which I would answer "since there is no generally accepted idea as
what OOP means I am forced to pick a specific language which claims to
be an OO language and then tell you what's wrong with it" >>

It seems to  me much nicer to keep  data structure definitions apart
from the  set of functions  that operate upon them.  Data structure
definitions  are finite and  declarative. The  set of  functions which
operate on them is infinite and (often) imperative.

We can  *easily* define  a string  as a sequence  of integers  - IMHO
that's what a string *is*. In Erlang:

+type string() = [int()].

I looked up  string in the JIAN and to my  surprise *nowhere* did it
say what  a string was.  Instead it  gave a long list  of methods that
could  be used to  turn strings  into other  things (and  I'm guessing
here, I'd bet that nowhere could  I find definitions of what the other
things are :-).

In English we have "dictionaries" and "books" - Books are full of
paragraphs and sentences, sentences are made of words.

*If we want to know what a word means we look it up in the dictionary*

Fortunately dictionaries are not OO - if they were I guess the
dictionary would not only have a definition of the word, but also
have to included all possible citations of the word.

So when we looked up string, we would find not

A string is a sequence of integers

But rather

A string is a ...
The word string occurs in the following books ...
... list of 10 Million books ...

I rest my case (for now)

I'll be back

/Joe

On Sun, 25 May 2003, Chris Pressey wrote:

> I'm not 100% happy with it, but if I keep editing it until I'm 100%
> happy it'll never be done.  So, here is a rebuttal to Joe's essay:
>
>   http://www.catseye.mb.ca/articles/oodspd.html
>
> And for more fair time, here is another essay critical of OO that I
> stumbled upon:
>
>   http://home.planet.nl/~faase009/AoP_OOCH.html
>
> -Chris
>

```