Course Syllabus

Course Description

This course will teach you the skills and techniques necessary for creating sophisticated and accessible interactive web applications. It focuses on the client-side languages, tools, and libraries that professionals use to build the web sites you use every day. We will learn not only the basic syntax and mechanics of web development, but also the best practices that separate professional developers from amateurs. Upon completing this course, students will be able to build robust web applications, and will have the foundation for independently learning new skills in the every-changing world of web development. This course is intense and our expectations are high, but we will make sure that everyone, including the total beginners, are prepared to succeed.

Prerequisites: CSE 142; INFO 201.

Learning Objectives

After completing this course, students will be able to:

  • Produce web pages that are well-formed, standards-compliant, semantically rich, and universally accessible.
  • Style the appearance of those pages to create intuitive, usable, and engaging experiences for human readers on different kinds of devices.
  • Create interactive and feature-rich web applications leveraging existing programming frameworks, libraries, and APIs.
  • Interpret documentation in order to harness existing software packages for web development.
  • Utilize development tools to automatically manage, implement, and validate web applications.

Course Structure

As with any form of computer programming, the best way to learn web development is by doing it. Moreover, web programming is a constantly and rapidly changing discipline, so professional developers need to constantly learn new tools and techniques on their own.

To help you practice this web programming and independent learning, this course is offered in a mostly "flipped instruction" format. This means that all the information needed for the course is available in the course book, rather than introduced during scheduled meeting times. Instead, meetings will be used for focused review activities and collaborative work time for assignments. Instead of getting information in lecture and doing assignments at home, you'll get information at home and (partially) do assignments in lecture.

This structure will you allow you to work at a pace that is comfortable for you individually, rather than requiring lectures to fit a diverse range of backgrounds. It also means you'll easily be able to get more direct support when learning and practicing the material: whether from us or from other students in the class.

However, this structure does require you to take more responsibility for your own learning: it is up to you to read the course materials before each class meeting, and to be willing to ask questions and seek help if there are any problems. We will serve as mediators and support for your learning, but your participation in and outside of class is essential. You are accountable for your own learning—but we are here to help!

Class Attendance

Make every effort to attend each class meeting (including lab sections!). Class will begin and (usually) end on time. Please do your best to get to class before the start of the session. Students are expected to attend all meetings, with exceptions permitted in case of illness and family emergencies.

Please silence all cell phones/pagers/etc. before the beginning of each class. You should bring your laptop for in-class work, but please don't use class time (lecture or lab) to check your email, update your Facebook, read reddit, watch YouTube, make dank memes, seize the means of production (allowed), etc. Such usage is distracting and interferes with learning both for you and for all the other students around you. Spend class time on class materials. If another student's activity is distracting, please ask them to stop it (or let us know outside of class).

Correspondence

