This fall, I'm teaching CS 3320, Internet Software Development. The class hasn't been offered for a while, and students seem quite excited to take it (it's currently maxed out with a full waitlist).
Since this is the first time in a while that this class has run, I'm recreating it from scratch. You can check out the course web site here, including the syllabus and list of resources; I expect that I'll also be publishing assignments and lecture notes there as the semester progresses.
One of the big tasks in getting this ready has been selecting a tech stack. There's just so many to choose from! Three primary goals have driven my decisions:
- Minimize the number of distinct technologies, particularly languages, that students have to learn in order to gain this experience.
- Don't layer too much magic on top of the underlying infrastructure (e.g. HTTP and HTML), so that students can gain a good conceptual understanding of how things work.
querySelectorAll builds its historical killer feature directly into the browser.
We'll be writing raw CSS, using Pure as our base layer. I thought about the choice between Foundation, Bootstrap, Pure, and nothing; I've used Foundation for other projects and enjoyed it, but it's quite heavy and has a lot of magic. I personally find Bootstrap's pervasiveness to be a turn-off, because the results say ‘Hi! I'm a Bootstrap site’. That doesn't make Bootstrap bad for teaching, but it does mean I don't know it. Pure has the advantages of being simple, small, and built to work without a preprocessor. Preprocessors are wonderful — I use SASS for almost all my web work — but it's one more moving piece to install and makes the syntax somewhat more complicated. Eugenia suggested Pure, and I've been sufficiently satisfied with it building the course site that I'll go with it. It does require the HTML to be littered with quite a few appearance classes, but that seems useful for teaching anyway as it lets students see more of how everything works.
We'll be using Python + Flask for server-side programming. They're dependable, stable choices that are relatively easy to learn. Flask's minimalist approach makes the underlying HTTP semantics quite visible, and it doesn't come with near as many layers of magic as something more sophisticated like Django. And if they master the basics of routing URL s to view functions, those skills will transfer to most web platforms. Also, Flask has excellent documentation (Django's isn't bad, I just find Flask's to be particularly good).
The one thing that I'm still uncertain about is storage. I will most likely use SQLAlchemy + Alembic + SQLite, so my students can store data without learning SQL (that's another entire class). I am also considering MongoDB, as that will let us store and query data directly with the lists and dictionaries we'll be making heavy use of elsewhere.
- Out-of-date (HTML4, etc.)
- Focused on a single technology (I don't want to ask my students to buy 7 books)
- Intended as a refresher (most of the HTML5-and-CSS3 books I found were aimed at experienced web devs looking to update their skills, not new programmers getting started)
The class is going to be highly team-based; the second week we'll be forming teams, and 5 of the 8 projects will be done in these teams. There will be a few solo assignments and quizzes to assess students' individual understanding, but no major exams or final.
I'm excited to see how well it works out.