This post originated from an RSS feed registered with Java Buzz
by Weiqi Gao.
Original Post: Patterns Of Learning Through Languages
Feed Title: Weiqi Gao's Weblog
Feed URL: http://www.weiqigao.com/blog/rss.xml
Feed Description: Sharing My Experience...
As always, I claim that both sides have their points. When I read Gustavo for the first time, I said to myself, "I couldn't agree more." And when I read Michael's response, I said to myself, "That's totally what I want to say—fifteen years ago."
Yes, I'm setting this up as the opinion of the young vs. that of the old.
Here's what I imagine is going on in the minds of the young and the old. (I don't mean to disparaging either the young or the old, we were all young once, and hopefully, we all grow old eventually. Here's how to tell if you are young—when you jump up from your seat shouting "What do you mean I'm too young?" you are young. And old—"I'll let the young ones have fun.")
Young: There are so many new languages out there. They all look wonderful. Each one has a special claim to an unfathomable feature (like objects, or closure, or unification, or curried functions, or actors or agents) that will solve the world's problems. Must learn new languages. Old: I've learned a couple dozen programming languages over the years. I've come to appreciate the unique qualities each bring to the table. The last few languages I learned seems to be reorganizations of features of languages that I already know: Ruby is just like smalltalk, Scala is just like OCaml. I'm sure I can learn C# as well as anybody if I was unfortunate enough to be put on a C# project.
Young: Bruce Tate says Ruby will kick Java's ass. Martin Odersky says Scala combines the goodness of OO with the goodness of functional programming. Plus he's a professor in a university. Burb Sutter says the free lunch if over. Paul Graham says Lisp is the bestest languages on earth. Groovy is totally groovy. Larry Ellison says the world will embrace thin-client network computers. Must learn new stuff.
Old: Niklaus Wirth said to go with Pascal. Richard Stallman won't program in anything but Lisp. Brad J Cox said Objective-C is a much better OO language than C++. Bill Gates and Steve Ballmer bet their multi-billion dollar company on XML and SOAP. DBase, Clipper, SQLWindows, PowerBuilder were all very popular at some point. See where they are now. I'm glad I chose C++ and Java, which had put the food on my table for the last twenty years.
Young: Learning new and different syntaxes are fun. Look, in Python and Haskell you use layouts for block structures, cool! In Scheme, you use nothing but parentheses for syntax. (+ 1 2 3 4 5) saves a lot of keystrokes from 1 + 2 + 3 + 4 + 5, cool! In JavaScript, you can alter a class through its prototype chain, cool! ... Must learn!
Old: It was fun for a while. I've seen them all. I'll read some Perl if I want to have fun. And there's always the obfuscated program that compiles under seven compilers—Fortran, C, Pascal, ... Underneath them all, are the same little machines that make everything work.
Young: In five years, my desktop machine will have 20 cores. The only language that will allow me to take advantage of them all is Erlang. Even Steve Vinoski said so. Must learn.
Old: In five years, I'll be seven years away from retirement. They'll never come up with a way to easily decompose arbitrary desktop client algorithms into parallel tasks. Plus, the missile guidance system and the satellite ground station I write were pretty reliable, it was all done in C!
Young: Scala is the scalable language. Must learn
Old: Call me when I can do code completion, refactoring and debugging for it in my IDE.
Of all the language I learned on my own time, C++ and Java are among the most profitable. Both landed me new jobs. Scheme is the most intellectually rewarding. It allowed me to get through the SICP. Bash, Gawk, HTML/CSS are the most helpful. I use them to write little throw-away scripts and to write this blog everyday.
Groovy, Ruby, Scala, and lately Clojure are my learning for learning's sake languages. I'm sure I'm a better programmer because of my learning experience. But I haven't profited from them. None of the languages have become my go-to language. And I believe I'm at least one year away from being proficient in anyone of the languages, the achievement of which probably requires me to work on an actual project mainly developed in that languages. With a full time job doing Java and C++, and a family to feed, I can't afford to commit more of my spare time.
As Michael said, "That's not momentum. That, my friends, is inertia."