I know it's not technically computer science and it's more vocational, but I wish my school offered classes like these. Something like this would be more beneficial to me than, say, Theory of Automata, I think.
really? I'm actually glad my school doesn't offer vocational classes like this. Optimizing a website on the client side is the sort of thing you read a blog post for and then go do. I don't enjoy it at all when I actually have to do it, I certainly wouldn't want to take a course where I have to do this.
Not necessarily this class specifically, but there is not a single class at my college where I can learn about HTML/CSS/JS and their best practices. Nothing where I can learn about MVC and RESTful architectures, how to implement them, common pitfalls, etc.
Sure, there's a blog or a doctoral thesis that I can read to get an understanding of these things, but hearing it from someone who's been there and has made the mistakes is invaluable. Plus, it's often hard to motivate myself to learn about these things that are less interesting to me, but critical to my future employment when I'm taking 17 hours and working as part of a Java development team part time.
Do you believe that there aren't more useful things to learn in school? Stuff like this is fairly trivial to teach to yourself. I believe the time would be better served by taking a class in something like game theory or any one of the other mind-expanding courses offered (especially at a school like Stanford).
As for the actual content of the class, all you really need to tell someone is that various things can make pages load slowly, and then link them to some guide such as this: http://developer.yahoo.com/performance/rules.html .
Also, I still have this opinion after working last summer in what I would consider a high performance environment at a YC company.
I actually think high performance web architecture could make for an excellent mind-broadening course. Consider the things you need a deep understanding of:
- DNS, how it works, DNS level load balancing, DNS client implementations in operating systems
- Internet routing architecture and CDNs
- Browser internals: how modern browsers access the network, how their parsers work, how they parallelise requests
- In-depth understanding of both JavaScript and the DOM
- How CSS style engines work
- Different image file formats
- How compression works
- How to introspect and monitor web page performance
I agree all of these things would be good to learn in a course. I think a course that taught these things would be better structured as a course that teaches about these, and then at some point have a 15 minute talk (or a set/project) about how these concepts affect the load time for web pages and how one can make pages load faster.
There is a course at my school that's somewhat similar to this (http://courses.cms.caltech.edu/cs144/ ), but it looks at web from a very theoretical level. Out of the list you posted above, it definitely teaches about how the internet is architechted (and therefore why CDN's are a good idea). DNS is covered in a networking class, and compression (lossy and lossless) is addressed in other classes.
It seems like many of the things this Stanford course teaches are things that CS students should already know from other CS classes and they just have to figure out how to apply them. The class seems like it could be a valuable introduction to non CS majors who just want to understand how the web works so they can build some web app or something.
I believe that CS courses should include more real world practices and situations. After interviewing hundreds of cs grads over the past decade it only re-enforces that belief.