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.
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.<p>After this, every time you do something in another language, you'll be able to figure out <i>exactly</i> what is happening. Debugging will become second-nature, and you'll appreciate other languages more. :)<p>Obligatory BSD warning: <a href="http://xkcd.com/349/" rel="nofollow">http://xkcd.com/349/</a>
If you wander too often, you don't need a language, you need a purpose.<p>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.<p><i>Any</i> language is great if you spend enough blood, sweat, and tears bending it to your will. <i>No</i> language will be good enough if you don't commit.
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.<p>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.