Computer Science Department Course Offerings

CSCI 104 : Problem Solving with Computers
The purpose of this course is to develop computer concepts and applications as tools for critical thinking and problem solving. The course includes hardware and software fundamentals, hands-on" experience with selected computer software materials, and a presentation of some of the issues associated with computer technology. Assigned projects illustrate major computer tools such as word processors, spreadsheets, and databases. Not open to students with more than 6 credit hours of previous college-level computer science course work. "   Credits: 0-3

CSCI 114 : R/Survey of Computer Science
This course introduces students to the fundamental concepts and problem areas of computer science through a survey of the major sub-areas of the field. Included are historical foundations; computer systems and applications; concepts of computer programming, programming languages, design of microprocessors; theoretical computer science (e.g., abstraction); social, economic, and political implications. Each area will be explored in lecture and in laboratories. Not open to students with more than 6 credit hours of previous college-level computer science course work.   Credits: 0-3

CSCI 115 : R/Digital Futures,HumanFutures
Computers pervade most modern cultures, often in forms not recognized as computers - cell phones, CD and DVD players, identification cards, etc. Spreading use of computers raises important societal questions of privacy, security, property rights and more. This course introduces students with no technical background to algorithms and programs; analyzing algorithms; computer representation of information; such applications of these ideas as digital media, networks, and databases; the social choices and problems such applications raise; and technical and social grounds for evaluating choices and resolving problems.   Credits: 0-3

CSCI 119 : R/Object Oriented Prog:
An introduction to object oriented programming for students with little or no prior programming experience. Covers algorithms and their relationship to basic object oriented programming concepts; objects and classes; core algorithmic concepts used in defining objects' behavior (e.g., control structure, input and output, exception handling, expressions); subclasses and inheritance. This material is taught in the context of the particular object oriented programming language indicated in the subtitle, and reinforced with programming exercises in that language.   Credits: 0-3

CSCI 120 : R/Procedural Programming:
An introduction to procedural programming for students with little or no prior programming experience. Covers algorithms and their relationship to basic procedural programming concepts; core concepts used in defining algorithms (e.g., input and output, expressions, selection, repetition, sequencing); top-down design and decomposition of programs into subprograms; standard data types, both scalar (e.g., numbers, characters, and boolean values) and composite (arrays, records, files). This material is taught in the context of the particular procedural programming language indicated in the subtitle, and reinforced with programming exercises in that language.   Credits: 0-3

CSCI 142 : Principles of Computer Science
This course deals with abstract data types and data structures. This course covers recursion, subclasses and inheritance, and the classic data structures such as lists, queues, stacks, and trees. Prerequisites: CSCI 119.   Credits: 0-4

CSCI 188 : Experimental:
  Credits: 0-6

CSCI 199 : Directed Study
  Credits: 1-12

CSCI 204 : Programming in Appl Software
  Credits: 3

CSCI 211 : File Structures
  Credits: 3

CSCI 215 : Systems Analysis
  Credits: 3

CSCI 216 : Statistical Software
This course is designed to cover the use of computerized statistical and data analysis packages available to social and behavioral scientists for the reduction and analysis of social science data. Topics include instrument design, data preparation, file organization, and standard statistical routines such as anova, correlation, regression, and factor analysis. Emphasizes computer techniques used in applied statistics with a background in basic statistics assumed. Lectures are supplemented with many programming projects. Prerequisites: An introductory statistics course or MATH 160 or MATH 360 or MATH 361 or SOCL 211 or PSYC 250 or BIOL 250 or ECON 202 or ANTH 283. Offered every fall   Credits: 0-3

CSCI 219 : Object-Oriented Design&Progrmg
This course introduces students to the design and implementation of computer programs from the object-oriented point of view. The focus of the course will be on (1) the discovery and design of classes that model real world problems; (2) the feature set of a modern object-oriented programming language; (3) the implementation of classes by the effective use of the language features. The object-oriented design process, which in general involves identification of classes, identification of the functionality of these classes, and identification of the relationship between these classes, will also receive careful attention. Prerequisites: CSCI 119.   Credits: 3

CSCI 222 : Scientific Programming II
  Credits: 3

CSCI 230 : Digital Electronics
An introduction to digital electronics. The concepts studied are different number systems (e.g. binary and hexadecimal), Boolean algebra, complex logic decisions using simple logic statements, minimizing complex logic systems, logic gates, combinational networks, flip-flops, counters, and registers. Offered every year   Credits: 0-3

