All posts by rwhite

Writing in Computer Science Classes

WRITING IN CS CLASSES
=====================

by Richard White
—————-

2017-06-06
———-

In the new *Advanced Topics in Computer Science* course that I developed this year, I had the opportunity to introduce a new type of Computer Science assignment (at least new to me): a written report.

I stole the idea of a written report in Computer Science from Michael Lew, an AP Computer Science A instructor whose summer institute I attended last year, and it solved a problem that I’d seen in my CS teaching: computer science students tend to enjoy coding, often to the exclusion of other important aspects of the subject. Coding is fun, of course: give my students a few challenging CodingBat problems and they’ll happily ignore me for hours.

Once problems become larger in scope, however, it becomes important to sandwich the coding in-between two other important aspects of any significant project:

  1. planning/design at the beginning, with consideration given to how the project is going to proceed, and
  2. a culminating conclusion to the assignment, possibly in the form of evaluation of the product (by the student or teacher), reflection on the process, a presentation of the project, etc.

Both of these aspects of a larger-scale project require time, either in class or at home, and that is certainly one of the challenges in implementation. In my own teaching, I feel like I’ve developed the ability to build in time for project-planning in the course calendar. The culminating experience, however, is something I’ve often been weak on.

This year, in the *Advanced Topics* class, we were studying the performance of various sorting algorithms, the simplest ones of which are all O(n2). After a brief introduction to SelectionSort, Bubblesort, and InsertionSort, students were semi-randomly assigned a sorting algorithm from among the MergeSort, ShellSort, and QuickSort.

The first challenge for students consisted of simply getting a working algorithm running. Depending on the level of the student and the difficulty of the algorithm, this might have been the easiest or the hardest part of the assignment.

The second challenge was doing determining the performance of the algorithm, both empirically (by collecting time data for data sets of different sizes), and possible analytically (by counting the number of statements the algorithm would execute under different conditions).

Finally there was the writing of the report itself, something that students who are good in math and computer science don’t ordinarily have the opportunity to try. In this particular assignment, I gave them a concrete example of my expectations by briefly showing them in class a report that I’d written myself for one of the algorithms. (I didn’t want them to copy the format too closely, so I didn’t make it available for study online.)

By the end of the assignment, there were a number of goals that had been accomplished:

  1. Students each had a solid understanding of at least one of the sorting algorithms assigned.
  2. Students had a strong understanding of how algorithm performance, expressed in Big-Oh notation, is related to an algorithm.
  3. Students had a concrete document demonstrating their understanding of this material, suitable for presentation or inclusion in a portfolio.
  4. Colleagues had a better appreciation for some of the work we’re doing in the course. This was an unintended consequence, but a welcome one: with students turning in this assignment in a more traditional format, my fellow teachers were able to see evidence of the work my students do.

I only offered this assignment in my most advanced course this year, but I’ll be expanding it to my other computer science courses next year. (Download a PDF version of the assignment.)

What traditional assignments do you find translate well to non-traditional courses? Do students appreciate being able to leverage their familiarity with the format of a traditional assignment, or do they find it annoying?

Implementing a Post-AP Computer Science Course

Implementing a Post-AP Computer Science Course

by Richard White

2017–06–06

