FTT Handbuch

So you want to learn programming?
I recommend to get started with the games "Human Resource Machine" and its successor "7 Billion Humans" (paid, DRM-free options available). If you enjoy them and progress well, you are on the right path here. You can find the games and some more on our learning-games list: https://itch.io/c/3157202/puzzle

If you then want to get started fast, pick a programming language common in your target field or alternatively go for the CS50x course linked below. If your goal is thorough long-term understanding, go for "Learn You a Haskell" as outlined below.

Starter Resources

THE Professional Free Course on Computer Science Basics, a common way to get started:
https://pll.harvard.edu/course/cs50-introduction-computer-science (Youtube) For a full free curriculum check https://github.com/ossu/computer-science.

On the following link you find an open-source coding playground for just about any programming language, enabling you to write and execute code without needing to setup a local environment:
https://riju.codes/
Great for following along courses that are not project-based (such as "Learn You a Haskell").

Programming Language Triad

For future projects, unless specific constraints indicate otherwise, I prefer using these three languages, which supplement each other quite well:

  • Kotlin: Quick to learn, Scripting/interactive mode available, Fast to iterate with wide platform support and community leverage (displaces Java & JavaScript, alternative to Python in scripting & web dev)
  • Rust: Safe, Efficient Low-Level Development (displaces C++)
  • Haskell: Old but timeless, clean algorithms, takes a while to learn, Web Development with IHP

Here is an interesting article on modern languages and why they are needed: https://medium.com/the-andela-way/the-rise-of-modern-programming-languages-c923a2b914fc

Haskell

Haskell is a programming language that teaches fundamental thinking structures of programming. Even a longstanding software engineer can learn to code more cleanly simply by learning Haskell.

That is why the book "Learn You a Haskell for Great Good!" has become a classic. It is fun and easy to follow along.

Haskell is the only language ecosystem with a search engine to find the right library among basically everything the community has created: https://hoogle.haskell.org

It also has a great web framework: https://ihp.digitallyinduced.com

Kotlin

Kotlin displaces the cruft of Java, while also allowing compilation to JavaScript and native LLVM code. With this, a single codebase can be the basis for a native app on a plethora of platforms such as Desktop, Android and Web.

https://kotlinlang.org/docs/getting-started.html

https://kotlinlang.org/docs/learning-materials-overview.html

Rust

Even C++ veterans with decades of experience have converted in days, eager to replace C/C++ with Rust whereever possible. It keeps the low-level efficiency of those languages while leveraging modern possibilities to ensure safer and cleaner code.

https://www.rust-lang.org/learn

What about the Big Five?

A common objection is that the languages mentioned above are not the most used ones. So the following section comments on the five most used languages.

Scripting

JavaScript and Python are originally scripting languages: They were never meant to power big applications, they just somehow ended up garnering a big community that convinced people to use them for anything. Yes they can, just like any other programming language, but they really excel at small scale - with people who need to write software but are not programmers.

Big projects in these languages end up chaotic, due to missing compile-time checks such as static typing. One example of such a codebase even experienced programmers have trouble navigating is https://dev.funkwhale.audio/funkwhale/funkwhale. Since they are interpreted as they are executed, they also tend to be slow - not an issue when scripting, but an additional problem at scale.

Object-Orientation

C, C++ and Java are here to stay, no question. But it is less and less often sensible to start a project in any of these languages as more convenient and safe languages popup without all the accumulated legacy cruft. C++-developers with decades of experience are switching over to Rust, happy to finally have a solid alternative which prevents many stupid mistakes.

Java-programs are being rewritten in Go and Kotlin, both of which drastically reduce on boilerplate and provide very helpful standard libraries. Arguably the best Java IDE out there, IntelliJ IDEA, is moving to Kotlin because the developers of the IDE, Jetbrains, got fed up with Java and thus created a new, industry-led productive language, which can be used for scripts, on the JVM, on Android, and compiled to native code and JavaScript.

Conclusion

In the end, it does not really matter which languages you learn, since a good software craftsman will choose the right tool and recognize his craft in any language.

More important is the awareness and experience with different paradigms: Procedural, Object-Oriented, Functional. Kotlin provides a great combination of these.

Object-oriented has been the standard for decades, but I believe that functional programming is the future, now that technology has advanced enough to unlock its full potential. Functional programming makes parallelization and compiler optimisations a breeze, allowing the developer to stay on a high level, writing maintainable code without sacrificing performance.

Learning Programming
© Copyright 2025 by Janek Fischer