I think it's hard for anyone experienced in subject to give a 
recommendation on how to get started, as there's just so much knowledge 
you always assume.  Maybe if you've tried teaching programming using a 
variety of languages you can.

I'm a little younger than the C64 guys, I first taught myself 
programming (would have been while I was in primary school) in QBasic 
using the builtin reference documentation, an old GW-BASIC reference 
manual and a book on Pascal.  I didn't have a Pascal compiler or 
GW-BASIC, just the qbasic.exe that came with DOS so I used the Pascal 
book as a conceptual introduction.  I then figured out myself how to 
translate some of the Pascal stuff, by looking at the example programs 
(gorillas.bas, nibbles.bas) that came with QBasic.

I don't think it matters too much where you start, but it's absolutely 
critical to learn several languages.  I routinely write code in Clojure, 
C, Java, Python, Ruby, JavaScript, various shell-scripts, ELisp and from 
time to time x86 and ARM assembler.  Be very careful not to fall into 
the trap of thinking your first language "does everything", even if it 
is a lisp.

Clojure would be challenging language to start with, as (all?) the books 
and documentation are aimed at people who are already programmers.  But 
if you like a challenge then perhaps that's even a good thing.  If 
you're already a techie type person and are happy to fiddle around in 
configuration files and the command-line I don't think it should be that 
much of an obstacle.

CuppoJava wrote:
> Because simply, I couldn't appreciate functional programming until I
> did a fair bit of imperative programming first. And because imperative
> programming is closer to the raw machine, I find that reasoning about
> functional programming requires, in a lot of instances, to think about
> the equivalent code in an imperative language.

Quite a number of universities teach Haskell or Scheme as a first 
language, as functional programming can be easier to understand (as it's 
more maths-like) and you can get up and running quickly with a program 
that actually "does something".  They then later do a high-level 
imperative language, often Java or Python.  Then in second year they 
usually have some more low-level courses like system architecture, 
operating systems, or high performance computing that cover C and 
assembler and processor internals.  They usually cover the computation 
theories (automata, turing machines, lambda calculus, combinatory logic) 
in second or third year as well.

I think it's important to get experience with all of these at some stage 
if you want to be a good programmer.

> For example, why is Laziness a good idea? What are the inherent
> limitations of Class-based object-oriented programming? Why is single
> inheritance limiting? How can multiple-inheritance come back to haunt
> you? What is "hanging" onto your head? Why does this really elegant
> functional code run so slowly? Why is "eval" a bad idea?

I don't think these questions are at all suitable for a beginner.  I 
think you'd need several languages under your belt before you could even 
understand the question, let alone be able to formulate a good answer to 
them.  But I also don't think you need to be able to answer them to be 
able to write beginner-level programs in Clojure.

> So I think avoiding an imperative language means that there's too much
> fundamental understanding about the machine that you would skip over.
> Not to mention, that most libraries will be using an imperative
> language, so you'll be having to learn it eventually in order to read
> the libraries even if you don't plan on writing any imperative code
> yourself.

I don't think you need to learn an imperative language first, but you 
must learn one at some point.

Cheers,

Alex

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to