Mere Code

Diverse Topics of General Interest to the Practicing Programmer

Tricks for exploring new languages?

Here’s my problem. There are a bunch of languages I want to explore more (Clojure, Haskell, Go). I’ve wanted to do this for some time. I haven’t done it. I’ve mentioned this before.

At it’s simplest and most fundamental, this comes down to poor self-management stemming from an inaccurate personal vision. That is, “If it’s important, you’ll find a way. If not, you’ll find an excuse.”

But, setting aside deep-level character hacking, there’s got to be something to make this easier. Part of the problem is that Python is so smooth, I’ve been with it so long and most of the technologies I want to interact with have a strong Python component. Any time I have an itch that needs scratching, Python is the comforting abrasive of choice. I can do whatever it is about 10x faster with it than with another, new language.

Perhaps all I need to do is gird my loins and prepare myself for the confusion and time expenditure that comes with learning anything new.

Gentle reader, do you have any tips for escaping the Python gravity well and exploring languages unknown?

Comments

jml on 2012-06-29 18:45
Anand, SICP is great! I really liked "Real World Haskell" (O'Reilly book, available for free online IIRC) as a way to learn Haskell.
Anand on 2012-06-28 05:13
Building a Python-X bridge might be a good idea to understand the runtime of X, but that may not be the niche area of X.

I don't agree with glyph that you shouldn't leave your comfort zone. In fact, you should leave your comfort zone and embrace the uncomfortable.
Anand on 2012-06-28 05:11
I've been struggling with the same trouble. Trying to learn Haskell from long time.

I've learnt Scheme in the past at a quite good pace by studying SICP. I think having incremental exercises to try makes it easier to learn a new language. I haven't found something like that for Haskell yet.
jml on 2012-06-26 09:09
Keeping a journal, or at least a place to dump notes is something I do a lot of. Collaborators & long-time readers of this blog have my bullet-pointed reflections inflicted on them more than once.

On G+, Gustavo recommended picking a project for which the result matters, but not necessarily the timeliness. I think that's a really good idea.
glyph on 2012-06-26 07:17
Perhaps don't push yourself so hard to leave the Python ecosystem entirely; if you're comfortable there, and that's what you really want to be doing with your spare time, don't fight it, embrace it. For example, I have a reasonably good grasp of ObjC and a pretty wide breadth of ObjC APIs now due to messing with PyObjC bridging. If you want to learn Go, and no Python-Go bridge exists, make one, and I'm sure you'll learn a ton about the Go runtime :). Then you can do some things up to the edge of your comfort zone, and when you get to something that Python isn't good at, you can switch over into the new thing and have a more concrete motivation to learn it.

(Or, you know, just stay in Python but dive into the deep end. I'm sure you can gain complete understanding of all current and possible programming languages by working on sufficiently deep internals in PyPy…)
Unknown on 2012-06-25 13:19
Deep-end. Push. Have a challenge or pet project to work on and others to keep you accountable to it.

That said, I should probably eat my own dog food when it comes to that.
chrome___ on 2012-06-25 11:14
Good question – I have the same problem.

Things that helped me in the past (eg. learning Erlang) was the (probably) usual anti-procrastination stuff: *) set aside some fixed time *) set goals eg. "I'll complete this-and-this prototype by tomorrow", *) tons of external pressure *) keep a journal to reflect on the cool stuff you've learned

I'd be very interested what other people do…