
Ask HN: Recommend first programming language to master (options included) - madrik
I have coded a game in Scheme, improved it in Common Lisp, ported it to Emacs Lisp, almost got it working in Perl. I barely know C, have seen Haskell (got swamped by types), understand the essential ideology behind Smalltalk, created two more small games in Forth, and don't like C++, Java, Ruby, and Python for various reasons. I also have added 5 to 10 in 6502 assembly.<p>My problem is that I wander much too often. (I have also toyed with Icon, x86 assembly, OCaml, SML, Fortran, and shell, awk, sed, grep)
I really like Lisp, but I think I should probably get a good grip on the lower rungs first. Could HN suggest a short list (or a single language) to master first? 
P.S. if its any help, I use Arch Linux, but am thinking of moving to FreeBSD in the next few months.
======
leif
Since you seem to have at least something of a handle on the LISPs of the
world, go master C. Embed in your brain everything about pointers (and
multiple indirect pointers), structures, offsets, row-major ordered higher-
dimensional arrays, fancy macros (try containerof), why inlining and loop
unrolling makes things faster, static variables and functions (and the
difference between them), what happens when you compile, assemble, and link,
and work your way around libc for a while and use some syscalls.

After this, every time you do something in another language, you'll be able to
figure out _exactly_ what is happening. Debugging will become second-nature,
and you'll appreciate other languages more. :)

Obligatory BSD warning: <http://xkcd.com/349/>

------
DanielBMarkham
If you wander too often, you don't need a language, you need a purpose.

Find a project you're going to finish. One that's going to motivate you enough
to go through all the work needed to build it and debug it. Then come back and
ask us about languages.

 _Any_ language is great if you spend enough blood, sweat, and tears bending
it to your will. _No_ language will be good enough if you don't commit.

~~~
madrik
So, ends first, means second?

~~~
DanielBMarkham
Yes. If you wander, by definition you'll always have a difficult time learning
any language. Whereas if you're able to focus -- perhaps by writing an app
that you find compelling, perhaps by simple willpower -- then you'll actually
master whatever language you're attempting, which will naturally lead you to
learning more difficult concepts.

~~~
madrik
Acknowledged and appreciated. Thanks to both posters.

------
hga
If you don't think you've mastered "Lisp" yet, you could do worse than one of
the two lower level ones, Common Lisp or Scheme. In a lot of ways they're
close to the machine while still giving you all sorts of nice high level
stuff.

However, looking at what you've done so far, you could do worse than getting a
good mastery of C. It's a descent "smart assembler", it's not all that big as
a language (plus the minimum of the standard library), it's good about
teaching you concepts that are close to the machine and it's a common base for
a lot of the higher level stuff that you've used or played with.

------
starkfist
C