This past semester I began teaching an “Advanced Topics in Computer Science” elective that I’d developed for my school. It’s an interesting class for a number of reasons.

  1. Although it was a new class for me, the topics covered in the course aren’t new to longtime high-school teachers who taught the College Board’s old AP Computer Science AB course back in the day. The “B” part of that course included discussions of some of the topics covered in this elective, including various types of more complex data structures and algorithm analysis. The “B” part of the course was discontinued in 2009 in an effort to “focus resources on efforts that will provide a much greater degree of support for AP Computer Science teachers than ever before.” [1] (Yes, I don’t quite follow the logic there either.)

  2. The class was offered as a “post-AP” course. In the context of my school, there are a wide number of students who are interested in learning some computer science, and who are more-than-happy to earn some AP credit for it. Most of them are not going on to study CS, however, so this class filled a need for those students. The impetus to develop the class came mostly from me, informed by some encouraging prodding from alumni.

  3. Although the standard AP Computer Science A course uses Java (currently), I wanted students in this elective to focus on the data structures themselves, without having to muck about with Java infrastructure. I elected to offer the course in Python, and this had a number of implications.

    1. For students who really were taking this after the AP CS course, they needed to learn Python, and fast. A year of Java had given them a solid grounding in object-oriented strategies, but the Python syntax and quirks like dynamic typing took some getting used to. The Advanced Topics class, then, began with a Python-based Boot Camp to bring everybody up to speed.

    2. There were a couple of students who chose to take this class after completing a single-semester Python class. This required a bit of a stretch on their part: although they were well-versed in Python syntax, they had been learning CS for a shorter period of time, and weren’t as well-grounded in object-oriented thinking. The Boot Camp strategy attempted to bring them up to speed, but was no substitute for the more extensive curriculum in the AP Computer Science A course.

  4. The class was initially developed as a way of returning to the curriculum that was originally offered by the College Board program, and can be viewed as supporting that model. I have since had a number of conversations with teachers and administrators who see this course as a potential model of what a rigorous class might look like as part of a non-AP program. That wasn’t my intention in creating this course–I actually appreciate the idea of a national-standard curriculum against which my students can gauge their mastery–but this course can certainly serve different needs, depending on context.

  5. As we worked our way through the curriculum, I tried to be sensitive to the experience of the students. Developing Python implementations of stacks, queues, trees, and graphs isn’t everybody’s idea of a good time, so I worked to include offshoot activities that built on the skills they were learning. This can be especially challenging the first time a course is offered (and I was teaching this class as an overload), so I expect next year is going to be a much more satisfying experience for the students. Abstract structures may be developed with visual representation, for example, bringing a more graphic appreciation of the structures.

I wasn’t too unhappy with how things worked out this first time through, but I’m looking forward to refining some aspects of the course and smoothing out some of the rough edges in anticipation of offering it again next year. In the meantime, you can see the webpage for the course at Advanced Topics in Computer Science.

I’ll be writing a bit more about this course in the next month or so. Stay tuned.

Three Lines of Code

Three Lines of Code

2017-04-29

by Richard White

Earlier this week I was walking through a school hallway when one of my students called out to me. “Mr. White! I’ve got a program that calculates primes in only three lines of code!”

I laughed, and asked him to bring it to me later in the day so that we could look at it.

“It’s just three lines!” he exulted, as if I might not have heard it the first time, “and one of those is a print statement!

Jack had taken an introductory Python course from me during the first semester of the school year, and from there had decided that he wanted to take the post-AP “Advanced Topics in Computer Science” course, a more abstract computer science curriculum that focuses on various types of data structures. Enrolling in this course requires my approval, and I had some initial concerns about how Jack might do in the course: He just had a few months of experience, and the curriculum would be a significant step up for him. While I didn’t want to set him up for failure, I didn’t want to dampen his enthusiasm for the subject either. In these situations, I try to err on the side of saying ‘yes.’

This semester Jack has had occasional struggles in the course, but so have most of the students, a fact that one could easily chalk that up to this being the first time I’ve taught the class. In any event, he’s making fine progress, and this prime-finder activity that he’d taken on for himself wasn’t the first time I’d seen him take something from outside the class and turn it into a piece of code.

Jack tracked me down again after school, laptop already open, ready to show his code. And sure enough, there it was, a tiny little Python program of just three lines. And it worked!

“What kind of algorithm is this?” I asked. It wasn’t the standard introductory comp sci treatment of primes I used in my teaching.

“This is ‘Wilson’s Theorem,'” he explained. “I learned about it on YouTube. It’s not very good for large prime numbers because it requires calculating factorials, but still… three lines of code!”

I thought about it for a moment.

“I bet we could get it down to one!”

“How?”

“Do you remember Python’s ‘list comprehension’ syntax? I bet we can use that to make this a one line program that calculates primes!”

And so we did.


Last login: Sat Apr 29 09:05:01 on ttys000
rwhite@MotteRouge$ python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:52:12)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> [x for x in range(2,1001) if (math.factorial(x-1) + 1) % x == 0]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
>>>

Just about every teacher I know would have his or her own lesson to be learned from this anecdote. It could point to the need for more free time in school so that students can find their passion. It could be a call for more open access to teachers before and after school. It might be a testimony to more open access to advanced classes, or an encouragement to allow more students to take academic risks. A math teacher might read it as a need for us to teach more computer science in our math classes, and a computer science teacher might claim that this demonstrates the utility of Python as an educational programming language.

