I was going to start this post with "I couldn't disagree more", but on sober reflection I am going to go with the more conciliatory "Let me offer an alternative perspective". For someone who is just starting out in programming, I think the very last thing you want is a verbose language that makes you spend half your time talking about types that you don't really care about. I'm not saying there isn't a time and a place for static type-checking, but while learning to program isn't it. As a first language, you want something that let's you Get Stuff Done with a minimum of fuss -- a language that lets you go directly to saying what you want to say without having to begin with "public class HelloWorld { public static void main(String[] args) {" before you can even call System.out.println (which is, in any case, a very verbose way of saying "print"). As a heuristic, I think you might say that a good first programming language is one in which a program to print "Hello, world!" is most naturally expressed in a single line, or more precisely a single statement. On that basis, the strong candidates include Perl, Python, arguably PHP and my own favourite, Ruby. Java, C++ and the like might be important further down the line, but they are a horrible way to start: they're like learning to drive in a Harrier jump jet when what you really need is a bicycle. On 26 March 2010 13:49, Simon Spero <[log in to unmask]> wrote: > There is a best language, and you shall know it by its parentheses. > However, since you probably aren't going to be able to use it because your > co-workers aren't up to it, you have to pick a second best. > > I would strongly recommend learning a strongly typed language for one's > first programming experience. Java, with a suitable development > environment, such as a Intellij Idea ( http://www.jetbrains.com/ ), is > probably the best way to get started. Java is a safe language, which means > that any bugs are explicable at the program level, rather than appearing as > random damage to unrelated parts of the program > > It is important to have a good IDE when using java, as without one it is > much too verbose. I recommend Intellij as the java-only edition is now open > sourced, and it has the best auto-completion and refactoring support, as > well as built in support for unit testing. A lot of important data > structures are built in to java, which means you can learn how to use them > without having to know how to write them. > > The second language should be lower level; C is probably the best choice > for that. Learning C forces you to learn about memory management, which you > need to understand, even if it's better to let a garbage collector take care > of it for you. Learning how to implement the data structures you get for > free in java et. al will help you know how to use them more efficiently, and > design your own data structures in the future. > > It is easy to see the assembler/machine level code generated by a C program > and relate it to the code you wrote; again, you may not write much code at > this level, but it is important to understand what the computer is actually > doing when its running higher level code, and how this affects efficiency. > > It's also important to get a basic grasp of algorithmic complexity; you > don't need to be able to develop proofs like knuth's, but you should > understand what big O notation stands for, and why some problems or programs > won't scale up. > > After that, its safe to learn a scripting language; you'll appreciate the > stuff you can get away with not doing, but you'll also know just when you're > cheating, and why the Duck is a lie. > > Simon > >