I wasn’t too different in my highschool days than I am today - especially when it came to my relative love of all things digital. Arguably, mine is the first generation to have grown up with the web and probably the first to have ubiquitous computer access approaching what we have today.
I distinctly remember debating with my English teacher that programming or at least a conceptual understanding of how software and computers work wil be as fundamentally important an understanding of how good books are written - the same logic for teaching English literature will exist for computers in the not-so-distant future.
Many people analogize software people to mechanics - giving us terms like code-monkey from grease monkey. This makes some sense since a good deal of software concept comes from engineering disciplines. However it is flawed in the expectation of involvement from the user. A person who uses a car does not have to have even the most primitive understanding of how they operate to make use of one. A hybrid vehicle, from point of interface, is largely indistinguishable from a internal-combustion - any differences are deliberate choices rather than consequences (like having a start button).
The same is not true of a computer, and more specifically software. The more you understand about how software works the more predictable and sensical your experience will be and the more you appreciate well written software and can identify poorly constructed software as well - similar to our ability to recognize good writing and bad writing when we see it because we were exposed to literature at some point in our lives.
Moreover, software programming as a mental exercise is a useful activity of its own right. As someone who grapples with very severe cognitive deficits every day of his life I can attest that many of the concepts of software programming allow me to bring order to my life and activities in a way I couldn’t if I didn’t understand the same.
Also during highschool I made fast friends with a teacher who was supposed to be retiring that year but wasw instead picked to head-up a committee to revamp the provincial standards for the information technology curricula. This is a surprisingly complex process that extends far beyond a grocery list of “expected learning outcomes” including identifying resources, providing funding estimates for a given class, synthesis opportunities with other subjects, and a vast array of teaching resources.
The idea behind these packages is unnerving. It’s a tacit assumption that teaching is an isolated transferrable skill that requires no domain knowledge - thusly someone with an education degree should be able to teach any subject given the appropriate resources. Anybody who’s had a Math class from the gym teacher gets why this principle breaks down very quickly in reality.
Information Technology, to put it simply, was at that point a complete joke. It was too easy in parts, outdated in others, and simply entirely irrelevant in yet others - because, surprise surprise, the pace of technology outstripped the updating of the curricula.
One of the things I made sure to emphasize in my consultation was that kids should come out of the InfoTech 12 being able to write software - real, functioning applications in a language that is used in the real world. At that time we were being taught TurboPascal - a didactically useful langauge but not something used to power the Facebooks and eBays of this world. Moreover, a tonne of important concepts were missing from the curricula.
It covered the history and theory of the internet, the history of the computer from the microprocessor onward. We did not, however cover what an Operating System is and does. We didn’t the basic history of computer languages (nary a mention of the C-family or Fortran or any of that).
My concept, which was never fully executed, was to break up the curricula into “modules” which fit into streams. Students could design their curriculum ala carte provided certain minimal dependencies were met. The students would then be grouped based on their stream - providing an avenue for team projects and the like. All the teaching resources would be provided online and the in-person teacher would administrate and answer questions (we obviously couldn’t depend on that teacher having a comprehensive understanding of the material - they probably wouldn’t be working as a teacher if they did).
I developed a prototype with a limited set of modules using moodle.
The programming language we settled on was Python - it’s robust, feature-rich, offers both an object-oriented model as well as a functional and it’s something that is definitely popular and not going away any time soon.
My issue with the curriculum was its heavy dependence on proprietary tools - they weren’t something the students could go home and try without pirating the software (usually from their school). They taught Adobe Flash with ActionScript to do multi-media stuff.
It’s been nearly 6 years since this system was developed - what would I change/update?
Despite it being proprietary I think a really cool / highly attractive component would be teaching programming via XNA tools. Imagine the cred you’d have as a kid when asked what did you do at school being able to answer, “I made XBox games.”
Garage Games’ GameStudio and Torque might be other examples of proprietary tools useful for teaching - especially GameStudio because of its simplicity.
An important aspect I built into the standards was the fundamental axiom of high-techology - accretion. The rubric for all prototype assignments included a significant portion dedicated to how useful this code would be to other developers - documentation, commenting, formatting etc. Kids could still pass assignments with feature incomplete applications if their code and documentation was meticulous.
This means that each new cohort can have access to a library of code developed by their predecessors (if we could network schools and have a BCSchool’s SourceForget all the better)
I would introduce hardware programming elements - probably through Lego MindStorms. For those students interested in that kind of thing. I might even do a component on PCBs and basic electronics. If you could cross that with the mechanics classes or metal-shop, you can imagine there’d be some robotics happening pretty fast.
For the business minded kids I’d do something involving e-commerce; maybe a civic works activity including business plan model and the opportunity for execution. Another option would be to furnish kids with developer access to a stock data site and ask them to build technical analysis tools.
The artistic kids could build interactive fiction or mediascapes - or go with the hardware route and have interactive media installations or appratus.
Or a Facebook app development module for the entrepreneurial students.
The idea was to always have a collection of projects that students could pick from with each project being worth an amount of credit relative to scope and difficulty and the quantity of pre-requisite modules.
The “teaching” modules would allow students, who like myself, come equipped with a lot of knowledge of their own, to quickly demonstrate that capacity and move on to the “cool stuff” without disrupting the class or being bored out of their tree (I taught the latter half of year for my IT class if only to stop me from fidgeting or hacking the school network).
Moreover, by putting this all online and having the marking of the instructional modules automated there’s no reason why this couldn’t be opened to everybody. So a student of any age can do this work and (potentially) get credit for it if they haven’t graduated or accreditation if they have.
This is definitely a project I’d spend a lot of time helping to build - if anyone out there is interested in helping me, I’m all ears.