Preamble

A while back, I wrote about the shortage of technical talent in our region, and critiqued its effect on our community and economy. I exhorted local businesses to invest in the next generation of talent, and to recognize that human capital is the real engine of prosperity.

This sentiment is echoed by a year-long, provincially-commissioned study on the 'new economy', that presented its findings just last month. The Ivany Commission identifies several economic 'game changers', and proposes recommendations designed to invest in human capital across all areas of the economy.

Unfortunately, it stops short of any detailed recommendations where I feel they are most needed. I was disappointed to see a fleeting mention of the need for technology education in the report (literally a single line under Excellence in Education and Training, and a vague recommendation under Startup Nova Scotia). One wonders how the commissioners could celebrate companies like GoInstant and LeadSift, without recognizing technical talent as the sine-qua-non of our fledgling digital economy.

What I would have liked to see was a detailed action plan to implement a computer programming curriculum in secondary schools, and perhaps a call to review the computer science & technology programs at the post-secondary level. The former is basically non-existent, and I would argue the latter is misaligned with the priorities of the report.

Be the change you want to see

Rather than complain bitterly, I've decided to do something about it. Over the next five days, I'll be outlining my (unsolicited) vision for an integrated computer programming curriculum, that could be taught on its own in high schools, while also supplementing current offerings at NSCC and the universities.

A curriculum? Really?

Yes. This isn't just a random collection of haphazard notes by a delusional programmer. I've thought a great deal about outcomes. I've paid attention to scope and sequence. I've made decisions based on research-backed best practices in pedagogy. I've considered classroom requirements. I've drawn from my practical teaching experience in the public system, the private system, the military and the private sector. It's all here, ready to be mapped to a year plan, unit plans and assessment plans.

My goal is to produce a document that can be used by educators to create a full-fledged course, or by beginners as a guide to learn programming on their own. Ultimately, I contend that a grasp of the skills and specific technologies I outline will expose students to the broadest possible base of skills, and ready them for the widest variety of entry-level positions with local employers - including us at Torusoft.

Day 1: Choosing a platform and a language.

When one sets out to teach programming, the following two questions are the most difficult, and the most important: "Programming on what platform?" and "Programming in what language?"

Let's answer the first question. The term "platform" describes the environment you're programming on. Some platforms only support certain languages; so, it's important to make a choice that's widely compatible, widely supported, accessible to beginners, and relevant to local businesses.

The platform I'm choosing is the world's most advanced, widely-distributed application runtime: the web browser.

This curriculum will focus on programming for web technologies, from the browser to the server, with a focus on web applications, mobile devices and data science. Web developers, whether they work on websites, software, machine learning, data analytics, or any other field, are at the core of our fledgling digital economy. They connect and enable everything else. And, more importantly, they're in demand.

Down the rabbit hole.

But how does one learn how to become a web developer? The field is so vast that it's difficult to figure out where to start. For example, to build a web application from scratch, you would need a good knowledge of HTML, CSS, Javascript, SQL, at least one server-side language, and a rudimentary understanding of how to configure a web server and a database. This is no simple undertaking.

Which language? PHP? Python? Ruby? Node? VB.NET? C#? Erlang? Go?

What about databases? Relational or non-relational? MySQL? PostGres? SQLite? LevelDB? CouchDB? MongoDB? Redis?

What about the server? Apache? IIS? Tomcat? Nginx? Lighttpd?

Oh, and consider choosing a server side framework to make development "easier". You've got your choice of Wordpress, Drupal, Joomla, CodeIgniter, Laravel, Expression Engine, Django, Pyramid, Rails, Sinatra, Express, and on and on.

These are just some of the choices you can expect to make as you begin to learn how to develop for the web. How can we expect newcomers to navigate this jungle? What confidence do they have that they're making the best choices? The right choices? Are they limiting themselves by choosing the wrong language? What about learning curves and sequencing? Should they learn client-side stuff first? How much time should they spend learning HTML and CSS? How about media queries and responsive design? What about jQuery or any of the various client-side frameworks (Meteor, Backbone, Ember, Angular, Polymer...)?