There’s some truth in all of those, I think. Every educator would like to find more ways to empower our students to find and follow the interests that inspire them. Some students find their passion more quickly or easily then others, but every parent knows the secret to helping kids flourish and grow: throw stuff at them and see what sticks. Comic books. T-ball. Educational television. Piano lessons. Board games. AYSO soccer. Summertime concerts. Bedtime reading. Camping trips. Scissors, tape, and construction paper. Play dates. Museum visits. An allowance and an introduction to budgeting. An electric guitar. A woodworking class. Batteries and wire. Dance lessons…

Give students time, space, exposure to new ideas, and the tools to build on those ideas, and they’ll find something that inspires them.

Differentiated Instruction, Part 2

DIFFERENTIATION, part 2

2017-03-11

by Richard White

I was recently asked by our IT director John Yen how I handle differentiated instruction in the classroom: what strategies do I employ to try to ensure that students of widely varying abilities and skill levels are all appropriately challenged in my courses?

It’s a question that public school teachers face all the time, and independent school teachers arguably somewhat less. Technology teachers at both types of institutions have the biggest challenge here, because:

  1. there isn’t (yet?) a standardized curriculum path that has been developed and accepted around computational thinking and computer science, and
  2. there is a large, and perhaps growing, “digital divide” between those students who have nearly unlimited access to technology and training (even informal training via YouTube videos and the internet) and those who don’t.

My reply to John’s question took a little while to narrow down to a response to his questions, but here are my remarks, lightly edited for clarity.

=====Beginning of Email=====

  • That’s one of the million-dollar questions right now: How do I bring students with widely-varying experience into the curriculum?
  • The 2-million dollar question is: What CS curriculum do we want to offer/require? This varies depending on the school population, the goal of the curriculum (CS for managers? Coding for vocation?), the instructors available, the budgeting, salaries…
  • The 3-million dollar question is: Who is going to teach this curriculum? At this point, that is going to have an overwhelming influence on the other questions. CS people don’t do much with game design, and Game Designers don’t know a lot about Linux, and software engineers may or may not know about networking or control systems…

In Computer Science courses, I’ve found that I often have to provide up to five different kinds of differentiation, given at different times according to the idealized schedule given here.

