A Self Guided Programming Class

During the 2015-2016 school year, I’ll be teaching iOS Programming at Lincoln Sudbury as a “self guided” class.  I taught a class of the same title during the 2013-2014 school year, and my thoughts on how to lead such a class have evolved.  Here I’ll discuss my experiences the last time I ran the course, and my thoughts about what I plan to do with the class this coming year.

Some Lessons from the Last Time

The kids last time were mostly engaged, but sometimes had trouble focusing.  Some chose projects that were too hard for them, and didn’t know what to do.  They wrote code and had trouble letting go of it.  Still, some great projects came out of the class.

More Common Experience

In order to talk about code, kids need common experiences and common language.  In my upcoming class, we’ll do four units (about 8 weeks, I think) together at the beginning.  These will be:

1.  The calculator project that opens the Stanford Winter 2015 iTunes course.  This is a great introduction to all the things.  Swift (including a great bit on optionals), Xcode, AutoLayout, and Blocks are all covered.  This last bit (Blocks) may be a little too much for my students at this point in the course, but the rest is so good that its still worth it.

2.  A playground project in Swift.  I need to find a good one, or make one.

3.  The “Bullseye” project from the iOS Apprentice series by Wenderlich et al.

4.   I give them a fairly simple project to do and they do it on their own.  No tutorial.  Probably to write a “MadLib” app.

A Map

Students will finish the Common Experience part of the course at different times.  When they do, they will be shown a map of how their year can go from there.  The Map is a flowchart showing students what path they can follow to get where they want to go.

The main features of the Map that I feel are important to a successful self guided course are:

1.  You can see where you are going.  If you want to make a multiplayer game, you can see what kinds of things you’ll need to learn on the way, and how many steps it will take to get there.

2.  You finish what you start.  Once a student chooses a unit from the map, they are committed to finishing that unit.  That means each unit has to be finish-able, and it also must have some assessment rubric that is clear to the students from the beginning.

3.   Units are not too big.  This is not a difficult thing to achieve.  Most tutorials from books and the web are in chapter sized chunks which can be completed in 2 – 3 weeks at most, assuming students start in an appropriate place to do the tutorial.  That is what the map is for.

Independent Projects

Eventually, all students have to do an independent project, where they think of an idea and then implement an app.  They will have to do at least one in the first semester (starting by December), and another, more ambitious one in the last quarter of the course (starting in March).

Stand Up

A big part of the course is asking students to stand up and share what they’ve learned with others.  After the Common Experience is over, students will rotate giving 5 minute talks at the beginning of most classes.  Everyone will give at least three talks – one in each quarter after the first.

 

Self Guided

I think of “Self Guided” as a skill I am teaching, not one I expect students to come with.  Its my secret agenda for the class, and more important than the content of the class itself.  In ten years, my students might or might not be programming iOS devices (or anything else).   But if they are, it won’t be because they learned it in my class.  It will be because they are learning it on their own, all the time.

Running with Apple Watch – Part 2

A few days ago, I went for a run using the Apple Watch Workout app, and found it lacking.  It doesn’t really measure distance or pace very well, even when paired to the iPhone.  Today, I went for a run using the Runmeter app on both my phone and the watch.

My goal is not to run without my phone, but rather to keep the phone in a waist belt throughout my run.  Then to use the watch to monitor my progress, and also to choose podcasts, books and music to listen to while I run.

Setup

First, I opened Runmeter on the phone, and selected a route.  I did not start the workout, but put the phone in my belt.

IMG_2092

On the watch, in the settings app, I changed it so that the watch would go to the last used app, rather than to the watch face each time I looked at it during my run.

IMG_2076

Then I opened the Runmeter app on the watch.  It looks like this.

IMG_2079

I had some trouble with that start button.  But by accident, I force pressed the screen, and its much easier to start that way!

IMG_2083

When I pressed start, I got some audio feedback in my bluetooth headphones, and I started the run!

During the run

During the run, there were several informative screens.  Whichever one I left the watch on, it stuck and was there when I raised my wrist again.  I like the Cadence screen particularly

IMG_2082  IMG_2080 (1)  IMG_2081 (1)

 

Very pretty!  I’m a little sad that I will never, ever, in my lifetime get into the orange or red of the pace dial.  Oh, well.

When I finished the run, I force touched again and clicked ‘Stop’ to end the run.  After that I switched to the phone to save the run data.

An annoyance

I have only one complaint about the Runmeter experience on the watch.  When you raise your wrist, the app appears with the data from the last time you looked.  Then half a second or so later, it updates to the new information.  I doubt there is any way to fix this with WatchKit in its current state, but it is annoying.

Sold!

I’m sold on using Runmeter in this way with the Apple Watch.  Its already a very good experience, especially paired with Overcast, my favorite podcast app.  I’m looking forward to using it this weekend when I run the Twin Lights Half Marathon, in Gloucester, MA.

One more thing…

Many pundits have lambasted third party watch apps.  John Gruber said they “suck”.  Its true that the Runmeter watch app doesn’t load quickly.  But in this use case, which I discovered after less than a week with the watch, I only need to load it once.

