School of Natural Science and Mathematics
Computer Science Course Descriptions
CMSCI 101 Computer Technology (3)
This is a hands-on introduction to the uses of computer technology. Topics include word processors, spreadsheets, databases, graphics applications, electronic mail, the Internet and World Wide Web, programming concepts and computer ethics. The exact applications covered will vary based on current software.
CMSCI 115 Computer Games and Gaming (3)
An overview of issues related to games, focusing on computer games. Topics may include: history of games, social and ethical aspects of gaming, storytelling in games, game taxonomy, and game development. Students will use application software to develop different types of games (including 2D shooters and adventure games).
CMSCI 120 Introduction to Computer Science I (3)
This is an entry-level course in computer science that covers problem-solving methods and the development of algorithms. Students are taught how to design, write, edit, test, debug and document simple computer programs. Principles of modularity and information hiding, good programming style and elementary data representation are covered.
CMSCI 125 Introduction to Computer Science II (3)
A continuation of programming techniques from CMSCI 120, this course emphasizes the object-oriented paradigm. Students learn about class design, inheritance, input and output to files, and arrays.
Prerequisite: CMSCI 120.
CMSWI 228 Discrete Mathematics (3)
This course introduces the basic techniques and methods of reasoning for discrete problem solving. Topics include induction, set theory, elementary combinatorics, and graph theory. Applications to computer science are emphasized. This course satisfies the writing intensive Veritas program requirement. Same as MAWI 228.
CMSCI 254 Data Structures and Algorithms (3)
The study and implementation of computer algorithms that utilize data structures are examined in detail. Such structures include linked lists, stacks, queues, trees, heaps and graphs. Searching and sorting algorithms are discussed. Students learn about recursion and running-time analysis.
Prerequisite: CMSCI 125. Recommended: CMSWI 228.
CMSCI 256 Principles of Software Development (3)
This course covers important programming concepts that are necessary for modern software. These include: design patterns, testing, GUIs, threading, client-server networking, security, and mobile app development. Students will design and implement one or more moderately- sized programming projects.
Prerequisite: CMSCI 125.
CMSCI 277 Computer Architecture (3)
This is an introduction to the architecture and organization of modern computer systems. Topics are selected from processor and multiprocessor design, instruction set architectures, addressing, number system representation and computer arithmetic, control structures, microprogramming, memory management, memory hierarchies, and input output structures, assembly-level programming.
Prerequisite: CMSCI 120 or permission of instructor.
CMSCI 349 Software Engineering (3)
This is an introductory course in software engineering. Techniques in software design and development are studied. Topics include structured design, structured programming, top- down design and development, segmentation and modularization techniques, iterative enhancement, design and code inspection techniques and correctness. Principles of object- oriented design and the Unified Process are stressed. Includes experience in applying the techniques through the team development of a large software project.
Prerequisite: CMSCI 254 or permission of instructor.
CMSCI 356 Operating Systems (3)
This course is an examination of modern operating systems. Topics include dynamic procedure activation, system structure, evaluation, memory management, process management, recovery procedures, and systems software. Unix and MS Windows are the primary examples.
Prerequisites: CMSCI 254 and 277 or permission of the instructor.
CMSCI 359 Database Management Systems (3)
The design, organization, and implementation of database systems are studied. Topics include the relational model, entity-relationship modeling, normalization, SQL, and database programming.
Prerequisite: CMSCI 125. Strongly Recommended: CMSCI 254.
CMSCI 385 Theory of Computation (3)
This is an investigation into the theoretical basis of computation. Topics include a study of finite state automata, regular expressions, context-free grammars, pushdown automata, the pumping lemma, Turing machines, undecidability and intractable problems.
Prerequisites: CMSCI 254, 228 or permission of the instructor.
CMSCI 394 Computer Graphics (3)
Principles of computer graphics including representation, manipulation and display of two- and three-dimensional objects are examined. Topics include display devices, lines, curves, surfaces, composite objects, transformations, hidden line and surface removal, shading, coloring and interactive graphics.
Prerequisites: CMSCI 254, or permission of the instructor. MATH 364 is recommended.
CMSCI 398 Independent Study (1-3)
This course allows for the independent study in an area of computer science. Topics are selected to meet a student’s interest or need. Permission of the instructor, department chair, dean and associate provost is required.
CMSCI 442 Principles of Programming Languages (3)
This course is a study of the syntax, semantics and pragmatics of computer languages. Topics include language definition structure, data types and structures, control structures and data flow, run-time considerations, functional languages, lexical analysis, parsing. The languages studied will vary.
Prerequisites: CMSCI 254 or permission of the instructor.
CMSCI 449 Introduction to Artificial Intelligence (3)
The concepts and applications of artificial intelligence are examined. Topics may include knowledge representation, searching state space, heuristic search, expert systems, natural language processing, propositional logic, learning and cognitive models, and computer vision.
Prerequisite: CMSCI 254 or permission of the instructor.
CMSCI 453 Algorithms (3)
This course is an in-depth study of algorithmic design with an emphasis on applications. Topics may include algorithm analysis, design patterns, advanced tree structures, graph algorithms, computational geometry, text processing, and network algorithms.
Prerequisites: CMSCI 228 and CMSCI 254 or permission of instructor.
CMSCI 455 Network Systems and Design (3)
The fundamental communications concepts leading to a study of the topology and communication protocols for computer networks are examined. The class focuses on protocols for Internet communication. Topics include application-layer protocols, TCP/IP, DNS servers and e-mail protocols.
Prerequisites: CMSCI 254, or permission of the instructor.
CMSCI 458 Computer Security (3)
This course covers topics including the mathematical foundations of security, security policies, cryptography, key management, system design principles, assurance, vulnerability analysis, and practical issues.
Prerequisites: CMSCI 125, or permission of the instructor.
CMSCI 474 Senior Project Proposal (1)
Students begin work on a major computer science project by locating a client or topic; projects may come from on- or off-campus sources. Students will define the problem, perform research to determine options, decide on a general approach, and identify the major technology components. Students will be prepared to start detailed design in CMSCI 475.
Prerequisites: CMSCI 254 or permission of the instructor. Recommended: CMSCI 349.
CMSCI 475 Senior Project (3)
Students complete their major computer science projects as proposed in CMSCI 474. Students also present material from areas of interest in computer science and engage in discussion and reflection on issues of computer ethics.
Prerequisite: CMSCI 474.
CMSCI 484 Numerical Methods (3)
This course examines a variety of numerical methods for applications of mathematics. Topics include the numerical solution to nonlinear equations, interpolation, numerical differentiation and integration, and the numerical solution to differential equations.
Prerequisites: MATH 248 or permission of the instructor. Same as MATH 484.
CMSCI 489 Modeling and Simulation (3)
This course develops mathematical models and techniques for constructing mathematical models. Topics may include population growth, epidemics, scheduling problems, predator-prey interaction, transportation, economics and stochastic models.
Prerequisites: MATH 248 or permission of the instructor. Same as MATH 489.
CMSCI 492-493 Practicum (1-3 each)
Practicum presents an opportunity to gain practical experience through a one semester internship. The nature of the work experience and the number of credits must be approved in advance by the department chair.
CMSCI 499 Special Topics in Computer Science (3)
Students work on advanced projects in software design or development, hardware design or construction, or hardware/software integration. Examples include advanced topics such as compiler construction or image processing. This course is offered at the discretion of the department with regard to the needs and aptitudes of the students.