Tech Special – Language Guide

0
1153

Strictly speaking, this isn’t a guide about languages, this is a guide to the common “tech stacks” used in web development today. But as each development language has what amounts to a preferred development environment, it’s close enough.

Ruby on Rails

A very common environment for web development, as the Ruby language is easy to learn and the Rails framework is designed to make web development fast and easy.

Pros: Fast to develop, widely-known, huge array of “gems” (pre-written code modules) that will do almost anything, lots of platform support (Heroku, AWS Elastic Beanstalk, etc)

Cons: Your program has to do things “the Rails Way” or it gets very tricky very fast, dependency hell, a relatively high % of gems are no longer maintained and/or bad quality

Notes: Rails is famous for “not scaling” for Twitter, so people can be dark on it. But if your product reaches the point where Rails no longer scales, you have a good problem.

Perth Status: There’s a small but active Rails community in Perth (see the RORO Perth meetup), and a few freelancers. Because of its focus on web development, Rails developers tend to be knowledgeable about web development.

Django

An MVC framework similar to Rails (and developed at the same time), written in Python

Pros: Fast to develop, Python is widely used in academia, the framework is well-written and relatively problem-free

Cons: As with Rails, the framework is prescriptive and relatively inflexible, it’s less popular so there’s less global support

Perth Status: There are prominent members of the Django community living in Perth, so the local Django ecosystem is larger than usual. The Django developers meetup has recently undergone a revival. Students often know enough Python from their studies to be able to pick this up quickly.

Javascript/Node

Javascript running on the server. There actually isn’t a “commonly-accepted” tech stack for Node, except possibly React, because there are too many options. The javascript community is incredibly prolific, and new frameworks appear monthly, though this is slowing down. Common choices are Express, Angular, Ember, Koa and Meteor, all of which will provide a decent platform for a web application.
Javascript is the only language that browsers understand, and that has lead to some unique “universal” frameworks where the same code can run on the client or on the server. Meteor is notable for this, being the first to really pioneer the technique.
React is a client-side library that is fast becoming accepted as the default method of building web apps. Most web developers are either using it or planning to.

Pros: Fast, widely understood, popular with a huge number of open-source modules available, universal apps, platform support (Heroku, etc)

Cons: Too much choice, a high percentage of modules are no longer maintained or poor quality, frameworks tend to become obsolete fast.

Perth Status: Every web programmer knows at least some javascript, and so there are a lot of people who can code in js. But experienced node developers are not so common. The Perthjs meetup has been neglected (sorry!). Node is probably the default choice of platform for hackathon teams these days because it’s so quick to get going and everyone can understand the language at least.

Java

Enterprise development language. Runs on every platform and Android phones.

Pros: Stable, well-known, massive array of standard libraries. The only language available to create native Android apps.

Cons: not so fast as a web development language, relies on a reasonably complex support system of other programs

Perth Status: There are lots of commercial Java coders around, but they tend to have experience writing enterprise applications rather than fast-changing web applications.

C#

Microsoft’s version of Java. Also used a lot in game development, which historically has been mostly Windows.

Pros: Stable, well-known, massive array of standard libraries

Cons: Not so fast as a web development language, support for deployment on anything other than Windows is new and patchy

Perth Status: Again, there are lots of commercial C# coders around, but not so many with web development experience. Until very recently its inability to deploy to anything except Windows servers made it a really bad choice for startup development because of licence costs, but a really good choice for creating enterprise software for B2B.

Swift

Apple’s new development language. Used widely inside the Mac and iPhone ecosystem, and nowhere else.

Pros: Better than Objective-C, great for building iPhone apps, starting to be used for other things

Cons: Only really able to be used within the Apple ecosystem,

Perth Status: There is a decent-sized iOS development community here, who will all have at least played with Swift.

PHP

Not so much a language, more a toolbox of loosely-related utilities held together by a rough syntax.

EDIT: after taking a beating in the Fender slack channel for being rude about PHP, I need to correct any perception of bias here. PHP is perfectly good for its intended purpose: building websites, and fits that niche just fine. Also PHP7 is apparently much faster now, so the “not great performance” observation is no longer accurate for modern PHP projects.

Pros: Specifically designed to write web pages in, fast to develop

Cons: gets unwieldy at large scale, easy to write really bad code in, not great performance

Perth Status: It tends to be the first choice for designers to write server applications in, so there are a lot of talented web developers who can build good-looking websites running on PHP.

Perl

Old-school text mangling language, used to be the language of choice for web development back in the late 90’s.

Pros: very suited to the text processing job of creating HTML pages

Cons: Security issues, language community problems, mostly obsolete tech choices

Perth Status: There might be a couple of old, bitter, jaded Perl coders around the place. But almost everyone has moved on.

C/C++

System programming language(s) from the 90’s, still in massive use today. C is older and more widely used, C++ is object-oriented and more specialised in niches
Apple has a weird version of C called Objective-C which historically is the language used to develop all MacOS and iOS applications.

Pros: arguably nothing faster, huge library support, low-level so more flexible – there are things you can do in C that are impossible in higher-level languages.

Cons: slow to develop, very very easy to get wrong, can brick your hardware if you get it badly wrong

Perth status: there are a few C coders around, but mostly they do system development rather than web development. It’s gaining traction as a tool for Internet Of Things applications, so expect a resurgence. C++ is the traditional language for developing games in, so there are a few games devs with decent C++.

Go

System programming language invented by Google, intended to replace C but actually replacing Ruby/Python.

Pros: fast to execute, nice clean syntax, modern idioms.

Cons: bad package management tools, horrible type system, lots of boilerplate

Perth status: It’s one of the cool new kids on the block, there are a few Go developers around, but it’s definitely a minority language. Useful for creating specific small utility servers as part of a wider system.

Erlang/Elixir

Erlang is a bizarre functional language developed to build telecoms systems with during the 90’s with amazing performance capabilities. Elixir is an attempt to align the syntax with modern sensibilities.

Pros: resilient, fast, and very scalable. Massively parallel – it inherently runs on all the available cores.

Cons: The main packages are all written in Erlang which has bizarre syntax. Elixir is making progress but it’s still very much an addition to the Erlang base.

Perth status: An up-and-coming language in the global community, it’s what all the cool kids are looking at these days. Finding people who have actually built something in the language is almost impossible, but a lot of people would like to use it for something.

Conclusion

Which language should you use for your project? It doesn’t really matter, it’s much more important that the developer you’re working with is comfortable and productive in that environment.

Having said that, there are limitations. Trying to build processing-heavy applications in PHP, or cross-platform applications in C#, will always be harder than a more appropriate language.

Which language should you learn? You will always need to know javascript, it’s the only language that browsers understand, and you can build anything in it (though it’s not always the best choice for everything). Start there.