Without the Runmeter app (or a similar one), the watch would not be a useful running companion.  With it, it is.

 

 

Running with Apple Watch

I received my Apple Watch last Thursday, April 30, and right away unboxed and paired it with my phone.   Since the watch came just after work with the battery at 80% full, I took it out on a six mile run immediately.

Running is one of the main things that got me excited about the watch.  I carry my iPhone 6 on my runs, generally holding it in my hand in order to listen to music, podcasts, or audiobooks.  With the watch, I don’t want to leave my phone behind, but would like to get it out of my hands.

I’d read that if I brought my phone along, the Workout app on the watch would use the phone’s GPS to accurately determine my pace and distance.   I’d already bought a belt to hold the phone while running, as I can’t stand armbands.  This one holds my iPhone 6 snugly and securely.  I leave the water bottles home for shorter runs, and fill them up for longer ones.

41A2L9MUdFL

The route I run is exactly 6.2 miles, as measured by my favorite running app, Runmeter (more later about Runmeter).  I’m quite certain Runmeter is accurate, as I’ve used it on several half and full marathons.   The watch measured this run at 5.7 miles, which is half a mile short of the actual length.  And this was with the phone accessible all the time.

A more careful experiment

This morning (May 3), I decided to do a more careful experiment.  I left on a somewhat longer, 9.1 mile run, and used both the Workout app on the watch and the Runmeter app for the same run.  Here are some screenshots from near the end of the run.

IMG_2065      IMG_2067

 

There is no way I was running a 13 minute pace, even if I slowed down a bit to take watch screenshots.   The pace measurement on the Apple Watch has been very disappointing and has seemed very random at all times.  It jumps up and down even when I’m running at a fairly consistent pace.  Here is the Runmeter app from the phone a few seconds later.

IMG_2066

The distance measured by the watch was once again shorter, though not as much for this run.  Perhaps my 9.1 mile run has longer straight sections that are easier for the watch to measure with infrequent checks of the GPS?

The Runmeter Watch App

I also used the Runmeter Watch App for this run.  It has a glance with super-tiny text that you can barely see.  It did load pretty quickly, and was both stable and informative.  Runmeter people, if you are reading this, the glance has a chance of being genuinely useful, just by paring down the information a little and making the text larger.  Here is the Runmeter glance:

IMG_2068

It may look legible here, but on the watch, while running, it was pretty tough to read.  There is also a Runmeter watch app, which I was barely able to launch at all while running.  I got it to show two screens, but there may be more.  I had to slow down considerably to get this working.

IMG_2069  IMG_2070

While these are pretty cool, opening the App on the watch is very difficult while running, and worse, once its open it doesn’t stay open – after a few seconds you’re back on the Workout app when you raise your wrist. (I think I’ve figured out what to do here – I’ll be posting a followup after my next run!)

It might seem like I’m being critical of the Runmeter app, but nothing could be further from the truth.  They got a watch app out there on day one (at least for my day one), and it works.  I assume they’ll work to make it better – as better as Apple’s WatchKit framework allows.

Takeaway and Next Experiment

The takeaway is that the Workout app on the watch is not particularly useful for running.  It purports to measure things like pace and distance, but even paired with the phone, it was off by 5 to 10% for distance, and pace measurements were just about useless.

I’m willing to be convinced that I’m wrong, and that the experience will improve with time.  Or maybe I’m doing something wrong.

My next experiment will be to use the Runmeter app exclusively while I run, using the phone app along with the watch app.   I’ll do this probably on Tuesday, and post about my experiences after that.

Have you figured out a great running flow using the watch?   Please let me know what you’ve learned.

 

 

Google Apps and the Mac

At Lincoln Sudbury RHS, we’re considering using Google Apps to communicate with each other and with our students.  If you’re using a Chromebook, all you need to do is log in with your Google name and password, and everything is set up.  On a Mac, you can just use the Chrome browser the same way, and everything will just work.  But you can do much more, too such as:

  • Adding your Gmail to the OS X Mail app.
  • Adding your Google Calendar to the OS X Calendar.
  • Adding a Google Drive folder to the computer to let you work off line.

I made a screencast to show some of these things, and you can watch it here. Note you can watch it in full screen mode to really see what is going on.

 

iOS Programming and Swift

Last week, Apple introduced the Swift Programming Language as the future of iOS (and OS X) programming.  This year, at Lincoln Sudbury RHS, I taught an iOS Programming class for the first time, using XCode 5 and Objective C.

 

The iOS class is scheduled to run again in the 2015-2016 school year, which is good news, since it gives me a chance to learn Swift, and for the tools to stabilize.  I’m pretty sure we’ll be using Swift in that class, for a number of reasons.

First, Apple has made it clear that Swift is the future of iOS / OS X programming.   Second, Swift (using XCode 6) includes a playground feature, which allows you to change code and immediately see the results of your changes.  This could be an amazing teaching tool.

So my work is cut out for me, and I’ll be experimenting with and learning Swift over the next year.  I’m planning a rewrite of the “MyLS” app – an informational app for students at Lincoln Sudbury, and I’ll be writing it in Swift.  Stay tuned!