Syllabus
CSSE 280 – Introduction to Web Programming
Fall 2019-2020 (a.k.a. 202010)

Prerequisites and Course Content

Prerequisite

The formal prerequisite is: CSSE 220 – Object-Oriented Software Development or CSSE 221 – Fundamentals of Software Development Honors. You should be comfortable with programming in general.  If you have learned more than one programming language, that should make it easier for you to learn multiple languages/tools in this course.

The main things you should bring to this course include:

Course Description

This course will introduce principles of and some tools for Web programming.

Introduction to the client-side and server-side mechanisms for creating dynamic web applications with persistent data storage. Browser-server interaction via HTTP. Static web page creation using HTML5 and CSS3. Client-side programming using JavaScript, the DOM, and JSON. Server-side programming with Node.js and Express. Persistent data storage with MongoDB. Asynchronous client-server communication with AJAX and JavaScript extensions. Development and consumption of REST APIs. Deployment of web applications to cloud platforms or platform as a service providers. Security considerations. This course provides breadth of knowledge of many tools/technologies rather than deep knowledge of any particular tool/technology. No previous experience with Web development is required.

Topics will include (as many as time allows):

That list probably contains too many topics to cover in one term. I will try to find a "sweet spot" between too much breadth and too much depth. This course will not make you an expert in any of the topics that we discuss, but should give you sufficient background in each so that you can later pick up the rest on your own. Class sessions and homework will include many hands-on activities. I expect you to complete a small team project at the end of the course.

Learning objectives

  1. Use the modern Web standards model (e.g., HTML, CSS, and JavaScript) to structure, present, and add behavior to a Web document.
  2. Use a client-side Web development framework or library (e.g., jQuery) to build an interactive front-end Web application.
  3. Create a backend Web server application from the ground up using a modern runtime environment (e.g., Node.js with Express) and an iterative development process.
  4. Connect a back-end Web server application to a data backend; write back-end code to create, read, update, and delete data from the data backend.
  5. Develop a REST API in a back-end Web server application that return resources, e.g., in JSON format.
  6. Include asynchronous connections in a front-end Web application to consume a REST API exposed by a Web server application.
  7. Use best practice JavaScript patterns including: in developing Web applications.
  8. Deploy a Web application to a cloud platform, e.g., Heroku, Firebase.
  9. Discuss risks to web application stability, security, and compatibility, relating modern approaches to minimize those risks.

Course meetings, Contact info, Outside Help

Class Meeting Times and Places

Instructor

Dr. Jason Yoder – Assistant Professor of Computer Science and Software Engineering

Email: yoder1 <at> rose-hulman <dot>edu
Office phone: x8347
Office address: Olin O224
Office hours: I plan to be on campus from 9:00 AM to 5:00 PM Mon-Thu. If you would like to meet with me on Friday, please email and I can arrange to meet via phone call, Skype, or possibly in person. For Mon-Thurs if I am not in class, at lunch, or in a meeting, I will usually be in my office.

Course Assistants

In-class – Section 01: Yifei Li, Darius Daugvila
In-class – Section 03: Darcy (Yicong) Xie, Natalie Allen
Grader – All sections: Yang Gao

Piazza

Piazza will be our platform for questions and answers. You are expected to participate by both asking and answering questions. If you were not already a Piazza member, you should have received an invitation to join. Find more details in the Communication section.

Other Sources of Help

Besides the instructors and assistants, other students in the course can often be a great source of help. They will learn more if they explain things to you. Some students at Rose-Hulman have done significant web development. If one of them is your friend, why not ask her/him for help every now and then? Just be sure to not let someone else do your work for you.

Don't try to be the Lone Ranger in this course, especially if you do not find the course easy. If you find that you have worked on something for 30 minutes without making any progress, it's probably time to seek help! Software development is a team sport. The best programmers know that a fresh set of eyes can often spot a problem right away.

Text Books

Required texts

Web Design with HTML, CSS, JavaScript and jQuery Set 1st ed.

Web Design with HTML, CSS, JavaScript and jQuery Set 1st Edition , by Jon Duckett

Paperback: 1152 pages
Publisher: Wiley; 1 edition (July 8, 2014)
ISBN-10: 1118907442
ISBN-13: 978-1118907443

Links:

This is an excellent two-book combo that is well written and contains a many useful examples. Be careful with your books, however, because the binding is lacking.

Express in Action (Writing, building, and testing Node.js applications)

Express in Action (Writing, building, and testing Node.js applications), by Evan M. Hahn

Paperback: 256 pages, printed in black & white
Publisher: Manning Publications Co. (April 2016)
ISBN-13: 978-1617292422

Links: Availability

This is a great book that gives a gentle introduction of Node.js, Express, and MongoDB.

Course Materials Online

Homework and In-class Exercises

I will give you many hands-on exercises; all the homework will be graded, but not every in-class exercise may be graded.

It is important that you keep up with the course material as we go along. You should do the reading and the ungraded exercises; these should make the graded exercises easier.

Late Assignment Policy

All graded assignments must be turned in before the due time (always 11:59 PM or during class time) if you want credit for them. I will strive to leave enough time so that if you start on the day I give an assignment, you should have little trouble finishing it before the due time.

Codecademy

