caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Siraaj Khandkar <siraaj@khandkar.net>
To: Malcolm Matalka <mmatalka@gmail.com>
Cc: Gour <gour@atmarama.net>, caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] new user - old questions
Date: Mon, 24 Dec 2012 12:59:24 -0500	[thread overview]
Message-ID: <2128CD06-9356-48E9-9284-DCB865E24690@khandkar.net> (raw)
In-Reply-To: <CAKziXDV1LbKPdetAzczYMf5jt1_uQQOqUwc5yOzBr5axtpXS6w@mail.gmail.com>

+1 for OCaml.org! It is an excellent organization of available OCaml resources
that I wish existed when I started checking-out OCaml.


SHORT VERSION:

Editor:
    Vim with OMlet plugin

Books:
    1) Jason Hickey's "Introduction to Objective Caml"
    2) The manual: http://caml.inria.fr/pub/docs/manual-ocaml/

Syntax:
    I actually preferred OCaml's syntax over Haskell's from the start (meaning
    that I don't just prefer OCaml because of familiarity). It is highly
    subjective and I don't care to argue about it, but, to me it just feels
    simpler, more uniform and (gasp) clean. :) Though honestly, cleanliness
    primarily comes down to the author's deliberate effort.


LONG VERSION:

I started by reading/skimming beginning chapters of Jason Hickey's book, and
then just committing to writing in OCaml, every small utility that I had a need
for while looking things up in the manual and stdlib reference. So lots of head
banging and RTFMing, the best way, IMHO :)

That is for "how to do it" aspect of things, but another, IMHO most
enlightening, aspect is "how to think" in OCaml (or ML in general), and for
that I highly recommend reading Jane Street's blog, with the most important
entry point (IMHO, of course) being the Effective ML talk:
https://ocaml.janestreet.com/?q=node/82

I'm yet to switch to their standard library (though I plan to), but just about
everything I've read from these guys so far, have been most moving to me as a
programmer in general, with OCaml just being an excellent facilitator of such
thinking.

Another thing I have an opinion on is the build system. The "right" way to
compile and link your programs have been quite confusing to me as a beginner. I
was told to "just use OASIS", and I remember wasting quite a lot of time trying
to grok everything it does without understanding OCaml first. I finally (and
rightfully) decided to just write Makefiles with "manual" build steps as is
described in the manual, which helped me to understand how things are actually
put together.

I just switched to ocamlbuild, and can now fully appreciate what it has to
offer!  I plan to go to OASIS eventually, but haven't quite developed an
understanding of what it would gain me (plus I noticed some behaviors that rub
me the wrong way).  Seems like distributing libraries is it, but I'm not quite
there yet, so time will tell.

For managing external libraries, my initial savior was GODI - I had some issues
with packages breaking, but I don't know what I would've done without it - it
is awesome!  However, as of a couple of months ago, there's now a much improved
package manager for OCaml - OPAM. I now use OPAM exclusively.

As for editors, I'm a happy Vim user, with OMlet plugin:
http://www.lix.polytechnique.fr/~dbaelde/productions/omlet.html

So, my subjective and personally-inspired roadmap is such:

* Get inspired by Effective ML
* Get a feel for the language from Jason Hickey's book
* Use OPAM
* Write Makefiles with manual steps (see the official manual)
* Hack, hack, hack!
* Watch, and this time understand, Effective ML again
* Switch to ocamlbuild
* Go forth and conquer! :)


P.S. For the experienced Camlers, I am not claiming to be "right" in anything I
said, it is simply a description of my perception as a new comer to the
language.



On Dec 24, 2012, at 7:38 AM, Malcolm Matalka <mmatalka@gmail.com> wrote:

> Check ocaml.org, there are tutorials, references, and book suggestions. I
> bootstrapped myself with a tutorial, then read through language spec. Ocaml
> is thankfully not a complicated language to get productive with.
> 
> /M
> On Dec 24, 2012 1:30 PM, "Gour" <gour@atmarama.net> wrote:
> 
>> Hello!
>> 
>> Some years ago I was looking for adequate language for one open-source
>> project to be done in free time and although I took a look at OCaml,
>> somehow, I didn't like syntax and went playing with Haskell.
>> 
>> Never really grokked monads and had feeling that despite nice syntax,
>> some things are more complicated for pragmatic programming than they
>> should be.
>> 
>> I managed to scare enough few potential contributors and had to
>> postpone the project for 'sometime in the future'.
>> 
>> Later, I was exploring D (v2), but it seems that the language is never
>> finished, code breaks often from one version to another, poor GUI
>> bindings support etc.
>> 
>> Shortly thought about using Python+Cython, but dynamic language never
>> sounded right for my project.
>> 
>> In utter despair I went to evaluate Ada which seems as nice (a bit
>> verbose) language, mature, actively developed, good ecosystem, but
>> somehow I was missing lack of FP features.
>> 
>> For a short time I took a look at Nimrod - nice & interesting language,
>> but very small community and lack of FP features.
>> 
>> Then, I do not know exactly how, I got inspired to take a look at OCaml
>> and in a very short time, I could see that there is a language with
>> quite OK syntax, actively developed, not small community enabling me to
>> use FP language with thinking too much about monads and category theory
>> in order to do practical things.
>> 
>> The remaining thing is to get hints how to proceed, iow.:
>> 
>> a) Real World Ocaml is going to be released in Oct 2013, so I wonder is
>> there any online/paperback book you can recommend? I'm on Debian wheezy
>> which means no 4.0 yet, but probably we'll try to take advantage of new
>> features in due course of time
>> 
>> b) it looks that Emacs is the best-supported editor for OCaml. How is
>> support in Vim/Geany? What do you recommend?
>> 
>> Now I wonder about Typerex which looks cool, but I was told on #ocaml
>> that it's "dead project" and was recommended to use tuareg mode?
>> 
>> That's actually everything or most important...editor & good book to
>> start with?
>> 
>> 
>> Sincerely,
>> Gour
>> 

-- 
Siraaj Khandkar
.o.
..o
ooo


  parent reply	other threads:[~2012-12-24 17:59 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-24  9:36 Gour
2012-12-24 12:38 ` Malcolm Matalka
2012-12-24 15:21   ` [Caml-list] " Gour
2012-12-24 17:59   ` Siraaj Khandkar [this message]
2012-12-24 20:07     ` Gour
2012-12-25  1:46     ` [Caml-list] " Francois Berenger
2012-12-25  7:21       ` [Caml-list] " Gour
2012-12-25  9:01         ` Gabriel Scherer
2012-12-25  9:57           ` Gour
2012-12-25 10:16             ` Gabriel Scherer
2012-12-25 15:28               ` Gour
2012-12-25 13:24       ` [Caml-list] " Lukasz Stafiniak
2012-12-24 17:04 ` Fabrice Le Fessant
2012-12-24 20:08   ` [Caml-list] " Gour
2012-12-26  8:39 ` [Caml-list] " rixed
2012-12-27  3:37   ` Martin DeMello
2013-04-05 20:14 ` Lukasz Stafiniak

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=2128CD06-9356-48E9-9284-DCB865E24690@khandkar.net \
    --to=siraaj@khandkar.net \
    --cc=caml-list@inria.fr \
    --cc=gour@atmarama.net \
    --cc=mmatalka@gmail.com \
    /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).