Programming Options while Remote Learning

Given the uncertainty of the structure of high school this fall, I’ve been exploring various options my students in AP Computer Science A if they are learning outside of the classroom without access to our desktops. In the classroom, APCSA students use BlueJ and GitHub throughout the year and leverage Swing and third-party frameworks (i.e., media computation). All students have chromebooks and our district works with families if they don’t have wifi at home. During eLearning and Remote Learning during this past spring semester, we used repl.it as our programming environment. This sufficed given the programming activities and labs at that point in the semester, but it wasn’t ideal. It remains an option for the fall, and I’ll expand upon it later. The options that I explored may not be a good fit for your students, but I hope others find this information helpful.

VS Code

Most of my Software Engineering students use VS Code. I was able to get it running on our chromebooks (Acer Chromebook with x86_64 architecture).

Installation

  • enable Linux via Chromebook Settings app
  • download VS Code
  • in the Chrome OS Files app, drag VS Code from the Downloads folder to the “Linux Files” folder.
  • Install VS Code from the Linux VM by running:
    • sudo apt install ./code_1.45.1-1589445302_amd64.deb
  • VS Code will now be available from the App Launcher
  • install Java Extension Pack in VS Code
    • disable IntelliSense support
    • disable Maven support
  • use JDK 11
    • add the following to /etc/apt/sources.list:
      • deb http://deb.debian.org/debian stretch-backports main
    • sudo apt update
    • sudo apt install openjdk-11-jdk
  • configure GitHub
    • install GitHub Pull Request and Issues VS Code extension
    • set user name and email address from terminal
      • git config --global user.name “<name>"
      • git config --global user.email <email>
    • clone a repository
    • resolve issues authenticating
      • sudo apt install gnome-keyring
      • specify a password for the keychain

Configuration

  • With BlueJ, jar files are automatically included in a project if they reside in a “+libs” folder. VS Code has a similar feature if the jar files are in a “lib” folder.
  • With BlueJ, one can directly run any static method in any class. VS Code expects a standard main method to be defined.

Issues

  • initial authorization of VS Code to use GitHub fails
    • second authorization of VS Code to use GitHub works if you copy and paste the authentication URL back into VS Code
  • key chain didn’t work on a clean install, but did after a clean restart

Tradeoffs

Pros

  • GitHub accessible
  • debugger

Cons

  • more sophisticated an IDE than desired for APCSA students
  • requires enabling Linux on chromebook

BlueJ

APCSA students have always used BlueJ as their IDE. It was a good balance of features and simplicity as it is designed for educational settings.

Installation

  • enable Linux via Chromebook Settings app
  • install BlueJ
    • note that this is not the latest version of BlueJ as that requires Buster which is not running on our chromebooks
  • install OpenJDK and JFX
    • sudo apt-get install openjdk-8-jdk
    • sudo apt-get install libopenjfx-java
  • install BlueJ
    • sudo dpkg -i BlueJ-linux-414.deb
  • BlueJ will now be available from the App Launcher

Issues (updated 16jul2020)

  • windows are often opened in a default position such that its upper-left corner is positioned at the center of the screen which is annoying
  • windows are often a single pixel which makes BlueJ unusable
    • workaround from BlueJ folks:
      • sudo apt-get install xdotool
      • xdotool search —class “BlueJ” windowsize %@ 800 600
      • incorporate the use of xdotool into a daemon that constantly monitors new BlueJ windows and resizes them

Tradeoffs (updated 16jul2020)

Pros

  • IDE designed for education
  • debugger
  • GitHub support (integration via Team feature expects a one-to-one mapping between BlueJ projects and repositories, which is different than our model, but doable)

Cons

  • requires enabling Linux on chromebook

repl.it

Students who have taken Computer Programming 1 and 2 before APCSA are familiar with repl.it as it is used extensively in those classes. As mentioned above, APCSA students used repl.it last spring during Remote Learning. However, I wanted a better experience if we use repl.it again this fall.

