Spring 2017 offering at LUMS as CS 300
An in-depth programming course for individuals with prior programming experience. Through extensive programming exercises, we will cover many computer science concepts and their applications to large problems. Since programming exercises can and will take a significant amount of time, plan your workload/signups on other demanding courses accordingly.
The goal of the course is to build the ability to construct large and complex software. One of repeated themes in the course is top-down design or its more sophisticated forms of contract-driven and test-driven development. The course covers functional programming in Haskell, proceeds with asynchronous programming in NodeJS and Typescript, and concurrent and parallel programming in Go.
In functional programming, the focus of the course is 1) top-down design and how to break problems, 2) how to avoid unnecessary variables, 3) how to treat and pass around computation like data, and 4) how to solve complicated problems using recursion.
In asynchronous programming, the focus of the course is 1) to understand fundamentals of event-driven systems, 2) designing programs around events, and 3) building an event-driven system using lambdas, closures, and continuations. Web applications will be discussed to understand the concepts of client-server application design and to see a real example of an event-driven system.
In concurrent programming, the focus of the course is 1) to understand the necessity to write multithreaded programs and the intrinsics of modern multithreaded computers, 2) to design applications around threads and to convert simple algorithms to parallel algorithms, 3) to be able to understand and fix multithreading issues, and 4) combining event-driven and functional features with multithreaded programming.
Tue/Thu 12:15–1:15pm SSE G-120A
Friday 11am–12pm, CS Student Lounge
TBD, CS Student Lounge
TBD, CS Student Lounge
Tue/Thu 11am–12:15pm, SSE 9-B2 and 4–5:15pm, SSE 10-201
CS 200 / EE 201
|20%||Assignments (There will be bonuses but total assignment marks cannot be more than 20. Plagiarism will be forward to DC. No late submissions accepted at all.)|
|70%||Lab examinations (3 lab exams)|
|10%||Attendance (Excluding the first 2 classes, you get 2/10 for attending 20 classes, 4/10 for 21, 6/10 for 22, 8/10 for 23, and 10/10 for attending all 24 classes. Attending a class means you are present from start of class to end of class.)|
Stack & Heap
Functional Programming in Haskell
Higher order functions
Types and Lambdas
No class in lieu of Exam 1.
Last day to drop this course is Feb 24 (Tentative).
Overview of Networks and protocols
Overview of web development
Asynchronous Event-driven programming
Last day to withdraw from this course is Mar 10 (Tentative).
Asynchronous web server
Asynchronous client server programming
Asynchronous file operations
Variable capturing in closures
No class in lieu of Exam 2.
Parallelism and Concurrency
Introduction to Go
Concurrency and Mutual Exclusion
Threads, Locks, Monitors, and Channels
Communicating Sequential Processes
Overview and Future directions
Debugging, Performance, etc.
No class (Tentative)