A lecture and laboratory course that provides an introduction to structured and object-oriented programming using a language such as C++ or Java. Topics include the role of a stored program, problem definition, algorithm design, coding and testing, and documentation, as well as functions, parameters, control structures, arrays, structs, file streams and the use of standard objects. Applications are taught through classroom examples, laboratory exercises and programming assignments. Structured programming and top-down design are emphasized throughout the course. Weekly laboratory sessions reinforce programming techniques and the process of program design. Co-requisite or prerequisite: MATH 115.
Discrete structures are sets of distinct or unconnected elements. These structures are useful when solving problems that require counting objects, exploring the relationship between finite sets and analyzing an algorithm (a finite sequence of steps) for its effectiveness and efficiency. Discrete structures can be used to answer questions in a variety of disciplines. In this course, students learn techniques for solving problems and defending their solutions while improving their ability to think logically, algorithmically and quantitatively. Weekly laboratory sessions provide opportunities for students to analyze problems and experiment with their solutions. This is not a programming course. Prerequisite: Completion of or placement above MATH 115. Spring semester.
Students will be introduced to programming in R & Python, engage in exploratory data analysis techniques, data visualization and the basics of data wrangling (data cleaning). Prerequisite: CSCI 110
A continuation of CSCI 110, this lecture and laboratory course introduces elementary data structures and advanced programming concepts needed to solve more challenging problems. Software engineering principles and object-oriented concepts are studied and applied to various problems. Object-oriented topics include class inheritance, encapsulation, polymorphism, error handling and error recovery. Additional topics include dynamic memory, pointers, linked lists, stacks, recursion, activation records and binary files. Special focus is given to software engineering principles, including abstraction, modularity, generality, portability, robustness, and internal and external documentation. Laboratory sessions reinforce concepts presented in lecture sessions, introduce methods of experimentation and present new concepts. Prerequisite: Grade of “CD” or better in CSCI 110.
A continuation of CSCI 205, this lecture and laboratory course focuses on advanced data structures and the analysis of their performance. After reviewing pointers, linked lists, stacks and recursion, the following topics and their associated algorithms are studied in detail: multi-linked lists, simulating recursion, queues, trees and graphs. Advanced sorting and searching algorithms are also analyzed. Some file structures, such as B-trees and hash files, are studied. Labs and assignments are used for experimentation, to present new algorithms and concepts, to analyze and compare algorithms, and to reinforce lecture material. Students apply their knowledge to new problems, developing solutions by extending or enhancing various algorithms. Prerequisites: Grade of “CD” or better in CSCI 205 and either CSCI 150 or MATH 250. Spring semester.
This lecture and laboratory course provides an introduction to the internal operations of digital computers. Topics include computer architecture, memory control, processing, I/O devices, machine language, microcode, instruction types and format, fetch-execute cycle, timing, I/O operations, interrupt handling, data representation, basic computer arithmetic, addressing modes and assembly language programming. Weekly laboratories extend concepts discussed in lectures and focus on using the computer as an experimental tool. Working in teams, students research a topic in computing, design a website describing their findings and formally present their results. Prerequisite: Grade of “CD” or better in CSCI 205. Fall semester.
The Unity engine powers nearly 50% of all games and nearly 75% of mobile games. This course, built in collaboration with Unity and the IGDA, will introduce you to developing games in Unity. By the end of this course, you'll learn how to build a fully functioning game within the Unity system, including all key elements. This online course has optional live sessions. Prerequisite: grade of “CD” or better in CSCI 220 and CSCI 225
This is a course designed for individual or group study through special arrangement with a faculty member. The content and methodology is determined by the instructor. This course can be used to incorporate new material, technologies and methodologies to be introduced into the curriculum. Prerequisite: instructor’s consent.
Computing has brought the people of the world closer together but has also divided us in significant ways. This course examines the development of the global computing society, compares its impact and influence on developed and developing countries, and discusses the responsibilities of those who dominate it. This course addresses the effects that computing has on the global society and its individuals rather than the technical content of computing. Hands-on experiences are used to illustrate the disparity of computing resources among societies, the immediate and global impact of computing on the global society, and differences in how societies control access to computing resources.
This is a lecture and laboratory course that studies effectiveness, efficiency and clarity considerations in algorithm design and implementation. Both sequential and parallel algorithms are included. General techniques, such as divide and conquer, greedy methods, dynamic programming, backtracking, searching, and various traversals, are studied. Methodologies for analyzing algorithm efficiency are reviewed, providing the basis for studying computational complexity, as well as the classification of problems as being in classes P, NP and NP-complete according to their inherent difficulty. Students distinguish tractable problems (problems with efficient solutions) from intractable problems (problems whose known solutions are impractical regardless of how powerful the computer becomes). Prerequisite: CSCI 220. Alternate years.
A programming language is a tool for instructing computers and computerized equipment, a means for programmers to communicate with each other, a method for expressing high-level design, a notation for algorithms, and a tool for experimentation. Students obtain an understanding of these essentials of programming languages, such as syntax, semantics, run-time structure, and data and procedural abstraction. Students study the underlying structures of programming languages along with necessary tools for critical evaluation of existing and future programming languages, concepts and paradigms. Principles that distinguish languages and paradigms are stressed. Familiar and unfamiliar programming paradigms are covered in lectures and laboratories. Prerequisites: CSCI 220 and CSCI 225. Fall semester.
This is a lecture and laboratory course that formalizes a definition of a computation model and uses it to study the fundamental question, “What can and cannot be computed?” Students study deterministic and non-deterministic computational models, such as finite automata, push-down automata and Turing machines, as well as regular expressions and grammars. Types of problems that can and cannot be solved by each of these models of computation are identified. The Church/Turing thesis, which attempts to describe what is and is not solvable by our current model of computation, is also studied. Prerequisite: CSCI 220. Alternate years.
This is a lecture and laboratory course that introduces fundamental concepts of database modeling, database design, and the languages and facilities provided by database management systems. It investigates data structuring implementation techniques appropriate for databases. Entity/relationship diagrams are used for modeling. A three-layered view of database architecture is studied. The relational database model is stressed but other models are also discussed. Students work within a team environment to model and design a solution to a substantial database problem. Teams implement their solution using a robust user-interface that communicates with a database management system. Prerequisite: CSCI 205. Alternate years.
The study of artificial intelligence involves the exploration of the principles and techniques involved in programming computers to do tasks that would require intelligence if people did them. State-space and heuristic search techniques, logic and other knowledge representations, and statistical and neural-network approaches are applied to problems such as game playing, planning, the understanding of natural language and computer vision. Students implement real-time systems that use feedback loops and the techniques mentioned above to modify the behavior of the system. Prerequisites: CSCI 220 and CSCI 225.
This course provides students with an understanding of systems analysis and design in business applications. Students completing this course identify and analyze business problems and create solutions using systems analysis and design techniques, evaluate and choose appropriate software tools, and create design documents that can be used to implement a system. Students also learn about user-interface design, database design, systems architecture and implementation, systems operation, support, and security. A combination of lectures, assignments, group projects and case studies using systems analysis and design principles is used. Prerequisite: BUAD 142 or computer science major. Alternate years.
This is a lecture and laboratory course in event programming using a Windows-type environment. Focus is on the design and implementation of Windowing programs using an object-oriented language and other object-oriented development tools. Windowing class libraries are studied in detail and are used to implement common Windowing features. Students design and implement a substantial event-driven program using a variety of Windowing techniques and features. Prerequisite: CSCI 205. Alternate years.
This is a lecture and laboratory course that investigates the algorithms, principles, design and implementation of modern operating systems. Major topics include history and evolution, tasking and processes, process coordination and synchronization, physical and virtual memory organization, I/O systems and device drivers, and security and protection. Laboratories concentrate on the practical considerations of operating systems, including UNIX and Windows, and case studies. Laboratory sessions focus on experiments that complement and enhance lecture topics. Closed labs also are used to develop skills in system tools and utilities. Prerequisites: CSCI 220 and CSCI 225. Spring semester.
This is a lecture and laboratory course that explores networking from the ground up. This course is built around the study of the various components of the theoretical OSI networking model from beginning to end. Moreover, students study various practical implementations of the OSI layers. Topics include data transmission, wired and wireless networking, multiplexing and switching, error detection and correction, routing and network addressing, flow and congestion control, socket programming, and network security. Prerequisites: CSCI 220 and CSCI 225.
This course is designed to allow students to learn more about a particular topic in computer science, to help them further develop the skills necessary to learn on their own, to help develop presentation skills, and to help develop an awareness of legal and ethical issues inherent in the discipline of computer science. Students are given an individual project that integrates and extends concepts covered in other CSCI courses. The projects range from research to experimentation, to design and implementation of a small system. Students present results in open forums and closed defenses. Prerequisites: senior standing and instructor’s consent. Spring semester.
A course designed for individual or group study through special arrangement with a faculty member. The content and methodology is determined by the instructor. Prerequisite: junior or senior standing and instructor’s consent.
This course allows students to pursue an area of study on an individual basis, with consultation and evaluation. The methodology and objective are mutually agreed upon by a faculty member and the student. Prerequisites: junior or senior standing and instructor’s consent. Independent study courses usually do not count as a computer science major requirement.
If you’ve ever enjoyed the experience of playing a video game, you’ve had a first-hand lesson in how important content and systems design are. The experience of a game is driven by four major components: content, systems, narrative and user experience. This class will help you learn to design all four components, and build a deeper understanding of the game development process and an introduction to concepts in scripting. This online class has optional live sessions. Prerequisite: Grade of “CD” or better in CSCI 225.
The Unity engine powers nearly 50 percent of all games and nearly 75 percent of mobile games. This course, built in collaboration with Unity and the IGDA, will introduce you to developing games in Unity. By the end of this course, you'll learn how to build a fully functioning game within the Unity system, including all key elements. This online course has optional live sessions.
This course is intended to provide students with the skills and knowledge to bring their mastery of the Unity game engine and C# programming up to a professional standard. Students will learn how to perform a range of vital code-based tasks within the Unity platform and will grow their skills in building core gameplay functionality, supporting systems and platform-specific optimizations. This course was built in collaboration with Unity. Upon successful completion, students will be prepared to sit for the Unity Certified Associate: Programmer exam. This online course has optional live sessions. Prerequisites: CSCI 234 and CSCI 235.