CR: COMP 2405 Learning Objectives
Calendar Description
Current description:
Internet Application Programming
Design and implementation of Internet application programs. Topics include: fundamentals of the Web, introduction to client/server architectures, Internet programming, Web browsers, hypertext links, network programming.
New description:
Systems Programming for Modern Applications
An introduction to systems-level concepts and technologies underlying modern, Internet-facing applications. Focus is on functional languages, databases, concurrency, and distributed systems. Topics include: ???, security concerns in modern distributed applications.
Rationale: the course is designed to be a systems programming course for modern applications that must exist in an internet, web-connected world.
Assumed Background
Students should:
- know how to program imperative and object-oriented programs (Java-style), to the point of creating simple GUI-based programs and implementing standard simple data structures (lists, trees) and associated algorithms (search).
- have some background in systems programming, particularly UNIX systems programming. As such, they should know about processes and threads as abstractions and should be exposed to concurrency and network sockets.
- have interacted with modern websites.
Learning Objectives
- Be able to partition distributed application functionality between client and server in order to make appropriate trade-offs for latency, bandwidth, reliability, and security.
- Learn how to use closures and other meta-programming methods to create efficient, expressive programs in a distributed systems context.
- Understand how to create and use databases as a persistent store for distributed, online applications such as web applications, including how to design schemas that are both scalable and reliable.
- Be able to choose whether an SQL or a NoSQL-type database is appropriate for a given application.
- Learn how to create efficient code (in time and space) in dynamic languages such as JavaScript and PHP.
- Be able to implement a simple yet responsive (low-latency user interaction) web application consisting of client side code, server side code, and a database for a persistent store.
- Be able to create distributed applications that do not contain common security vulnerabilities such as cross-site scripting, cross-site request forgery, and SQL injection attacks.
- Learn how to choose appropriate data representation and exchange protocols for distributed applications, including the trade-offs between using XML, JSON, and custom representations.
Topics
Functional programming
- closures and their applications
- higher order programming
Databases
- data models: ER, relational, object, indexing, join
- query languages: SQL, noSQL
Concurrency
- locking, transactions
- basic control mechanisms
- multi core
Distributed Systems
- web technologies
- load balancing, fault-tolerance