Ask HN: How do you learn a new language as fast as possible? - adawg4
======
dyingkneepad
> How can I learn Italian as fast as possible?

> How can I learn to play the guitar as fast as possible?

> How can I learn to submit jiu-jitsu black belts as fast as possible?

For some things in life shortcuts are simply not possible.

To get fluency you will have to: write a lot of code, read a lot of code, work
on other people's code, have other people review your own code.

One thing that helps is already knowing a lot of other languages :). I usually
duck-duck-go stuff like "$language for programmers" and "$language in 20
minutes" or "$language for people who know $similar_language" in order to find
guides/howtos oriented a people who already know how to program. Because
reading a Language guide that also teaches you what is an if statement or what
is an exception is extremely boring to me.

------
lmiller1990
Get a job where that language is the primary one. Coding it 8h+ a day gets you
up to speed.

~~~
muzani
While this works, it usually creates a lot of bad habits.

~~~
gregjor
Usually? Based on what evidence? Writing actual code as a member of a team is
the best way to learn a new language and set of tools. What some may call “bad
habits” are more accurately called _different_ habits. We can’t, as a
profession, even agree on indentation, so no habits are objectively good or
bad.

~~~
muzani
Based on experience. I don't mean things like indentation. I mean things like
on [http://thedailywtf.com/](http://thedailywtf.com/)

One company I joined put all their database types as strings because it was
most flexible. A lot of architecture types are bad - they're slower,
inflexible, harder to read, harder to test. It works, but changing the color
of an icon then takes 4 hours, and may possibly crash one of the screens.

There's also a lot of spaghetti code, god classes, people who hack things
together until they work, instead of spending an hour reading the manual to
find what the proper use is. For example, I've seen someone who wants to get
location permissions install a whole map plugin and hide the map in the
background, instead of just writing the code that requests location
permissions.

I've got years of experience, and these days I'm spending an hour/day watching
beginner programmer tutorials to unlearn a lot of the bad habits of the past.

~~~
gregjor
Based on experience (40 years programming) were just as likely to learn good
habits and practices as bad ones. Of course daily WTF things happen and we all
make fun of them, but there’s no site like that to post when something goes
right.

Programming is an ongoing learning process, and that means making mistakes and
getting exposed to less than ideal solutions and habits along with the good
ideas and practices. You can’t get either from tutorials or working on
personal projects, because feedback and mentoring play a big part in making
forward progress.

------
gregjor
Depends on what I need to do. Learning enough to read some code takes less
time than learning enough to fix bugs. Getting to sufficient competency to
write code from scratch takes longer, and leading a team and making
architecture decisions will take longer still.

I can usually read any C-family language without any study, because they are
much more alike than different. I will need some reference material to fix
bugs and make small changes. I may need a tutorial or a non-trivial code base
to study to get to competency. Before I would lead a team or make expensive
decisions I would want a couple of years experience with the language and
ecosystem.

------
footballnate29
There aren't any shortcuts.. But when I was in college we studied abroad and I
learned way faster having to communicate than I would have in the US. So my
advice would be to visit another country that speaks the language for an
extended period of time.

------
sloaken
Move there, no phone translate tools. You will learn because you have to.

