It's well known that Pragmatic Programmer advices to learn a new language every year, which would you learn this year?<p>I'm doubting about scheme/clojure/other-lisp-dialect because it's a really different world, java because there are lots of interesting projects and libraries for java, and smalltalk because it blown my mind when I first saw it. Which would you choose? Why?
Actually im advising not to learn a new language this year, but act using what you already know to built cool stuff.<p>I realised sometime last year I was spending more time learning stuff like Django/Rails etc... then building stuff with the excuse "Oh it will make me more productive in the future." Only this never happend.<p>For the moment I learn new things but only as I need them. Right now I don't need Clojure, so I am not learning it. I am plodding along feeling productive with PHP/Python/MySQL.<p>To each their own, but I am finding this works better for me at the moment.
Javascript. I mean, learn javascript really well. While I like python much better than js, the prospect of writing the same language for both the server and client side is very appealing.<p>Also, things like jquery templates, sproutcore, capuccino, and the node.js ecosystem are just starting. In a couple of years, these will likely be good technologies to be an "expert" in. (just like it paid very handsomely to know how to do iphone development in ~08).
Although technically it's an API rather than a language, I am going to make an effort to learn WebGL. The Chrome Experiments (<a href="http://www.chromeexperiments.com/webgl/?f=webgl" rel="nofollow">http://www.chromeexperiments.com/webgl/?f=webgl</a>) are simply mindblowing. I have always had interest in 3D programming and I know JavaScript, so no more excuses.
I don't understand your misgivings about lisp. Particularly since you are citing PragProg as your inspiration for this question.<p>One good reason to learn a language is because it is radically different to the languages you currently know. Exposure to different paradigms will make you a better programmer.<p>Regarding learning Java, it's not a bad idea. Another good reason to learn a language is because it is used in a specific project you want to contribute to, or because you think that a novel project would best be achieved using it.<p>If you know one squiggly bracket imperative language, there's little point in learning another one prior-to-need. Anything you can pick up going through dry tutorials, you should be able to pick up on-the-job quickly enough. To achieve mastery, you need to really be using it, so learning it one year for its own sake, without a reasonably complex project, won't get you there.
I'm currently working on Haskell. Others on the short list would be Go and Clay (since it sounds nice to have a systems language other than C, and they look interesting), OCaml (to go with Types and Programming Languages), and Objective-C (since I'm primarily on OS X). It probably wouldn't be hard to talk me into working on a Lisp either.
What languages do you already know? You should learn a language in a paradigm you're unfamiliar with. i.e., if you've only worked with Ruby, either Haskell or C would be good choices, etc.<p>I'd definitely suggest learning C, especially if you've only used more abstract languages. It will teach you a lot more about low level details that other languages handle for you, and many popular languages today are implemented over C.
I am constantly trying to improve my Python and JavaScript. I haven't programmed in C/C++ for a very long time. I think I will learn some Scheme by the time I finish reading SICP and some other texts. I am also learning Common Lisp when I am away from the Internet.
Hardware. Seriously. I have been programming since I was 11 (I'm 34 atm). Couple of years ago I came to conclusion that designing your own hardware + software drives much more fun and it's not as difficult as it seems.
Well, depends on a few factors:<p>a) What languages do you currently know
b) What do you want to program<p>These 2 factors are different for everybody, as such, there is no one answer for your question.
Objective C for me.<p>It's not 'new new' in a sense that I use C# regularly enough, but it is new enough that I can get lost in it without being demoralised (so far..)
Spanish and Common Lisp most likely. The former is a transfer requirement for the UC system and the latter will be needed for The Paradigms of AI book I purchased.