caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: mgushee@havenrock.com
To: caml-list@pauillac.inria.fr
Subject: Re: [Caml-list] OCaml popularity (long!)
Date: Tue, 11 Mar 2003 12:47:56 -0700	[thread overview]
Message-ID: <3E6DDAFC.19000.44771B6@localhost> (raw)
In-Reply-To: <20030311162627.GA32188@ontosoft.com>

On 11 Mar 2003 at 10:26, Fred Yankowski wrote:

> Richard Gabriel, author of the famous "Worse is Better" paper about
> C/Unix vs Lisp, makes some interesting points in his recent book while
> discussing his theory of what it takes for a programming language to
> be accepted and evolve:
> 
>     The second mandatory feature is that the language cannot require
>     mathematical sophistication from its users. Programmers are not
>     mathematicians, no matter how much we wish and wish for it. And I
>     don't mean sophisticated mathematicians, but just people who can
>     think precisely and rigorously in the way that mathematicians can.

That's probably true as far as it goes, but I think statements about 
what a language can or cannot *require* miss the mark a bit. I would 
argue that there are very few languages that intrinsically require 
sophisticated thinking for basic programming (I would place Prolog 
among those few, but not Ocaml--more below), but that you do need 
that precision and rigor to write great programs in any language.

But how the language is presented to the world, through 
documentation, teaching, advocacy, and the activities and attitude of 
the user community, can make a big difference.

If I may illustrate from personal experience: some time early last 
year I decided that I wanted to learn a new language, and that it was 
going to be functional. My background as a programmer is mainly in 
Python and Java, with bits of Tcl, Perl, Ruby, and Visual Basic here 
and there. Oh, and I studied Asian history in college.

Why functional? I guess it's because I had been working with XSLT
for a couple of years. There were aspects of the language that had
been very puzzling. But someone pointed out to me that XSLT was a 
functional language, and as I began learning what functional 
programming was, it all started to make sense, and I wanted more. 
However, this was not an academic exercise; I was and am convinced 
that functional programming is a powerful tool for real-world tasks. 
But having practical goals obviously places some constraints on your 
choices: you need a good selection of libraries for real-world 
programming tasks (database interface, GUI, text processing, 
graphics, system interface, and so on), and you need a language that 
can be learned in a reasonable time period. So Prolog was clearly out 
;-)

