Modern Programing Languages I Plan To Learn
Tags: programming
Published: 2021-01-06 11:58:31

Ok, so it's a new year and told myself last year 'I will do less JavaScript and learn a new programing language'.

Now here are my thoughts:
# What type of programing language?
Now I want some modern programing language to learn, not C++ or C because I feel it's not that modern. I want something that has a syntax that is close to JavaScript or Python and is cross platform so I can use it in mobile development and web development (if you have ideas, please feel free to comment).

# List of languages I have chosen
- rust
- go
- haxe
- ruby
- dart
- kotlin
- lua
- java
- python
- typescript

### [Rust](https://www.rust-lang.org/)
I've seen rust being used in a lot of projects, like [Deno](https://deno.land/) (a Node js alternative that is faster). Rust is faster, reliable, and productive, it can be compiled to WebAssembely, used in networking and embedding.
It has a modern syntax like JavaScript seen here:
```rust
fn main() {
    println!("Hello, world!");
}
```

### [Go](https://golang.org/)
I've seen Go also being used in a lot of projects. It's simple, reliable, and efficient. It can also be compiled to WebAssembely.
It has a simple syntax, but not as simple as JavaScript or Python.
```go
package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello, playground")
}
```

### [Haxe](https://haxe.org/)
Haxe is an interesting language.
> Haxe can build cross-platform applications targeting JavaScript, C++, C#, Java, JVM, Python, Lua, PHP, Flash, and allows access to each platform's native capabilities. Haxe has its own VMs (HashLink and NekoVM) but can also run-in interpreted mode.

As you can from the quote from Haxe's website, it is perfect for all my needs and more, it is also good for game development seen [here](https://haxe.org/use-cases/games/), but it is not like JavaScript or Python 
```haxe
class Main {
  static public function main():Void {
    trace("Hello World");
  }
}
```

### [Ruby](https://www.ruby-lang.org/)
I've seen ruby being used in a lot of projects, and a lot of talk about [Ruby on Rails](https://rubyonrails.org/) (Node js alternative).
It has a simple syntax, sometimes easier than JavaScript.
```ruby
3.times do
  print 'Welcome '
end
```

Simple hello world in ruby: 
```ruby
print 'Hello, World!'
```
compare that to C++: 
```c++
#include <iostream>

int main() {
    std::cout << "Hello World!";
    return 0;
}
```

### [Dart](https://dart.dev/)
> Dart is a client-optimized language for fast apps on any platform

and that is what I want but Dart is best used for Mobile Development and is used in [Flutter](https://flutter.dev/) (a UI toolkit for native app development), but they do support [Dart-to-JavaScript](https://dart.dev/web).
 and Flutter also supports [web development](https://flutter.dev/web).
It does have a simple syntax like Rust
```dart
main() {
  print("Hello, World!");
}
```

### [Kotlin](https://kotlinlang.org/)
Now this is a language I have learnt before for a small android app development, but I have only scratched the surface for possibilities. Kotlin is amazing and capable language in my 5 hours of usage. It can be used in Multiplatform Mobile, Server Side, Web Frontend, and Android Development which is what I want and has a amazing syntax and sometimes is better than JavaScript in some cases
```kotlin
fun main() {
    println("Hello World")
}
```

### [Lua](https://www.lua.org/)
Now at the start of my Coding interest, I didn't know web development, I investigated Lua, I saw it being used in games, it has a kind-of easier syntax, but I left it as I didn't see that much popularity other than small projects and game development; now I am coming back because it is an efficient, lightweight and embeddable language, it also compiles to WebAssembaly.
```lua
io.write("Hello world, from ",_VERSION,"!\n")
```

### [Java](https://www.java.com/)
Now I had actually started learning java at the start of my interest of coding because Java looked like the most chosen language and used by alot of big companies. But I lost interest due to its large and complex syntax compared to Python or JavaScript. You had to start with
```java
class HelloWorld {
    public static void main(String[] args) {
```
and to print
```java
System.out.println
```
instead of
```python
println
```
which is not that mordern, but it is still used by thousands of developers every day, because its fine for them but not for me, just look at [Minecraft Java Edition](https://www.minecraft.net/en-us/store/minecraft-java-edition), made with this long language. But java is cross platform used in android development and everywhere you can think of.
```java
class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!"); 
    }
}
```

### [Python](https://www.python.org/)
I've also touched Python before (not a real snake, the programing language), I liked it due to its simple syntax and easy to use and a programing language most people pick up at first, I didn't because I wanted to look cool doing something out of the ordinary.
But it doesn't fit my needs, or I just don't feel like it's the perfect language to learn.
```python
print("hello, world")
```

### [TypeScript](https://www.typescriptlang.org/)
Now typescript is basically JavaScript but as said [here](https://youtu.be/oHtR5YSPLjo?t=195), typescript will continue to dominate, and typescript is better in bigger complex projects and I want to be a better web developer, So, it is a interesting choice for me.
```typescript
console.log("hello, world")
```

# Conclusion
well after seeing the whole list here is my opinion on what I want to learn and my ratings:
### What I want to learn
What I want to
- rust
- haxe
- kotlin
What I probably will
- go
- lua
- java
- typescript
What I probably won't
- python
- dart

### My ratings
1. Rust
2. Haxe
3. Go
4. Kotlin
5. Ruby
6. Java
7. Lua
8. TypeScript
9. Dart
10. Python

So, there you go, what I want to learn for 2021; there are some things to take away and this can inspire you.
Do write your Thoughts in the comments