The GitHub and repl.it integration works best when the repository contains a single project. Historically, we have created a repository for each unit and that repository contains multiple practice programming projects and a summative lab. Forcing our repository model into repl.it requires some additional configuration.

Configuration

  • GitHub Classroom now supports online IDEs (e.g., repl.it)
    • however, Classroom doesn’t support Java Swing at the moment
    • so, create the .replit file explicitly and add to the repo
    • still select repl.it as the online IDE when creating the Classroom assignment but don’t specify a language or a run command
  • example .replit file
    • language = "java_swing"
    • run = "javac -classpath ./TurtleDemo:./TurtleDemo/+libs/* ./TurtleDemo/TurtleDemo.java; java -classpath ./TurtleDemo:./TurtleDemo/+libs/* TurtleDemo"
    • # specify additional run commands for each project but have them commented out
    • # run = "javac -classpath ./ClassNotes ./ClassNotes/SyntaxErrors.java; java -classpath ./ClassNotes SyntaxErrors"
    • [...]
    • # run = "javac -classpath ./TurtleLab:./TurtleLab/+libs/* ./TurtleLab/TurtleLab.java; java -classpath ./TurtleLab:./TurtleLab/+libs/* TurtleLab"

Tradeoffs

Pros

  • GitHub support

Cons

  • students have to edit .replit file when switching between activities
  • no debugger

Which option will we pursue if we end up in a remote learning scenario? I’m not entirely sure. If I can convince our IT department to enable Linux on the chromebooks of those students enrolled in APCSA (quite likely as they are incredibly supportive), I think we will use BlueJ for APCSA and VS Code for Software Engineering. I need to further test the viability of a daemon that handles the BlueJ window size issue. (updated 16jul2020)

While exploring these options, I realized that there is an opportunity here even if students are in class with our desktops. While the programming activities and labs are designed so that everyone can complete them during class, some students, for a variety of reasons, need time outside of class. Enabling one or more of these options would provide all students the flexibility to program on their chromebook instead of relying on a Windows/macOS/Linux computer at home or working in the classroom before school.

Physical Representations of Variables, Objects, and References in APCSA

Historically, my AP Computer Science A students have struggled with the concept that the value of a variable in Java can be a reference to an object. Actually, even before I started teaching APCSA, students would find me the week of the AP exam and ask for help on this concept. Over the years, I’ve improved both my instruction and student understanding in several ways. I’ve utilized tools like BlueJ’s debugger and the Java Visualizer to help students see the relationship between these concepts. I’ve created practice programming activities that create the cognitive dissonance necessary to spur reconsideration of understanding. I’ve woven these concepts throughout the curriculum to provide students with multiple and increasing complex opportunities to explore these relationships. Finally, I’ve tried to keep my language purposeful, precise, and consistent as, too often, we refer to variables as if they are objects. Despite these actions, students still struggled with these concepts. Last year, I had a new idea, and this year I implemented it.

I decided that these abstract concepts are further abstracted by the computer, and that’s too much abstraction for students at this point. Therefore, I removed the computer, and we explored these concepts via an extended analogy in a CS Unplugged manner:

  • variables are represented by small sticky notes
  • objects are represented by full sheets of paper
  • full sheets of paper are numbered in their upper-right corner; these numbers are references

IMG 9412

Variables When a variable is declared, a new small sticky note is used and the variable’s name is written on the top of the sticky note. The value of the variable is written below the name. There isn’t a lot of room on a small sticky note. There’s only enough room for values that don’t take too much space to store such as primitive values and references to objects. You cannot write all of the properties of a Turtle object on a small sticky note! When the value of a variable changes, the previous value is crossed off, and the new value is written.

Objects When a new object is created, a new sheet of paper is used. To keep track of all the sheets of paper, they are numbered in their upper-right corners. The name of the class of the object is written at the top of the sheet. The names and values of the object’s properties are written below the class name. There is plenty of room on a full sheet of paper to write all the properties of a Turtle object. As the value of an object’s property is changed, the previous value is crossed off, and the new value is written.

