The Ultimate Teaching Language

Jason Lee Hodges is a Software Engineering Lead and the author of “Software Engineering from Scratch: A Comprehensive Introduction Using Scala.” You can learn more about the book or order it online here.

Matt Cohler is a venture capitalist and one of the first founding members of both LinkedIn and Facebook. I remember hearing him speak at a conference once surrounding his decision to move to Silicon Valley looking for a job in tech right after the dot com bubble burst in the early 2000s. He recounted the fact that it was not a very popular decision at the time but ultimately it’s what he wanted to do. It was that contrarianism that led him to his eventual successes.

That same contrarianism can lead to valuable payoffs in your career if applied correctly. For example, when deciding which programming language you should learn first, most will provide guidance towards Python or JavaScript noting their relative gentle learning curves. However, there is an upfront opportunity cost that is incurred by choosing one of those languages. Those costs include:

The pool of programmers that you will compete with for jobs will be learning these same languages and you’ll fail to set yourself apart if you are not aware of their limitations.

Their dynamic typing can lead to extremely hard refactoring when working on large scale projects.

The fact that these languages are interpreted leads to performance costs.

Learning how to overcome these limitations and knowing when and where to choose a language or paradigm requires you to learn multiple languages upfront.

These limitation might be fine if you just want to dabble in programming or if you want to learn a bit of coding without actually hoping to get a job as a Software Engineer. However, as a Software Engineer, there are many topics that are crucial to understand that you just can’t learn from these two languages. These include, compilation, static typing, data structures, algorithms, and design patterns. So what’s the alternative?

Many universities will introduce Java to their students in order to teach them the fundamental principals of computer science that you will struggle to learn sufficiently in Python or Javascript. But jumping straight into Java with no background in coding includes a steep learning curve. Right off the bat you are introduced to a complex integrated development environment (IDE) with a required folder structure that seems backwards and unintuitive at first. Not only that, but you can’t actually write any basic code without first wrapping everything in an object — which means you have to jump straight into object-oriented programming (OOP). Isn’t there a language that provides a good compromise?

Enter Scala to the rescue. I am of the opinion that Scala is the ultimate teaching language. It’s implicit typing and optional interpretability allows you to get up and running in a basic context just like you would in Python or JavaScript. It can be introduced in a procedural paradigm at first so that you don’t have to jump straight into object-oriented programming. At the same time, when you are ready to learn object-oriented programming, it can provide all the necessary concepts you need to fully study the paradigm. Additionally, you can move over to the functional programming paradigm when you are ready without having to switch to other functional languages like JavaScript or Haskell. Scala is also a C-style language which makes it easy to move over to other C-style languages once you’ve learned it. As its reputation suggests, Scala truly does contain “everything and the kitchen sink.”

So, if you are ready to buck the trend, be a contrarian, and profit from that decision, I recommend learning Scala as your first language. In fact, my book “Software Engineering from Scratch: A Comprehensive Introduction Using Scala” provides a guided path through the language that will get you up and running quickly. Go check it out today!