Codecademy.com provides interactive courses on a variety of languages/technologies that are relevant to this course, including

You may work on any of the free courses that you choose, depending on what background knowledge you already have. This should give you more practice with building web applications.

Exams

There will be three exams during weeks 3, 6, and finals week. Each exam will have one or both of the following parts.

  1. Open book, but not open computer (except perhaps for the use of Moodle to administer this part).
  2. Questions that ask you to write and/or enhance code to achieve a particular result. You will be allowed to use internet resources, but of course, no human resources.

Grading

Weight Criteria
10% Attendance, participation in-class, online, & with in-class partner
10% Quizzes
25% Graded Homework problems (I expect to have about 6-8 of these)
30% Exams (during weeks 3, 6, and final exam)
25% Team Project (presentation during week 10)

If your Exam average is significantly below your homework average, I reserve the right to lower your course grade, since the exams are my main way to measure what you can do on your own.

Attendance and Participation

The in-class time in this course constitutes an important learning experience. You should be there. Several students who did not get into this course have requested that I raise the cap and let them in. If you are not going to be able to commit to be here when the class meets, you should drop the class to make room for one of them.

Missing a class meeting, or being more than 20 minutes late, will count as two "attendance point". Being more than five minutes late will count as one attendance point. Accumulating six attendance points before the end of the term may result in a failing grade for the course.

Attendance is the starting point for the participation grade.  When you are in class, you should participate in discussions and in-class exercises, and assist your in-class partner as the two of you work on assigned tasks.

Communication

Piazza will be the main communication medium for this class. You should either subscribe so that you get automatic emails, or check the Piazza site daily. If you have questions or want to discuss something, Piazza is the place to do so. When I make course announcements between class meetings, I will usually post them on Piazza. If someone else posts a question and you know the answer, do not be shy about answering! There are lots of small things that hang people up in web programming; a quick answer from a fellow-student can make a big difference.

Finally, if you have questions about grading, need to make an appointment, or have other private communication, feel free to email me or a TA directly. We usually check email several times per day, and will do our best to respond within 24 hours. I also expect you to check your email daily (not necessarily on weekends, although even that is not a bad idea). When I send mail to you, I will use your Rose-Hulman address. If you do not currently read mail that is sent to that address, please have it forwarded to wherever you do read mail.

When you send a course-related email directly to me or a TA, please include 280 in your Subject: line (and include a real subject as well), so that we can quickly pick it out from among the dozens of daily email messages that we receive. Then we can respond to you more quickly. If an answer to your question is likely to help others in the class as well, or if you think other students may be able to answer it, consider posting it on Piazza instead of sending email. If I think everyone should see your question and the answer, I will ask you to post your question on Piazza before I answer it.

Bad email subject line: When is HW 1 due?
Bad email subject line: CSSE 280
Good email subject line: CSSE 280: When is HW 1 due?

I welcome your suggestions for improving the course. Please notify me of things in the course that help you to learn, and things that I might do to improve the learning experience for you. If there is something that you'd like to tell me, but don't feel comfortable with having me know who it comes from, you can use the Anonymous Suggestion Box survey that I will provide on Moodle. You can also post anonymous messages to the instructor on Piazza.

While we hope you feel comfortable speaking with any faculty in the department, if you have a concern and are not sure where to go, the following CSSE faculty have volunteered to be ombudsmen for the department: Sid Stamm (F216), Amanda Stouder (F222), Kim Tracy (D216), Robert Williamson (F205), and Vibha Alangar (set up a meeting with her at alangavr <at> rose-hulman <dot>edu ).

Academic Integrity

Recall the Institute's General Policy on academic misconduct:

Rose-Hulman expects its students to be responsible adults and to behave at all times with honor and integrity.

Exams and homework will be done on an individual basis, except where explicitly noted. The simple rule of thumb for individual homework is:

Never give anyone your code or use someone else's code.

Such exchanges are definitely cheating and not cooperation. The CSSE department statement on academic honesty has more detailed advice.

We encourage you to discuss the problems and general approaches to solving them with other students, and to get help with debugging. However, when it comes to writing code, it should be your own work (or the work of your group if it is a group assignment). If you are having trouble understanding how some library code works or pinning down a run-time or logic error in your program, by all means talk to someone about it. Get help with debugging when you need it.

If you use someone else's ideas in your solution, you must:

If you are ever in doubt about whether some specific situation violates the policy, the best approach is to discuss it with your instructor beforehand. This is a very serious matter that we do not take lightly. Nor should you.

For graded assignments, you should not look at another student's code to get ideas of how to write your own code. Beginning the process of producing your own solution with an electronic copy of work done by other students is never appropriate.

Plagiarism or cheating (e.g., turning in code from exam after the due time) will result in a negative score (i.e., less than zero) for the assignment or exam. Egregious cases will result in a grade of “F” for the course. More importantly, such dishonesty steals your own self-esteem and your opportunity to learn. So, don't cheat!

Professional Behavior

Students are expected to behave professionally. A lack of professional behavior in a student’s interactions within a team, with an instructor, teaching assistants or during in-class activities can result in a penalty grade. Depending on the nature and the egregiousness of the behavior, the penalty grade might be a reduction in letter grade or an F in the class.