I love learning. I love technology. I hated CS class.
Many people, voluntarily or by virtue of volatile memory, seem to conveniently forget their high school/middle school years. I didn't.
Here's what I learned. What worked, what didn't.
Teach students to learn, not to memorize
I cannot emphasize enough how disastrously the "memorize this and take a test" model fails when teaching technology. There is no amount of academic preparation, no number of classes, nor certification in the world that can cover 10% of the information a student will need to know should they become a developer, sysadmin, or engineer.
Don't test them on what they remember. It's unrealistic, unproductive, and incentivizes cheating.
Let's address the bit about cheating, since it's the clickbait portion of the heading.
Incentivizes cheating? What!?
News flash: If you're using a commercial LMS, the exact answers to every question on every test and every assignment are already out there on the internet, easily discoverable with a quick search. Quizlet may have been invented for preparation and studying; in reality, it's just a database for prefabricated answers.
Even worse, by testing them on memorization, you are also subconsciously teaching them that "professionals just know", an inflexible mindset which discourages growth and innovation. It makes students feel as if they are somehow lesser for not knowing something yet; that they must be hopelessly behind the people who invented the technology they're learning.
So what's the alternative? I have no choice but to give them tests in my district!
Structure your assessments around your students' abilities in finding information. Make your challenges revolve around a student's information literacy skills, rather than their test-time proficiency.
Bad test question:
Why won't the code below compile?
Good test question:
Using a resource of your choice, explain why the code below will fail to compile. Cite any log files, webpages, or other data sources used to find your answer.
Stop teaching AP classes
My government teacher outright refused to teach AP because he wanted to actually teach government. He was dead on.
AP classes religiously do everything I'm warning you against in this article. They teach only to a test, abstracting away the real development process to a set of rigid concepts that are already outdated. My AP Computer Science class, in 2018, was using Java 6. Sigh.
In short: AP classes are for building CollegeBoard (not college) resumes - and they are a poor way of building them at that. Screw them.
Instead of having your students struggle through these classes, help them build something substantive. An application, an API, a bot - anything to teach them the process of starting and finishing a project.
Do this right, and it'll stand out for them in a way another AP checkmark never could.
Here's the kicker - this only works if you show it off! Setup a website to document what your class has done. This doesn't have to be expensive - you can even get free hosting from GitHub Pages!
Encourage them to break things
For you students to be successful, you must instill in them a sense of self-confidence that is unobtainable if they're constantly worried about messing things up. Setup an environment where they can easily revert their code to the last known-good state. There are many ways to do this; in 2019, I recommend teaching some basic
git proficiency, since that's what most developers use for version control.
Harness their hacking
Whatever your abilities are, they simply cannot compare to the sheer intellectual capacity of a classroom full of rambunctious, excited kids. They will inevitably begin to wonder what else their newfound programming powers can do. Channelling this in a positive direction is of the utmost importance!
Incentivize them to share their work with the class. Make it a source of pride, not shame, if a student figures out how to escalate privileges on their workstation. Set a procedure for responsibly disclosing bugs/security vulnerabilities, and incentivize them to follow it. Setup a "Snacks for Hacks" program with food rewards for responsible disclosures. It's a great opportunity to introduce them to the concept of bug bounties - programs companies maintain to compensate indie security researchers for their efforts.
No joke - give your students a line of communication with your IT department! Your school's security will improve, and there will be fewer trips to the principal's office.
Accessibility over Attentiveness
Don't make your students code on a whiteboard.
Seriously. Stop. You're closing invisible doors.
The educational value of manually finding the missing semicolon on a whiteboard pales in comparison to the accessibility loss of students who will be unable to participate.
Some folks (me) literally can't distinguish the line with the semicolon from the line without it.
Others might be able to, but only with such difficulty that it eviscerates their learning experience. A few might speak up about this, but many more won't, for fear of having their issue dismissed as laziness or incompetence.
Personally, I need colorful contrast to see the details. Ask me to debug your code without syntax highlighting, and I'll miss that curly bracket 9/10 times. That's why I have a theme for my text editor that turns some elements purple, others red, and others green.
Just remember - no matter how good your tool is - it won't work for everyone. The next kid you see might just look at my setup and cry because they're colorblind. Let them tinker and customize their setup to suit their specific needs. It's not a waste of time.
Make your tools free (not just "open source")
This last section isn't just for teachers; it's for anyone building tools for educational use. It is to your benefit to make your software "Free as in Free Speech", not just "Free as in Free (root)Beer". Release your tools under a standard license that does not restrict the your code's usage by user or entity.
If you're worried about a greedy, unscrupulous actor using your source code - stop. Assuming you're already releasing your code on the internet - which you should be - someone has invariably ignored your license and used it in their project with no attribution or compensation. It happens. Don't sweat it.
If you license your code as truly free software, under a copy-left license like the GPL, you'll get pull requests from people invested in your project for monetary reasons. Chances are these people will put in far more effort to improving your code than those who are just there to play with it as a novelty.
- Your students are people. They have the intelligence of adults minus the boundaries and experience.
- Teach them to learn, not to memorize.
- AP = Academic Poison
- Move fast and break things.
- Your students will outsmart you. Let them.
- There are no rules. Just moral guidelines.
- Accessibility over Attentiveness.
- Free your software.