

Ask HN: Learning New Programming Languages - squiguy7

I know I am not the only one interested in learning new languages and I find myself dabbling in a few at the moment.  However I struggle to get the feeling that I make any progress.  I scroll through tutorials where they describe what variables are or how to create a list already knowing these basic concepts.<p>I can breeze past the simple things but when it comes to advanced concepts in a language, I sometimes get the idea that I glossed over something I should not have.  In the end I want to start writing a project right away and skip over your &quot;Hello, World&quot; material.<p>How do you all handle learning a new language and becoming comfortable with it?
======
cessor
I tend to solve a problem that I fully understand in order to get a feeling
for the language and what it can do. For example try programming a version of
tetris or blockout. You know what the result should look like and will be able
to evaluate how the language behaves, what apis there are and how well it is
documented.

You might want to experiment with different types of projects, for example a
little webserver, webscraper, games or general tooling for whatever problems
you encountered before (I tend to write desktop cleaning programs a lot).

Maybe you can find inspiration in this book:

[https://pragprog.com/book/btlang/seven-languages-in-seven-
we...](https://pragprog.com/book/btlang/seven-languages-in-seven-weeks)

~~~
squiguy7
I agree with you. I wrote a _very_ simple HTTP server in C once to learn more
about threading. The thing is, I want to become better with Go and it has a
lot of stuff baked into the language. There is a seemingly infinite amount of
other things I could write though.

------
brudgers
Martin Ordersky hisself is teaching _Functional Programming in Scala_ starting
September 15th:

[https://www.coursera.org/course/progfun](https://www.coursera.org/course/progfun)

If you don't know C, or Python or Ruby, there's always "The hard way" with Zed
Shaw:

[http://learncodethehardway.org/](http://learncodethehardway.org/)

October 2, Coursera is abain offering Dan Grossman's _Programming Languages_ ,
it covers general concepts in programming language design using SML, Racket,
and Ruby.

[https://www.coursera.org/course/proglang](https://www.coursera.org/course/proglang)

~~~
squiguy7
Thanks for the links. I am really interested in functional programming in Rust
and Scala as well as some systems level stuff with Go and Rust again. I will
check these out.

------
faulteh
Try implementing something that has a real world use case. It may not matter
that your use case doesn't have much of an audience. My first Python web app
was a syslog search/filter app that I only used on my home network machines.

After a couple of tutorials you really need to break out and try something on
your own. I got quite proficient in C++ by specifically using it in
programming competitions such as those hosted by TopCoder or CodinGame. I
wasn't in the competition for the top score I was there to learn. I knew about
core C/C++ syntax but not much about the standard library. Now I do, as I
needed to quickly use the stdlib to get the data structures I needed to solve
the problem.

~~~
squiguy7
I suppose most of my ideas for projects seem silly and I never follow through.
Maybe I need more discipline :).

------
sheepmullet
I'll go against the grain and suggest you start at the beginning focusing on
the simple things.

If you cannot write a simple application in the language without resorting to
documentation/google you are not at the level where you can easily learn and
apply the more advanced concepts.

Get a good beginners book that contains plenty of exercises to work through.
If the language contains mainly familiar concepts then you should be able to
complete the book and its exercises within a day or two and feel comfortable
using the language.

~~~
squiguy7
This can sometimes be true. I mostly feel like I get hung up on syntactical
differences in a new language and have to double check myself.

------
arghbleargh
Just like you said! Start a project with it, and learn what you need along the
way. Obviously your code will not be all idiomatic on the first try, but
that's OK. Along the way you will run into situations where you'll think,
"There's got to be a better way," or "If only I could use X feature from Y
language." Or maybe you need to debug something with a library you're using
but you don't understand how it works. Those are perfect opportunities to
learn more advanced concepts.

~~~
squiguy7
This is true. There will always be room for improvement on anything,
especially this.

------
ctseng01
You need to pick a project you feel passionate about, find a small piece of
paid work, or find a friend in need of getting a project done to push yourself
through. I also found looking at other people's DEV work being helpful, too,
granted that the developer is willing to share and explain.

~~~
squiguy7
I do try and scan through Github every now and then but even then don't feel
comfortable if I am still new to the language. But giving back to open source
is always a good thing to try out.