No wonder this is daunting. No wonder web development communities are so fragmented and tribal. Every choice closes off dozens of paths and insulates us further from our peers.

The way forward.

We're here to learn programming, and we need to choose a language. Our requirements: we need a language that supports multiple platforms, runs in a web browser, on a web server, and can communicate directly with a database.

This language is Javascript.

In fact, Javascript is the only language that meets all our requirements. Any other choice would limit the topics we could cover. Before you disagree, consider this: would you be able to build an interactive, browser-based application or game using only Python, PHP or Ruby? Of course not, because these languages aren't available in the browser. And we're not going to ask a novice to learn two different languages at once.

There are lots of reasons why Javascript is the best choice for teaching a novice about programming. Here are some of the best:

It's widely available, with no installation required.

If your computer has a web browser, you can begin programming in Javascript. You don't need to download a compiler, or rely on a network administrator to install one on your machine for you.





If your computer has a web browser, you can begin programming in Javascript. You don't need to download a compiler, or rely on a network administrator to install one on your machine for you. You can see results immediately.

It's a simple as launching your console and typing alert("Hello!");





It's a simple as launching your console and typing It's an interpreted language.

Some languages require you to compile your code before running it. This build step is time consuming and breaks the flow of work, so it takes longer to make a change and observe the effect. Javascript is interpreted on-the-fly, so all you need to do is save a change and reload your browser.





Some languages require you to compile your code before running it. This build step is time consuming and breaks the flow of work, so it takes longer to make a change and observe the effect. Javascript is interpreted on-the-fly, so all you need to do is save a change and reload your browser. It's weakly-typed and has a simple, forgiving syntax.

Compared to other languages, basic Javascript syntax is extremely simple and readable. There aren't a lot of strange characters cluttering up your code. There's no requirement to indent it perfectly. You don't need to declare your variable types at the beginning. The interpreter massages many of these rookie oversights, so beginners aren't discouraged by too much rigid structure.





Compared to other languages, basic Javascript syntax is extremely simple and readable. There aren't a lot of strange characters cluttering up your code. There's no requirement to indent it perfectly. You don't need to declare your variable types at the beginning. The interpreter massages many of these rookie oversights, so beginners aren't discouraged by too much rigid structure. It's part of all the emerging fields.

You can use Javascript to write applications that run on iOS and Android with projects like Cordova. You can use all manner of game engines to write interactive games. If you want to run analytics on large data sets, you can write distributed map-reduce queries for engines like Hadoop using Javascript. You can even communicate with micro-controllers and program robots in Javascript now.





You can use Javascript to write applications that run on iOS and Android with projects like Cordova. You can use all manner of game engines to write interactive games. If you want to run analytics on large data sets, you can write distributed map-reduce queries for engines like Hadoop using Javascript. You can even communicate with micro-controllers and program robots in Javascript now. You can use Javascript as a full-stack solution.

This is perhaps the most important consideration. Thanks to NodeJS, the same language you use in the browser can be used on the server-side as well. Additionally, there are various database solutions that can be queried and indexed using plain Javascript, rather than some SQL variant. So, really, you can write a full-stack application using only one programming language.



Given all the considerations I've listed above, I hope you'll agree that a focus on web technologies and Javascript is the right choice for those beginning to learn programming today. Personal preferences aside (I'm a Lasso programmer myself), I am convinced that this focus will prepare newcomers for the industry we're trying to grow, and the jobs we'll need over the next 10 years.

Recommended reading and resources.

At the end of each day, I'll provide a curated list of resources that are appropriate for beginners and novice programmers. I highly recommend the following for a basic introduction to Javascript:

I've also created a list of Twitter personalities that you should consider following.

Up next:

We spent the first day establishing the context, platform and language for this programming curriculum. With this foundation in place, tomorrow we can dive into the actual material, scope, sequencing, and pedagogy. Here are the outcomes we'll cover over the next four days:

Stop by each day this week for a new instalment. I'd also like to hear your thoughts on what I'm covering. Is there something missing that you'd like to see included? Are these topics the right priorities for our industry? What would you like to see emphasized, and why?