CR: COMP 2405 Learning Objectives: Difference between revisions

From Soma-notes
Line 12: Line 12:
Systems Programming for Modern Applications
Systems Programming for Modern Applications


An introduction to the upper computational stack: language-based virtual machines, desktop environments, and web applications. Topics: dynamic libraries, scripting and functional languages, interpreters, compilation, databases, remote procedure calls, and performance and security concerns in modern distributed applications.
An introduction to systems-level concepts and technologies underlying modern, Internet-facing applications.  Focus is on functional languages, language-based databases, concurrency, and distributed systems. dynamic libraries, scripting and functional languages, interpreters, compilation, databases, remoteperformance and security concerns in modern distributed applications.





Revision as of 18:19, 22 June 2011

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, language-based databases, concurrency, and distributed systems. dynamic libraries, scripting and functional languages, interpreters, compilation, databases, remoteperformance and 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