My language score-board
Tags: languages
Published: 2020-07-13 16:29:39

From time to time someone asks me about my opinion about the programing languages I "know". Here is my ordered list as I would recommend them to learn or choose to build something. And to clear the things a little: I am a full-stack web developer. You can look at this as my personal [TIOBE index](https://www.tiobe.com/tiobe-index/).

### Kotlin
When I read/write in it I have a feeling like I could use Python syntax with extra features on the JVM platform. And that is great symbiosis. Support for [WebAssembly](https://webassembly.org) and the [compilation to JavaScript with the React.js](https://play.kotlinlang.org/hands-on/Building%20Web%20Applications%20with%20React%20and%20Kotlin%20JS/01_Introduction) in the Kotlin DSL makes this language my replacement candidate for Python & TypeScript in the future. And [Google agrees](https://www.zdnet.com/article/google-were-using-kotlin-programming-language-to-squash-the-bugs-that-cause-most-crashes) with me 😉

### Python
The most readable syntax, plenty of great libraries, and a good community. I use it professionally and also personally for the automation (with the help of the [Fabric](http://www.fabfile.org)). It is considered slow but the critical libraries are written in C so it does not matter much IMHO.

### Go
Actually, I never did anything in this language except for the [The Go Playground](https://play.golang.org). But I like static "duck typing", `defer`, go-routines. I guess the lack of the exceptions was surprising for me, but the missing generics is probably the reason I never really tried it for a bigger project.

### Typescript
This is my choice when I need to do any app in the browser. I think it's the best, typed, browser language today. Even if I can imagine a much better type-system I really like how it can be incorporated incrementally and use familiar JS syntax. I don't want to go back to pure JS. But still, I am ready to switch it for something better in the future because it's far from the best.

### Java
I worked in the ecosystem for a few years. Java definitely gave me a range of visions I use in Python and other languages. But the language itself is simply old. The new features just copy other languages that are years ahead. The problem is that at the same time the legacy is not let in the past. The thing I didn't like the most was the community. I felt like there are a lot of arrogant people who believe Java is the best forever and if you can't solve the problem without the help you are a bad programmer. Also, I had that feeling that a lot of things are overengineered (not ready for the common simple cases). I would suggest learning Kotlin.

### PHP
The language I started with seriously (I don't count [Baltík](https://cs.wikipedia.org/wiki/Baltík), Assembler, and Pascal in the school). In the time, it was kind of starter language the JS is today, but even if I don't work with it a few years now I see it evolved into a good language with a nice community. I have learned a lot from [Nette comunity](https://nette.org/en/). Still, I would suggest to learn Python instead. 

### Javascript
The starter language of today. I use it just because it is the only widely supported language in the browser. The strength is that it is also in the server so you can share the code. The built-in async support is great and fast for the IO-bound apps and the path from when I started hacking with it in 2005 and now is incredible. A lot of great tools and progress were made and even language evolved into something totally different.

### Elm
Elm is many things better than JS/TS. Maybe in all. But there is a missing ecosystem of the libraries the JS has. I recommend to watch at least the community and some videos about the nicest error messages, NO runtime errors, type system, and other ideas. I learned a lot from it and I am not alone. A lot of good things in JS is inspired here.

### Haskell
The real functional programming language. And I don't mean functions + `.map/.filter/.reduce` as in JS. The built-in immutability, great type-inference, pattern-matching, recursion, lazy evaluation, pure functions, Monads, ... I tried the language once at the school for one semester and wrote one project. And even I would not recommend it for the beginner it was really great to learn it. It opened my eyes in many ways and I try to follow some patterns from it until today in other languages.

### C++
Another dinosaur as Java. At the school, I was glad every time I could use it but it was just because the alternative was C. It's widely used and I don't believe it will disappear anytime soon, but I guess [Rust](https://www.rust-lang.org) or Go will be growing and cutting the C++ usage.

### C
Simple language with good access to the bare metal. That's why it is not used too much today when the web dominates. If you don't need any specific feature or are not forced to use it use Rust/Go/C++ instead.

### Prolog
The interesting language that is able to solve many goal-oriented problems with the strict rules very efficiently. Think of any logic puzzle for example. But I tried to solve the maze game and was very frustrated because it was hard to debug. Not my cup of cake 😀

### VHDL
Just used it at the school for one project and it was not my taste of cake :) This is something I don't know anything about. Just here because I want to remember I used it.

### Assembler
Hard to learn, hard to use, but with the good macros, it feels like C with more control. But still, I would probably use Rust/Go/C++/C with some bits of ASM today instead.

### Perl
Write-only language. Really unreadable mess. Try to avoid it. Fortunately, it is slowly dying.

### Brainfuck/chicken/whitespace
Not real languages, but [crazy experiments](https://en.wikipedia.org/wiki/Esoteric_programming_language#Brainfuck). I hope nobody is forced to do real work with these.

## Conclusion
If you are backend/mobile/desktop developer try Kotlin and/or Python. If you are full stack and are brave enough try [Kotlin even on frontent](https://play.kotlinlang.org/hands-on/Building%20Web%20Applications%20with%20React%20and%20Kotlin%20JS/01_Introduction). Still brave but not so much? Try [Elm](https://elm-lang.org). Otherwise, Typescript/React.js combo is good enough. I recommend [Next.js framework](https://nextjs.org) to skip the boring stuff and start developing quickly. If you need the speed and/or low memory footprint try Rust and/or Go.

### Links
https://drewdevault.com/2019/09/08/Enough-to-decide.html