CSCI 232 : Numeric Methods
This course deals with numerical algorithms of mathematical problems that arise as models of phenomena in the physical sciences and engineering. Problems of accurately computing algebraically exact solutions in the presence of rounding errors and of computing discrete approximations that are defined on the continuum are discussed. Emphasis focuses on computational aspects relevant to practical scientific problems. The concept of vectorization and programming techniques to increase the speed of Fortran programs on a supercomputer is introduced. Prerequisites: MATH 221 and CSCI 119 or CSCI 120. Offered every year   Credits: 3

CSCI 240 : Foundations of Algorithms
Develops fundamental methods of inquiry for studying algorithms, specifically mathematical analysis of performance and correctness, formal tools for algorithm design, and experimentation. Specific topics include the use of induction and recurrence relations in algorithm analysis; design from preconditions, postconditions, and loop invariants; and the role of the scientific method in computer science. Prerequisites: CSCI 142 (may be taken concurrently) or permission of instructor.   Credits: 0-4

CSCI 241 : Princ of Computer Organization
This course stresses the hierarchical structure of computer architecture. Topics include levels of computer organization; digital logic, microprogramming, machine language, macro language, and operating systems; processors; instruction execution, memory, registers, addressing, input/output, control, and synchronization; instruction sets, addressing, data flow, control flow, interrupts; assembly language programming; macros. Prerequisites: CSCI 142.   Credits: 0-4

CSCI 242 : Analysis of Algorithms
A systematic study of algorithms and their complexity. Topics include measuring algorithm complexity; O-notation; searching and sorting algorithms and their complexity; mathematical algorithms (matrices, polynomials, and algebra) and their complexity; tree and graph traversal algorithms and their complexity; the classes P, NP, and NP-complete problems and intractable problems. Prerequisites: CSCI 240 and MATH 237 or MATH 239.   Credits: 3

CSCI 243 : C Programming & UNIX
This course introduces the programming language C, the Unix operating system and its facilities. Topics include C language concepts, dynamic structures, flow of control, Unix features, and shell programming. Prerequisites: CSCI 142.   Credits: 1

CSCI 259 : Software Engineering&Its Tools
An introduction to software engineering. Topics include software development process models and lifecycle; requirements capture, analysis, and specification; system design and architectures; system implementation; verification and validation; testing; component integration and reuse; performance and cost benefit analysis; deployment and maintenance; documentation; ethical and professional responsibilities; and management and organization of software development projects. The role of software engineering notations and tools in each of these activities will also be discussed. Students will participate in a large scale semester-long team software development project. Prerequisites: CSCI 241 and CSCI 242. Offered every 3-4 semesters   Credits: 3

CSCI 276 : Lisp as a Second Language
This course teaches the fundamentals of the Lisp language and introduces the concepts of functional programming and symbol manipulation. Included are data abstraction principles, function definition tools, macros, lambda calculus, dynamic and lexical binding issues, destructive and non-destructive storage mechanisms, and the Lisp user support environment. Prerequisites: CSCI 142. Offered every other year   Credits: 1

CSCI 288 : Experimental:
  Credits: 0-4

CSCI 295 : Internsip:
  Credits: 1-12

CSCI 299 : Directed Study
  Credits: 1-6

CSCI 330 : Data Communications
This is a study of networks of interfacing computers and peripheral equipment. The problems, rationales, and possible solutions for distributed processing are examined. Major protocols for data communications including RS232, RS422, and X.25 are presented. Prerequisites: CSCI 241. Offered every other year   Credits: 3

CSCI 331 : Compiler Construction
This course introduces students to the theory and practice of compiler construction. Topics include scanners, error handling, parsing, memory management, intermediate source code, semantic analysis, code generation, and code optimization. Prerequisites: CSCI 241. Offered every year   Credits: 3

CSCI 335 : Computer Graphics
Computer graphics is a programming-intensive study of the fundamentals of graphics manipulations. Implementation of program systems may be done on either raster or vector graphics systems, depending on the hardware available at the time of offering. Graphics primitives, windows, viewport, clipping, translations, rotations, scaling, shearing, and segmentation of two-dimensional images are covered. Algorithms for implementation of the above are studied. Matrix algebra is used extensively. Prerequisites: CSCI 241 or CSCI 242. Offered every other year   Credits: 3

