Computer Science Course Descriptions
Presents an overview of fundamental computer science topics and an introduction to computer programming. Overview topics include an introduction to computer science and its history, computer hardware, operating systems, digitization of data, computer networks, Internet and the Web, security, privacy, AI, and databases. This course also covers variables, operators, while loops, for loops, if statements, top down design (functional decomposition), use of an IDE, debugging, and arrays.
Provides more in-depth programming, including software engineering topics such as unit testing and the use of version control. Basic data structures covered include arrays, lists, sets, maps. Basic algorithm efficiency concepts are covered along with simple searching and sorting. Other techniques such as graphical user interface programming, exceptions, recursion, designing classes (no inheritance), file input/output are covered. Design techniques such as encapsulation and UML diagramming are covered. Prerequisite: CPSC 100.
Consists of a series of projects to explore the use of specific application software packages. Prerequisite: CPSC 100 or equivalent
Provides yet more in-depth programming, including software engineering topics, such as Model-View-Controller design and more formalized unit testing. Additional data structures covered include stacks, queues, priority queues, trees, graphs, and hash tables. Object-oriented programming is introduced, along with associated UML diagramming techniques. Java Generics are covered. Prerequisite: CPSC 111.
Studies with each offering a particular computer programming language (e.g., C++, Python, PHP, COBOL, Java, and Perl) and the applications in which that language is traditionally used. Prerequisite: CPSC 111 or permission of instructor
Provides an understanding of the interface between computer hardware and software. The course covers computer hardware, activation records and address spaces, a practical assembly language (like ARM), writing C programs, how C code is compiled into assembly level programs, and how these programs are compiled, linked, and loaded into memory. This course also provides an understanding of Linux/Unix administration fundamentals, including user creation, permissions, installations from source, and simple server configuration. Prerequisite: CPSC 111
Examines formal concepts of algorithm efficiency including Big O, Theta, and NP theory. Algorithmic techniques studied include brute force, simulation, divide and conquer, dynamic programming, greedy algorithms, backtracking, branch and bound, and parallel algorithms. Time and space efficiency is analyzed from a practical and theoretical viewpoint throughout this course. Advanced searching and sorting techniques are covered. Classic algorithms and their relevance to real problems are examined. Typical data structures used as examples include hash tables, trees, and graphs. Parallel programming is explored. Prerequisites: CPSC 211, MATH 250
Covers operating system and network level security topics. Typical application level attacks such as buffer overruns are analyzed and solutions covered. This course includes basic coverage of TCP/IP and cryptography in the context of network security. Typical network attacks such as denial-of-service, spoofing, etc. are covered, as are systems administration level analysis of possible attacks and intrusions via Linux logs. Prerequisite: CPSC 230
Develops the concepts of language structure and uses these as a basis for comparing several languages. Formal language definitions are introduced, and the concepts of syntax, semantics, and pragmatics are discussed. The emphasis is on languages with inherently different programming paradigms than students have been exposed to in other courses. Prerequisite: CPSC 211.
Practices the development of mobile applications. Design considerations specific to mobile applications are covered, including limited resources, battery life, intermittent connectivity, etc. Also covered are the networking concepts needed to connect a mobile applications to a web-based server, and to use third party APIs such as Google Maps, location-based programming, etc. Projects are done in the context of one or more popular mobile platforms, such as Android and iOS. Prerequisites: CPSC 230, 365.
Studies the theoretical and practical design principles of computer organization. The performance effects of pipelining, superscalar design, VLIW, and parallel processing are examined. Prerequisite: CPSC 211.
Studies and practices the development of dynamic data-driven web applications, in the context of the languages and technologies used in typical shared hosting environments. Topics include database design, including entity-relationship modeling and normalization, designing and implementing data models for a web application, developing the server side code necessary to interact with that data model, developing the web pages for the application, and an introduction to the use of dynamic scripting on the client side. Web application security is covered throughout. Prerequisite: CPSC 111
Enables students to design, implement, and test a program of their own choosing. Proposed projects are approved by a faculty member who then meets with the student on a weekly basis. A final report is prepared and presented at the completion of the project. The course can be repeated once for credit. Prerequisite: Permission of the instructor.
Examines the basic issues in 3D rendering and collision detection and associated algorithms, suitable for programming a 3D game engine. Students explore data structures used for 3D games. Basic artificial intelligence techniques used in games are also covered in the context of a 3D game engine. Prerequisites: CPSC 320, MATH 230.
Examines the major operating system concepts in the context of modern operating systems such as UNIX, Linux, and Windows. Topics include process management, synchronization, memory management, file systems, protection and security. Topics are examined from both the operating system and programmer perspectives. In addition, the course discusses more advanced system administration topics. Prerequisites: CPSC 230, 320.
Formalizes the software engineering topics covered in previous courses, in the context of what would be required in a real-world corporate environment. Typical software development methodologies are discussed (e.g. waterfall, agile, test-driven design, etc.). UML Diagramming are covered. Students work in teams, analyze requirements, participate in code reviews, etc. Human Computer Interaction fundamentals are covered, along with ethical and social issues related to the business of computing. The different roles involved with large scale development are discussed. Prerequisite: CPSC 211.
Examines the fundamental aspects of computer networks. Topics include layered network architecture, application level protocols, transport protocols, routing and flow control mechanisms, data link protocols, wireless networks, protocol design, and client-server programming. In addition, this course introduces techniques for designing and building a complex computer network. Prerequisites: CPSC 230, 320.
Is a study of a specialized topic in the computing field, such as Animation, Pattern Recognition, Networking, Theory of Computation, Alife, or advanced study of a particular language (such as Java, C++, Perl, or VRML). Prerequisite: Permission of the instructor.
Provides a weekly discussion of new advances in the field of computer science and their effects on society. Presentations are given by invited speakers, faculty, and students. The course can be repeated once for credit. Prerequisite: Permission of the instructor.