References References are the numbers on the upper-right corner of the sheets of paper. They are used to find the desired sheet of paper from among all the sheets of paper. When a variable is assigned the reference to a newly created object, the value of the variable is the number on the upper-right corner of the new sheet of paper for that object.

Methods When a method is invoked on a variable that references an object, the value of the variable is used to find the desired sheet of paper. Once the sheet of paper is found, the method can operate on the object by potentially changing the object’s properties by updating a value on the sheet of paper or returning a value.

In one lesson, I modeled this extended analogy for the class in the context of a simple example involving two Turtle objects, two variables that reference Turtle objets (turtle1, turtle2), and two variables of type int (number1, number2). In the next lesson, pairs of students, with my assistance, traced through a couple of other examples using small sticky notes and sheets of paper.

Based on a short formative assessment, student understanding appears to be improved compared to previous years. I will continue to use this extended analogy as we revisit these concepts throughout the year. I may extend this analogy when students start implementing their own methods to include a paper form that represents a method invocation. Values are copied to complete the form. When the form is returned after the method returns, the returned value is copied as well.

If you have any feedback, please share!

Project-Based Learning in New Software Engineering Course

A couple years ago, I wrote about a new course that would be offered in the 2017-2018 school year, Software Engineering. Last school year, the course was a great success, although there are many refinements I’m preparing for this upcoming school year. The second semester of the course is described as “small groups of students develop a software product as they iterate through software engineering development cycles to produce a software product”. Other teachers expressed the most interest in how to facilitate teams of students managing a semester-long project and how to assess them throughout the semester. Until last semester, I had never done this as a teacher. Fortunately, I remembered that I did this every day in my previous career as a software engineer.

One of my roles in my previous career was that of a methodologist with a specific focus on Agile Methodologies. After a review of the current state of Agile Methodologies, I decided that Scrum would be a good fit for my students. None of these students have any experience with Agile Software Development, and few have worked as part of a team on a substantial project. Scrum provided sufficient structure while maintaining the lightness appropriate for small teams. The activities in each sprint provide the opportunities for everything that is needed in project-based learning: planning, review, and reflection. I attempted to fulfill the role of Scrum Master. Each team had a product owner who was external to the class.

If you are interesting in a succinct overview of Scrum, I highly recommend the book, Scrum: A Breathtakingly Brief and Agile Introduction by Chris Sims and Hillary Louise Johnson. (If you want more, their book The Elements of Scrum is also excellent if the first book leaves you wanting more.)

I scheduled the teams into four, staggered, 4-week-long sprints. While all teams started and ended their project based on the start and end of the semester, the first and last sprint for each team were of varying length such that I could facilitate the activities with each team during class.

The key activity in Scrum is the Daily Scrum or stand-up meeting. Teams would hold their Daily Scrum twice a week. Having a four-week sprint seems long, and holding a Daily Scrum twice a week seems infrequent, but these teams aren’t developing software as a full-time job; they are in class for 50 minutes a day. At the beginning of the semester, I would facilitate every Daily Scrum meeting in my role as Scrum Master. Soon students became adapt and comfortable, and teams held their Daily Scrums while I observed from afar.

We focused on four activities in each sprint: Sprint Planning, Story Time, Sprint Review, and Retrospective. For each of these, the team would assign a student responsible for facilitating the activity, capturing the work, and sharing it with the team. With a team of four students and four sprints, each student would facilitate each of the four activities throughout the semester. The student facilitating the activity was assessed based on the student’s effectiveness in facilitating the activity, their demonstrated understanding of the activity, and the quality of the submitted document.

Repeated feedback is essential for both project-based learning and software development. Teams would receive feedback from their product owner during each sprint review (and more often as needed). Teams would receive feedback from me and each other during each retrospective.

