Thoughts on Programming Languages


Shom on Fosstodon posted an interesting article which detailed how people who were tinkering with npm almost brought the whole system down and had unnecessarily harsh action taken against them on Github. This got me thinking about the programming languages I have used, who controls them, and what I might want to be coding in for the future.

There are several programming languages out there which are designed for different purposes. Some of them are well designed for particular coding styles, others for performance, and yet others for productivity.

https://hackaday.com/2021/11/18/c-is-the-greenest-programming-language/

https://survey.stackoverflow.co/2023/#technology-most-popular-technologies

Languages I Have Used

It’s kinda funny. When I think of myself, I don’t see myself as someone who has really delved into many programming languages. That is largely because I need a project to delve into a new language to provide myself a goal to achieve. I have not really had any issue picking up a new language and get up and running quickly. With that said, it’s hard to interview for jobs on the promise that you can pick up the language quickly and I really can be a good developer for the problem you need solved; pinky promise 🤞.

I’m going to list these roughly in terms of how proficient I feel in the language.

Dart

What can I say, I really like Dart. I like what I can do with Dart, I like the mixed paradigms it allows, and I like the Flutter framework to develop feature rich client applications. It’s to the point now where I will use Flutter even if I’m just going to develop a web based PWA over using JS and a JS framework. Yes the ecosystem is smaller than the JS ecosystem, but it is also less chaotic. While there are fewer solutions to common development problems (state management, routing, etc) the ecosystem is still big enough to give some meaningful choices to make regarding which solution you choose.

Python

I’m not sure how I feel about Python anymore. I use this primarily to build serverless applications in AWS at my day job. I did tinker around with Python a bit for some small side projects. It’s probably a language where I will never quite master, but keep in my pocket for a focused piece of functionality. This is where I think Python excels anyway.

People can and have build big and complicated applications in Python. However, there are real performance issue with Python only code. A lot of this is alleviated by the fact that Python binds to C compiled code to do the heavy compute tasks ala Numpy, Pandas, and more. For tasks which you are just conveying data from one API to another, Python can get the job done and quickly.

Javascript

I really don’t like JS or the ecosystem around it. However, it is the language you MUST use in some form or another if you are designing anything more than trivial interactivity on a website. JS has so many unintuitive behaviors which are terrible, but can’t be removed from the language due to backwards compatibility. I think Dreams of Code made a good video summarizing the biggest issues with JS.

The only upside to JS is the immense community around it. Even this website is built using Astro, a JS framework for building static first websites. I could’ve opted to use something like Hugo instead and did look into it, but Astro’s ability to incorporate other JS frameworks seamlessly into it and the lower barrier of entry lead me to us them instead.

Typescript

Ahh, Typescript. I thought you might be the JS variant which would fix all the issues I had with JS. However, that is not the case and in some cases you may end up making the product more complicated by doing type gymnastics. For some reason I thought that TS would enforce runtime types when I first worked with it and was shocked when my annotated type was not the type in the variable when I tried to do something with it.

TS just adds type hinting and makes linting possible. However, even if you type hint a variable as one type, that doesn’t mean that will actually be the type. At this point I try to avoid TS for my personal projects and opt for vanilla JS when just for web frontend. Just don’t use this for backend development. There are better languages for that.

M or MUMPS

C#

While I spent a bit a time programming in C#, I really didn’t go deep in the .NET ecosystem.

Visual Basic

Java

Ahh Java, yeah I don’t like it either. A lot of that is largely because most of the Java code I’ve encountered is from legacy code. The syntax is also quite verbose and forces you to use OOP. With that said, there are some modern incarnations which use the Java Virtual Machine like Kotlin or Clojure which fix the verbose syntax and allow more functional methods.

Java also scored quite well in the efficiency test run by the researchers mentioned above.

C++

C++ was what I used at university and the first language I really started to professional programed in.

FORTRAN

Languages I Want to Try

GO

This seems to be a love-it or hate-it language. The language constraints either work perfectly for what you’re trying to do with the concurrency model fitting in perfectly, or you despise it and never want to touch it unless forced to. I am personally drawn to the idea of a language that doesn’t require async/await syntax and just handles such asynchronous tasks natively from the compiler and thread executer.

Rust

Rust seems to consistently be the most loved language out of every developer survey which includes it. I wonder if this might be a selection bias where the problems Rust solves makes the lives of backend developers so much easier that the pain you need to go through to learn it’s unique approach to memory management are worth it. While definitely looking like it’s going to be the de facto replacement for C, I am not seeing the same type of adoption happening for frontend development.

What concerns me a bit is the issue that Rust had with it’s trademark policies.



← Reckoner Update January 2025