Teaching coding to programming novices

18 Nov 2016

There is hardly a teaching experience I enjoy more than teaching programming to complete novices. Sharing my knowledge to allow others to do the same thing I enjoy doing is certainly a part of what makes it so special. However, there is more to it than sharing of knowledge and enthusiasm that surrounds it: for me, it is inexplicably satisfying to observe the metamorphosis of an average computer user into a powerful creator called a programmer.

Last week, together with a group of five mentors, two instructors, 30 motivated students and the support from my university and Google for Education program, I had the pleasure of organizing a programming workshop for complete beginners. I have organized a similar workshop in January this year and the feedback was useful in determining what teaching practices work the best: participants loved high mentor-to-student ratio (1:5), online slides, hands-on projects and Software Carpentry-style red/green sticky notes. These practices proved to be useful once again!

Participants were students in majors who do not have an easy access to programming education (e.g. Arts, Environment, Applied Health Sciences, Biology etc.). Usually, it is the upper-year undergraduates who notice that programming is a skill useful for their studies (and future, whatever it might be), but their curriculum leaves little leeway for learning how to code. Even if they managed to attend a CS course, it might be hard to follow as such courses usually assume some CS background and familiarity with how computers work. The goal of this workshop was to introduce programming to students who otherwise wouldn’t have an opportunity to do so and give them a nudge in the right direction so they feel more confident in taking CS courses in the future.

The workshop was very intense, covering Friday evening, Saturday and Sunday from 10am to 3pm. Friday was reserved for installing Anaconda, learning simple shell navigation, learning programming basics such as variables, basic data types and demistifying the role of the “black-screen” as seen in every single “hacking” scene in every TV show ever (ok, fine, there are some exceptions). Also, the goal was to familiarize ourselves with IPython and Sublime Text (a combo which has worked pretty well) and explore different kinds of errors Python might be throwing. Morning sessions on Saturday covered flow control, conditionals, lists and dictionaries, with afternoon dedicated to a project designing a quiz. On Sunday, we taught functions, Numpy and Matplotlib with afternoon reserved for climate data analysis project. Lots of things in such a short period of time, but with the right level of focus, tasty lunches and coffee breaks, we managed to get the maximum out of it. In the future, we will dedicate more time to exercises and will drop Python dictionaries which turned out to be confusing for beginners (and nearly to impossible to understand in conjunction with for loops).

According to the feedback collected in the post-workshop survey, all participants felt more confident in taking introductory CS courses after participating in the workshop. Over 80% found programming less intimidating than before the workshop and we scared off 8% who said they find it somewhat more intimidating than before the workshop (I’m quite sure it’s the for loops!). Overall, our lectures, projects, instructors, mentors, curriculum and the diversity in the classroom was rated mostly excellent and good and everyone would recommend the workshop to others. Plenty of reasons to be happy :)

Personally, I was astonished to receive an email from a participant who created a small Python script that scans a folder for pdf files, looks for a particular word in each of them and merges all pages containing that word in a single pdf file. Starting with lectures which explain why is a=3 a legit thing to do, but 3=a is not, and finishing with a script like this is a gigantic step in the universe of coding. Many students said they wished the workshop to be longer because there is just so much awesome stuff to learn. Because I agree with that, my future plans include extending the workshop for a few hours (to start with), and continuing to keep entertaining curious minds such as this one (quote from a participant):

My favorite part of the workshop was the fact that it opened up a whole new world for me. For someone who had never coded before it was an excellent introductory experience. Perhaps it would be difficult for people to think one weekend can change a persons life, but for a naturally curious person such as my self it has. I never thought it would happen, but lately, anytime I hear about a cool new feature or even when I am on the internet, my mind always asks: “Oh I wonder what the code for this is?”