170 - Intro to Computer ScienceModern computing concepts, components, history from the abacus to the modern PC. Introduction to computer arithmetic, logic, circuits, a low-level language and a high-level language, elementary systems, peripherals, networks and ethics. Encourages presentation development and delivery. Addresses the fear of technology. Does not teach computer applications (such as word processing) but explores the science of computing. Does not count toward the CSCI major or the MIS minor.
171 - Introduction to ProgrammingFocus on fundamental concepts of problem solving by analyzing problems and using a computer language (C++ or Java) as a tool to design, code, document, and test solutions, learned through textbook study, lectures, examples, and considerable practice in the computer science programming laboratory. Professional approaches are emphasized. (A student may receive credit for only one of the courses CSCI 171 or CSCI 181.)
181 - Accelerated Intro ProgrammingStudents entering the computer science program with considerable programming experience may take this course as a replacement for CSCI 171 as a major requirement. Prerequisite: successful completion of a programming competency test. (A student may receive credit for only one of the courses CSCI 171 or CSCI 181.)
182 - Intro to Data StructuresIn-depth coverage of programming concepts, with emphasis on data structures, including arrays, structs, class objects, stacks, queues, and lists. Algorithms and complexity analysis for searching and maintaining sorted and unsorted lists. Explicit pointer data type and dynamic allocation of memory. Introduction to object-oriented programming and recursive functions. Prerequisite: CSCI 171 or CSCI 181.
201 - Programming StrategiesOpen to students with at least two programming courses who would like to gain a knowledge of team-oriented programming strategies that enable them to solve problems quickly and accurately. This knowledge is useful in many fields of problem solving, but will also prepare them for the ACM Scholastic Programming contest. The course emphasizes fast analysis, design, and coding. May be taken up to four times.
220 - Programming LanguagesA survey and comparison of programming languages, learned through study and considerable programming practice. Intended to form the programming language basis for courses in object-oriented programming and database management systems. Prerequisite: CSCI 182.
240 - Object-Oriented ProgrammingStudents design, code, document, and debug computer programs using classes, object-oriented design, inheritance, polymorphism, and recursion. They demonstrate problem-solving skills using object-oriented concepts. Prerequisite: CSCI 220.
240C - Object-Oriented Programming
263 - Computer Software ArchitectureTopics include assembler language programming, system organization, parallelism and serialization, pipelining, memory management, recursion, and microprocessor design. Prerequisite: ENGR 262.
310 - Software EngineeringMethodologies for developing and maintaining large complex software systems. Case studies and team exercises are included. Focus on complete software life cycle, including specification, design, implementation, testing, debugging, and documentation. Prerequisite: CSCI 171 or CSCI 181.
310C - Software Engineering
320 - Database Management SystemsThe utilization of database systems within organizational settings. Includes features of database management systems, various data models, database design, normalization, relational algebra, SQL, query optimization, various indexing techniques, and data integrity and recovery issues. Prerequisite: BUAD 215 or CSCI 240.
330 - Operating SystemsThe inner workings of several popular multiprogramming operating systems are compared. Topics include processor scheduling, device management, memory management, and parallel processing. Prerequisite: CSCI 263.
333 - Computer NetworkingIntroduction to Local Area and Wide Area computer networks. Topics include network topologies, ISO protocols, Ethernet, TCP/IP, and network support for distributed computing. The course emphasizes the science of networking (as opposed to network administration). Prerequisite: CSCI 171 or CSCI 181.
340 - Advanced AlgorithmsSurvey of algorithms, with an emphasis on the application of algorithmic theory to the solution of practical problems. Categories include algorithm taxonomy, greedy algorithms, dynamic programming, divide-and-conquer, and intelligent search. Various specific algorithms exemplifying these categories are drawn from a variety of application areas such as compression, encryption, graph problems, sorting, computational geometry, and string matching. Prerequisite: CSCI 240.
380 - CompilersConcepts necessary for designing and developing a compiler. Topics include lexical analysis, parsing, semantic analysis, symbol table management, and code generation. Students will implement a small compiler as a project. Prerequisite: CSCI 240 and CSCI 263.
410 - Capstone ProposalStudents research and prepare a capstone proposal in preparation for completing a computer science capstone project. The proposal must be approved by the computer science faculty prior to taking CSCI 415.
415 - CapstoneA student-designed project with a significant programming component which pulls together the student's major. Choices include independents, internships, or group projects. Prerequisite: CSCI 410.
421 - Computer Issues SeminarAn examination and discussion of pressing computer issues facing society. Topics include personal impact, societal impact, artificial intelligence, privacy, and ethics. Majors from other disciplines are encouraged to take this course if they have taken any other computer science course.