Tech Reference for Non Techs
This is for recruiters, HR, and Managers. It's about programmers. It's about how fussy we are. And it's about giving a reference for those things which get listed at the top of resumes and the bottom of job adds.
Half of my day is spent on whiteboards and meetings. The other half is staring at code in an editor. So which editor and what language is a pretty big part of my day.
If the perfect job showed up on Seek, but was for .NET, I wouldn't apply. Crazy right? There's nothing wrong with .NET, some of my best friends are .NET programmers. My Dad is a .NET programmer. It's just not for me. And someone who loves .NET may turn down, say, all Go or Node.JS jobs.
Anything exciting or excellent or terrible in the tech world polarizes the community. Some people adore jQuery. Some hate it. A lot of people ‘used to like it’. There is no ‘good and bad’ here. Just lots of things and even more opinions.
Great teams, projects and managers are at least equally important as the tech stack, but they are... fuzzy. They grow. They break. And they can't be put down on paper. If a programmer finds a good team, they probably aren't on the job market anyway.
Me - I want polyglot roles. Projects written in multiple languages. Managers who take ‘best tool for the job’ seriously. Unfortunately they are rare. And I get it - there's a lot here. It'd just be nice is all.
Tech People: this is not intended to be 100% accurate, it is intended to be useful to the 'wider community'.
Closed Source / Must Use To Build x Application
Mess out of the way first. If you want to skip to the good bits - go to Open Source. Was that too opinionated?
.NET - Microsoft & Windows
C#, ASP, VB / VBA, MSSQL / SQL Server, IIS
You can run applications written in many languages on Windows, but here I am talking about the specific Microsoft technology, .NET, which is a full environment and ecosystem for writing - usually - enterprise applications.
Most .NET code is written on a Windows machine running Visual Studio. Which is a fantastic editor (if you are in to that sort of thing)
Each to their own, There are some great things in the Microsoft world, some people live in and love it, but I don't get it.
iPhone, iOS, Mac
Objective C, Swift
Programming iOS applications (Applications which run on iPhones, iPads etc) is a whole specific skill-set, using a specific set of tools - a Mac running XCode.
Inside of iOS, there are two languages which could be used, and they are fundamentally different, so it is always worth pointing out which one - Objective C or Swift (Swift is the new one). Neither is necessarily better, but people have their skill-sets and preferences.
Android
java
Android applications are usually written in Java. (see below for Java). Most android projects on the job market are to replicate an iOS application. Which is a bit of a shame, as Android is really just as good. If you are ever advertising an Android Developer position which is NOT to replicate an iOS app
- put it in the title - yours is the dream job.
Client Side Languages - JavaScript, HTML, CSS
'Client Side' usually means the web browser - Chrome, Safari, IE & FireFox
- and the languages which we have to use to make them work. Technically iOS, Andriod and 'native' apps are also client side, but the term is usually reserved for web projects.
In one sense, there isn't a lot of variance here. It’s a simple scale, the developer might know nothing, something or everything about front end development, and the specifics can be learned quickly on the job.
HTML and CSS are a requirement. There are no other options. All web apps use HTML and CSS.
JavaScript is the only option for making apps 'do things' in the browser. Apps can be build without JavaScript, but most modern apps use it.
There are ways to write HTML, CSS and JavaScript in other languages. Yes, that’s supposed to sound odd. These other languages are implemented as 'transpilers' - they take a different sort of code and change it into HTML, Javascript and CSS. Examples are LESS, SASS, SCSS, CoffeeScript, ECMA6.
A developer must know the fundamental 3 before using a transpiler. They are tools to make it easier, they don't exist in their own right.
Most client side transpilers are very easy to learn for anyone who knows the fundamental 3.
Open Source, Cross Platform
This is where the real fun starts. Once we move away from the Front End - Browsers and phones etc, there are no technical restrictions, and thousands of languages exist. But probably more like a hundred ‘common’ ones - The remainder of the languages and technologies are ‘Cross Platform’ and or ‘Open Source’.
Usually the two go together. Open Source means that the public can view the code which makes up the language itself.
Cross Platform means it can be done on Windows, Mac or Linux (and some others), and usually in a number of editors.
Usually Open Source also means Cross Platform - if the source is open, someone will have ‘ported’ it to the other operating systems, which is the alternate to Microsoft or Apple ‘controlling’ the language and the editors developers must use.
Open Source should be music to everyone’s ears - you have a much higher chance of a match when the developer gets to choose their own tools.
I’m a bit of an open source fan. You may have picked that up.
If there was one perfect language, this section would be boring. Luckily, no one has invented (or ever will invent) the perfect one, so the tech industry will be in a permanent flux of awesomeness.
There are many projects out there which use way more than one language. Designs such as 'microservices' - where individual components of the project are broken out in to small applications with a single, specific purpose, often allows for a complete mix depending on the ‘best’ language for the task.
Java
Java and JavaScript have nothing in common beyond the name. Strange, right? Back in the early days when Java was all hip and cool, the some marketing people wanted to ride on the coat-tails of Java's success. So they named their language JavaScript. That is literally the whole similarity.
Java is a tried and true language, very good for large teams to work together. It is pretty much the reference language for a lot of ‘Object Oriented’ programming (one of the two most popular types), and design patterns. (Actually, SmallTalk is the ‘proper’ reference language, but very few people know SmallTalk. It was popular a while ago)
You have to write a lot of code when building things in Java. It's famously verbose, with really long names for things. e.g. SimpleBeanFactoryAwareAspectInstanceFactory, which have the upside of being very clear, but the downside of taking longer to type. (yeah, I know, ‘very clear’. Maybe ‘very specific’ is… clearer)
Not Java
There are a few languages which run like java: in the Java Virtual Machine, but which aren't java. They don't even resemble java. Groovy, Scala, Clojure, for example.
C and C++
C is ‘the one’ - the default language for writing operating systems and ‘low level’ tools.
C++ is an extended version which, while similar, is quite a different language in it’s own right, but still quite fast, common, and ‘low level’
Go and Rust
Relatively new languages by Google and Mozilla respectively. (Mozilla as in Firefox).
These two are built as reactions to the very popular C(++) and Java, but they are also near polar opposites to each other. Here we are weighing up ‘powerful’ and ‘simple’. Go is Simple. A Tiny language spec which can be fully memorized and learned quickly. Rust is powerful, you can do many things in just a few lines, but with the payoff of being more difficult to learn. Neither make any thing impossible - it just takes more lines of Go, but more learning for Rust.
Go is by far my favorite programming language. But only for the things it is good at - connecting things together. Which happen to also be the things I am good at. It's also really fast. And easy to learn / teach.
Haskell, Erlang, Lisp, R, Clojure
These are all ‘Functional Languages’ - they work differently to the other ones
- and are really well suited to maths / mathematicians.
That's not to say they can't do other things: there is an entire Window Manager (All of the toolbars, window decorations etc which wrap up applications) written in Haskell.
It's probably not fair to just lump them all together like this. It's just that I have no idea what I'm talking about in this realm.
They should be more popular. But... they aren't. Maybe they seem strange and unusual to the people choosing programming languages.
Node.JS / Javascript / ECMA
Javascript made its first appearance in the ‘Client Side Languages’ section, but some clever people thought - ‘if we have to use it in the client, maybe we could use it on the server too, so we only have to write everything once’.
In reality, that never happened, we write most things differently for the client and the server, however, the platform - called Node.js - thrived.
Node.js is terrible at ‘doing things’: heavy calculations and the like, but as it turns out, 90% of applications don't actually do anything, they just pipe things around from other applications like Databases, which node is great at doing.
ECMA is ‘the same as’ JavaScript. The terms can usually be used interchangeably, however, ECMA6 etc specify a ‘version’ of JavaScript, letting the programmer know what they can and can't use.
When JavaScript is running on the server, the developers have more control over the version, so can use the new features like Classes which make using the language bearable.
Python, Ruby, Perl
These languages are read by the computer 'on the fly' and are excellent for scripting things - that is - it helps the developer achieve some goal or task they do all the time, like a tool, but not part of the ‘finished product’.
Ruby is mostly popular for the Ruby on Rails framework, which brings it out of the scripting category, but is actually quite a decent language on its own. It also probably has the most… outgoing… developer community. You learn Ruby from a video with Zombies.
Python has a few frameworks for building web applications, like Django, but it's more popular as a ‘scripting language’, and Perl, well it probably has some web frameworks, it really has at least one of everything, but I think it's pretty rare. Use it for scripts.
PHP
I kind of wanted to group it with Ruby and Python, but really it belongs out here on its own. This is going to be harsh - but I think PHP is a language of the past. It is ONLY for web applications. Anything else is just silly.
The Symfony2 framework made it usable, and Wordpress, Joomla and Magento are incredibly popular PHP applications.
Oh, and facebook uses it.
PHP began life as a quick template language, a way to ‘spice up’ the web and add content specific to the individual user. Today, it is a full, proper language with namespaces and classes and all.
Most (all?) other current server side languages are ‘always running’ and waiting for a customer's request, but a PHP application is run up just to meet the request, and destroyed afterwards. This has huge advantages in that it mitigates many of the mistakes programmers make in all languages - memory leaks, giving one customer's data to another etc., but has the disadvantage of being painfully slow.
There are some excellent caches which make the 'boot up' time for an app much, much faster.
I still don't like it very much. (Any more - I won't pretend I didn't love it... once upon a time)
Bash
Bash is a 'shell' - read, the black screen which the white writing that nerds spend all of their time looking at. There are a few shells for Windows (CMD, PowerShell) and Linux (Bash, zsh, sh… ) but by far the most popular is Bash [citation needed].
Everything you can do in Linux can be done in bash / a shell. (And should be - if you want to be l337)
Non Windows people should all know Bash, but some choose to use more powerful tools for day-to-day tasks.
Bash can be written 'on the fly', line by line, run immediately, and never used again, but bash ‘scripts’ are also quite well used, which allow re-use of these line by line instructions.
Bash is truly terrible as a programming language, it's advantages are, mainly, that it is installed on practically all linux and mac machines, but also because it's the easiest for running and connecting other applications. Most bash commands are actually running another application, taking its output, and sending it in to another application.
XML, JSON, YAML
These are not really Programming Languages, more like ‘encodings’, but are important nonetheless.
They are used as the way applications communicate with each other, but also for writing configuration files.
A way of writing something to be read by a computer, but not to be ‘run’ by the computer.
All programmers should know XML and JSON.
YAML polarizes people.