Steps in Assigning/Conducting a Computer Science activity or project

  1. I prepare the assignment, preferably on paper or online so I can check that the idea and the process are fully articulated. NOTE: When looking through some online references a few years ago I stumbled upon an assignment format used by professors at Michigan State University, and I’ve adopted it for many of my CS courses. An example is attached here.
  2. During the preparation of the assignment, I try to prepare 1-3 Extension activities that are more complex or require application of the project to a new context. This is the first differentiation that I’ll use with some of my more advanced students who would otherwise complete the assignment too quickly. On the assignment I also often include a section called “Questions for you to consider (not hand in)” which ask the students to think about other aspects of the subject that may not be directly related to the assignment. These can be a nice jumping-off point for a conversation with more advanced students.
  3. Also for the assignment, I prepare a few “Notes on Getting Started” that are included with the instructions. These notes include suggested work strategies and/or questions that might help clarify the direction their problem-solving process should take. This is the second differentiation.
  4. Deliver the assignment (paper or online) in class, with whatever introductory remarks are appropriate. Students begin working.
  5. After students have been working on the assignment for some length of time, I’ll usually check in with them to see how things are proceeding so far. If there’s a stumbling block in the assignment that I’m aware of, I may bring it up at that time, and ask them what they think about it. I’ll usually write some amount of code on the board here, developing ideas with those students who have become stuck. This is the third differentiation strategy. ( Example: This video (narrated) of me working with students in class: https://www.youtube.com/watch?v=ZJ3z51n1Ndo )

    If I notice that a number of students are having difficulties with a concept or problem, I may prepare a small video for them going over the issue in more detail. I’ll post the video and send the link to them so they can take another crack at it. This is the fourth differentiation strategy. ( Example: This video, covering the topic of website permissions for some students’ websites: https://www.youtube.com/watch?v=sEES_N3ZQHk )

  6. Ultimately some students will need more individualized attention, sometimes down to the point of sitting down with them individually and picking through their code line by line. This is the most challenging and time-intensive differentiation strategy, and not something that I’m able to do with every student every time. Fortunately, if I’m doing my job well, I don’t need to do it very often.

=====End of Email=====

What strategies do you have for providing differentiated instruction for your students? What evidence do you have that those strategies are successful (or not?)

Is the Digital Divide something that needs to be addressed by CS teachers? If so, what steps do you take towards ameliorating that problem?

Presentation Mode

Presentation Mode
=================

2016-12-07

by Richard White

It’s Computer Science Education Week, and for the fourth year in a row I’ve conducted presentations at our Lower and Middle Schools for an Hour of Code with 5th and 7th graders.

I’ve got a bit more on my plate than usual this year, so I tried to minimize time spent emailing/calling/coordinating with various administrators, tech coordinators, and teachers. I work with a great group of people who helped make some of that happen—our Middle School Tech Coordinator was instrumental in navigating some of that, and my Upper School director committed early to giving me time off from my classes to go conduct those sessions. Also, our Lower School Technology Integration Specialist took on some of the heavy lifting for the first time this year, identifying activities that might be well-suited for the 5th graders.

I’d been a little smart about things too: the Hour of Code webpages that I’d set up previously were still live, and a handy reference for those who wishe it. The presentation materials that I’ve developed over the years were pretty much ready to go as well, with some minor modification and editing. I’ve been switching from PowerPoint to LibreOffice, and my software on the laptop was good to go.

Now, how about that hardware?

Every presenter has their list of hardware that they need to be sure to bring along to a presentation, particularly if you’re going to be away from your home base for the day/week. What to bring with?

  • Laptop
  • Camera/cellphone for documenting event
  • Charger and charger adapter
  • Logitech wireless presenter (R400)
  • Lightning port-to-HDMI cable (spare)
  • Lightning port-to-VGA dongle (backup)
  • USB key with presentation materials (backup)

I’d been to one of the rooms I would be presenting in, and knew that it was probably already stocked with the various power supplies and cables that I’d need, but you never know. Most of the items on that list there are simply backups or replacements for items that I expect will already be there.

img_9764

I got to the room, got things set up, checked out the projector to make sure it was working, double-checked the video that I’d be running in the presentation for sound… I was good to go!

I went to grab a marker to write my name on the whiteboard… no markers? Oh, there’s one. An old low-odor marker for which someone has left the cap off. I tried to write my name, and it left a half-visible mark on the board. I went to erase it and… no eraser.

Who has whiteboards with no working pens or erasers?

I scrambled around a bit and managed to scare some up just in time for the presentation.

It just goes to show you…

Looks like I have a couple of additional items for my hardware list. :)

Keep it civil

Keep It Civil
=============

2016-11-22

by Richard White

Anyone who uses any kind of modern, social-media-related technology is aware of the kind of derision and scorn that can occur on the Internet. The awful GamerGate debacle is perhaps one of the worst and most serious examples, although trolling and flamewars can easily erupt from the most innocuous of situations.

As a professional, a teacher, and someone who likes to think of the Internet as being used mostly for good, and less for evil, I try to behave well, and part of that includes having a thick skin and/or erring on the side of forgiveness when it comes to things like comments on my YouTube channel.

Case in point: I recorded a brief video introduction to Free and Open-Source Software (FOSS) that I put up on YouTube a few months ago. In that video I discuss the FOSS operating system Linux, and mentioned in particular one particular distribution of Linux called “Ubuntu.”

Amidst the other nice comments people made on the video, there was this one:

Actually Ubuntu is not entirely a “free software”

“Is this guy kidding?” was my immediate response. “I spent a lot of time putting this video together, and he’s got the nerve to nit-pick about this? Ubuntu does bundle some proprietary software together with their distribution, so technically, he’s right. But, geez! That’s the thanks I get for all my work? Snarky comments picking it apart for minor points that practically nobody cares about anyway? Why, I ought to…”

I admit, that thought passed through my mind for a moment. But when I had the chance to think about it for two seconds, I realized that it might be me that was over-reacting. Certainly a more level-headed response was called for, and this is what I ended up replying to him in a follow-up:

That’s true! Although it’s a bit beyond the scope of this introductory video, none of the common Linux distributions comply with the Free Software Foundation’s strict interpretation of FOSS. (If you’re interested in those details, you can read about them at https://www.gnu.org/distros/common-distros.html). For the majority of Linux users, however, we’re happy to support and use those GNU/Linux distributions anyway. :)

I wasn’t expecting a reply back. If this poster’s comments had been intended as trolling, I hadn’t taken the bait, and for a troll, where’s the fun in that? So imagine my surprise when a reply did come back:

Yep. Thanks for making this video :)

An acknowledgment of my point, a “thank you,” and a smiley face? That’s quite a turnaround from the original comment, consisting solely of a criticism.

I’ll never know what the original intention of the commenter was when he left that note for me. I do know that a non-reactionary reply from me—fair, factual, and cordial—evoked a response in kind.

And that’s the Internet world that I like to live in!

keep_it_civil

Teaching CS: Am I doing it right?

Teaching CS: Am I doing it right?
=================================

by Richard White

2016-11-10

I’ve been teaching Computer Science in one way or another for a decent part of my teaching career, from courses using BASIC and Pascal on standalone PCs (pre-Internet!) back in the 80s to courses using Python and Java currently. I’d like to think I mostly know what I’m doing by this point.

It’s interesting to note, however, that there is a wide variation on how teachers work with students in a computer science classroom. From the AP Computer Science teaching community, I’ve heard of teachers who:

* have their students use Linux workstations exclusively
* have their students learn Java exclusively through graphics programming (Processing language)
* have their student use web-based Java compilers/interpreters
* have their students learn how to interact with a server
* have their students turn in all assignments on paper only
* have their students retrieve lessons and submit assignments using GitHub
* teach Java by having their student write mobile apps

It’s a stunning variety of strategies given that we’re all teaching the exact same course with the exact same curriculum.

And maybe that’s a strength of computer science, that there are lots of ways to make it happen. Whether you use Linux or OS X or Windows, whether you program using a terminal or an IDE, whether your programs interfaces are text-based or graphical… we’re all teaching computer science.

If there’s a downside to this variety, it’s that we may be tempted to feel that some of the other strategies–old ones that we haven’t had time to consider, or new ones that have just been recommended to us–might be better (more interesting? more effective? more appealing to students?) than what we’re currently doing. And so we feel compelled to give these new strategies some consideration.

In the last few years there has been an explosion of interest in Coding (which is not quite the same thing as Computer Science, but we’ll take what we can get, eh?). Hadi Partovi’s Hour of Code, MIT’s block-based Scratch language, the Raspberry Pi, the Arduino, the College Board’s new AP Computer Science Principles curriculum… and these are just the most popular of the recent technology and CS-based innovations that might merit some consideration by me, with an eye toward possibly incorporating some of them into my teaching toolbox.

How much should I stay the course and stick with what I think works best? How much of my limited professional time should I invest in consider these other possibilities?

More than teachers in any other subject area, we teachers of Computer Science need to wrestle with these questions. It’s a de facto part of our job description.

What is your specialty in teaching CS/technology? What topics do you add to your courses, because those topics work, or they’re part of your pre-existing skill set? Do you feel pressure to always be looking at The Next Big Thing?

For related reading: http://blog.acthompson.net/2016/11/too-many-cs-teaching-resources.html

The Poor Person’s Guide to Differentiated Instruction

The Poor Person’s Guide to Differentiated Instruction
=====================================================

by Richard White

2016-10-28

I’m a classroom teacher, and I’m a busy man.

I prep lessons, I develop and coordinate assignments for my students, and post homework assignments on the school website. I collect work, set up labs, write, administer, and grade tests. I develop caring relationships with my students.

It’s the best job in the world… and I come home *exhausted* most days.

One of the many challenges we teachers face is providing learning opportunities that are appropriate for the level of our students. In classes with an especially wide range of abilities, these can become problematic, logistically speaking.

In my Computer Science classes I typically have at least three ability levels in the same class:

1. students who have already had some experience with programming, possibly in a different language, and who are able to accomplish most assignments very quickly.
2. students who may be new to programming, but who are making reasonable progress. They quickly learn that programming requires attention to detail, and they typically pick up patterns—syntactical, logistical, procedural—after one or two exposures.
3. students who struggle to recognize the patterns, or who find themselves more easily frustrated by the puzzles posed by programming assignments.

I’ve experimented with a few different strategies over the years. Here are three that I’ve tried that have met with some success.

1. Below the Fold Progression
In this type of differentiation, students are provided with a text file (usually online) that contains a statement of the problem at the very top of the file. The file itself is actually a working copy of the problem, with the initial problem statement written as a multi-line comment near the beginning of the file. Much farther down on the page, where students can’t easily see it without scrolling, is another multi-line comment containing a pseudocode analysis of the problem. And finally, much farther down again, is the solution code itself. Students who want to work out the program without any hints are free to do so, while students who need a bit of help from the pseudocode can look at that as needed. Students who need much more support may find themselves looking at the actual program for assistance, and that’s okay if that’s where they are in their own learning process.

Example: ch06ex03.py (Right-click or Ctrl-click to download)

2. Page 2 Solution
In this strategy, something similar to the “Below the Fold” method is used, but now, the problem statement and its solution are printed on paper to be distributed to the students. The front side of the paper has the problem statement, and a complete working version of the code is on the back side (page 2) of the same piece of paper. This has the advantage of giving the students a concrete document to scribble on, and giving the teacher some ability to see which side of the paper students are looking at as they work on the program.

Example: four_functions.py (PDF format, Right-click or Ctrl-click to download)

3. Progressive Lecture
The final strategy is much more interactive. Students are assigned a problem in class and instructed to begin developing a solution. At the front of the room, after some reasonable amount of time has passed, the teacher begins writing out a rough outline of the program, perhaps with comments highlighting significant sections of code. Students who have developed their own solutions to the program will continue working on their own, while those who may be struggling to organize a solution will get some hints from what is written on the board.After a few more minutes have passed, the instructor may continue fleshing out the solution to the problem using the framework already developed. Students who still aren’t sure about some aspects of the program are free to ask questions as actual code is presented on the board.

Example: Differentiated Instruction (YouTube video)

Strategy 3 requires the most from me in the classroom. I’m moving around the room, actively monitoring students’ progress, and trying to determine the *decisive moment* (thank you, Henri Cartier-Bresson) when I should begin reaching out to assist students who need some additional guidance. Strategies 1 and 2 have the benefit of being delivered by computer or paper, with assistance immediately available to students when they decided they want to take advantage of it. The downside of those two strategies, of course, is that students do have access to solutions, and may be tempted to avail themselves of those materials before they’ve had a chance to wrestle with the material… and it’s in that wrestling that they really get to learn things.

As I say, I’ve used all three of these strategies on one occasion or another, and they work pretty well in Computer Science courses. I’ve adapted similar strategies to some of the science courses I teach.

As a teacher, do you use any of these strategies, or something similar? How do you reach out to the students of varying ability levels in your classroom?

Getting SaaSy: Software as a Service

Getting SaaSy: Software as a Service
====================================

2016-10-28

by Richard White

Ah, remember the glory years of installing software on a computer? Buying cardboard packages with floppy disks or CD-ROMs inside them, and spending an afternoon installing a new game or Microsoft Office on your desktop machine.

If you’re a bit younger, installing software got more convenient: later, you might gone to the Mac App Store, or iTunes, and downloaded software directly off the Internet.

Even those halcyon days of software installation are on their way to becoming a memory, though, at least for some of us. That software you previously installed and ran on your computer is increasingly being replaced by “Software as a Service“, and if you aren’t familiar with “SaaS,” you almost certainly use it. SaaS provides you with the cloud-based equivalent of an installed program, often via an interface running in a web browser.

Google’s Docs, for example, provide you with the ability to create and edit word-processing or spreadsheet documents. When you use Google Docs, you’re not running the equivalent of Microsoft Word on your computer. Your browser is interacting with documents that have been made available to you over a network. Google is providing you with “Software as a Service.”

Google’s Docs are an example of a “free” service (in quotes because you do pay a price in terms of your privacy), but it’s more likely that a company will charge you for their SaaS. Spotify, for example, provides you with the ability to stream music onto your computer or mobile phone. There is a small app that you download to use their service, and it is this app that allows you to interact with their music delivery service in either free or paid form. The music doesn’t reside on your computer; the music is streamed to your computer as a service.

I’m a bit old school when it comes to these things, so I’m not that big a fan of SaaS. Sure, I’ve got a Netflix subscription, and I watch Game of Thrones via HBONow. But I don’t have 24×7 access to the Internet, and I don’t like the idea of my hardware having to lie dormant when I’m not connected.

This is a little more than just a philosophical debate. I’m a teacher, and as part of my job, I record and calculate students’ grades on assignments. I used to do this in a paper gradebook, and then quickly graduated to a spreadsheet system. Spreadsheets were practically made for teachers to record and calculate grades with. Some of my colleagues who weren’t so good with managing a spreadsheet bought specialized grade tracking software and installed it on their home computers. That works too.

In the interest of providing students with ongoing access to their grades, I switched a few years ago to using a free service called Engrade, formerly at https://www.engrade.com. And with that move I entered the SaaS realm, using someone else’s software running in my browser, with access to my students’ grades via the Internet… assuming I have a connection. Which I usually do.

One of the downsides to SaaS is that you no longer have a copy of the software that is yours to use. When McGraw Hill purchased Engrade for $50 million, there was a new sheriff in town… and the service was no longer free.

And maybe that’s okay. Maybe McGraw Hill deserves to see some return on their investment in this company. Enough of my colleagues at my school site used Engrade that our school decided to pony up for a site license, so I’m still using Engrade. And that’s mostly good news…

…until their site goes down.

engradepro-outage

So, yeah. Software as a Service. Advantages and disadvantages. Pick your poison. Just be aware of the benefits and pitfalls of your options.

Next weekend I’ll be on a cross-country flight, writing up grades and comments for my students to be turned in the following week. I won’t have Internet. I won’t have Engrade. I won’t have Microsoft 360. I won’t have Spotify.

I’ll just have my laptop, with iTunes playing my old CDs that I ripped, and I’ll be writing comments in a text editor while consulting student grades in a spreadsheet, the way you do.

Like a Boss.

Losing the Functional High Ground

Losing the Functional High Ground

by Richard White

2016-10-26

The title of this post is a direct reference to Marco Arment’s excellent online essay from January 4, 2015, Apple has lost the functional high ground. If you haven’t read that post, in which Marco points out that Apple’s software quality has fallen off in the past few years, you should check it out.

Since that post was written, Apple’s success as a computer company has suffered other slings and arrows at the hands of former admirers, and most recently, on the hardware front. For a variety of reasons, Apple’s once formidable line of “best in class” computers has been reduced to a rag-tag selection of pretty, well-made, computers that run pretty nicely considering you’ve just paid top dollar for a new machine built from four-year-old hardware.

In 2013, Apple’s Phil Schiller unveiled the sleek, new, Mac Pro at the World Wide Developer’s Conference, with a defiant “Can’t innovate any more my ass!” for the benefit of observers who felt even then that Apple might have started to lose its way. Now, over three years later, that Mac Pro hasn’t seen a single upgrade, and Schiller’s sneer has become a sadly ironic comment on the ongoing state of affairs.

MacRumors, a fan-site so faithful they’ve got “Mac” in their name, maintains a Buying Guide for its readers, with listings on the current state of Apple’s hardware, and recommendation on whether now might be a good time to buy or not. Here are their recommendations as of a few weeks ago.

2016-10-15-macrumors_buyers_guide

For anyone who has been a fan of Apple over the years, it’s painful to watch this decline. There may be some comfort in knowing that they’ve got the best selling mobile phone on the planet, and a good thing, too: that single product line, the iPhone, accounts for almost two-thirds of Apple’s revenue.

There’s a reason they removed the word “Computer” from their company name, “Apple Computer, Inc.” back in 2007.

John Gruber disagrees with Arment’s characterization of Apple: “…if they’ve ‘lost the functional high ground’, who did they lose it to? I say no one.”

It appears to me and to other observers that they’ve lost it to themselves. Their development of computer hardware and OS X software has effectively been abandoned in favor of their cash cow, the iPhone.

This is written on the eve of a much-awaited product release from Apple. I have every hope that the new products they announce tomorrow will restore our faith in the company.

And I have every fear that we will be disappointed.

Follow-up

I think I have my answer.