Martin said:
I also learned C first, but Java didn't exist then or I'd probably have
started with it. I too would recommend Java as a good first language.
Ditto. Me C first, Java didn't exist then, Java is a good first
language. For broad exposure to different programming paradigms, maybe
look at all of C, Smalltalk, Lisp or Scheme, and OCaml after. C's
semi-low-level and lets you get at the hardware and OS API; Smalltalk is
pure OO with closures; Lisp and Scheme are just plain different; OCaml
readily supports pure functional. C and OCaml have strong static typing
like Java, but OCaml does a lot of type inference, making its typing
different, and its type SYSTEM is different in many ways. Smalltalk is
somewhat strongly but dynamically typed. Variables have no types but
objects have types fixed at birth. The effective typing is a bit weaker
though because any object can be sent any message and giving any two
classes identically-callable methods lets you use them polymorphically.
Lisp and Scheme are (I think) weakly and dynamically typed.
Getting compilers/interpreters and IDEs:
For C, gcc is a well known free implementation used for major real-world
software development. You'll want an IDE too, I think NetBeans has good
C support, and you might already have it for your Java work at that time.
Smalltalk has a free, somewhat open source implementation in Squeak.
Squeak includes its own internal development tools (downside: if you
really gum things up, the non-external nature of the debugger can make
debugging difficult!) These tools are graphical, but have their own
mouse semantics and other standards instead of following Windows
conventions, which can make them a bit clunky to use at first. The lack
of true namespaces puts the hurt on Squeak for eventually developing
serious large scale systems (other than Squeak itself) though.
The big flaming Lisp vs. Java thread mentions some Lisp implementations
or you can google it. I'm not sure there are any free Windows
implementations and free Windows decent IDEs with nondinosaurian user
interfaces for it though. Ditto Scheme, except the flame-thread doesn't
name any implementations that I recall, but I DO recall once seeing a
free Windows/portable implementation (with command prompt REPL; dunno
about IDEs).
OCaml you'll have to google. Don't know if there are free Windows
implementations or decent IDEs out there.