Ryan Bensussan Harvey Instructor in Computer Science

COSC A319 Internet Technologies
Syllabus (General)

Table of Contents

Course Description

From the Instructor

This course introduces students to the world of internet and networked systems development. Concepts related to distributed systems development; concurrent and asynchronous processing; process communications and network transport protocols; distributed application architecture and design; deployment, monitoring and debugging of internet-based systems; and web of things development will be covered.

From the Undergraduate Bulletin

This course explores the concepts and technologies that are used in modern Internet systems, and provides the necessary skills and knowledge of software technologies needed for creating Internet/Web services. It is designed to expose students to web content presentation and generation technologies, programming, and building multi-tiered client/server web applications.

Prerequistes

One of:

To be successful in this course, students are expected to have practical experience building multi-file/multi-component software projects. In particular, students should be comfortable working with data structures, designing classes and class interfaces, and writing software modules that form part of a larger application.

Learning Objectives

Students will experience the design and construction of internet-based systems through hands-on interaction with course material. The course will provide students with a basis of theory upon which to reflect upon experiences: designing and building server-side systems that must communicate with client systems via internet protocols; designing and building client systems that operate and interact with the server system concurrently and asynchronously; debugging process timing and network failure issues; and understanding the network designs and protocols that enable the modern internet.

Learning Outcomes

Upon completion of this course, students should be able to:

  • Understand and explain the theoretical approaches to dealing with concurrency in software and the types of problems that can occur when software processes operate concurrently
  • Understand and explain the theoretical approaches to building software systems with components that operate asynchronously
  • Understand and explain how messages travel between systems on the internet, including the various protocols used and what information they require and provide
  • Build parsers for key internet communication protocols and how they interact to enable modern web applications
  • Understand what types of services are offered by commercial cloud providers, and how those services fit into internet-based distributed software architectures
  • Build and deploy server-side API software capable of serving multiple client software types
  • Build and deploy web-based client software that communicates with a server-side API
  • Reflect on the unique requirements of internet-based software
  • Reflect on the collection of technologies that enable the modern internet
  • Reflect on your own learning process and be able to improve your own learning
  • Know where to look for more information on the topics covered in this course

Learning Format

Content Delivery. This course is taught in an experiential format. While there are lectures on the conceptual content (network models, application architectures, failure modes, protocols, etc.), these are delivered alongside practice lab and demo sessions and hands-on work on a semester-long individual project that provides direct experience with a number of these concepts. Where it is impossible to present conceptual content through the project, demonstrations during class and assignments are used to help make conceptual content clear.

Critical Reflection. With an experiential format, research has shown that students retain material better when they reflect critically on their learning. As such, students will be expected to write weekly reflection journal entries, as well as a short personal reflection essay at the end of the semester.

Assessment. There are no exams in this course. In fact, assignments and project work do not have numeric grade values either. Instead, at the midterm and the final, you will be expected to write a reflection-based grade proposal and defense. In this short paper, you will indicate what letter grade you feel you have earned in the course and defend that grade to me by reflecting on specific examples of your work, learning, and accomplishments.

Selected Topics

This course generally covers some combination of the following topics:

  • The Internet
  • The OSI Layered Network Model
  • Protocols of the Internet (TCP/IP and friends)
  • JavaScript
    • Language & runtime, debugging, and internals
    • In-browser JavaScript, the JS API, and the DOM
    • JavaScript on the server via Node.js
    • JavaScript in desktop apps via Electron
    • JavaScript on mobile devices via React Native
  • Distributed system architectures and the cloud
  • Building, testing and running distributed systems
  • Processes, threads, concurrency and asynchronous operation
  • Network Failure Modes & Mitigation Techniques
  • Replication, scalability and fault tolerance
  • Internet/distributed systems security
  • Embedded devices and the Web of Things