CS 771/871: Web Programming Paradigms

(Coordinator: James Weiner)

Catalog description

In this course you will learn languages to program the Web. Languages integrated into browsers, like JavaScript, and languages invoked on the server, like Ruby. You will also learn about frameworks, like Rails, and various techniques used to support the programming process. In addition, you will learn languages you will need to create, modify, and process Web documents. Although we will learn how to read and write in these languages, our primary goal will be an understanding of how the design of these multi-paradigm dynamic languages support the process of developing Web applications. Prereq: CS 403 and CS 671.

Attributes

  • This course is a CS elective.

Outcomes

  • methodologies of software development: software architecture paradigms, including client-server, convention over configuration (CoC), don’t repeat yourself (DRY), model–view–controller (MVC) and Representational State Transfer (REST).
  • concepts of programming languages: asynchronous programming, declarative and functional languages, event-based languages, dynamic languages, closures and promises.
  • principles and techniques of a range of advanced topics in computer science: concurrency based on events rather than threads (node.js), the active record pattern and object-relation mapping (ORM),
  • principles of operating systems: client/server paradigms, events (and interaction based on events), web services.
  • aware of social and ethical issues related to computing and the computing profession: privacy concerns due to tracking etc. fixing privacy issues with safe technologies e.g. cross-origin resource sharing (CORS).

Evaluation

7 to 10 Programming assignments - (50%), project - (25%), final exam - (25%).

Topics

  • Declarative Languages: HTML5, CSS, Scalar Vector Graphics (SVG)
  • XML Events
  • XML Applications: SVG
  • Functional Languages
  • XML Stylesheet Language (XSLT)
  • Prototype Languages: JavaScript
  • Client-Side JavaScript
  • Document Object Model (DOM)
  • JavaScript Object Notation (JSON)
  • Server-Side JavaScript: node.js
  • Asynchronous Programming with Event-Based Languages
  • Dynamic Languages: Ruby
  • Web Frameworks: Ruby on Rails, node.js
  • MetaProgramming in Ruby
  • Lazy Evaluation:

Textbooks

Recommended:

  • David Flanagan. 2011. Javascript: The Definitive Guide: Activate Your Web Pages (6th ed.). O’Reilly Media, Inc.
  • Sam Ruby, Dave Thomas, and David Heinemeier Hansson. 2013. Agile Web Development with Rails 4 (4th ed.). Pragmatic Bookshelf.
  • Dave Thomas, Andy Hunt, and Chad Fowler. 2013. Programming Ruby 1.9 & 2.0: The Pragmatic Programmers’ Guide. Pragmatic Bookshelf.
  • Eric A Meyer. 2006. CSS: The Definitive Guide (3rd ed.). O’Reilly Media, Inc.
  • Paolo Perrotta. 2010. Metaprogramming Ruby (1st ed.). Pragmatic Bookshelf.
  • Wilson, J 2013. Node.js, Pragmatic Bookshelf