Syllabus

by Mike Gleicher on August 17, 2015

I always thought a “syllabus” was a description of the topics covered in class.

But, it is actually a more general discussion of official information about the class. (see https://kb.wisc.edu/vesta/page.php?id=43346 for the university’s definition).

This brief syllabus has the basic info. Really the course web is the syllabus, and most topics here are discussed in more detail somewhere (links provided from this document – although this document is written first, so that the links may appear later).

Basic Info:

Course Name and Number:

CS 638 Special Topics in Computing: JavaScript and Web Programming

The course numbers (638, 838) are the “Topics in Computing” – the generic numbers we use for new classes that haven’t gotten their own numbers yet.

Instructional Staff:

Instructor:
Michael Gleicher, Professor, Computer Sciences
Office: 6385 Computer Sciences
Office Hour: Wednesday 11-11:45, or by appointment
Preferred contact is by email: gleicher[at]cs.wisc.edu

There is no TA
So, please try to get questions answered using the online forums.

Class Meetings 

Tuesdays, 2:30-3:20
Until 10/27: Room 168 Noland Zoology
After 10/27: Room 1325 Computer Sciences

Also note: students are required to come to class.

Exam Period

We probably won’t have a final exam, but I reserve the right to schedule something in that timeslot.

Topics (see the detailed schedule for more information)

  • Basics: javascript and the web ecosystem (where do I code)
  • The form of the langauge: Variables, Hashes, Scope, Closures
  • Closures and Functional Programming
  • Functional Programming, Objects, Modules
  • Object System, Delegation, Language Idiosyncrasies
  • Interaction: basic elements
  • The DOM and dealing with web pages
  • Selection oriented programming and JQuery
  • SVG
  • D3 basics
  • CSS, Bootstrap
  • Principles of Design and Typography
  • Debugging
  • Performance Tuning

Learning Outcomes

Appreciate / Have a Sense of the Ecosystem that Javascript is part of.
Web-programming happens in an eco-system of tools and technologies, of which Javascript is part of. You need to put a bunch of different kinds of technologies together. Javascript by itself doesn’t really make sense – and you’ll run into it before you even write a line of code (since you’ll need to figure out where that code goes).

Understand the nature of functional programming in Javascript.
Javascript encourages functional programming, and uses functional programming concepts in its core – although these manifest themselves in different ways than other functional languages. Unless you start to think functionally, Javascript won’t make much sense, and you won’t be able to use it effectively.

Understand how to combine the basic elements of Javascript to achieve programming idioms.
The basic abstractions of Javascript (closures, hashes, delegation, …) are very flexible low-level things that get assembled in various ways to provide the higher-level abstractions (objects, modules, …) that are usful in building programs. Being aware of Javascript’s ideosyncracies is also important, since the basic building blocks don’t always work as desired.

Appreciate how the flexible nature of Javascript creates opportunities and problems.
Javascript is extremely flexible – which can create problems because almost everything is legal (so there is little built-in error checking), or opportunities. Knowing how to avoid the pitfalls, and make use of the flexibility to your advantage is the key to being a successful Javascript programmer.

Understand Javascripts connection to the web browser.
Most things in Javascript involve things going on in the web browser (both on web pages, but also in terms of communications with servers). Understanding how the web pages (and other data) are represented in the browser and how this relates to Javascript is important.

Understand selection-oriented programming.
Selection-oriented programming is a common paradigm for web programming – and is extremely useful. Understanding it, and its manifestations in Javascript libraries such as D3 and JQuery, is important. And being able to use these libraries without understanding the paradigm is difficult.

Understand the ways that visual style is handled in the web.
This is less of a Javascript thing, but appreciating CSS and other ways to create appearance on web pages is important since many things are best not done programmatically in Javascript.

Have a model for program performance.
It can be very difficult to performance tune web programs as they involve many components and many of the time consuming elements are hidden. However, understanding the execution model and being aware of performance analysis tools, are an important start toward writing programs that aren’t terrible.

Be able to use appropriate tools.
A great thing about Javascript is the quality of the available tools (debuggers, inspectors, checkers, …). Other general tools (like source control) should be applied as well.

Be able to complete programming assignments for CS559 and other upper-division courses requiring assignments to be implemented as in-browser programs.

Things we will not cover

We will not consider the “back-end” (anything server side). There might be some mention of it, but not much.

We probably won’t get to discuss frameworks, application architecture, …

We won’t talk much about user-experience design (but this class will prepare you for that).

We won’t talk much about many of the libraries/toolkits/APIs that you would probably want to use in practice (but you’ll be prepared to learn about them).

Text and Readings

One aspect of web programming is that the web really is the best resource for it (usually). Books and traditional media don’t evolve as quickly, don’t provide the diversity of viewpoints, and often aren’t the preferred venues of the “real experts.” (If you’re an expert programmer, you might be too busy to write a book, but willing to share your expertise). There are downsides to getting information from the web (how do you know you can trust it?), but to be honest books have this issue too. Except that if its a blog and its wrong, a lot of commenters will point out the problems and the author can update it.

Most of the time, I will tell you what to read about, not necessarily the specifics of what to read (althought usually, I will provide a suggestion). This is not because I am putting this class together at the last minute and had insufficient time to identify a great book. It’s more that I don’t believe the perfect book exists, and if it did, it wouldn’t be the perfect book for everyone.

For this class, I want to encourage you to seek information on the web. Part of learning to web program is to learn what the good resources are and how to find what you need. I want this to be a collaborative experience where everyone shares the things they find. What I have found is just that: what I have found. Each student in class will find more. Together, as a large team, we’ll find a lot.

Sometimes, I will be specific and require you to read a particular thing. Usually, this is because I feel the particular reading in question provides a particularly useful perspective. It’s less that they are the authorative “right answers,” but more a “thought provoking perspective.” These chapters and articles will be provided to you via the course web.

I will provide you with readings for most readings. In some cases, I will encourage (or require) you to find additional readings. See the reading assignments posting. All required (and recommended) readings will be made available online.

If I had to pick textbooks for this class (these will all be in the readings list):

Introductory Text: Eloquent JavaScript, by Marijin Haverbeke. (hardcopy at Amazon)

I like this book because it is “free” (it is free online, but you can buy a hard copy from a traditional publisher). I also like the spirit of the book (because it focuses on teaching JavaScript as a functional programming language, not as a traditional language). That said, I haven’t compared it to a lot of other books, and I didn’t use it to learn myself, and I haven’t read the whole thing.

Advanced Text: JavaScript: The Good Parts, by Douglas Crawford (hardcopy at Amazon)

This book is great since it really points out what is good (and bad) about JavaScript, and shows you how you can avoid the bad and use the good. It gives you a good way to think about JavaScript. The author’s (strong) opinions are only one right answer – but even if you don’t agree with him, seeing how he thinks about the problems is useful. The book is a little dated, but still a classic (to the extent that a book on a topic as modern and current as JavaScript can be).

We will have readings from this book (chapters provided via academic fair use), and the whole book is available from Wendt Library online. Or, you can support the author and buy a copy.

Reference Text: JavaScript: The Definitive Guide, by David Flanagan (hardcopy at Amazon)

Really, the best reference for JavaScript is the web – since things are evolving fast. But if you want one big comprehensive volume with bits about everything, this is it. It is a bit dated, but the core stuff is still applicable. This is available through Wendt Library online. Make sure to look at the most recent version (which is 5 years old).

How Students Will Be Evaluated

For Fall 2015, the class will be graded Pass/No Pass. Future offerings of the class may allow students to elect to receive a letter grade.

To receive a passing grade students must receive a passing score on all three parts of the class – doing well in one aspect of the class does not make up for doing badly in another.

  • Readings: students will be expected to do reading assignments and make online postings about them.
  • Programming: students will be expected to complete 4-5 small programming assignments, and one larger one.
  • Participation: students will be expected to make (at least) a minimal set of required postings. There will be in-class exercises that will serve to keep track of who shows up for class (showing up is sufficient to count as in-class participation)
  • Peer Evaluation: students will be required to read other students’ programs and comment constructively on them.

On-Time Policy: Officially, the deadlines are hard. I want you to do the reading (and the initial posting) by the date required, so you can move on to the next reading for the following week. However, I also don’t want to shut down the discussion forums in case good discussion is coming out of it. So, you will be able to make postings for a few weeks after the assignment is due. Don’t wait too long to make your first posting, because I might close a discussion without notice.

Course Infrastructure

We will use email to the students @wisc.edu email address for individual communications.

We will use the university provided class mailing list (to students’ @wisc.edu mailing lists) for announcements. However, the class web will be the primary mechanism for announcements.

The class web will be the primary source of information on the class, and students are required for its content. The website provides a facility to send email notifications ADD LINK of new information. You must sign up for this if you prefer this mechanism. We will use Canvas (course link)  as the course management system. Students will be required to submit assignments there, as well as to participate in online discussions. We will provide readings online through a protected reader  (web access only to students in the class – probably through Canvas) to comply with academic fair use standards.

Pre-Requisites

Students should be able to program in a high-level language (such as Python, Java, or C++). Having completed an introductory programming class (like CS302) is probably enough, but having a second semester (like CS367) will be better. Equivalent experience (and ability to program) is fine.

Late Policy

Things are due on the specified day. If something is due on a Thursday, it can be turned in anytime Thursday or before. 12:01 AM Friday is not Thursday.

Late assignments will be accepted, but they must be turned in at least one day before the next assignment is due. Lateness will be considered in grading. If you’re consistently late, you will be penalized.

Print Friendly, PDF & Email