Teaching high school students Computer Science (part 1)

My first day teaching an introductory course on Computer Science in Python

Posted on 2017-05-09

What I'm teaching

I'm teaching an introductory course to Computer Science and programming in Python 3.5. I called the course "Introduction to Computer Science with Python" (creative, I know). I intend to break up the course into 7 sessions spread out over May 2017 and early June, because my new position as a software developer at Parametric Solutions, Inc. starts in June.

Why I'm teaching

I'm teaching the course to high school students at Fairfield Warde High School, where I graduated from in May 2013. I took AP Computer Science in Java during my senior year and had a lot of difficulty staying motivated because the projects seemed very contrived and the learning material we used at the time was outdated by a few years so running code examples verbatim would lead to countless exceptions.

Going into college, I still felt like I was never taught to actually build software, that I was simply taught the syntax of a language and then was assumed to be an expert at software development, enough so that I could spend the rest of my college career learning theory but never having any code to show for it.

I wanted to make sure that younger students could have an easier transition to college than I had and were able to know how to find help and to learn how to learn. By feeling confident in being able to write software, they would then be better prepared to understand Computer Science theory and gain an appreciation for it as I had in the latter half of my college career.

How I'm teaching it

I wrote my own lessons on Google Docs to follow along with the exercises on LearnPython.org so that I could teach in my own words and try to make the lesson material as accessible as possible. I prefer to make my lessons in the spirit of "The Zen of Python":

Explicit rather than implicit.
Simple is better than complex.
...
Sparse is better than dense.
Readability counts.

At the same time, having well-documented exercises make it easier for students to get feedback on their learning such that they can know sooner whether or not to approach a problem differently than before.

At the end of the course, there will be two capstone projects: one where the user tracks the location of their cursor using PyAutoGUI, and another where they learn how to use OpenWeatherMap's API using Kenneth Reitz's Requests library.

On the first day, today, I'm teaching the basics of the Linux terminal (Bash), setting up our development environment, and writing the classic "Hello, World" program. On day one, they will sudo apt-get install python3-dev python3-pip and pip install virtualenv. They will use the Atom text editor to write their code and use the terminal to run it. Alternatively, they can use Gedit to write their code. This will prepare them to learn how to use Git in the future.

How I got the volunteer position

I looked through FWHS's faculty directory to find out if my former "Advanced Computer Tech" teacher was still teaching and how I could contact him. Unfortunately, that wasn't the case but I did find out that Mr. Casey, was the current "Advanced Computer Tech" teacher and I emailed him the same day.

I asked him if he were interested in me volunteer teaching a workshop on basic Computer Science and programming, to which he responded by asking if I were interested in teaching the class. Needless to say, I was excited. I always wanted to teach students what I wish I knew starting out as a CSE major in college.

First impressions

Today was my first setting foot in the A-wing of Fairfield Warde, where I spent most of my senior year, even after class had dismissed. I greeted Mr. Casey and handed out syllabi to all the students who ranged from sophomores to seniors.
I'll definitely see some of these students again if I offer to teach another workshop in the future.

Most of the students were beginners in regards to using Linux and had a bit of difficulty understanding the difference between relative paths and absolute paths but were eager to learn to use the Terminal anyway.

I'm optimistic that this course will go well nevertheless. They may not come out of the course as experts, but they'll have a taste of all the different things Computer Science has to offer if they want to know where to go after learning the basic Python syntax.