Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Brian Hurt <bhurt@spnz.org>
To: Tyler Eaves <tyler@ml1.net>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Frustrated Beginner
Date: Tue, 23 Dec 2003 11:11:19 -0500 (EST)	[thread overview]
Message-ID: <Pine.LNX.4.44.0312231037210.3749-100000@guestc.h0020780e8acd.ne.client2.attbi.com> (raw)
In-Reply-To: <1072152186.59938.30.camel@tylere>


I notice a lot of replies to this already, I'll add mine.

On Mon, 22 Dec 2003, Tyler Eaves wrote:

> First a bit of background:
> 
> I'm a 19 yr old computer science student, been programming for perhaps
> 10 years. Started (Like so many did in the early '90s with QBasic in
> DOS. These days most of my work is done in either PHP (web stuff) or
> Python (everything else) with the occasional bit of C for stuff that
> needs to run really fast. I'm also passingly familiar with a number of
> other langauges (C++, Java, Perl, etc). 
> 
> So why is O'Caml giving me so much trouble? I've been trying to pick it
> up for about a week now, read various online tutorials. I'm just having
> no luck at all. My largest program to date (that works) is all of 3
> lines long, and simply printed out the command line arguments passed to
> the program.

All programming languages are not the same.  There programming 
"paradigms"- literally different ways of thinking about programming.  
Imperitive/Procedural (C, most Perl, etc) is one way of thinking about 
things.  Object Oriented (Python, Java, C++, etc) is another.  Functional 
(Lisp, Scheme, Ocaml) is a third.  Picking up a new language in a paradigm 
you are already familiar with is easy- if you know C++ and Java, picking 
up Python or Ruby is a week or three at most, no problem.  Picking up a 
language in a different paradigm is much harder- not only do you have to 
pick up a new syntax, you have to pick up a new way of thinking about 
programming.

It's worth the effort, IMHO.  Some problems are easier to implement in 
some paradigms than other (take a look at Motif programming to get a 
deeper appreciation of OO for GUI libraries).  Perl, Python, and (IIRC) 
Ruby all give you some ability to write functional code.  Things you learn 
in Ocaml are applicable elsewhere (not to mention the fact that you get to 
use Ocaml).

To use an analogy, if you know English, learning German or French (while a 
little hard) isn't that difficult, but the cultures share a common 
concept base.  You have to learn a new syntax and a new vocabulary, but 
very few new concepts.  Learning Chinese or Navaho is a lot more 
difficult, because not only do you have the problems of learning German or 
French, but you also have to learn concepts, new ways of thinking.

> 
> My biggest source of problems seems to be the syntax. I'm totally
> confused as far as ; vs ;; vs nothing, when to use ( ), and things of
> the like. 

This took some rethinking on my part as well.  The trick is to remember
that ';' is an operator, like '+' and '.' are.  Actually, the best
comparison is with the comma operator in C.  If the type of '+' is int ->
int -> int ('+' takes two int parameters and returns an int), then the
type of the ';' operator is unit -> 'a -> 'a (or more correctly, 'a -> 'b
-> 'b).  One you start thinking of ';' as an operator and not a statement
seperator, it becomes more obvious that an ocaml function body is simply a
single expression, and not a series of statements.  ';;' is more close to
what ';' in most languages mean- it's what ends an expression.

When do you use parenthesis?  The same times you'd use them in any other 
language- to disambiguate expressions.  Note that begin/end are 
replacements for parens, and occassionally look nicer.  

> It doesn't help that the compiler is completly naive when it
> comes to Syntax Errors. It would be so helpful if it could give an error
> message that actually told the programmer what it expected. I realise
> that O'Camls syntax allows many things, so that it may be hard to say
> exactly what it WAS expecting in all cases, but surely SOMETHING
> meaningful, besides a charater postion could be given? 

Heh.  I've got to agree that Ocaml's error messages leave something to be 
desired.  But, speaking with 15 years more programming experience, there 
will come a time when you will give your left arm to be magically told 
just the line number of the bug.

Simple experience with the language helps here.  I find myself more easily 
being able to diagnose what Ocaml is really complaining about the more I 
use a language.  Of course, this is true of any language.

> 
> What I'd really like is a site with examples of actual programs. Most of
> the example code I've seen is A: Not commened and B: Recursive
> Mathematical functions. I'd really love to see an example, of say,
> reading in a file, looking at each character, and doing something when
> it encounters, say, a tab. Or any other such program that actually does
> something. 

Except how you write a program to do exactly that in Ocaml is to write a 
recursive mathematical function:

let count_tabs ins =
	let rec loop cnt =
		let eof, c = 
			try
				false, (input_char ins)
			with
				| End_of_file -> true, ' '
		in
		if eof then
			cnt
		else if (c = '\t') then
			loop (cnt + 1)
		else
			loop cnt
	in
	loop 0
;;

Learn recursion.  It's an incredibly powerful concept, and it's usefull in 
almost every language.  Including mathematics.

> 
> I really want to like O'Caml. It seems to offer a very nice feature set,
> and the ability to compile to super-fast native code is the icing on the
> cake. Right now though, I'm frustrated and on the verge of giving up.
> 

Don't give up.  You're learning more than just a new programming language.

-- 
"Usenet is like a herd of performing elephants with diarrhea -- massive,
difficult to redirect, awe-inspiring, entertaining, and a source of
mind-boggling amounts of excrement when you least expect it."
                                - Gene Spafford 
Brian

-------------------
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


  parent reply	other threads:[~2003-12-23 16:07 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-23  4:03 Tyler Eaves
2003-12-23  4:19 ` jayanta nath
2003-12-23  5:34   ` Matt Gushee
2003-12-23  6:11     ` Tyler Eaves
2003-12-23  6:21       ` Michael Vanier
2003-12-23  6:31       ` Michael Jeffrey Tucker
2003-12-23 12:16         ` Richard Jones
2003-12-23 20:23           ` Dustin Sallings
2003-12-23  6:32       ` Shawn Wagner
2003-12-23  6:43       ` Matt Gushee
2003-12-23  5:58 ` Dustin Sallings
     [not found]   ` <EAEE2FF2-3510-11D8-B3A1-000A9584A16E@ml1.net>
2003-12-23  6:53     ` Dustin Sallings
2003-12-23  7:23       ` Tyler Eaves
2003-12-23  8:26         ` Dustin Sallings
2003-12-23  6:20 ` Tom Murray
2003-12-23  8:52 ` Stefano Zacchiroli
2003-12-23 16:47   ` [Caml-list] Ocaml syntax David Brown
2003-12-23 20:19     ` Dustin Sallings
2003-12-23 21:03       ` Eric Merritt
2003-12-23 21:52     ` brogoff
2003-12-24 10:27       ` skaller
2003-12-24 11:42         ` Peter Jolly
2003-12-24 12:19           ` skaller
2003-12-30  8:14     ` dmitry grebeniuk
2003-12-30 17:48       ` David Brown
2003-12-23 10:26 ` [Caml-list] Frustrated Beginner Samuel Lacas
2003-12-23 11:01   ` Dustin Sallings
2003-12-23 14:34     ` Oleg Trott
2003-12-23 20:25       ` Dustin Sallings
2003-12-23 16:11 ` Brian Hurt [this message]
2003-12-23 16:20   ` Sven Luther
2003-12-23 16:52     ` David Brown
2003-12-23 20:32       ` Dustin Sallings
2003-12-24 10:41         ` Issac Trotts
2003-12-23 17:39     ` Brian Hurt
2003-12-24  9:35       ` Jacques Garrigue
2003-12-24  9:49 ` skaller

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=Pine.LNX.4.44.0312231037210.3749-100000@guestc.h0020780e8acd.ne.client2.attbi.com \
    --to=bhurt@spnz.org \
    --cc=caml-list@inria.fr \
    --cc=tyler@ml1.net \
    /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