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.
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.
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.
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.
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.
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.
I've also created a list of Twitter personalities that you should consider following.
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?