An in-depth programming course for individuals with prior programming experience. Through extensive programming exercises, we will cover CS 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. Ability to build large and complex software. To become comfortable in developing large scale projects Get an appreciation for core CS courses and their applications in programming Understand and enhance programming speed
Office Hours:

Thu 1:30-2:30pm, 9-120A

Muhammad Suleman Mahmood, TA
Office Hours:

Mon 11:30-1pm, Lab 1

Ahmed Mehfooz, TA
Office Hours:

Mon 11:30-1pm, Lab 1

Anam Sohail, TA
Office Hours:

Mon 11:30-1pm, Lab 1

Course Information

Class meetings

Wed/Fri 9AM–10:15AM in A-3


CS 200 / EE 201

Required text



30%Assignments (6 x 5%)
10%Quizzes (Some announced and some unannounced)
40%Mid-term examinations (2 x 20% lab exams)
20%Final (lab exam)
0%Attendance (-1 for each class missed. Arriving late and leaving early is equivalent to missing.)


Academic dishonesty

You must not turn in work that is not yours. You must not enable someone else to turn in work that is not his or hers. Do not share your work with anyone else and adequately protect all your files. You must not allow someone to openly violate this policy because it diminishes your effort as well as that of your honest classmates.

Changing your exam answers after they have been graded, copying answers during exams, or plagiarizing the work of others will be considered academic dishonesty and will be subject to disciplinary penalties, including the possibility of failure in the course and/or dismissal from the University. Plagiarism detection software will be used on the programs submitted in this class.

Attendance & class decorum

Attendance is required and one mark will be deducted for every class missed. As per Computer Science Department policy, no one will be allowed in class after 5 minutes of scheduled start time. If you do not attend, do not expect me or any TA to repeat the material for you.

Your behavior should not be disruptive during class and should not hinder in other students’ learning. In particular do not chat with your neighbors. Keep your cell phones turned off in class. You can use laptops to take notes but make sure they do not disturb anyone in your surroundings.

Late submissions & missed exams

All work must be turned in by electronic submission before the deadline (no e-mailed submissions). Do not submit at the last moment. If you submit your assignment late even by a second, it will not be considered.

Under exceptional situations (e.g. emergency medical), I may give extra days but under no circumstance, the extra days will be awarded after the deadline has already passed.

Petitions for missed mid-term and final examinations approved by the Office of Student Affairs will most likely receive an average score after a deduction according to their semester performance.

Tentative Schedule


Introduction & Administrivia

Java and JVM Basics and git Introduction

Oracle Introductory Tutorial of Java

Polymorphism and socket Introduction

Oracle Tutorial on Sockets

Oracle Tutorial on Streams

Function call stack and Introduction to threads

Oracle Tutorial on Concurrency

Monitors and condition variables

Exception handling

Oracle Tutorial on Exceptions

How to use variables and statements

Code Complete 2: Ch 10, 11, 12, 14, 15, 16, 18, 19, 31, 32

Designing good classes and methods

Code Complete 2: Ch 6, 7

Defensive Programming

Functional Programming and Clojure.

Also the last day to drop this course.

More about git branches, Clojure lambdas and Lazy sequences

Git Basic Branching and Merging

Lambdas, closures, higher-order functions

Top-down design, contract-driven and test-driven development

Top-down design with example

Also the last day to withdraw from this course.


Data manipulation in Clojure

No Class in lieu of Mid 1.

Mid-Semester Break

Mid-Semester Break

Manipulating trees

Manipulating graphs

Asynchronous Event-driven programming

No class in lieu of Mid 2


Javascript and nodeJS

Asynchronous web server

Asynchronous client server programming

Asynchronous file operations

Variable capturing in closures

Labour Day


Performance Analysis