CSCI 341 : Theory of Languages
This course emphasizes the principles that govern the design and implementation of contemporary programming languages. Topics include language syntax; lexical properties, BNF, and parsing examples; compilers, interpreters, and direct execution; language representations; data structures, control structures, binding, the run-time environment, and formal semantic models; language styles: procedural, functional, object-oriented, and logic programming. Preequisites: CSCI 241 and CSCI 242. Offered every year   Credits: 3

CSCI 342 : Theory of Computation
This course covers basic theoretical principles embodied in the theory of automata, the theory of formal languages, and the theory of Turing machines. Topics include finite automata, push-down automata, non-determinism, regular expressions, and context-free grammars; Turing machines and universal Turing machines; the halting problem, unsolvability, and computational complexity. Prerequisites: CSCI 242. Offered every year   Credits: 3

CSCI 343 : Operating Systems
This course is a study of the basic and fundamental concepts and principles underlying the four major components of an operating system: process management, input/output, memory management, and file systems. Prerequisites: CSCI 241 and CSCI 242. Offered every year   Credits: 3

CSCI 352 : Systems Design
  Credits: 3

CSCI 365 : Theory of Database Design
This course presents an introduction to the elements of databases. It emphasizes the theoretical principles underlying the design, development, and implementation of database management systems. It includes major approaches to database design (relational, hierarchical and network); problems of representation, completeness, integrity, security and concurrency. Prerequisites: CSCI 242. Offered every other year   Credits: 3

CSCI 376 : Artificial Intelligence
This is an introduction to the research techniques and applications of artificial intelligence -- the computer implementation of processes that are called reasoning, perceiving, and decision-making when performed by humans. The main areas studied include knowledge representation, search strategies, problem-solving and planning, deduction and inference, natural language understanding and production, cognitive modeling, image analysis, and learning. Application areas include computer vision, game-playing, robotics, speech analysis and synthesis, automatic programming, theorem proving, and expert systems. The effectiveness and limitations of available techniques will be discussed. Familiarity with predicate logic is helpful. Prerequisites: CSCI 242; Corequisite: CSCI 276. Offered every other year   Credits: 3

CSCI 380 : Computer Architecture
This course is a continuation of CSCI 241, Principles of Computer Organization, and the last in the hardware-oriented courses. While computer organization mostly deals with the computer hardware from a programmer's point of view, this course is a high-level treatment of computer architecture with little detailed treatment of hardware design. The course introduces the fundamental concepts and the modern-day approaches to computer design and architecture while examining von Neumann, as well as non-von Neumann architectures. Prerequisites: CSCI 241 and MATH 237. Offered every other year   Credits: 3

CSCI 383 : Distributed Systems
This course introduces students to distributed systems, communication architecture, and models for interprocess communication, process migration, distributed file services, fault tolerance, concurrency control, and protection and security. Although normally taken after CSCI 343, exceptionally well-qualified students who have completed CSCI 242 may enroll in CSCI 383 with permission of the instructor. Prerequisites: CSCI 242 and permission of the instructor or CSCI 343. Offered when demand is sufficient   Credits: 3

CSCI 386 : Robotics
This course will introduce students to a variety of computational architectures that have been proposed for autonomous intelligent robot systems, as well as some physical systems on which they are typically realized. Students will explore different sensory processes, such as visual and auditory processes, and study how they influence and determine the kinds of intelligent behavior with which an autonomous robot system might be endowed. Through laboratory exercises as well as a course project, students will use existing departmental facilities such as a mobile robot, an active vision system, and sonar technology, to explore different computational mechanisms for autonomous behavior. Prerequisites: CSCI 241, MATH 222 (Recommended: CSCI 376, MATH 233). Offered not on a regular basis   Credits: 3

CSCI 388 : Experimental:
  Credits: 0-4

CSCI 390 : Topics in Computer Science
In-depth study of a selected topic in computer science, conducted so as to develop students\\\' research skills and project design and implementation abilities. Topics will be chosen to reflect new developments in computer science, instructor interest, and/or student demand. Prerequisites: CSCI 241, CSCI 242, and at least one 300-level CSCI course; specific topics may require additional or more specific prerequisites, which will be announced when present. Offered not on a regular basis   Credits: 3

CSCI 395 : Internship:
  Credits: 1-12

CSCI 399 : Directed Study
Directed studies in computer science are under the supervision of a faculty member. (1 to 3 semester hours). Offered by individual arrangement   Credits: 1-6

CSCI 479 : Workshop:
  Credits: 0-3

CSCI 579 : Workshop:
  Credits: 0-3