Computer Science Department
College of Arts and Sciences
This course is a required sophomore/junior-level Computer Science course. It covers the fundamental concepts underlying the design and implementation of computing systems.
The philosophy underlying the design of this course is that students should be familiarized with problems that reoccur in software systems, and should be acquainted with the set of classical algorithms/techniques for solving such problems. In particular, it is important to develop the ability to recognize standard problems in different wordings and within unusual context, and match them with appropriate solutions.
Rigorous treatment of invariant concepts, algorithms, and performance evaluation methods underlying computing systems design. Topics include modeling and analysis of concurrent processing, computational resource scheduling and consumption, and performance evaluation techniques.
The following courses are required.
CS-210: Basic computer organization and software/hardware interface concepts, which are covered in CS-210.
CS-112: Programming and basic algorithmic thinking.
CS-237: Elements of combinatorics and of discrete and continuous probabilistic analysis (also covered in MA-293).
The following courses, while not required, are recommended for a better assimilation of some of the topics covered in the class.
CS-235: Concepts related to graphs and graph properties (also covered in MA-294).
MA-381: Elements of probability and statistics, including basic understanding of probability distributions, expectations, and correlation metrics.
Recommended Follow-up Courses:
The following courses build on knowledge assimilated in CS-350. They are natural follow-up courses in decreasing order of relevance.
CS-552: Introduction to Operating Systems (and if you like that, then try out CS-553 for some hand-on experience with OSes)
CS-455: Introduction to Networking (and if you like that, then try out CS-556 or CS-559 for advanced networking)
CS-410: Software Systems and Systems programming
CS-470: Performance Evaluation and Modeling of Computing Systems and Networks
CS-450: Introduction to Computer Architecture (and if you like that, then try out CS-550 for advanced/quantitative Computer Architecture)
CS-560: Introduction to Database and Information Systems (and if you like that, then try out CS-562 or CS-565 for advanced DB courses)
Function in the Curriculum:
As a core undergraduate course, CS-350 does not focus on particular implementations or specific technologies. On the contrary, it stresses the fundamental concepts and basic algorithms that have survived (and are likely to survive) the evolution of computer software systems in general, and operating systems in particular.
This course is significantly different in purpose and coverage from CS-210 (Computer Systems) and CS-410 (Software Systems). CS-210 and CS-410 introduce computer systems to sophomores using a hands-on approach by examining the "mechanics" and/or the "plumbing" of modern (or typical) computer operation through exposure to various interfaces between architecture, compilers, loaders, linkers, and run-time systems. CS-350 does not focus on a particular interface or a particular technology, rather it deals with fundamental notions and algorithms that are common to computing systems in general and to software systems in particular.
This course is required for the following courses: CS-552 (Operating Systems), CS-550 (Advanced Computer Architecture), CS-551 (Parallel Computing Architectures and Models), CS-455/655 (Data Communications), CS-560 (Databases), and CS 470/670 (Performance Analysis). In that respect, this course covers basic notions that we expect students (graduates and undergraduates alike) enrolling into these classes to have mastered. For example, it is inconceivable that a student who is interested in taking a database or an operating systems class, not to have been exposed to the notion of concurrent processing and mutual exclusion. Similarly, it is inconceivable for a student enrolled in a networking, database, or operating systems class, not to have been exposed to performance analysis using simple queuing systems, for example.
The topics covered in this class could be grouped under 3 general themes:
It is very important to realize that this is NOT an Operating Systems course. Despite the nature of the textbook, this course will not get into specifics of operating systems (e.g. API, Unix/Solaris/NT implementations). Of course, the concepts studied in this course are central to more advanced system courses (including Operating Systems, Networking, and Databases, as discussed above).