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 ( ), 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