Thoughts on some programming languages

·

5 min read

Today is September 22 2022, and it's been half a year since I've updated my blog. Both life and work has been busy, but I think it's a good idea to carve out some time now and then to do some writing. As of today, I have been a professional developer for a year and 10 months (tho I honestly feel like I didn't learn much during my first year + 4 months). I've had exposure to many programming languages during this time and I just want to give some brief thoughts on some of them. For each of these languages, I'll talk briefly about my current level of expertise, my feelings towards them, and what I want to learn about it in the future. The primary reason for this blog post is so that I can revisit it in the future and compare how I think vs my past self.

Java

This language is by far the one that I like the most and that I am the most comfortable with. There is no guessing with Java - the language does exactly what it says does. Its verbosity allows me to know exactly what object a variable is at all times. Its strong typing along with a powerful code editor like IntelliJ practically allows code to be written for me. When interview prepping earlier this year, learning data structures and algorithms and practicing Leetcode questions using Java has been much made reading and writing Java feel second nature to me. Also in a previous job, I've spent several weeks staring 8 hours a day at legacy Java code and deep diving into a large codebase (upgrading Spring versions).

What's next? I want to continue writing software in Java and deep diving into the language. There are several concepts I want to explore more, such as the JVM and garbage collection (tho I do know a bit about eden and surviror spaces ^^). I also have a ways to go with writing higher quality software as a whole - one goal is to finish Head First Design Patterns. Even though I'm not just going to aggressively throw in design patterns in all the code I write, this will at least get me to start thinking more about writing logical and maintainable components.

Python

I am going to be honest - I don't like Python. Why? Here are some examples:

  1. These damned double underscores. These feel completely unintuitive and forms a high barrier to entry to writing more serious programs with Python. An obvious example isif __name__ == "__main__" but the one that elicited the most confusion out of me was when I was writing some tests using PyTest and configuring the path by creating empty '__init__.py' files.
  2. Dynamic typing. This isn't a surprise given my like of Java. I end up just adding a bunch of type hints to my Python anyways.
  3. pip and venv. Many years ago, I tried picking up programming multiple times, but gave up each time due to pip installing too much or somehow ending up with multiple versions of Python. Without the command line chops that I have now, I found it impossible to get it straightened out or start a venv and had no choice other than to give up.
  4. Documentation - for some reason I have a harder time reading and understanding Python documentation compared to some other languages, which exacerbates the other problems I have/had with Python.

Regardless of the problems I have with Python, I've gotten quite good at it due to how much of it I've written. Python remains extremely useful for scripts and my current team uses it for production code (e.g. cli programs, lambda functions). I've heard some people say they've appreciated Python more after learning more about its implementation choices, so that's on my to do list as well.

Ruby

For the past month or so, I've been working almost exclusively in Ruby (legacy project that everyone else is too scared to take on) and it's a language that I'm greatly enjoying. At first glance, it looks like a huge mess - every character symbol is a unique operator and not a single function is returning anything. However, as you learn each language feature one by one, you start to find order in the chaos. It's extremely easy to get into a flow state with Ruby - whether you're reading or writing. I'm also greatly impressed with the Ruby ecosystem. Rails is the king of prototyping a web application and rspec makes writing unit tests feel like writing in plain English. Of course Ruby has its drawbacks (e.g. performance) but I definitely wasn't expecting to enjoy this language as much as I have.

Rust

My experience with Rust is the definition of the placebo effect. I've barely started learning the language (Chapter 5 of the Rust Programming book) and I'm convinced that I love this language. This is definitely because everyone keeps saying this is the best language ever. I'll write more about Rust as I learn more.

C

My opinion (perhaps somewhat uninformed) is that C has a relative low ceiling. It's not easy to learn with pointers and references, but I think once I break past this barrier, the language itself isn't too difficult. I've taken an interest due to low level network code and I want to continue spending more time on low level implementations.

Javascript / Typescript

This is near the top of my "want to learn but I never have time/motivation/dedication" list. Due to its popularity and usefulness I want to spend some time on it but I'm never consistent enough for it to stick. If I have a task in one of these languages I can figure it out but I doubt I can write something from scratch. I won't feel comfortable not knowing what a promise or 'virtual DOM' is.