Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Beginners programming

Name: Mr. Oak 2009-12-17 16:22

I'm sure you have seen this thread a million times, so once I get a satisfactory answer I will let it die/sage

What should the first language I learn be?
What program should I write it in?
What's the best compiler for the language you are advising me to try?
Should I do my work on Linux or Windows?
Best book, or site that will teach me the language?
Any other thoughts?

Name: Anonymous 2009-12-17 19:40

What should the first language I learn be?
One language isn't enough to be a good programmer. Learn some assembler, C, Lisp, ML, Haskell, Prolog, C# or Java to get a taste of everything. Assembler to learn how your CPU works, and how things work in practice. C to have a low-level language that you'll actually write in (ASM you might write some, but I doubt many sane people write large-scale programs in it). Lisp to achieve satori, learn a couple of other programming paradigms, and actually gain a very solid tool/high-level language. ML and Haskell to get a taste of static typing, type inferrence, pattern matching, and purely functional languages and how they work in practice, see this as a continuation to that satori-achievement quest. Prolog for logic programming, theorem proving, and other fun stuff. C# or Java to see how they do things in the ENTERPRISE, seeing the huge compromises they've made, the broken single-dispatch OO system, and knowing it may be useful for getting a job.
What program should I write it in?
Write whatever you want. I suggest starting with implementing things which you can do portably first. Real-world programming tends to involve a lot of messing with external libraries, FFIs, import bindings and other things that you need for fancy GUIs and real-world applications, but you can learn those things easily by reading your implementation's documentation and your OS'es technical documentation - it's not something you want to do first.
What's the best compiler for the language you are advising me to try?
Most of those languages have multiple implementations, and many of them are good or acceptable, which you choose depends on your needs and preferences, here's a few examples:
x86 ASM win32 - MASM
x86 ASM *nix - nasm
C *nix - gcc, icc
C Win32 - MS C Optimizing compiler, icc
Common Lisp - SBCL, CCL, Allegro, Lispworks, CLisp, ABCL
Scheme - PLT, Guile, Gambit
SML - SML/NJ, MLton
O'Caml - O'Caml/metaocaml
Haskell - GHC, Hugs
Prolog - GNU Prolog, Visual Prolog, or just one of those embedded ones
C# - .NET or Mono
Java - JVM
Should I do my work on Linux or Windows?
Use what you want/need. The platform is not as relevant, but you may have to write platform specific code, and it pays to write platform specific code depending on your need.
Best book, or site that will teach me the language?
x86 asm - Intel manuals
C - K&R
Common Lisp -  A Gentle Introduction to Symbolic Computation (read if you're a complete newbies), ANSI CL, PAIP, Practical Common Lisp, On Lisp, maybe AMOP and of course the Hyperspec1
Scheme - SICP(not a Scheme book, but you learn it as you go)
ML - There's a bunch of freely available versions of some O'Caml/Caml manuals, they're decent.
Haskell - YAHT, RWH, LYAHFGG
Prolog - Logic, Programming and Prolog, and PAIP  has a chapter on it
C#/Java - I have no idea what a good book would be, I just picked some random "Learning XXX" book and skimmed through it to understand most of the language.

As with all languages, you'll only learn if you write a lot of code in them, otherwise you'll forget them if you don't use them.
Site - Some of those books are freely available, google is your friend.

This thread reminds me that I should also learn Smalltalk someday, I hear it teaches some very interesting ways to do OOP, not as flexible as CLOS, but I'm sure I'll learn something new from it.
Any other thoughts?
There's no one language that fits all, you need to know at least some 3-4 to be able to handle everything that is thrown at you. You could skimp by with only one, but it's a bad idea unless you just want to be a code monkey.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List