In addition to these standard Scrum activities, I added an additional activity at the end of each sprint, a personal retrospective. Each student would evaluate themselves based on their role as a Scrum Team Member, reflect on the personal goal they set in the previous sprint, and set a new personal goal for the next sprint. Based on student feedback, for the upcoming school year, I will also have students evaluate their teammates.

At the end of the semester, we hold a Demo Event attended by all the students, their product owners, and other stakeholders. Each team presents their product in a modified version of the “3-in-5” presentation format. After the Demo Event, each student completes a final retrospective reflecting on the entire semester.

This structure worked well for my students and their projects last semester, and we will use the same structure next year with some refinements.

One final note – Scrum is used for all kinds of projects; not just software projects. After my experience last semester, I would encourage teachers to consider Scrum as a tool to facilitate any project-based learning of a significant duration.

Questions? Comments? Please comment here or each out to me on Twitter.

Contextual Feedback Using GitHub Pull Requests

After reading @dondi’s workflow for using pull requests to provide feedback to students, I wanted to try it this semester. I wasn’t exactly sure what steps were involved, but I found a workflow that worked for me and I wanted to share it. I decided that a screencast would be an easier way to illustrate the steps rather than trying to type every step.

In general, the key is to edit one of the student’s files (the edit is simply to provide an opportunity to comment in the pull request) so a branch and pull request can be created. At this point, comments can be left where each change was made.

In the past, I’ve provided feedback as comments via Canvas’ SpeedGrader. This new approach is much better in that the code on which I’m providing feedback is adjacent to the specific comment. Once students see that the assignment is marked complete in Canvas, they check the “feedback” pull request to review my comments. If they have questions or if they have answers to questions that I’ve asked, they can continue this conversation in the pull request. While this isn’t a traditional use for pull requests, it works well and it’s good for students to be familiar with participating in conversations for pull requests.

Please comment if you have any suggestions to improve this workflow or if you have any questions!

Preparing for Year 2 of GitHub Classroom

I’ve used GitHub with my AP Computer Science students for a couple of years, and last year I used GitHub Classroom for the first time. GitHub Classroom definitely made version control more accessible to my students. @mozzadrella wrote about my approach with my students in her Teacher Spotlight series.

As I prepare for the next school year and year 2 of GitHub Classroom, I wanted to make sure that I followed the best practices. For example, I read that there should be a one-to-one mapping between organizations and Classrooms. So, I’ve been reading the GitHub Education Community and playing around. Today, I successfully made it through preparing for the first unit of the upcoming school year. There are a series of steps:

  1. Create a new organization for the upcoming school year (NNHSAPCS201718 for my AP Computer Science class). I also created a new organization for the entire computer science department at my school (NNHSComputerScience). This organization will not be shared by students and will contain starter code repositories, old assignments, and sample solutions for teachers to reference. Previously, I was using the same organization that I used with GitHub Classroom last year.

  2. Request that the new organization be upgraded to have free unlimited private repositories. My request was approved in minutes!

  3. Create a new GitHub Classroom associated with the new organization for the upcoming school year.

  4. (Optional) Transfer the repositories from last year’s GitHub Classroom organization into the new department organization. I will use this organization indefinitely and want everything sourced from here.

  5. Make any changes to the repository on which your first Classroom assignment will be based.

  6. Push the repository from the department organization to the organization for the upcoming school year. (This also pushed the branches. Is there a way only to push the master branch?)

  7. Squash commits for the repository in the organization for the upcoming school year. In the interactive mode for rebase, leave the first commit as pick and change the rest from pick to squash. Then specify a single comment (e.g., “prepared for 2017-2018 school year”).

    git rebase --interactive --root
    
    git push --force

  8. Create a new GitHub Classroom assignment based on the repository in the new organization for the upcoming school year.

  9. Repeat 4-8 for each repository (e.g., unit).

I am not sure if this actually follows best practices, but it seems pretty good so far and is based on the comments of others with more familiarity with GitHub and git than I.

If you have any suggested improvements or questions, please comment!

Polar Bears Dice Activity in AP Computer Science

