Welcome to COGS 121!
[UNDER CONSTRUCTION: this content is still being updated and not finalized yet]
The objectives of this course are to:
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 personal informatics.
The most important prerequisites for this course are:
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.
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 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 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 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:
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.