Monthly Archives: June 2016

New Software Engineering Course

[Updated 6/7/2016, 8:08 PM: Added additional security and web app concepts based on feedback.]

After a few years of effort, I’m thrilled to announce that my school district will be offering a new course in the fall of 2017: Software Engineering! As I will explain below, I’m also excited to ask for your ideas.

Course Description

Software Engineering is a weighted, two-semester course for students that have completed AP Computer Science. The course starts with a core set of software engineering topics (e.g., software engineering process; data structures; technology, society, and ethics) followed by a series of software topics selected by students that are aligned to students’ products (e.g., multithreading, networking, security, web apps, embedded systems, mobile apps). After gaining the necessary background knowledge, small groups of students develop a software product as they iterate through software engineering development cycles to produce a software product. Prerequisites: successful completion of AP Computer Science and teacher recommendation.


We have started to work on the curriculum this summer. The plan is for each student in the class to be provided with their own Raspberry Pi. This sidesteps any issues with student not having the necessary permissions on the computers in the lab and enables students to work on their products outside of class. The software engineering process unit will introduce Agile methodologies in the context of a class project, which will also introduce the students to their Raspberry Pi as they develop an audio server. The data structures unit will be significant and fairly straightforward to design. Concepts will include linked lists, queues, stacks, sets, maps, binary trees, hashes, and hash map. The technology, society, and ethics unit will be similar to what we do in AP Computer Science but be concentrated to enable groups of students to focus on a specific topic in more depth. All students will complete these three units.

The remainder of the first semester will be different for each student group. Each group will decide on a product that they want to develop in the second semester. Based on their product, they will complete various modules (probably two) to gain the necessary background knowledge. Due to my background, I’m comfortable designing the networking and multithreading units. However, for the other units, I’m very interested in your ideas as I fear my expertise is either lacking (security, web apps) or outdated (embedded systems, mobile apps). Below, I’ll share some rough ideas for each unit.


Potential topics: cryptography (history, SSL, encryption), authentication (users, servers, certificate authorities), authorization, session management, firewalling stored user data, attack vectors (hijacking sessions, SQL injections, sanitizing user input)

Questions: Cybersecurity is super popular, but so many of the available resources seem targeted at a much more introductory and basic level than what would be challenging for a post-AP class. What topics would be appropriate for these students? What resources are available? What can their explore with their Raspberry Pi?

Web Apps

Potential topics: Javascript, JQuery, MongoDB, Meteor, Bootstrap, PHP, Laravel, open APIs, Chrome extensions and apps

Questions: The last web app I developed was in Perl. What are the best technologies for students to be learning now? I’m excited to learn, and I want to make sure this unit is relevant. What resources are available?

Embedded Systems

Potential topics: bit-wise operations, I/O, interrupts, buffering, ADC, SPI

Questions: How close to the metal can you get on a Raspberry Pi? Which embedded concepts are most prevalent in today’s products? What resources are available?

Mobile Apps

Potential topics: iOS and Android apps

Questions: While Apple and Google seem to have pretty good resources, are there better resources available? Anything else I should consider for this unit?

Group Product

I’m really looking forward to students working in groups for an extended period of time to develop an authentic product. In the context of an entire semester, groups will have time to complete multiple iterations. Ideally, I would love to partner each group with a stakeholder in the community that would benefit from a software product. I have some leads, and if you have any others, please let me know!

Please comment or strike up a conversation on Twitter if you have any ideas.

2015 Summer Reading List

As I was preparing my stack of books for this summer, I realized that I never published my summer 2015 books read. It wasn’t a great summer of reading, but there are a several good books that I want to share.

what if? Serious Scientific Answers to Absurd Hypothetical Questions by Randall Munroe

This should be required reading for science teachers. It is an inspiring example of how to present science in incredibly engaging, although absurd, contexts. I love xkcd and had the pleasure of hearing Munroe talk on his book tour for Thing Explainer which I hope to finish this summer. I include xkcd comics in my slide notes and link to the what if? blog as extension readings in each unit. Sometimes when an AP Physics 2 student is stuck thinking about capstone ideas, I encourage them to create their own “what if?” capstone.

9 Algorithms that Changed the Future by John McCormick

This was a very accessible book. It would be a good summer read for incoming AP Computer Science students. If I ever have to assign summer work, I would consider assigning this book. I may draw from it for the new Software Engineering course that I’m designing this summer.

The Code Book – The Science of Secrecy from Ancient Egypt to Quantum Cryptogrpahy by Simon Singh

This book was fantastic – computer science, history of science, spy craft. I’ve gifted this book at least three times in the past year to family and students, and I’ve recommended it to several others. Singh includes enough mathematics to make it interesting but complete understanding is not required to appreciate the book.

The Housekeeper and the Professor by Yōko Ogawa

A beautiful book. While there is some math, it should be read for the incredible relationship between the professor and his housekeeper. I recommended this book be added to my school’s library.

All the Light We Cannot See by Anthony Doerr

My mom gave me this book and encouraged me to enjoy reading something not related to teaching, physics, or computer science. I’m glad I did. You all are probably familiar with this book; it did win the Pulitzer Prize after all.

Anathem by Neal Stephenson

I am a huge fan of Stephenson. While Snow Crash and The Diamond Age are monumental works because they defined the cyberpunk genre, and the Baroque Cycle is my favorite collection of historical fiction, Anathem is Stephenson’s greatest work. I actually listened to this entire book on CDs (28 of them while driving all over!). Afterward, I bought the book to share with my son and re-read various sections.

[Update 29/6/2016, 11:50 AM] I forgot a book!

A More Beautiful Question: The Power of Inquiry to Spark Breakthrough Ideas by Warren Berger.

I agree with the premise behind this book: questioning is powerful. For me, many of the examples cited were familiar, and, therefore, I found the book not as groundbreaking as I had hoped. However, I know of others who read it and found it quite insightful. If you are a parent, teacher, or business person, I would recommend checking it out from your local library.