 (303) (LecLabCredit Hours) This is a first course in computer programming for students with no prior experience. Students will learn the core process of programming: given a problem statement, how does one design an algorithm to solve that particular problem and then implement the algorithm in a computer program? The course will also introduce elementary programming concepts like basic control concepts (such as conditional statements and loops) and a few essential data types (e.g., integers and doubles). Exposure to programming will be through a selfcontained userfriendly programming environment, widely used by the scientific and engineering communities, such as Matlab. The course will cover problems from all fields of science, engineering, and business.
Close 

 (324) (LecLabCredit Hours) This is an introductory programming course using the Java language. The topics include: basic facts about objectoriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.
Close 

 (224) (LecLabCredit Hours) The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and baseb notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.
Close 

 (303) (LecLabCredit Hours) This course introduces students to the infrastructure underlying the Web, including protocols and markup languages. It also addresses the question of how one presents large volumes of information to people who need to find out what they are looking for quickly. The scope of the course ranges from mechanics to aesthetics. Social and ethical issues are also discussed, including the concept of information ecologies for social acceptance. Networks and protocols; pervasive computing; Web protocols; markup languages and XML; defining information architecture; understanding information needs and informationseeking behaviors; organizing Web sites and intranets; navigation systems; search systems; thesauri; from research to design: strategies for information architecture; enterprise information architecture; ethics on the Web; and information ecologies.
Close 

 (404) (LecLabCredit Hours) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, and switch/case. Loop operations, while, do/while, and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, and operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, and priority trees with applications. Trees and simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284.