A few of years ago, computers weren’t ready for AP Computer Science the first day of school. So, on the first day of class, I resurrected an opening-day activity I had used in Physics: the Polar Bears around an Ice Hold Puzzle. There are a lot of similarity between my physics and computer science classes; so, I thought the activity would be a good fit.

dice

I was surprised that not only was the activity a good fit, it was more successful in the context of computer science than it was in physics. I’ve done it every year since, even as the computers are working on the first day.

Our discussion after everyone solved the puzzle focused on how this activity was an analogy for how our class will solve computer science challenges throughout the year:

  • You may feel frustrated as you try to figure computer science concepts and challenges out. That’s okay.
  • Computer science concepts and challenges are hard to understand until you know the “rules of the game.”
  • But, once you discover the rules, computer science concepts and challenges often seems easy and you may be surprised that others don’t understand.
  • However, remember that you didn’t always understand.
  • When you discover the rules and understand without someone just telling you the “answer”, you are excited.
  • The journey to understanding is very important. So, no one is going to tell you the answer, but we’re all here to support each other on our journeys.
  • Being told the “answer” at most gives you one answer that you didn’t know.
  • Learning to think critically and arrive at the answer with support develops a skill that you will use to find many answers.
  • Students who solve the challenge should offer suggestions as to how to reframe the game that helped others solve the problem without directly telling them the answer.

The reason that this activity worked even better in the context of computer science is that it also serves as an excellent example of best practices for algorithm design and debugging. As we continued to try and solve the puzzle, students introduced several important ideas:

  • if you just keep guessing, you may never solve the puzzle
  • reduce the scope of the problem (roll three dice instead of six)
  • test special cases (make all dice show five)
  • change a variable and see the effect (change one die from a five to a one).

I still end the activity by “assigning” grades based on how quickly a student solved the puzzle as described in the original post.

It was a great first day, and we didn’t spend any time on the computers!

Twitter Mapping Lab

Background

For the past four years, we’ve done a Game of Life lab as part of the Decisions and Loops unit in AP Computer Science. I love that lab for many reasons. However, after four years and not using GridWorld anywhere else in the curriculum, I’ve decided it was time for a change. I’ve wanted to incorporate data analytics and visualization into a lab. After some research and ideas from a couple of labs developed by others, I’m excited to try a new lab this year: Twitter Mapping.

Introduction

From what I provide students:

Your application will allow the user to search Twitter for a particular word or phrase in tweets located in each of the 50 US states and then display on a map of the US the degree of positive or negative sentiment associated with that search term in each state. For example, if the search term is coding, the following map may be displayed.

Twitter Data Visualization

  • This lab has several goals beyond the immediate concepts of decisions, loops, and unit tests in this unit:

  • Exposure to data analytics. In this lab you will search a large data set (tweets on Twitter) and analyze that data to derive a new understanding (the sentiment of tweets containing a given keyword in each of the 50 US states).

  • Experience using an API (Application Programming Interface) within the context of an unfamiliar software application. In this lab, you will use the Twitter4J API to access Twitter and write code within the partially implemented Twitter Mapping Lab application.

  • Exposure to data visualization. In this lab you will visually represent the average sentiment in a map of the 50 US states.

Details

Feel free to read the entire lab document and check out the GitHub repository with the starter code. If you would like a sample solution, please contact me.

Credits

Electronic Lab Portfolios Aligned to AP Physics Science Practices

*[Updated 15/7/2016, 10:54 PM: added links to two student lab portfolios.]*

