# Computer Science Major and Minor

## Major Requirements

These requirements are effective beginning in the Fall 2010 semester. Continuing students may choose to satisfy these requirements or those of any previous year they were a student at Butler.

### All of the Following Courses

- MA 106 - Calculus & Analytic Geometry 1
The beginning calculus course for properly prepared students. Topics include differentiation, integration, elementary differential equations, and exponential, logarithmic, and trigonometric functions. Applications are emphasized. The Analytic Reasoning core course is waived for students who successfully complete this course. Prerequisite: Placement, or C- in MA 102. (U)(5)

- MA 107 - Calculus & Analytic Geometry 2
Continuation of MA 106. Topics include methods of integration, improper integrals, infinite series, conic sections and polar coordinates. Prerequisite: MA 106. (U)(4)

- MA 215 - Linear Algebra
Systems of linear equations, matrices, determinants, vector spaces, linear transformations and the eigenvalue problem. Prerequisite: MA 107. (U)(3)

- CS 151 - Foundations of Computer Science
Introduction to mathematical problem solving, with emphasis on techniques for designing computer-based solutions. Concepts include problem-solving principles, logic, proof techniques, sets, sequences, functions, relations, and inductive and recursive thinking. Prerequisites: MA 101 or 102 or equivalent. (U)(3)

- CS 252 - Foundations of Computing 2
As a continuation of CS151, concepts include mathematical logic, formal grammars, algebraic structures, finite state machines and automata, graph theory, and combinatorics. Prerequisite: CS151 (U) (3)

- CS 248 - Object-Oriented Programming and Data Structures
This course is an introduction to object-oriented programming using Java. Topics include algorithm analysis, recursion, the stack, queue, tree, and heap data structures, sorting algorithms, and GUI programming. A brief survey of computer science is also included: history, software engineering, computer organization, operating systems, networks, programming languages, databases, artificial intelligence, and theory. Prerequisites: CS 142 or equivalent and CS 151. (U)(5)

- CS 282
Or

- CS 283
- CS 321 - Computer Organization
Principles of computer architecture are introduced from a layered point of view, beginning at the level of gates and digital logic, and progressing through micro-programming, the machine language execution cycle, addressing modes, symbolic assembly language, and the fundamentals of operating systems. Advanced topics including pipelined and parallel architectures are also covered. Corequisite: CS 248. (U) (3)

- CS 351 - Algorithms
A systematic study of data structures and algorithms with an introduction to theoretical computer science. Topics include lists, stacks, queues, trees, and graph structure, searching and sorting algorithms, mathematical algorithms, time and space complexity, an introduction to the theory of NP-completeness, and an introduction to computability theory. Prerequisite: 248. (U)(3)

- CS 433 - Database Systems
An introduction to the theory, design and use of modern database management systems. Topics include the relational, entity-relationship, and object-oriented data models, query languages such as SQL, file systems, concurrency and deadlock, reliability, security, and query optimization. Prerequisites: CS 248, CS 252, and CS 321. (U-G) (3)

- CS 452
A study of theoretical and practical paradigms of parallel algorithm design. Topics include model costs, lower bounds, architecture and topology, data-parallelism, synchronization, transactional memory, message passing, and parallel design for sorting, graphs, string processing, and dynamic programming. (U)(3)

- CS 473 - Topics in Computer Science: Advanced User Interfaces
In-depth study of special topics not covered in regular courses. Prerequisite: permission of department. (U-G) (3)

Or

- SE 473
In-depth study of special topics not covered in regular courses. Prerequisite: Permission of the department. (U-G)

- CS 485 - Computer Ethics
Ethical and social issues in computing with emphasis on professional responsibilities, risks and liabilities, and intellectual property. Prerequisite: CS 142 and sophomore standing. (U-G)(1)

- SE 361 - Object-Oriented Design
This course uses the Unified Modeling Language (UML) as a vehicle to introduce the basic principles of object-oriented methodology and design, covering classes, objects, data abstraction, polymorphism, information hiding and relationships among classes such as inheritance, association, aggregation and composition. Specific design techniques are covered for object-oriented programming languages such as Java and C++. The course also provides a first exposure to the software development lifecycle of object-oriented software applications. A small team design project is required. Prerequisite: CS 248. (U)(3)

### Theory Courses

- CS 441 - Organization of Programming Languages
Emphasizes the principles and programming paradigms that govern the design and implementation of contemporary programming languages. Includes the study of language syntax, processors, representations, and paradigms. Prerequisites: CS 252, CS 321, and SE 361. (U-G) (3)

- CS 451
Basic theoretical principles of computer science that are embodied in formal languages, automata, computability and computational complexity. Includes regular expressions, context-free grammars, Turing machines, Church's thesis, and unsolvability. Prerequisites: CS 252, CS 321 and CS 351. (U-G)(3)

- CS 455
Solutions of equations and systems, error analysis, numerical differentiation and integration, interpolation, least squares approximation, numerical solution of ordinary differential equations. Prerequisites: MA 107 and CS 142 or equivalent. (U/G)(3)

### Systems Course

- CS 431
Introduces the major concept areas of operating systems principles, including the study of process, storage, and processor management; performance issues; distributed systems; and protection and security. Prerequisites: CS 248, CS 252, and CS 321. (U-G) (3)

- CS 435 - Computer Networks
An introduction to computer networks from a layered point of view beginning with the physical and data link layers, and progressing through the medium access layer, the network layer, the transport layer, and the applications layer. Specific content includes Ethernet, TCP/IP, and the Web. Students will write client/server programs that communicate across a network. Prerequisite: CS 321. (U-G) (3)

- SE 461 - Managing Software Development
Techniques, principles, and processes for developing large, complex software systems: Systems analysis and specification, modeling, design patterns, implementation, validation and verification, quality assurance and project management. A team-based software project is required. Prerequisite: SE361. (U-G)(3)

- SE 462 - Modernizing Legacy Software
Fundamental concepts, principles, techniques and tools for the maintenance and evolution of legacy software systems. Software maintenance and evolution process models, reengineering, reverse engineering, and program comprehension tools. A modernization project is required. Prerequisite: SE361. (U-G)(3)

- SE 463 - Testing & Quality Assurance
Basic concepts, systematic techniques and tools involved in testing and QA of software systems. Some topics to be covered include black and white box testing techniques, object-oriented testing, regression testing, system integration testing, planning and reporting of testing activities. Prereq: SE361

**Total Credits: 38 computer science and 12
mathematics.**

## Minor Courses

There requirements are effective beginning in the Fall of 2010 Semester.

### Both of the Following

- CS 151 - Foundations of Computer Science
Introduction to mathematical problem solving, with emphasis on techniques for designing computer-based solutions. Concepts include problem-solving principles, logic, proof techniques, sets, sequences, functions, relations, and inductive and recursive thinking. Prerequisites: MA 101 or 102 or equivalent. (U)(3)

- CS 248 - Object-Oriented Programming and Data Structures
This course is an introduction to object-oriented programming using Java. Topics include algorithm analysis, recursion, the stack, queue, tree, and heap data structures, sorting algorithms, and GUI programming. A brief survey of computer science is also included: history, software engineering, computer organization, operating systems, networks, programming languages, databases, artificial intelligence, and theory. Prerequisites: CS 142 or equivalent and CS 151. (U)(5)

**Twelve additional credit hours of CS or
SE**

**Total credits: 20 computer
science.**

We often accept MA205, 206 in place of CS151, 252 for satisfying the major or minor requirements upon petition to the department head. Note that doing this, together with using MA341/CS451 or MA365/CS455 as CS electives, makes the CS minor relatively easy for mathematics majors to obtain.