My first stop was Erlang, partly because it was developed by and for 
industry. But that didn't last too long. Ericsson's OTP interpreter 
(or VM? I can't remember) was horribly slow, the selection of 
libraries was poor, there doesn't seem to be a serious effort to 
integrate Unicode into the core platform, and the documentation was 
abysmal (mostly disorganized rather than incomplete, I suppose, but 
incoherent information isn't much better than none).

Then I found Haskell. It was a good learning experience, but after a 
few weeks of intensive study and experimentation, my feeling was: 
"Yes, Haskell, you are the One True Language. Now go away and let me 
get some work done." Though I really appreciated Haskell on a 
conceptual level, there were two major reasons I gave up on it. One 
was that, although there is a reasonable selection of libraries, when 
you look closely you find that many of them are suffering from bit-
rot; in fact, the Haskell community seems to be dominated by 
academics who feel no need to develop generally useful tools. That's 
fine, but not what I was looking for.

My other big problem with Haskell was ... you guessed it: monads! I 
must have read every introduction to monads that's available on line 
(and there are at least half a dozen), but I still don't really 
understand them. Without monads, you can't do any real work in 
Haskell, and monads are universally acknowledged to be a difficult 
concept. Yet every introductory text I have seen on Haskell insists 
that you learn the theory of monads before you can learn how to do 
things like I/O.

Since I don't understand monads, maybe I'm missing something, but 
this insistence on theory before practice seems like pure dogma to 
me. I've even seen two or three Haskell tutorials that open with 
statements to the effect that "I could teach you how to write a 
Hello, World program, but I won't, because then you wouldn't 
understand why Haskell is so great."

I don't buy that argument--at least I don't accept that it's 
universally true. People have different learning styles, but many 
learn best by doing. I don't know how typical I am, but I find that a 
good experience working with a new language naturally leads to a 
desire for deeper understanding.

Which brings me around, finally, to OCaml. The main reasons I like 
OCaml and will probably stick with it are:

  OCaml and its community are focused on promoting good design and  
  good programming practices, but not on enforcing theoretical  
  orthodoxy. Knowledge about OCaml is freely available to those who 
  want to learn; they don't have to think in any certain way;

  There is a good selection of libraries available. Certainly there 
  are some gaps, but OCaml has up-to-date tools for a wide variety of 
  common programming tasks; and, on a related note:

  OCaml seems to have momentum. Though the language isn't wildly 
  popular, useful applications and libraries are being developed all 
  the time; there is something new almost every week.
  
>     Furthermore, types that try to do more than that are a hindrance
>     to understanding. For example, abstract data types allow one to
>     write programs in which the interface is completely separate from
>     the implementation. Perhaps some large programming teams care a
>     lot about that, but a lot of programming goes on in ones and twos,
>     maybe threes. Types of this variety, with complicated syntax and
>     baffling semantics, is a hindrance to programming for many of
>     these folks.

I wonder. It seems to me that the need for sophisticated program 
design stems mainly from the complexity of the problem. He also seems 
to be saying that larger teams are smarter ... because they have more 
bodies? My experience is just the opposite: the small teams I've 
known are smarter because every member is highly skilled and internal 
communications are easier. 

Let me propose an alternate (and perhaps somewhat cynical) view. 
Companies that employ large programming teams tend to favor Java. 
They may or may not be aware that there are other languages that 
foster much higher productivity. But Java is good for large teams, 
partly because its rigid OO paradigm means there are relatively few 
ways to structure a program, so managers can assign tasks with 
relative ease. Also, Java keeps everyone busy.

Now, suppose someone were to propose that a large team adopt a 
"smarter" language, such as OCaml. Well, either all team members can 
handle it, or they can't. If some people can't handle it, then you 
have to either lay them off or find other work for them to do. Big 
problem for management. But what if all team members *can* handle it? 
What if they all love their new language? That may sound good, but 
now suddenly you have a large team full of highly motivated 
developers finishing their assigned tasks in half the time it used to 
take them. Then what? Probably some will just get bored, but others 
will start wanting to get more involved with the "big picture." Also 
a big problem for management.

However much the business press may talk about people being 
empowered, the reality is that most large corporations assume--even 
depend on the fact--that the large majority of their employees are 
mediocre. Too many people working too effectively would upset the 
status quo, and is therefore a scary thought.

So I say that Java is a corporate-friendly language, and OCaml, for 
better or worse, is not.

--
Matt Gushee
Englewood, CO USA

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2003-03-11 19:48 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-06 23:27 [Caml-list] OCaml popularity Graham Guttocks
2003-03-10 20:43 ` Paul Steckler
2003-03-10 23:48 ` Gerd Stolpmann
2003-03-11  0:18   ` Brian Hurt
2003-03-17 23:49   ` Graham Guttocks
2003-03-11  1:43 ` Nicolas Cannasse
2003-03-11 10:23   ` Pierre Weis
2003-03-11 14:27     ` Guillaume Marceau
2003-03-11 16:16       ` David Brown
2003-03-11 16:47       ` [Caml-list] about -rectypes Christophe Raffalli
2003-03-12  2:32       ` [Caml-list] OCaml popularity Nicolas Cannasse
2003-03-12  3:55         ` Cross-platform GUI (was Re: [Caml-list] OCaml popularity) mgushee
2003-03-12 10:51         ` [Caml-list] OCaml popularity Alex Romadinoff
2003-03-12 18:24         ` Max Kirillov
2003-03-11 19:02     ` Graham Guttocks
2003-03-12 17:12       ` Richard W.M. Jones
2003-03-12 18:08         ` Alwyn Goodloe
2003-03-12 22:34           ` Michael Schuerig
2003-03-12 23:13             ` Martin Weber
2003-03-12 23:35               ` Michael Schuerig
2003-03-13  8:02                 ` Alessandro Baretta
2003-03-13 10:23                   ` Michael Schuerig
2003-03-12 23:35             ` Brian Hurt
2003-03-12 23:18         ` Daniel Bünzli
2003-03-12 23:47           ` Brian Hurt
2003-03-13  2:15         ` William Lovas
2003-03-13  3:44           ` Graham Guttocks
2003-03-13  9:31           ` Richard W.M. Jones
     [not found]           ` <20030313095232.GC347@first.in-berlin.de>
2003-03-13 20:50             ` William Lovas
2003-03-13 21:17               ` Oliver Bandel
2003-03-13 22:01                 ` Brian Hurt
2003-03-13 22:17                 ` Oliver Bandel
2003-03-14  6:33                 ` Michal Moskal
2003-03-14 11:50                   ` Markus Mottl
2003-03-14 15:38                     ` Oliver Bandel
2003-03-14 10:13               ` MikhailFedotov
2003-03-14 10:30                 ` Johann Spies
2003-03-13  8:09       ` Pierre Weis
2003-03-15  1:43     ` Tushar Samant
2003-03-15  8:19       ` Andreas Eder
2003-03-11 16:26   ` Fred Yankowski
2003-03-11 19:47     ` mgushee [this message]
2003-03-12 11:23       ` [Caml-list] OCaml popularity (long!) Diego Olivier Fernandez Pons
2003-03-30  5:59         ` Belated thanks (was Re: [Caml-list] OCaml popularity) Matt Gushee
2003-03-31 15:27           ` [Caml-list] Re: Belated thanks cashin
2003-04-01  8:22           ` Belated thanks (was Re: [Caml-list] OCaml popularity) Johann Spies
2003-03-12 20:41       ` [Caml-list] OCaml popularity (long!) Max Kirillov
2003-03-13  2:36         ` Haskell-like syntax (was: [Caml-list] OCaml popularity (long!)) Oleg
2003-03-13 18:33           ` [Caml-list] Re: Haskell-like syntax Max Kirillov
2003-03-14 19:30             ` Max Kirillov
2003-03-14 19:47               ` Max Kirillov
2003-03-14 20:01               ` Seth Kurtzberg
2003-03-14 20:34                 ` brogoff
2003-03-14 21:17                   ` Sebastien Carlier
2003-03-14 21:51                     ` brogoff
2003-03-15  2:27                 ` Max Kirillov
2003-03-15 10:58                   ` Markus Mottl
2003-03-15 15:52                     ` [Caml-list] globally valid symbols (was: Haskell-like syntax) Max Kirillov
2003-03-15 20:16                     ` [Caml-list] Re: Haskell-like syntax David Brown
2003-03-16  5:28                     ` Module recursion (Was Re: [Caml-list] Re: Haskell-like syntax) brogoff
2003-03-16 11:10                       ` Markus Mottl
2003-03-16 18:02                         ` brogoff
2003-03-16 18:34                           ` Markus Mottl
     [not found]                     ` <Pine.LNX.4.44.0303152112560.27230-100000@grace.speakeasy.n et>
2003-03-16  5:38                       ` Chris Hecker
2003-03-16 18:34                         ` brogoff
2003-03-17  2:20                           ` Jacques Garrigue
     [not found]                         ` <Pine.LNX.4.44.0303161020480.11736-100000@grace.speakeasy.n et>
2003-03-17  5:08                           ` Chris Hecker
2003-03-17 17:06                             ` brogoff
2003-03-17 19:01                               ` Ville-Pertti Keinonen
     [not found]                             ` <Pine.LNX.4.44.0303170836240.29039-100000@grace.speakeasy.n et>
2003-03-17 19:33                               ` Chris Hecker
2003-03-17 20:28                                 ` brogoff
     [not found]                                 ` <Pine.LNX.4.44.0303171145500.29039-100000@grace.speakeasy.n et>
2003-03-17 21:09                                   ` Chris Hecker
2003-03-19  2:34                                 ` [Caml-list] ocamlopt speed (was Re: Module recursion) Chris Hecker
2003-03-19 10:03                                   ` Michal Moskal
2003-03-19 10:38                                     ` Gerd Stolpmann
2003-03-19 20:36                                   ` Chris Hecker
2003-03-17  1:46                     ` [Caml-list] Re: Haskell-like syntax Nicolas Cannasse
2003-03-14 22:50               ` Oleg
2003-03-20 15:01                 ` Andreas Rossberg
2003-03-12 20:46       ` [Caml-list] Monads was OCaml popularity Christophe Raffalli
2003-03-13  0:03       ` [Caml-list] monads for dummies james woodyatt
2003-03-13  4:32         ` Christopher Quinn
2003-03-13 11:53         ` Christian Lindig
2003-03-12 18:59 ` [Caml-list] OCaml popularity Martin Weber
2003-03-12 20:24   ` Xavier Leroy
2003-03-13  8:57     ` [Caml-list] how to interface with integer Bigarrays using camlidl francois bereux
2003-03-13  9:36       ` Xavier Leroy
2003-03-13  0:42   ` [Caml-list] OCaml popularity Graham Guttocks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3E6DDAFC.19000.44771B6@localhost \
    --to=mgushee@havenrock.com \
    --cc=caml-list@pauillac.inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).