Ask HN: If I only learn one static typed language, which one should I learn?

12 points by gtt ↗ HN
It all depends on what I what to achieve and I think I want is just a safer and faster python.

19 comments

[ 0.25 ms ] story [ 48.7 ms ] thread
Go

There is a poll HN feature if you are curious

    answer, err := GetAnswer()
    if (err != nil) {
      return "Rust"
    }
(but yes, you probably want Go)
If you’re just wanting a safer and faster Python you probably want Go or Rust. I’m very biased towards Haskell and love it so I’m going to recommend you at least read about its pros/cons (don’t get bogged down with syntax or monads yet, just read about what problems it solves).
Well I mean you kind of have to get bogged down with monads since it's the only way to do something with IO, i.e. useful.

(Though I'm biased because I think Haskell is a terrible language for everyday usage :P )

I might go against the grain here, but if I've had nothing but pure bliss working in Java.

If you're just starting out, Head First Java is the way to go. Then expand your knowledge, look at things like Lombok, or go for one of the languages built on the JVM (Kotlin/Scala). Want insane performance out of the box? Look at Vert.X. There's a library for everything as the language has been around since '95.

I'm actually thinking about Kotlin. What is your experience with it? Is it good?
Kotlin is fantastic. As a JVM language with excellent interoperability with Java you basically get all the benefits of Java. Its syntax is succinct and expressive, and it has great features which are not available in Java, such as nullable types, coroutines, extension functions and much more.

If Kotlin interests you, I've heard great things on Scala as well (but don't have first hand experience with it so I can't elaborate).

Agreed on all points here, especially the interoperability which brings the benefit of being able to use the massive amount of Java libraries.
Introspectively, I found that I could achieve a large portion of the Kotlin features with Java8+JavaRX+Lombok but I could see a very strong argument for "Why do I have to learn 3 technologies when I can get everything for free with Kotlin".

Additionally, Kotlin is highly recommended from the folks at Google with regards to Android.

My go to plan is based on debuggers. So whichever language you can find a GREAT debugger in is the one to go with.

Second criteria would be a language which I knew an expert in. There are plenty of good languages, but when you are stuck or need advise, there is nothing like being able to call up your brother and 'discuss' how you plan to do things.

Portability is a nice feature, but with all the available virtual environments, it is less important. Although I must say to be able to occasionally program on my phone, during a boring meeting, would be nice.

I would recommend C#. It's really really amazing, you can do both OOP and FP, and Visual Studio is quite well at handling really large projects.

Debugging is also a bliss.

If you want a safer and faster Python, use Nim. That's literally what it was made for.

If you want to learn functional programming, learn Rust or Haskell. Rust is more pragmatic and is used more than Haskell, but Haskell has more FP features.

I recommend against Go because it's not really FP, and it has a lot of language inconsistencies compared to Rust for example.

> safer and faster python.

ohh, f# or Haskell

Learn C or Java. Those languages will be around forever.
Why no one talking about OCaml?
Go is probably the best candidate for a safer and faster python. However, if i had to choose only one statically typed language to learn that would be Java. The language is super popular, the tooling is great. There are tons of learning resources and books. It's used by big tech companies(amazon, google etc) for some serious engineering work. It opens up the door to the jvm world where you can also explore languages like kotlin, scala and clojure.