# Programming as an endless educational pursuit

When one embarks on the journey to master the craft of programming, they come to the realisation that it has no finish line. No matter how good you are, there are still things to learn, solutions to explore.

Today, we’ll talk about the importance of remaining a lifelong student, language adoption trends according to StackOverflow and why programming itself might not be what you end up learning to become better.

hackNY.org CC-BY

The habit of sticking to what’s working and ignoring new tools can backfire. By doing that, you’re depriving yourself of an opportunity to be more efficient, and risk eventual burnout. John Graham-Cumming of Cloudflare eloquently notes: “Some people get obsessed with a specific language and have to do everything in it. This is a mistake. There is not [sic] single greatest language for all tasks.” This might seem like an obvious piece of advice, but it’s nonetheless important. And the more experience you have under your belt, the harder it is to follow. John himself jokingly states that he’s not “young enough to know everything”.

## Learn something new

We spend a lot of time at our computers, which can be a good thing and a bad thing. It’s a good thing because of all the educational resources at our disposal. It’s a bad thing because, unless we spend this time wisely, it can lead to burnout. Doing too much of the same is not only boring, but potentially dangerous.

The right thing is to challenge yourself and keep your creative juices flowing. A study of StackOverflow data found that programmers tend to use different languages and libraries during their time off. Which is, generally speaking, the right thing to do. Microsoft-related tags (C#, ASP.NET, SQL Server, Excel, VBA) drive the charts during the work week. The rest of the time, people are more interested in brand new languages (such as Swift), Node.js, C and C++. As tools become popular, they move from the second category to the first category.

For example, Scala and Ruby on Rails used to be ‘weekend languages’ a few years ago. Now, that they’re widely used, they lost the status of hobby project staples. Instead, people are more likely to spend their free time exploring game development frameworks.

To help you explore things, a Google engineer created a list of practical projects you can attempt in pretty much any language you’d want. From maths problems to working with graphics, it contains a variety of tasks that can help you become fluent in the language you’re studying. The GitHub repository linked above contains example solutions in various languages — most often, Java and Python.

## Don’t be afraid to go extreme

Each new programming language has something to teach us. Sometimes the sheer novelty of a solution can throw you for a loop, and demand you rise above your problem solving preconceptions. Take, for example, the BANCStar programming language. Here’s what it looks like:

8607,,,1
11547,15475,22002,22002
1316,1629,1,1649
3001,1316,3,30078
11528,22052,22002,22002
9301,0,1528,1528
31568,10001,800,107
8560,,,1568
8550,210,,
3001,,,
3100,1316,3,30089
11547,15475,22002,22002
3001,1316,3,30089
3001,1317,3,10000
8400,,,
8550,700,801,
3001,,,
9301,0,522,522
3000,1284,3,10001
8500,,3,
8500,,5,
1547,,1,-2301

A security researcher by the name of Joe Loughry shared his story of working with this monster back in the year 1990. He was introduced to BANCStar on the first day of his new banking industry job, and it took him two weeks to get comfortable using the language. Back then, there was no StackOverflow, so he made do with what he had on hand: a dot-matrix printer, a set of highlighters and a binder for all the printouts.

This might sound like torture, but back then BANCStar was a legitimate solution for the banking sector. The sheer illegibility of its syntax, which only consists of numbers, commas, newline characters, and ‘minus’ signs, made it pretty secure. Company policy prohibited its staff from commenting the code in any way, so as to not compromise this.

According to Loughry, to this day there are no more than 10 people in the entire world capable of reading the source code provided above. Which is why he copied it verbatim from one of his old applications.

Compared to BANCStar, modern languages are a breeze to learn. But using a language strictly because of its perceived superiority is just as bad as always staying in your comfort zone. Languages are just tools. There should be no shame in admitting that they don’t fit and switching to something else. Even if it makes you ‘uncool’ in the eyes of the twitterverse.

## Whichever way you eat a sandwich

How you approach your studying is just as important as what you’re studying. Allen Downey, a computer science professor from the Olin College of Engineering, remembers how, back in the day, students used to be taught a particular way of solving things with code.

First, they were asked to express their idea using natural language — pinpoint the particulars of the application they want to create. Then they were supposed to express this same idea in mathematical notation. If the math worked out, they would create a draft of the program using pseudocode. And only then they would be allowed to actually write the code. But, while this used to make sense in the age of punched cards, it might not be a good fit today. Modern high-level languages have the expressivity of natural languages, the precision of mathematical notation, and the abstraction of 1950s pseudocode.
Nothing is stopping you from experimenting with your approach to programming. You can completely reverse this traditional process, and start writing code first thing. You can replace entire parts of your application with third-party libraries, and ‘reverse engineer’ them as you go along. The most important thing is to find something that keeps you excited and motivated.

It usually takes three to four years for any particular programmer to reach their ‘skill ceiling’. If they cannot become a ‘superstar coder’ in this time window, chances are, no amount of programming experience will help. So, if we can’t get better at programming by simply accumulating relevant experience, what can we do?

What separates the best from the rest?

Here’s how Jeff Atwood interprets this: Being a well-educated programmer requires much more than a continuous expansion of your toolset, or being willing to broaden your mathematical horizons from time to time. Our coding ability is dependent on a multitude of skills that aren’t directly related to the act of programming. Accomplished software engineers know that coding is not the end all be all of their jobs. They study their users, pay attention to the business side of things, get to know the ins and outs of their industry.

Feel free to share your take on this matter in the comments. Which languages/frameworks are you studying right now, and what for? What insights from other disciplines enhanced your programming ability, and how?