Picking a language for its toolchain is also not a bad plan. Having a good IDE (integrated development environment) makes development so much easier.
Also, pick a language that has a good unit testing framework and learn it. Unit tests won't help you catch every type of problem, but they're a great way to find (and stop) potential bugs early. They also help you document your assumptions and assertions, plus they give you an easy "playground" to try things out before you put a large system together. Lastly, they teach you to code with testability in mind. I find that code that's easy to tests tends to be well-modularized for other purposes as well.
ps, I'm with Simon on the parens.
On Mar 26, 2010, at 9:49 AM, Simon Spero 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.