Depending on your program, CSCI-GA 1170 Fundamental Algorithms, CSCI-GA 2110 Programming Languages and CSCI-GA 2250 Operating Systems might be required courses for your program of study. On rare occasion, an entering student may be granted an exemption from one or more of these courses. Please note that you do not earn any credits by being exempted from a course. It means that instead of taking the required course, you can select an alternate course.
To obtain such an exemption, please e-mail the Director of Graduate Studies for the MS programs (DGS), Professor Ben Goldberg, at [email protected] by Monday, August 24th. The student requesting an exemption must provide clear documentation showing that his or her previous coursework is the equivalent of the corresponding foundational course and, upon approval of the DGS, must pass a placement exam at the start of their first semester. The placement exam will be as challenging as the final exam in the corresponding course. When e-mailing Professor Goldberg, be sure to complete the attached form and submit to him in your e-mail. You should also e-mail him any supplemental materials that demonstrate your mastery of the course content area.
If you are a transfer student and wish to transfer one of the foundational courses, you should petition to take the placement exam. If the DGS approves you to take the placement exam and you pass the placement exam, then you can apply to transfer the corresponding course, assuming you meet the transfer of credit stipulations. If you are not approved to take the placement exam or if you do not pass the placement exam, then you will have to take our foundational course and cannot transfer the corresponding course.
The department will be holding placement exams on Thursday, August 27th in room CIWW 317. The schedule is as follows:
- Fundamental Algorithms: 9:00 a.m. - 11:00 a.m.
- Programming Languages: 11:30 a.m. - 1:30 p.m.
- Operating Systems: 2:30 p.m. - 4:30 p.m.
To help you prepare for the placement exams, you can refer to the following syllabus:
Topics:
- Analysis of the correctness and running time of algorithms.
- Basic data structures: arrays, stacks, queues, linked lists, binary trees.
- Recurrence equations.
- Sorting algorithms: mergesort, binsort, quicksort, heapsort.
- Selection. Binary search. Hashing.
- Binary search trees and balanced trees.
- Graphs: spanning trees, shortest paths, connectivity, depth-first search, breadth-first search.
- Algorithm design: dynamic programming, divide and conquer.
Bibliography:
- Cormen, Leiserson, and Rivest, Introduction to Algorithms, UPDATED: chaps. 1-5 1-4 + appendix A, 7-14 6-13, 23-26 22-25.
- Baase, Computer Algorithms, chaps. 2-4.
Topics:
- File systems.
- Memory management: Segmentation, paging, virtual memory, storage allocation. Concurrent processes, classical coordination problems, semaphores, critical sections, monitors. processor scheduling. I/O. The structure of UNIX.
Bibliography:
- Tannenbaum, Modern Operating Systems
Topics:
- Syntactic issues: regular expressions, context-free grammars (CFG), BNF.
- Imperative languages: program organization, control structures.
- Types in imperative languages: strong typing, type equivalence, unions and discriminated types in C and Ada.
- Block structure, visibility and scoping issues, parameter passing.
- Systems programming and weak typing: exposing machine characteristics, type coercion, pointers & arrays in C.
- Run-time organization of block-structured languages: static scoping, activation records, dynamic and static chains, displays.
- Programming in the large: abstract data types, modules, packages and namespaces in Ada, Java, and C++.
- Functional programming: list structures, higher order functions, lambda expressions, garbage collection, metainterpreters in Lisp and Scheme. Type inference and ML.
- Object-Oriented programming: classes, inheritance, polymorphism, dynamic dispatching. Constructors, destructors and multiple inheritance in C++, interfaces in Java.
- Generic programming: parametrized units and classes in C++, Ada and Java.
- Concurrent programming: threads and tasks, communication, race conditions and deadlocks, protected methods and types in Ada and Java.
Bibliography:
- Scott: Programming Language Pragmatics
- Stroustrup: The C++ Programming Languages
- Barnes: Programming in Ada95
- The Scheme Revised Report