teaching machines

CS 347: Lecture 25 – CS 347 Wrapped

December 7, 2020 by . Filed under fall-2020, lectures, webdev.

Dear students:

Our mission’s nearly over. You asked me to give you homework and projects so that you could learn full-stack web development. I’ve done that, and all that’s left is project 2 and the final exam. We won’t see each other again as a CS 347 family, so this is where we say goodbye. Before we part, however, I think we should reflect on what just happened.

I had a friend who talked frequently of finding the “story” for each course he taught. When he knew the story and stuck to the story, he felt good about his teaching. Otherwise he felt miserable. Sometimes it would take him a few semesters to figure out the story.

This is my second time teaching a course like CS 347, and here’s what I’m starting to think is its story:

Some classes are about algorithms. Some are about data structures. Some are about networking. Some are about human users. Some are about graphical user interfaces. A web development course is about all of these at the same time. The course is about their unification.

While the unification of so many subdisciplines makes for a packed course, we apply these ideas rather than learn their theoretical origins. If we “apply” long enough, we end up with an application. That’s what we have learned to build this semester: web applications. This is a good thing to learn, because while the web may have started as a system for sharing text documents that could link to each other, it has stolen a lot of responsibility from the desktop and become a platform on which our everyday applications run.

I originally signed up to teach this course because I had reached a crisis of confidence in my own application development. Every time I started a new program, I would reach a point where I needed a graphical user interface so that other humans could use it. I would turn to wxWidgets, Qt, Swing, and JavaFX, but I enjoyed none of them—in part because I had grown tired of C++ and in part because they limited who could run my programs. With Qt and wxWidgets, I’d need to compile a version for each of the different operating systems. With Java, I wouldn’t have platform-specific issues, but I would need my users to be able to install software on their machines. That doesn’t seem like much to ask, but it is when there’s the web sitting right there, happy to run my apps without installation. Better still, the web made it easy for me to update my apps. I just went to the server and pulled down my changes. The web improves the computing experience for developers and users. It doesn’t feel like it’s dying. It’s where I wanted to spend my time.

Please don’t let me influence you too much. There will always be a place for desktop development. Sometimes we need the hardware and the software to be very intimately connected. I don’t want all of my data to be on the web. I would be very sad if the browser was the only platform we had.

Last week you all provided me with your thoughts on how you’d run this course if you were teaching it. I wanted to share with you my own vision of what I would do if I were to teach CS 347 again. Here’s my list of plans.

I will keep going through your posts and thinking about how to teach this course. The semester has been a great big brain explosion for me as I’ve learned a new workplace and gotten a much firmer grasp on the modern web. Thanks for making this move feel like an upgrade in every possible way. As you go about your futures, I welcome keeping in touch on Twitter, LinkedIn, or email. I only talk about politics on Facebook.


Here’s your TODO list for next time:

There is no next time, so I won’t see you then.