Welcome to COGS 121!

The objectives of this course are to:

  • teach you the basics of full-stack web development (backend + frontend) using lightweight tools,
  • give you another opportunity to build a web app in a team,
  • and practice iterating based on feedback to reinforce the pedagogical lessons that you learned in COGS120/CSE170 (Intro. to Human-Computer Interaction).

The bulk of this course will revolve around developing a modern web application in a team and getting weekly feedback in class.

The project theme that we will focus on this quarter is designing for people very different from yourselves.

The most important prerequisites for this course are:

  • You have already taken COGS120/CSE170,
  • you want to do a lot more web programming,
  • and you have the technical background to pick up necessary programming skills on-demand as your project requires.

The best way to view this course is as a programming-focused sequel to COGS120/CSE170, picking up right where that course left off. Since this is a coding-intensive course, if you did not enjoy the programming labs and assignments in COGS120/CSE170, then you will probably not enjoy this course.

Course Philosophy

Web development is a huge and fast-changing field. Thus, it is impossible to cover everything in a single 10-week course. We aim to teach fundamental concepts that will make it easier for you to learn more advanced topics on-the-job.

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 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 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 tools throughout your career, you can cut through all of the incidental complexity of language syntax, configuration options, and API specs to understand the underlying principles embodied by those tools.

This expertise will make you a much more effective 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 will we not cover in this course?

Web application development is an enormous topic, so there is no possible way that we can cover everything in one 10-week quarter. In particular, we've purposely chosen not to cover these topics, even though they are all important:

  • Graphical, layout, and typographical design for web pages
  • Web security
  • Web accessibility
  • Deployment, cloud infrastructure, and configuration
  • 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. Instead, we will cover only the most fundamental topics that lie at the heart of web application development. That way, you can build up a solid foundation in your mind that will enable you to easily learn related topics in the future.