Syllabus
CSSE 290 – Introduction to Web Programming
Winter 2014-2015 (a.k.a. 201520)

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 very 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 into this course include:

Course Description

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

Future (2015-16) RHIT catalog description (approved by curriculum committee in October, 2014):
Introduction to the client-side and server-side mechanisms for creating dynamic web pages with persistent data storage. Browser-server interaction via HTTP. Static web page creation using HTML5 and CSS3. Client-side programming using JavaScript, DOM, JSON. Server-side programming and data storage using PHP and MySQL. Asynchronous client-server communication using AJAX and extensions of JavaScript. Session maintenance using cookies. Security considerations. This course provides breadth of knowledge of many tools/technologies rather than deep knowledge of any particular tool/language. No previous experience with web page creation is required.

Topics will include (as many as time allows):

  1. Browser-server interaction via the HyperText Transfer Protocol (HTTP).
  2. Static web page creation using HyperText Markup Language (HTML5) and Cascading Style Sheets (CSS3).
  3. Programs that run on the server, using the PHP Hypertext Processing language.
  4. Applications that run in the client's browser, using JavaScript.
  5. Dynamically changing web pages using JavaScript event-handling and the Document Object Model (DOM).
  6. JavaScript extension libraries, such as JQuery or Prototype.
  7. Asynchronous communication between a web application and server using AJAX.
  8. Object serialization using XML or JSON.
  9. Server-side database connections with mySQL.
  10. Cookies, authentication, and security.
  11. Higher-level server-side tools.
  12. 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 tools that we discuss, but should give you a 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 to have a small team project at the end of the course.

    Learning objectives (submitted to the CSSE department; approval expected December, 2014):
    1. Explain the client-server roles in fetching and rendering a web page; GET and POST requests.
    2. Use many different HTML tags and attributes; understand the difference between block and inline tags.
    3. Explain the three different ways of including CSS styles in a document, and their "cascading nature."
    4. Use CSS selectors, properties and layouts to obtain a specified appearance.
    5. Separate content from presentation by appropriate use of HTML and CSS.
    6. Design forms to collect information from users.
    7. Write simple PHP programs to process forms, including storing data in files.
    8. Write JavaScript code for simple interactive web pages; understand and modify the DOM.
    9. Use a higher-level JavaScript library, such as JavaScript or JQuery.
    10. Use JavaScript code to handle user events.
    11. Include AJAX calls in client programs; make use of XML and/or JSON.
    12. Connect server-side programs to a database, write simple SQL queries to store and retrieve data.
    13. Use cookies and sessions for persistent data.
    14. Describe some issues in web security.

    Course meetings, Contact info, Outside Help

    Class Meeting Times and Places

    Instructor

    Claude Anderson – Professor of Computer Science and Software Engineering

    Email: anderson <at> rose-hulman <dot> edu
    Office phone: x8331
    Office address: Moench F-210
    Home page: http://www.rose-hulman.edu/~anderson
    Office hours: I am usually in my office most other daytime hours when I don't have class or meetings. I try to keep my calendar up-to-date, so you can see times when I will definitely not be available: http://exchange.rose-hulman.edu/owa/calendar/anderson@rose-hulman.edu/Calendar/calendar.html

    Course Assistants

    Section 1 in-class
    Jackie ZhangJackie Zhang
    zhangx2 <at> rose-hulman <dot> edu
    Kennan French Kennan French
    frenchkt <at> rose-hulman <dot> edu
    Section 2 in-class
    Sarah Kim Sarah Kim
    kimb2 <at> rose-hulman <dot> edu
    Austin Niccum Austin Niccum
    niccumas <at> rose-hulman <dot> edu
    Grader/general assistant
    Micheal Trittin Michel Trittin
    trittimo <at> rose-hulman <dot> edu
    Email address that goes to instructor
    and all assistants:

    webdev-staff <at> rose-hulman <dot> edu

    Piazza

    Piazza will be our platform for questions and answers. I hope you will participate by both asking and answering questions. If you were not already a Piazza member, you should have received an invitation to join. 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. And they will also learn more if they explain things to you. Many 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.

    Book

    Required text

    WebStepBook Cover Art

    Web Programming Step by Step, by Marty Stepp, Jessica Miller, and Victoria Kirst. Available from the Rose-Hulman bookstore and from lulu.com. The authors often refer to the book as "WebStepBook", and so will I (and I'll abbreviate it WSB).

    Textbook's web page: http://www.webstepbook.com Especially useful are the Errata, References, and Supplements pages.

    If you find new errors in the textbook or in any course documents, I will give you some bonus points. Report them in the Bug Reports folder on Piazza.

    Course Materials Online

    Homework and In-class Exercises

    Due to limitations of budget and available workers, I have only one grader this term. With 48 students in the class, I may need to limit the number of graded homework assignments. I will give you many hands-on exercises (some of them created by Dr. David Fisher from the Rose ME department), but only a small number (I estimate that it will be between 6 and 8) of them will 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, usually on Wednesdays) 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 courses that you choose, depending on what background knowledge you already have. The requirement is that you accumulate n*50 points by the beginning of Thursday's class in week n (for n≤3), and 150+40*(m-3) points by Thursday of week m (4≤m≤8)

    Exams

    There will be three in-class exams, on Fridays of weeks, 3, 6, and 9. Each exam will have one or both of the following parts.

    1. Open textbook 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, and with your in-class partner
    10% Codecademy progress (50 points/week weeks 1-3, 30 points/week weeks 4-8)
    25% Graded Homework problems (I expect to have 6-8 of these)
    39% Exams (Fridays of weeks 3, 6, 9)
    16% Team Project (presentation during exam week)

    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 begged me to raise the cap and let them in.  If you are not going to be able to get up and get here on time, 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 points". Being more than five minutes late will count as one attendance point. Accumulating three attendance points before Christmas break or 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 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 communications 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 it.   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.

     

    When your question contains a "spoiler" for a homework problem, you should email webdev-staff@rose-hulman.edu.  I and the five course assistants will get your email, and hopefully one of us will respond quickly.

     

    Finally, if you have questions about grading, need to make an appointment, or other private communication, feel free to email me directly.  I usually check email several times per day, and do my best to respond quickly. 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 course-related email directly to me, please include 290 in your Subject: line (and include a real subject as well), so that I can quickly pick it out from among the dozens of daily email messages that I receive. Then I 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 290
    Good email subject line: CSSE 290: When is HW 1 due?

    I welcome your suggestions for improving the course. Please tell me about 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.

    Academic Integrity

    Recall the Institute 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 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!