Hacker News new | ask | show | jobs
by arms 4376 days ago
To the author's points of committing and staying idiomatic, I'd recommend rewriting an existing application in your new language of choice. It doesn't need to be a 1:1 port, but by porting over the basic/foundational pieces, you really learn a lot about a new language and its idioms. For me, it's a much more concrete way of learning a new language.
4 comments

It's definitely a good way to get started with learning, but you have to be even more careful that you're not just copying patterns from one app to another.

I had this experience when I started working on Karma's Android app. I basically started out by copying the entire iOS architecture to Java. It helped me get started quickly without having to make too many hard decisions early on, but I did have to rewrite some things after I became more experienced and learned there was a better, more Android idiomatic, way of doing it.

The thing that helped me the most is that I became part of the community. Some of them explained to me why I was wrong and then taught me a better approach.

"you have to be even more careful that you're not just copying patterns from one app to another" Absolutely. I hope my post didn't convey the opposite. The way I see it is that the designers of the language know more than the (new) developers using it, so it pays to rewrite existing applications in the way in which the language designers intended.
I think this is a great way to learn the ins and outs of a language once you have gotten past the basic syntax differences. Going from say Ruby to GO / Clojure there is a big mental paradigm shift on how to solve a problem, so taking an existing code base in which you have a good grasp on the domain knowledge absolutely helps. I find looking for [insert language] Koans or trying some Project Euler challenges to be very effective as well.

My opinion on the idioms, best design practices, etc... when learning a new language may differ. I almost always feel like some people just understand everything and I am always running to catch up. It turns out no one was born to think in base2 and these individuals just spend a lot of time reading the docs, hacking around on small apps and really taking the time to understand not the how but the why. So I often have to convince myself, you will get there too it just takes time and practice. Rarely does anyone learn a new language in a weekend and put out top notch, idiomatic code, and if you do come work for me so I can sit back on the beach all day. No one picks up a guitar and shreds out Eruption from Eddie on day one, they play some basic Nirvana chords.

Yes, there's a lot of friction when I try to write a new program at the same time I learn a new language: designing a new program is also a learning process.
My "Hello, world" for this is to create a personal URL shortener. If an adequate third-party library for it exists I will use redis as the backend, otherwise I'll use a hash that I'll write to a file when new entries are added and load when the application starts.
That's a pretty cool idea, at a base, create something useful and force yourself to look through the standard library. I am learning GO right now and I am blown away with what comes out of the box.
Me too! I was shocked to have my Go url shortener come in several lines shorter than node.js one, and it felt much cleaner. I was pretty much sold at that point.