As I mentioned briefly in [my reflection](https://pedagoguepadawan.net/435/ap-physics-2-reflection/) of the 2014-2015 school year, this past year, students created electronic lab portfolios for AP Physics 2. In summary:

* many students demonstrated deeper metacognition than I have ever observed
* several students struggled and their portfolios were incomplete
* providing feedback and scoring consumed a huge amount of my time
* structural changes made in the spring semester helped considerably

Structure
—-

I was inspired to have students create electronic lab portfolios based on [Chris Ludwig’s work](http://see.ludwig.lajuntaschools.org/?p=1197) and his presentation and our discussion at NSTA last year.

Before the start of the school year, using [siteMaestro](https://sites.google.com/a/newvisions.org/scripts_resources/add-ons/sitemaestro), I created a Google Site for each student based on [a template](https://sites.google.com/a/naperville203.org/nnhsapp2portfolio/) that I created. I made both myself and the student owner of the site and kept the site otherwise private. The template consisted of two key portions of the site: a Lab Notebook, which provides a chronologically accounting of all labs; and a Lab Portfolio, which is the best representation of the student’s performance. I [shared a document](https://docs.google.com/document/d/19aUFLSk93LIJUuKWwJh1IHHNDFUDt8U4QMtcfMImI1k/edit) with the students that explained the purpose and distinction between the Lab Notebook and Lab Portfolio.

The lab portfolios were structured around the [seven AP Physics Science Practices.](https://docs.google.com/document/d/1bcIO-B8RT73DM99zMC7R53SstuWF-MjrPz3OhAUdWG0/edit) I wanted students to evaluate and choose their best work that demonstrated their performance of each Science Practice. I also wanted the most critical and significant labs to be included; so, [some labs were required](https://docs.google.com/document/d/1bcIO-B8RT73DM99zMC7R53SstuWF-MjrPz3OhAUdWG0/edit#bookmark=id.u7kv4o1dcpux) to be in the lab portfolio. In the fall semester, I required that each student publishes at least two examples of their demonstration of each of the seven Science Practices.

I wanted students to think more deeply about the labs then they had in the past, and I didn’t want the lab portfolio to just be a collection of labs. So, in addition to the necessary lab report to demonstrate a given Science Practice, students also had to write a paragraph in which they reflected on why this lab was an excellent demonstration of their performance on the specific Science Practice.

The lab portfolio comprised 40% of the coursework grade for each semester. For the fall semester, the lab portfolio was scored at the end of the semester. I provide a few formal checkpoints throughout the fall semester where students would submit their portfolio (just a link to their site) and I would provide feedback on their labs and paragraphs.

Fall Semester
—-

Many students wrote excellent paragraphs demonstrating a deeper understanding of Science Practices than anything I had previously read. Other students really struggled to distinguish between writing a lab report and writing a paragraph that provided evidence that they had performed a given Science Practice. I did [create an example](https://sites.google.com/a/naperville203.org/nnhsapp2portfolio/lab-portfolio/science-practice-4) of both a lab report and lab portfolio reflection paragraph based on the shared experiment in first-year physics of the Constant Velocity Buggy Paradigm Lab. However, several students needed much more support to write these reflection paragraphs.

In general, those students who submitted their site for feedback had excellent portfolios by the end of the students; those who didn’t, underestimated the effort required and ended up with incomplete or poor-quality portfolios.

What I liked:

* The metacognition and understanding of Science Practices demonstrated by many students.
* Students deciding in which labs they most strongly performed each Science Practice.

What I Didn’t Like:

* Several students struggled to distinguish a lab report from a paragraph providing evidence of performing a Science Practice.
* Several students didn’t have enough support to complete a project of this magnitude and ended up with incomplete lab portfolios.
* Providing feedback and scoring all of the lab portfolios over winter break consumed a huge amount of time.

Spring Semester
—-

The spring semester has some different challenges and constraints:

* We focus more on preparing for the AP exam and less on lab reports.
* I don’t have the luxury of a two-week break to score lab portfolios at the end of the semester.

Based on these constraints and our experience during the fall semester, I made some changes for the spring semester. I selected seven required labs in the spring semester, one for each Science Practice. Each lab and reflection paragraph was due a few days after performing the lab, not at the end of the semester.

This had some advantages:

* the portfolio was scored throughout the semester
* students had more structure, which helped them stay current

and disadvantages:

* no student choice in selection of labs to include in portfolio
* no opportunity to revise a lab or reflection paragraph (the feedback could help them in labs later in the semester)

With these changes *and* students’ experience from the fall semester, the lab portfolios in the spring semester were largely successful. I think it is important to emphasize that both the changes *and* the students’ experience contributed to this success. I do not believe that the structure for the spring semester would lead to a more successful fall semester. The feedback I received from students at the end of the year was much more favorable concerning the structure in the spring semester than the structure in the fall semester.

Next Fall
—-

I had the wonderful experience of being coached this year by [Tony Borash](https://about.me/tborash). Tony provided guidance in many areas, one of which was making these adjustments for the spring semester and, more importantly, planning for next year. Together we were able to come up with a structure that will hopefully combine the strengths of the structure in the fall semester with the structure in the spring semester. My goals for these changes are to:

* provide more structure for students
* provide student choice
* incorporate peer feedback

Here’s the plan for next fall:

1. I choose the first lab. Students complete and submit the lab and the reflection paragraph. I provide feedback. Students make revisions and re-submit the lab and reflection paragraph. We review the best examples as a class.
2. I choose the second lab. Students complete the lab and the reflection paragraph. Students provide peer feedback to each other. Students make revisions and submit the lab and reflection paragraph.
3. Students choose the next lab to include in the portfolio. Students complete the lab and the reflection paragraph. Students provide peer feedback to each other. Students make revisions and submit the lab and reflection paragraph.
4. Students choose some of the remaining labs, and I choose some of the remaining labs. Students complete the labs and reflection paragraphs. Students specify a subset of Science Practices on which they want formal feedback from me and on which they want feedback from their peers. Students make revisions and re-submit.

This past year, students included a link to their lab report in their lab portfolio and shared the lab report (as a Google Doc) with me. Next year, I will have students embed their lab report into the Google site. This will facilitate peer feedback and enable everyone to use comments within the Google site to provide feedback. I may still have students share the actual doc with me, as well as include a link, so I can provide more detailed suggestions directly within the document.

Student Examples
—-

* [Nicole’s AP Physics 2 Lab Portfolio](https://sites.google.com/a/naperville203.org/nicoles-ap-physics-2-lab-portfolio-1-1/)
* [Vincent’s AP Physics 2 Lab Portfolio](https://sites.google.com/a/naperville203.org/vincents-ap-physics-2-lab-portfolio/)

Conclusion
—-

I’m pleased that my students and I are heading down this path and believe my students will gain a much deeper understanding of Science Practices as a result. While I shared this with my colleagues this past year, I also cautioned them that I didn’t have it figured out, and it wasn’t a smooth ride. I think electronic lab portfolios are an excellent way to assess student performance, and I hope that they will be used in other science courses in the future as they are a natural fit to the NGSS Science and Engineering Practices. I hope that after this next year, I will have something that will provide my colleagues with a stronger framework to adapt to their classes.

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.*

Curriculum
—-

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.

Security

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](https://www.goodreads.com/book/show/21413662-what-if) 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](http://xkcd.com/) and had the pleasure of hearing Munroe talk on his book tour for [Thing Explainer](https://www.goodreads.com/book/show/25329850-thing-explainer) which I hope to finish this summer. I include xkcd comics in my slide notes and link to the [what if? blog](https://what-if.xkcd.com) 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](https://www.goodreads.com/book/show/12413727-nine-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](https://www.goodreads.com/book/show/17994.The_Code_Book) 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](https://www.goodreads.com/book/show/3181564-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](https://www.goodreads.com/book/show/18143977-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](https://www.goodreads.com/book/show/2845024-anathem) by Neal Stephenson**

I am a huge fan of Stephenson. While [Snow Crash](https://www.goodreads.com/book/show/830.Snow_Crash) and [The Diamond Age](https://www.goodreads.com/book/show/827.The_Diamond_Age) are monumental works because they defined the cyberpunk genre, and the [Baroque Cycle](https://www.goodreads.com/series/49317-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](https://www.goodreads.com/book/show/17978134-a-more-beautiful-question) 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.