It's eleven years now since i started teaching game programming with Python to children - time for a summary of my experience.
Born 1970, I grow up with watching in awe those coin-operated arcade video games and i had an huge interest into first 8-bit home computers, like the Commodore 64. While i learned computer programming by myself (i had my first book about BASIC programming before i even owned a computer), producing a “classical” video game with moving sprites, sound effects, graphics, joystick control etc was not impossible but a very big task for a young hobby programmer, especially when using only a BASIC dialect and without diving into assembler language.
I discovered the programming language Python around 2006, while working in a big company as a Microsoft Visual Basic database programmer. I also discovered the python module Pygame around this time and I was instantly fascinated. It's so easy now to program all those good old games that i enjoyed during my youth! And i could not stop thinking about all the things that I could have done with this coding language as a young 13-year old boy…
I soon discovered that Python is not only very easy to learn (it took me two afternoons) but also an ideal starter language to teach coding.
Around 2006, I was reading countless articles about the free/libre open source Movement from Richard Stallmann, i used Linux at home and i had big fun uploading my first little Python/pygame Game into the internet, as free/libre open source software of course.
Looking back, i am neither terrible proud of the coding quality, nor of the game design… The title was “Tuxfighter”, it was inspired by “Asteroids” and the goal of the game was to steer a little penguin (Tux, the mascot of Linux) while fighting rectangular enemies and picking up Power-ups. One of the power-ups was in the form of a hemp plant, and it made the player loose the control over his bullets… i had big fun coding the bullets so that they fly around “stoned”, or “drunk”, in a very unpredictable way, sometimes stopping in mid-flight or even flying back to the player. So, technically, it was more a power-down than an power-up.
However, i discovered that at an internet forum dedicated to open-source games, fans were discussing my game. One guy was complaining about how i could use a hemp symbol as an power-up, and another guy was writing a response in my defense! I found myself endless fascinated by the fact that people who i have never seen, on a different continent and using a different language than me, were discussing my “art”.
I also got into contact with a guy who made the effort of writing an entry about my game on a website in Japan, and i was very moved by this fact.
I decided that it was time to quit my job and spend time writing a book about Python programming, aimed at young readers like my 13-year-old self.
I spontaneously booked a ticket to the Europython conference 2006 in Geneva (my first computer conference). At the conference i met many very friendly and cool programmers, among others Guido van Rossum, the inventor of Python himself. I felt that i had found my “tribe”.
A very valuable insight i got at this (and later) Europython conferences was that i could speak with authors of books about computer programming. I learned about the business model of book publishers and how it was (and mostly still is) not really compatible with the values of the free software movement.
Basically, if you want to release the whole content of your book under a free license, most book publishers don't see how they can make money out of it because their business model is based on restriction of access, not on spreading of information.
In the end i decided to put my whole "book" project on hold until i had really time for it. I uploaded my “work in progress” material under a free license into the internet and searched for other ways to make a living.
Since my student days, i had always worked as a freelance teacher for computer programs (mostly database and office software), usually for company clients. While looking for jobs, i stumbled upon an ad looking for “teaching coding to young children” in an after-school coding club. I liked the idea and got instantly hired. My first step was to ignore the official curriculum (teaching php) and instead started teaching Python. I made short tutorial videos were the children explained the how to code in Python, and the videos won a prize at Austria's national youth electronic festival, the Ars electronica. I was very proud and decided to continue this kind of work.
In 2008, i named my company “spielend-programmieren”, meaning “programming while playing” and moved my lessons into the office of my Dad, literally doing family business. In 2012, i gave up my last “office software” teaching job and concentrated on teaching children (and sometimes adults) how to code.
In my home town of Vienna, Austria, there was at this time no etablished after-shool coding club for children and i had only experience in teaching adults. I soon discovered that working with children was far more rewarding than working with adults: My (usually between 10 and 15 years old, and mostly male) students were visiting me not because some human resource department has sent them, but instead because they really wanted to learn. My students share my passion for video games and gaming, they are interested in the topic, creative and i often have to literally kick them out at the end of class because they are glued to the screens. But best of all, my students tend to be very loyal, often staying for several years.
At the beginning i saw the code-teaching-to-children as a side job, but it soon became clear to me that i wanted to do it full-time, as my other jobs were stealing my time and energy without giving back a fraction of the satisfaction i got from working with my young students. Also i grow up in a family business and enjoyed very much being self-employed and working without boss, teaching in the way i wanted.
With zero marketing budget, no job security and no business plan whatsoever other than “getting more customers” i had to make a few decisions about to run my business, aka, how to teach. Those decisions did not played out very well financially so far (i made more money when i was employed than i made as self-employed) but they reflect my philosophy and my values. There is no point in being your own boss when you end up doing following business ethics that you don't like. My decisions were:
Of course, technically, my student's parents pay for my teaching and are legally my customers, while my young students are only the consumers of a service i sell to their parents. But i was often enough in such a situation (as student and as teacher) and i never liked the feeling of it.
When i have a trial hour with a student, I teach them while their parents are in another room, so that I can get an idea of the motivation and capability of the student. When i find that the student is too young/uninterested or that my service is not really what the student needs/want, i refuse.
Also, i stay away from fear-based marketing that is so common in the whole education industry: To suggest parents that only by visiting (paid for) computer courses their offspring will have a good chance in tomorrows economy. Nobody can see the future, and while having good programming skills is a useful asset in the labor market now (and personally, i think it will also be a useful skill in the future), the situation can be different a decade in the future. Technology changes fast. I want students that share my love for programming, not students that share their parents fear of the future job market.
Most important, i discuss with my students directly what projects (usually games, sometimes apps or websites) they are interested in, so that i can teach them some necessary skills to realize this projects.
A side effect of “treating children as customers” is that I insist that the children pay me, cash, at the end of each lesson. And i make a big fuss if they discover at the end of the lesson that they forgot the money at home. Of course i could ask the parents to make a bank transfer for a month in advance, like every other sensible teaching organisation does. But i found out that having a cash-only policy is not only far more easier to discuss (“no more: The money must be on your account, i wired it yesterday!”) - either cash is on the hand, or it is not.
The real benefit is that my students understand very hands-on the value of lessons, and act completely different -that is, far more focused and serious- because they literally have to pay me directly after each lesson.
All my private and business computers run Linux, and i use for my work only free software. My only non-free software titles are a few commercial games on steam. I do this because i share Stallman's ideals that software (and, in a broader sense, information) should be free. This includes the freedom to study from source-code "how it is done", and to modify and re-use it. Teaching material should not be a secret, nor bundled with unfree-licenses, nor should it be stuck behind a paywall, accessible only for the privileged.
I do charge money for my teaching, but what my students pay for is my time. All my materials and code examples can be found on Github or other places in the internet. I do teach this values indirectly to my students. They see how i work, they use free(libre/open source) software for programming and working on my Linux computers, and they use the same tools and websites for coding that I use, 100% free/libre open source software.
My students come often directly from the (public) school to my classes, after spending 6 or more hours being lectured. The last thing they need is another guy with a blackboard telling them theoretical stuff.
While i still entertain every teachers dream of having “the perfect, well prepared lesson plan that only need to be executed” and from time to time try it out, the result is always the same: “No plan survives contact with reality”. What i do, because it works, is being generally as good prepared in as many different fields as i can.
Instead i find out what into what type of program (usually a specific kind of computer game) the student is sufficient interested in, i show him a suitable technology and help him to realize the project, with the aim of publishing it online. This style of teaching does not “scale” too well into bigger groups, i discovered that i can manage up to 5 students at the same time, each working on a different project. When i have bigger groups, the teaching becomes more streamlined (“lecture” style), usually i make then a skeleton template game and have everyone modify it according to their needs and abilities.
As a teacher, i must create an environment where meaningful teaching is possible. I see no no point in teaching vector mathematics if a student is unable to blow his nose, greet his neighbor or acts grossly disrespectful. Likewise, a certain amount of digital literacy is necessary in order to learn coding: Being able to type reasonable quickly (ideally, touch-typing without looking at the keyboard), being able to copy files and understand file extensions, being able to use an email address. Those are not fun topics to teach, but prerequisites for meaningful coding.
I learn something new from my students each day. Sometimes technically, because they show me some interesting website or software i was not aware of. But mostly socially, because the students learn indeed, but very seldom in the way i intended.
One insight i got over the years is that my students learn phenomenally good from each other, and often develop a joy for teaching each other. When i am very lucky, i have to explain (and code) a topic just once to an advanced student and the other students see that it works on his computer and copy the relevant code for their own programs. Unlucky for me, adapting the code snippet so that it works as intended is often left over to me.
An under-motivated student will never finish a project. But a motivated student can create very impressive deeds. I therefore encourage motivation over theoretical knowledge.
I follow with great interest the developments of the tech-learning industry and the corresponding conferences and TED-Talks. To just name 2 examples, i am a enthusiastic user of Khan-Academy and i go to Scratch-conferences, to meet awesome educators and coders. In theory, learning to code should be an ideal topic for all kind of online-based teaching methods. In practice (and lucky for my business model) i discover that my students like to come to me to learn coding, despite having complete tutorials, educational websites and countless HOWTO videos available online. I guess that most humans of all ages love to learn and be creative together with others and therefore prefer “real teacher” settings over online courses.
For the various online-learning websites (like code academy) that frequently ask me to put python courses online, i have usually one single question: Is the content free (creative-commons cc-by or cc-by-sa) licensed? Depending on the answer, i am either very interested in them, or not at all.
Working with children is very rewarding for the unexpected effects i sometimes discover: For example, i found out that a stuffed toy snake (to symbolize the Python programming language) can increase the attention span and concentration of my students very much: