Over the last week or so, I published here eight guidelines for teaching programming. This last one is not so much a guideline, as a guiding thought. The first eight were reasonably concrete tips about how to (or not to) approach the teaching of programming to novices. This one just illuminates one aspect of our teaching that may be helpful to hold in the back of your mind to guide your general approach to the content you decide to teach. It has to do with how initial programming teaching has changed over the last 20 years.
When I started working in teaching programming to beginners, the target audience we had in mind were first year university students. This is where programming learning really happened.
It is not now.
Today, almost every learner encounters some form of programming long before university, at some time during their school age. The migration of initial programming teaching from universities to schools creates a big shift. The difference is not primarily that learners are younger, but that they have different goals.
When we started to move computer science teaching into schools – initially into the last few years of a curriculum – the content was almost universally derived from introductory university courses. Mostly, teaching at school was a direct copy of teaching at university.
Now that teaching of computing has migrated down the years, is taking place sometimes in primary school, and in earnest in early secondary school, this makes no sense anymore.
The goal of the teaching of programming in a university computer science degree is to educate potential future software engineers. The learners had chosen a career in computing, and professional software skills are an essential part of that education.
In early secondary school, we teach programming to all pupils. Not just the ones who go on to work in a software profession, but all of them.
We should be very aware that the goal is not to train software engineers. Most of your class will never work as a professional software developer.
When we shift from training computing professionals to educating the entire population, we need to adjust our objectives. Learning professional software engineering practices is no longer the main goal. Gaining a deep understanding of the power and limitations of computing systems in general is. Grasping how computing impacts our life, the possibilities and dangers of modern computing systems, the potential for creativity, for science, for social change.
Understanding how the world can be modelled digitally, the transformative power that results from this, the limitations and dangers, the joy, the potential – that is the goal.
At secondary school, we are trying to create educated citizens in a digital world, not software engineering professionals.
Keeping this thought in mind when planning your teaching helps to provide guidance in judging the importance and value of different elements of content in the curriculum. It can help you decide what to emphasise, and what to leave as challenges for the keen few.
That said, programming is still best door to enter the magical world of computer science. It gives us concrete and immediate experiences of the power and joy that can be had by creating something out of nothing. It is wonder-ful in very sense of the word, and lays the foundation for all else that comes afterwards.