Language (Ecosystem)
To avoid a breakdown of the ecosystem of possible languages, for which there’s plenty of information out there and would take up quite a lot of space, we’ll stick to discussing languages I have experience with.
Scala
A modern language with a strong emphasis on flexible static types and functional programming, and designed to be interoperable with Java and to run on the JVM.
Personally, I used scala on a few primarily backend projects. It scores a lot of points on flexibility, maintainability, paradigm, and community. Scala brings a lot of influence from the classical functional languages (Lisp, Erlang, Haskell, etc.), and writing Scala can be very rewarding. Especially once you get the hang of their very powerful types system, creating complex code that you have confidence in becomes much easier.
However, especially a few years back when I was writing it, readability was a definite concern. Some of the types can get pretty far out, and compile errors weren’t always helpful in getting to the bottom of issues.
Javascript
As of 2019 the most popular and possibly the most hated language, Javascript is here to stay as the only language browsers of the web support running. Because of this, Javascript is almost a requirement, though there are now many languages that support Javascript as a compile target as well. This is because many programmers have terrible experience with Javascript.
To be fair, the language was originally meant to be a simple scripting language for web pages, and not meant as a powerhouse for massive applications. It’s fraught with many idiosyncracies and oddities, as well as with oft misunderstood object oriented features (ie. prototypes). Adding to that, many get their start programming javascript as their first language, and the web is filled with some truly awful javascript coding. PHP suffered a similar fate, likely a result of their being too flexible, to the point it allows even terrible programming to work.
However, with the advent of Node.js in the last decade, and various releases to the language itself, most of the negative arguments haven’t aged well. Node.js means we can use one language across the both back and frontend, for extra code re-use and faster development. The recent releases have addressed many issues, while introducing the highly requested features. Additionally, many supersets of Javascript, most notably Typescript, have become incredibly popular, adding more features, stability, and community.
Vanilla Javascript scores high for flexibility, readability, community, and hirability. However, it scores low for maintainability, readability (some JS is so bad!), and hirability (getting a good JS engineer is hard!).
Typescript
Typescript is Microsoft’s attempt at writing a language that compiles to Javascript. Statically typed, and specifically a superset of Javascript, means that you can slowly add Typescript to your code, creating more stability and maintainability slowly over time.
Currently my favorite language, I feel it addresses the weaknesses of JS while also playing to its’ strengths. Similar to Scala, once you get over the hurdle of figuring out the typing system, it makes creating maintainable and readable code much simpler. Additionally, the enhanced tooling available to a statically typed language provides faster prototyping.
Ruby
Ruby, and it’s web application comrade Ruby on Rails, was once king of the web application. Still, it sees wide spread use today, especially by start ups who need to prototype fast. My experience here has spanned two separate projects.
One was to completely recreate an existing monolithic and large Rails application, since there was too much tech debt and performance leaks to deem it salvageable. The other was trying to maintain a similar project, but in this case with the leadership direction that there was no time or feasibility to pivot the tech stack.
Ruby is all about putting power into the developers hands, even when that power seems impure or chaotic. This can result in elegant and beautiful code, but can also result in cut corners and maintenance nightmares.
Golang
Golang was developed by Google as a modern language that prioritized performance, concurrency, and perhaps most of all simplicity. Truly embracing the KISS principle (Keep It Simple Stupid!) by proscribing explicit paradigms, which alongside its’ flagship goroutines and famously well optimized scheduler, makes complex concurrent algorithms a breeze.
Golang isn’t often used for web applications specifically, but is a great choice for buildig out the backend of your web application. It scores high on all marks, except for prototypability and community – especially for frontend webapps. Golang doesn’t have a lot of traction there; while efforts like Gopher.js are available, it may be harder to find good examples and community around these efforts.
Home | Go back | Next up