We will send out official course announcements and information by email, so you should check your email daily (it may not be hip, but it's accessible and effective!) Note that this email will go to your uw.edu address. If you prefer to read your email on another account, you should set your UW account to forward your email to your preferred account.

You are welcome to email me at any time. When emailing, please make sure to sign your emails! This will let me know who is writing and will help us to better answer questions.

I have also set up a Slack team for questions and discussion. I encourage you to use that to ask for programming help rather than email: this lets you get support from the whole of the class (not just the professor), and is more conducive to the kinds of small questions that come up when programming.

Note that I will generally not be available to answer questions on the weekend; you should not expect a response from me then.

My official office hours are listed on the home page, but if my door is open then I am more than happy to talk about any questions or concerns you may have about the course or its material. We can also schedule a specific time to chat that works better for you.

Assignments

Find complete assignment details and due dates on the Assignments page.

This course will involve two types of assignments:

Problem Sets

Each topic in this course will be accompanied by a number of practice problems. Each problem is a small(ish) directed programming exercise designed to give you practice with a particular web development concept. Problems will be graded on a "completion" basis: you will get credit when the problem is finished and passes all its functionality tests.

You can move at your own pace through these, but will need to complete one problem set each week to stay on track.

Course Project

You will also be creating a large project that brings together all of the concepts learned learned through the exercises. In the end, the project will be an interactive web application of your own design, implemented in collaboration with a team. See the project overview for complete details.

Although you'll be working on a single project throughout the quarter, the development will be divided into different stages, each with its own requirements and deadline. Stages will be due approximately every 2 weeks.

Grading

Your grade in this course will depend on your completing the problem sets and project stages thoroughly and on time. Active participation during class meetings and overall support of the learning environment will also be a factor.

Final grades are determined based on the iSchool Standard Grading Scheme. I urge everyone to focus not on the grade itself but on learning what's necessary to earn high scores; the grades will follow from that.

Late Assignments

Late assignments will lose 10% per 24-hour period they are late. After 3 days, students may receive a maximum of up to 70% of the points possible.

However, each student also has three (3) "late days" that can be used for "no questions asked" extensions on project deliverables. Late days are spent in 24h increments. Group assignments require one late day from each group member for each 24h used.

Resources

A number of challenges from a variety of directions can affect your ability to bring your optimal attention and energy to a course. Student Resources is a set of links to campus resources that UW makes available to students in trying to mitigate and cope with some of these challenges. This includes disability accommodations, physical and mental health, and community connections among others. If you are having any difficulties, please contact your academic advisor for support, or Health & Wellness at http://livewill.uw.edu. Furthermore, please notify the professor if you are comfortable in doing so. This will enable me to provide any resources that I may possess.

I encourage all students having difficulty, whatever the reason, to consult privately with me at any time.

Academic Conduct

The standard iSchool and UW academic policies that apply to all of our courses, apply here as well.

Diverse backgrounds, embodiments, and experiences are essential to the critical thinking endeavor at the heart of higher education. We expect you to be respectful of the many social and cultural differences among us, which may include, but are not limited to: age, cultural background, disability, ethnicity, family status, gender identity and presentation, citizenship and immigration status, national origin, race, religious and political beliefs, sex, sexual orientation, socioeconomic status, and veteran status. Please talk with me right away if you experience disrespect in this class—from any source (including teaching staff)—and I will actively work to address it.

Collaboration

The iSchool encourages and supports collaboration. The goal of this course is to learn the material—to be able to create new web-based information systems on your own. You are encouraged to utilize any available resources, including your classmates, to **learn** these skills. You are welcome to discuss exercises and problems with others, to work through challenges in pairs, to seek help if you get stuck, and to share guidance and expertise if requested. Help each other to become experts!

But "collaboration" does _not_ mean just copying other people's code and trying to pass it off as your own. You can discuss problems and even work through solutions together, but the final product (the code you create and submit) should come from your own brain and your own hands.

The point of assignments is for you to learn to complete them. This includes the entire process of getting the solution—_including_ the false starts, bugs, misconceptions, and mistakes—because the learning occurs in the doing. Completely apart from the ethical issues, copying a solution without understanding deprives you of the whole point of the assignment, and frankly is a waste of your time.

A good rule of thumb: When working on an individual assignment, no other student's code should **ever** be on your computer. Not ever shown on your screen (including as an image or screenshot), not saved to a file on your harddrive, not found in an email under your account, etc.. You can verbally talk through the code to write, but make sure you understand what and why your implementation works—and if you're not sure, ask!

  • DO: Ask people for help finding bugs.
  • DO NOT: Let someone else type code for you.
  • DO: Talk through problems sets in pairs.
  • DO NOT: "Split up" problem sets so you only do half the work.
  • DO: Give credit when you get help or advice from someone.
  • DO NOT: Copy or adapt an assignment from a previous quarter.

Code Reuse

Although professional web developers often reuse code they find on the web, they also take the time to understand what that code is doing, customize it to their specific context, and cite the source so that they can find it again later. If you want to use code you find on the web, you MUST include a reference to where you found the code (a URL in a comment is fine), and take the time to understand why it works. Otherwise you won't learn anything. For example, there are lots of code skeletons for creating interactive visualizations on the web. It's fine to use these, just be honest about it. Failing to give appropriate credit is a form of plagiarism, and so is considered cheating.

Academic Honesty

The consequences of academic dishonesty are not worth the risks. The simple rule is: do not claim anyone else's work, code, words, or ideas as your own. If you're in doubt, come talk to me in advance.

If we determine that you violated the collaboration policy and plagiarized code, you will get an automatic zero on the assignment, and will force us to file an academic misconduct report with the Associate Dean of Academics. Note that both students will be considered to be at fault in the case of unauthorized code sharing.

If you're having problems in the course, come and speak with me; never take the shortcut of copying someone else's work. It isn't worth it.

Course Summary:

Date Details Due