CS 347: Lecture 25 – CS 347 Wrapped

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 would recruit a bunch of friendly and mature students like yourselves. Seriously, I am very impressed by how you all communicated with me. Thank you for treating me like a fellow human.
  • A committee of several faculty are going to suggest to the department that the course be split into two different courses. If we have our druthers, there will be a required CS 247 that covers HTML, CSS, and JavaScript. Students would likely take this during their second year, and it would be a prerequisite for CS 345. Many of you mentioned in your blogs that the HTML and CSS material was compressible and that more time on JavaScript and React would be nice. By breaking the lighter material into a 200-level course, second-years would get some exposure to front-end development before going on internships. CS 347 would continue to be an elective and would cover back-end topics like web services and front-end topics like React.
  • The biggest issue of the course, in my opinion and in many of yours, is the uneven participation in the breakout rooms. Grading was largely based on showing up, and some of us made a habit of not doing more than that. I knew this was going to be an issue, and I intentionally chose to ignore it because I care more about your well-being than the course objectives. Covid-19 has added a lot of complication to our lives, and I didn’t want to be in the business of micro-managing you. As we adjust to quarantine life, and as I gain my footing in this department, I will raise my expectations.
  • In an open-ended project-based course, it is easy to feel like you don’t know anything. You are not continually seeing measures of your learning. Rather, you spend all your time dealing with the things you don’t know. I will probably switch away from exams to weekly quizzes so that students can have more periodic check-ins to assert their knowledge.
  • Someone suggested in their post that project 2 be broken into two separate deliverables: the web service and the React client. I think this is a fabulous idea and will be adopting it.
  • One thing I need to keep thinking about is the mode of delivery. Many of you found the lab time to be helpful, and many of you wished for more live instruction. At my previous university, we could have a schedule where we had two days with hour-long lectures and one day with a two-hour lab. I’d love to have something like that here.
  • A modest number of you bristled at the open-endedness of the blogs and projects. I’m afraid that you didn’t convince me to switch away from that. One of you paraphrased it nicely: “I think the beauty of the class is also sometimes the problem. Oftentimes things felt vague and up to us to learn and grow.” School makes you think that everything has a right answer. That’s a lie. As computer scientists, you will often be in the position of making something new, in which right and wrong haven’t been decided yet. On your resume, would you rather put that you know HTML, CSS, and JavaScript or that you built your own MP3 player over winter break?

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:

  • Complete the end-of-semester evaluations. You can find a link in MyMadison.
  • Add your project 2 URLs to the document I shared in Slack #project2.
  • Keep plugging away at project 2.
  • Watch for an email on Tuesday containing a link for the final exam. It will be 30 multiple choice and fill-in-the-blank questions. You have until Thursday at 3 PM to finish it. I trust you to complete the exam on your own. It’s better to lose a point than your soul. You are free to consult any existing resource, but please do not solicit any answers or write anything to the web related to the exam.

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



Leave a Reply

Your email address will not be published. Required fields are marked *