Close 

 (404) (LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms. Corequisites: CS 135 Discrete Structures (224)(LecLabCredit Hours) The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and baseb notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course. Close 
Prerequisites: CS 181 (404)(LecLabCredit Hours) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, and switch/case. Loop operations, while, do/while, and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, and operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, and priority trees with applications. Trees and simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284.
Close 
Close 

 (004) (LecLabCredit Hours) This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis. Corequisites: CS 135 Discrete Structures (224)(LecLabCredit Hours) The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and baseb notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course. Close 
Prerequisites: CS 115 (324)(LecLabCredit Hours) This is an introductory programming course using the Java language. The topics include: basic facts about objectoriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.
Close 
Close 

 (303) (LecLabCredit Hours) The course provides a basic introduction to the key concepts in security. It covers basic concepts such as authentication, confidentiality, integrity, and nonrepudiation as well as important techniques and applications. Topics include access control, security economics, ethics, privacy, software/operating system security, and security policies
Close 

 (303) (LecLabCredit Hours) Introduction to recursive functional programming and equational reasoning; lists as inductive types and list induction; introduction to formal languages, automata, and the theory of computation; regular expressions, finite state machines, and pumping lemma; context free grammars and push down automata; turing machines, recursive enumerability, and unsolvable problems; and complexity and intractability. A number of models of computation are considered, as well as their relation to various problem classes (e.g. solvable problems and polynomial time solvable problems). Some experiments are performed that involve writing small Scheme programs.
Prerequisites: CS 115 and (324)(LecLabCredit Hours) This is an introductory programming course using the Java language. The topics include: basic facts about objectoriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.
Close 
CS 135 (224)(LecLabCredit Hours) The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and baseb notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.
Close 
Close 

 (303) (LecLabCredit Hours) This course provides a general introduction to the essentials of the software development process, that series of activities that facilitate developing better software in less time. The course introduces software development and deployment life cycles, requirements acquisition and analysis, software architecture and design, and resource management and scheduling in the implementation phase. Students gain experience with tools and methodologies for configuration management and project management. Security engineering is considered as an essential part of the software development process, particularly from the standpoint of applied risk management.
Prerequisites: CS 181 or (404)(LecLabCredit Hours) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, and switch/case. Loop operations, while, do/while, and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, and operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, and priority trees with applications. Trees and simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284.
Close 
CS 284, (224)(LecLabCredit Hours) This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis.
Close 
CS 135 (224)(LecLabCredit Hours) The aim of this course is to integrate knowledge of basic mathematics with the problems involving specification, design, and computation. By the end of the course, the student should be able to: use sets, functions, lists, and relations in the specification and design of problems; use properties of arithmetic, modular arithmetic (sum, product, exponentiation), prime numbers, greatest common divisor, factoring, Fermat?s little theorem; use binary, decimal, and baseb notation systems and translation methods; use induction to design and verify recursive programs; and implement in Scheme all algorithms considered during the course.
Close 
Close 

 (003) (LecLabCredit Hours) Gives students practice in solving challenging problems by applying algorithmic problem solving techniques learned in prior courses. Students will develop their problemsolving, algorithmcreation, and programming abilities. Problems will be complex and will require invention of an algorithm, not simply straightforward application of standard techniques. Students will work in teams. To provide a focus point and to help make the course fun, students will program their solutions in a style similar to that employed by programming competitions such as the national ACM programming contest. May be repeated for credit.
Prerequisites: CS 182 or (404)(LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms.
Close 
CS 385 (224)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Close 
Close 

 (303) (LecLabCredit Hours) Digital systems; number systems and codes; Boolean algebra; application of Boolean algebra to switching circuits; minimization Boolean functions using algebraic, Karnaugh map, and tabular methods; design of combinational circuits; programmable logic devices; sequential circuit components; design and analysis of synchronous and asynchronous sequential circuits.
Prerequisites: CS 115, (324)(LecLabCredit Hours) This is an introductory programming course using the Java language. The topics include: basic facts about objectoriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.
Close 
CS 181 (404)(LecLabCredit Hours) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, and switch/case. Loop operations, while, do/while, and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, and operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, and priority trees with applications. Trees and simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284.
Close 
Close 

 (303) (LecLabCredit Hours) The main aspects of computers: data (data types and formats, number bases), hardware (stored program computer concept, addressing methods and program sequencing, instruction sets and their implementation, the CPU and microprogrammed control, input/output organization, peripherals and interfacing, and main memory), communication (network protocols), software (operating systems, dispatching algorithms), and assembly language programming. Corequisites: CS 181 or Introduction to Computer Science Honors I (404)(LecLabCredit Hours) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, and switch/case. Loop operations, while, do/while, and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, and operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, and priority trees with applications. Trees and simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284. Close 
CS 284 Data Structures (224)(LecLabCredit Hours) This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis. Close 
Prerequisites: CS 115 (324)(LecLabCredit Hours) This is an introductory programming course using the Java language. The topics include: basic facts about objectoriented programming and Java through inheritance and exceptions; recursion; UML diagrams and how to read class diagrams; ethics in computer science; and some basic understanding about computer systems: the compile/link/interpret/ execute cycle and data representation.
Close 
Close 

 (224) (LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Prerequisites: CS 181 or (404)(LecLabCredit Hours) Getting acquainted with C++: data types, input and output, functions, writing simple C++ programs, flow control, Boolean expressions, decision statements, if/then, and switch/case. Loop operations, while, do/while, and for loops. Arrays and pointers. Defining structs and classes, constructors and destructors, and operator overloading using an example String class. Templates. Abstract data types: vectors, lists, stacks, queues, and priority trees with applications. Trees and simple sorting with searching algorithms. By invitation only. Students who complete this class are exempt from CS 115 and CS 284.
Close 
CS 284 (224)(LecLabCredit Hours) This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis.
Close 
Close 

 (334) (LecLabCredit Hours) A study of the implementation of digital systems using microprocessors. The architecture and operation of microprocessors is examined in detail along with I/O interfacing, interrupts, DMA and software design techniques. Specialized controller chips for interrupts, DMA, arithmetic processing, graphics and communications will be discussed. Laboratory includes: Hardware and software design of digital systems using microprocessors. Design experiments concerned with bus interfacing, memory decoding, serial communications and programmable ports. Also included are experiments with DMA transfer and interrupt control. Experiments are performed on industry standard microcomputer systems.
Close 

 (303) (LecLabCredit Hours) Introduction to systems programming in C on UNIX. Students will be introduced to tools for compilation, dynamic linking, debugging, editing, automatic rebuilding, and version control. Some aspects of the UNIX system call interface will be studied, drawn from this list: process creation, signals, terminal I/O, file I/O, interprocess communication, threads, network protocol stacks, programming with sockets, and introduction to RPC. Style issues to be covered include: naming, layout, commenting, portability, design for robustness and debugability, and language pitfalls. X programming and GUI design will be covered, if time allows.
Prerequisites: CS 182 or (404)(LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms.
Close 
CS 385 (224)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Close 
Close 

  (101) (LecLabCredit Hours) Under the guidance of a faculty member, students will prepare for, participate in, then evaluate an experience in which the students represent Stevens in an off campus team outreach activity. Examples of such activities include, but are not limited to, technical competitions, crossdiscipline design contests, and Ambassador programs. Course may be repeated as a free elective up to a maximum of 3 credits.
Prerequisites: CS 182 or (404)(LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms.
Close 
CS 284 (004)(LecLabCredit Hours) This is a course on standard data structures, including sorting and searching and using the Java language. The topics include: stages of software development; testing; UML diagrams; elementary data structures (lists, stacks, queues, and maps); use of elementary data structures in application frameworks; searching; sorting; and introduction to asymptotic complexity analysis.
Close 
Close 

 (101) (LecLabCredit Hours)
Students explore tradeoffs posed by modern information technologies such as the Internet, mining of personal data, web tracking, and surveillance systems. Also covered are major debates about how IT technologies should be harnessed to serve the greater good, such as: Internet governance, privacy vs. openness, and laws regarding intellectual property. Students will learn how actions undertaken in their daily lives as IT professionals may have broad consequences, both planned and unplanned. Students will learn how to identify and analyze these consequences and who may be affected by them. Student must be a senior computer science or cybersecurity major.
Close 

 (303) (LecLabCredit Hours) Students in this course work in teams to develop real software for real clients. Topics in software engineering additional to, or more advanced than those taught in CS 347 are introduced "just in time," as needed.
Prerequisites: CS 347 and (303)(LecLabCredit Hours) This course provides a general introduction to the essentials of the software development process, that series of activities that facilitate developing better software in less time. The course introduces software development and deployment life cycles, requirements acquisition and analysis, software architecture and design, and resource management and scheduling in the implementation phase. Students gain experience with tools and methodologies for configuration management and project management. Security engineering is considered as an essential part of the software development process, particularly from the standpoint of applied risk management.
Close 
(CS 385 or (224)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Close 
CS 182 or (404)(LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms.
Close 
CS 590) (303)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C++ language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Close 
Close 

 (303) (LecLabCredit Hours) This course is a continuation of CS423.
Prerequisites: CS 423 (303)(LecLabCredit Hours) Students in this course work in teams to develop real software for real clients. Topics in software engineering additional to, or more advanced than those taught in CS 347 are introduced "just in time," as needed.
Close 
Close 

 (303) (LecLabCredit Hours) Under the guidance of a cybersecurity faculty member of the department, students will participate in a yearlong cybersecurity project. The project may be conducted in a number of ways, including as a cybersecurityonly project, as a project where the cybersecurity student is integrated into the senior capstone project of another discipline like CS, QF, ECE, or as a project where the cybersecurity student interacts in a consultant role with one or more senior capstone teams of another discipline.
Prerequisites: CS 576 and (303)(LecLabCredit Hours)
Attacks on computer systems have become part of everyday life. It is the goal of this class to teach a basic understanding of the possible security failures, as well as the protection mechanism. The class will cover an introduction to network and host security concepts and mechanisms; basic cryptographic algorithms and protocols; authentication and authorization protocols; access control models; common network (wired and wireless) attacks; typical protection approaches, including firewalls and intrustion detection systems; and operating systems and application vulnerabilites, exploits, and countermeasures. The class is designed for undergraduate, master's, and Ph.D. students. Those who take the class are expected to be able to program in C, have some basic knowledge of assembly language, and be familiar with network programming, as well as Unixlike operating systems.
Close 
CS 577 (303)(LecLabCredit Hours) Cybersecurity Laboratory Theoretical foundations in cryptographic algorithms, cryptographic protocols, access control models, formal methods, security policy, etc. provide the necessary background to understand the realworld implications of cryptography and network security. This laboratory course is designed to provide students with a handson experience based on the theoretical knowledge they have acquired by taking other securityoriented courses. This handson experience is of great importance for future jobs in industry. The course will accomplish its goals through a number of inlab programming exercises. Topics covered include: basic cryptographic algorithms and protocols; authentication and authorization protocols; access control models; common network (wired and wireless) attacks; typical protection approaches including firewalls and intrustion detection systems; and operating systems and application vulnerabilites, exploits, and countermeasures.
Close 
Close 

 (303) (LecLabCredit Hours) Continuation of CS425.
Prerequisites: CS 425 (303)(LecLabCredit Hours) Under the guidance of a cybersecurity faculty member of the department, students will participate in a yearlong cybersecurity project. The project may be conducted in a number of ways, including as a cybersecurityonly project, as a project where the cybersecurity student is integrated into the senior capstone project of another discipline like CS, QF, ECE, or as a project where the cybersecurity student interacts in a consultant role with one or more senior capstone teams of another discipline.
Close 
Close 

 (303) (LecLabCredit Hours) Introduction to the design and querying of relational databases. Topics include: relational schemas; keys and foreign key references; relational algebra (as an introduction to SQL); SQL in depth; EntityRelationship (ER) database design; translating from ER models to relational schemas and from relational schemas to ER models; functional dependencies; and normalization.
Prerequisites: CS 182 or (404)(LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms.
Close 
CS 385 (224)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Close 
Close 

 (303) (LecLabCredit Hours) In this course students use skills developed in earlier courses to work in teams with clients on the development of software to be used by the clients or by the organizations for which they work. Potential clients include Stevens faculty, Stevens departments that provide services to students, notforprofit organizations, government agencies, and, on occasion, forprofit companies. Teams work with clients to iteratively develop GUIbased prototypes of software that will satisfy the clients’ needs (requirements engineering); they perform the analysis and design required before implementation begins, and, finally, they implement the software, and deploy it to the client’s site together with documentation required by the software’s users and maintainers.
Prerequisites: CS 385 and (224)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques.
Close 
CS 442 (303)(LecLabCredit Hours) Introduction to the design and querying of relational databases. Topics include: relational schemas; keys and foreign key references; relational algebra (as an introduction to SQL); SQL in depth; EntityRelationship (ER) database design; translating from ER models to relational schemas and from relational schemas to ER models; functional dependencies; and normalization.
Close 
Close 

 (303) (LecLabCredit Hours) A participating seminar on topics of current interest and importance in computer science. Open only to undergraduates.
Close 

 (303) (LecLabCredit Hours) Students explore tradeoffs posed by modern information technologies such as the Internet, mining of personal data, web tracking, and surveillance systems. Also covered are major debates about how IT technologies should be harnessed to serve the greater good, such as: Internet governance, privacy vs. openness, and laws regarding intellectual property. Students will learn how actions undertaken in their daily lives as IT professionals may have broad consequences, both planned and unplanned. Students will learn how to identify and analyze these consequences and who may be affected by them.
Close 

 (303) (LecLabCredit Hours) An introduction to the functional level structure of modern pipelined processors and the empirical and analytic evaluation of their performance. Topics include: empirical and analytic techniques for measuring performance (use of various means, Amdahl's Law, and benchmarks); tradeoff analysis; principles of instruction set design and evaluation (memory addressing, operations, types and sizes of operands, instruction set encoding, CISC vs. RISC, and related compilation issues); pipelining (basics, data hazards, and control hazards); and memory systems. Corequisites: MA 222 Probability and Statistics (303)(LecLabCredit Hours) Introduces the essentials of probability theory and elementary statistics. Lectures and assignments greatly stress the manifold applications of probability and statistics to computer science, production management, quality control, and reliability. A statistical computer package is used throughout the course for teaching and for assignments. Contents include: descriptive statistics, pictorial and tabular methods, and measures of location and of variability; sample space and events, probability axioms, and counting techniques; conditional probability and independence, and Bayes' formula; discrete random variables, distribution functions and moments, and binomial and Poisson distributions; continuous random variables, densities and moments, normal, gamma, and exponential and Weibull distributions unions; distribution of the sum and average of random samples; the Central Limit Theorem; confidence intervals for the mean and the variance; hypothesis testing and pvalues, and applications for the mean; simple linear regression, and estimation of and inference about the parameters; and correlation and prediction in a regression model. Close 
Prerequisites: CS 383 (303)(LecLabCredit Hours) The main aspects of computers: data (data types and formats, number bases), hardware (stored program computer concept, addressing methods and program sequencing, instruction sets and their implementation, the CPU and microprogrammed control, input/output organization, peripherals and interfacing, and main memory), communication (network protocols), software (operating systems, dispatching algorithms), and assembly language programming.
Close 
Close 

 (303) (LecLabCredit Hours) The use and internals of modern operating systems. Lectures focus on internals whereas programming assignments focus on use of the operating system interface. Major topics include: the process concept; concurrency and how to program with threads; memory management techniques, including virtual memory and shared libraries; file system data structures; and I/O.
Prerequisites: CS 383, (303)(LecLabCredit Hours) The main aspects of computers: data (data types and formats, number bases), hardware (stored program computer concept, addressing methods and program sequencing, instruction sets and their implementation, the CPU and microprogrammed control, input/output organization, peripherals and interfacing, and main memory), communication (network protocols), software (operating systems, dispatching algorithms), and assembly language programming.
Close 
CS 392 (303)(LecLabCredit Hours) Introduction to systems programming in C on UNIX. Students will be introduced to tools for compilation, dynamic linking, debugging, editing, automatic rebuilding, and version control. Some aspects of the UNIX system call interface will be studied, drawn from this list: process creation, signals, terminal I/O, file I/O, interprocess communication, threads, network protocol stacks, programming with sockets, and introduction to RPC. Style issues to be covered include: naming, layout, commenting, portability, design for robustness and debugability, and language pitfalls. X programming and GUI design will be covered, if time allows.
Close 
Close 

 (303) (LecLabCredit Hours) An introduction to programming language design and implementation, with an emphasis on the abstractions provided by programming languages. Assignments involve problemsolving issues in principles of programming languages such as Scheme and ML; recursive types and recursive functions; structural induction; abstract data types; abstract syntax; implementing languages with interpreters; static vs. dynamic scoping, closures, state; exceptions; types: typechecking, type inference, static vs. dynamic typing; objectoriented languages: classes and interfaces, inheritance and subtyping; polymorphism and genericity; and design patterns and the visitor pattern. Corequisites: CS 182 or Introduction to Computer Science Honors II (404)(LecLabCredit Hours) Advanced programming concepts covering classical data structures and objectoriented programming. Emphasis will be on building a collection of reusable software components that will form the basis of future programming efforts. The data structures covered include lists, stacks, queues, trees, binary search trees, and balanced search trees. The objectoriented features of Java covered include classes, templates, inheritance, polymorphism and runtime binding. Also included is a discussion of the analysis of asymptotic running times of algorithms. Close 
CS 385 Algorithms (224)(LecLabCredit Hours) This is a course on more complex data structures, and algorithm design and analysis, using the C language. Topics include: advanced and/or balanced search trees; hashing; further asymptotic complexity analysis; standard algorithm design techniques; graph algorithms; complex sort algorithms; and other "classic" algorithms that serve as examples of design techniques. Close 
Prerequisites: CS 334 (303)(LecLabCredit Hours) Introduction to recursive functional programming and equational reasoning; lists as inductive types and list induction; introduction to formal languages, automata, and the theory of computation; regular expressions, finite state machines, and pumping lemma; context free grammars and push down automata; turing machines, recursive enumerability, and unsolvable problems; and complexity and intractability. A number of models of computation are considered, as well as their relation to various problem classes (e.g. solvable problems and polynomial time solvable problems). Some experiments are performed that involve writing small Scheme programs.
Close 
Close 

 (083) (LecLabCredit Hours) Independent study under the guidance of a full time computer science faculty member, whose prior approval is required. Independent study allows the student to participate in research, explore a topic not covered by existing courses, or continue to study in greater depth a topic introduced by a course. Scope and details of the participation must be agreed upon between student and professor before the beginning of the project. One to three credits for any BS degree offered by the computer science department. May be repeated for credit.
Close 

 (083) (LecLabCredit Hours) Individual research project under the guidance of a faculty member of the department, whose prior approval is required. Either a written report in acceptable journal format or the completion of a senior thesis, as well as an oral presentation, is required at the end of the project. Senior students only. CS 498 and CS 499 cannot be taken simultaneously.
Close 

 (083) (LecLabCredit Hours) Individual research project under the guidance of a faculty member of the department, whose prior approval is required. Either a written report in acceptable journal format or the completion of a senior thesis, as well as an oral presentation, is required at the end of the project. Senior students only. CS 498 and CS 499 cannot be taken simultaneously.
Close 

