courses.pgbovine.net

Welcome to CSC 210!

The objective of this course is to provide you with a strong foundation in the principles of Web programming, starting from the fundamentals all the way to modern technologies. This course will be divided into three modules, each spanning a major era of Web technology:

  • Web 1.0: Webpages as documents
  • Web 2.0: Websites as applications
  • “Web 3.0”: Toward a composable, real-time Web

Unlike CSC 170, this course will focus mainly on server-side backend systems rather than on website layout and design.

When you finish this course, you will understand some of the most important technologies that underlie popular websites you visit every day. This knowledge will both be intellectually interesting to you as a computer scientist, and also practical in helping you become a better Web programmer.

Course philosophy

Even though you will be programming a lot in this course for the semester-long project, its purpose is not to teach you to become an expert in any particular programming language or framework. Web technologies (unlike basic algebra or physics) change at a blisteringly fast pace, so specifics quickly get outdated. Even if we teach you how to build the “best” Web application by today's standards, by the time you graduate and get your first job, those details will already be obsolete. However, once you understand the fundamentals of Web programming, you will be able to easily pick up new technologies on-demand in your future jobs.

So ... how is this course useful to me? Can I build an awesome Web application after taking it?

The purpose of this course is to teach fundamentals. It's not a step-by-step tutorial for how to build an awesome Web app in a cookie-cutter way using the latest frameworks. You can find plenty of those tutorials online for free, so you don't need to be paying expensive university tuition to replicate that experience.

If you're motivated, then you can teach yourself to build an awesome Web app simply by following online tutorials and copying-and-pasting a bunch of code. You don't need this course to get something up and running. In fact, some of you have already built Web apps. Thus, if we had set the objective of this course to something like “teach you how to build awesome Web applications,” that would be setting the bar way too low. That said, this course isn't just theory. The semester-long class project will give you the necessary skills and practice to build modern Web applications using the latest state-of-the-art tools.

But the true lasting value you will get from this course is a deep understanding of the foundations that underlie all of the Web-related code you'll be adapting, writing, and modifying in your future jobs. That way, when you learn to use new kinds of tools throughout your career, you can cut through all of the incidental complexity of language syntax, configuration options, and arcane API specs to understand the underlying principles embodied by those tools. This expertise will make you a much more effective Web programmer. And when things inevitably start going wrong, you will be more likely to ask the right questions that lead you to proper fixes. Software engineers spend most of their time on maintenance and debugging, so that's where understanding fundamentals gives you an edge over your coworkers.

What does this course not cover?

Web programming is an enormous topic, so there is no possible way that we can cover everything in one semester. In particular, we've purposely chosen not to cover these topics:

  • Graphical, layout, and typographical design for Web pages
  • Website usability, accessibility, and human factors
  • Web security and privacy
  • Web performance profiling, tuning, and optimizations
  • Web-scale data stores and data processing backends
  • Testing and quality assurance for Web applications
  • Effective product and project management to determine what to build in the first place rather than just how to build it

All of the above are necessary for building production-scale Web applications of the sort that power companies like Google, Facebook, and Twitter. However, it's impossible to expect a student to become proficient in all of these topics by simply taking a single course. Attempting to teach so much at once will dilute the subject matter to the point where it becomes useless.

Instead, we will cover only the most fundamental topics that lie at the heart of Web programming. That way, you can build up a solid foundation in your mind that will enable you to easily learn related topics in the future.