Spring 2013
CMPSC 111: Introduction to Computer Science I
Instructor: Robert Roos
Lecture: M,W,F(1) — 9:00 AM – 9:50 AM, Th(2) — 1:30 PM – 2:20 PM, Lab: W — 2:30 PM – 4:20 PM
An introduction to the principles of computer science with an emphasis on algorithmic problem solving and the realization of algorithms using a modern object-oriented programming language. Topics include algorithms, problem solving, programming, classes, primitive data types and objects, control structures, arrays and vectors, principles of object-oriented design and programming, and an introduction to graphics and graphical user interfaces. The course also includes an overview of the discipline of computer science and a study of the social implications of computer use. May serve as the laboratory course in the Natural Science Division’s distribution requirement. One laboratory per week. Prerequisite: Knowledge of elementary algebra.
CMPSC 112: Introduction to Computer Science II
Instructor: Gregory Kapfhammer
Lecture: M,W,F — 11:00 AM – 11:50 AM, Lab: Th — 2:30 PM – 4:20 PM
A continuation of Computer Science 111 with an emphasis on data structures, data abstraction, algorithm design, the analytical and experimental evaluation of algorithm performance, and object-oriented design and implementation techniques. Topics include stacks, queues, deques, lists, strings, trees and graphs, dictionaries, recursion, searching and sorting algorithms, and an introduction to program verification. May serve as the laboratory course in the Natural Science Division’s distribution requirement. One laboratory per week. Prerequisite: Computer Science 111 or permission of the instructor.
CMPSC 230: Theory of Computation and Formal Languages
Instructor: Robert Roos
Lecture: T,Th — 9:30 AM – 10:45 AM
An introduction to the theories of finite-state machines, pushdown automata and Turing machines as well as the relation between automata and the formal languages they recognize.Students explore computational theory and its practical applications in lexical analysis and language parsing. Prerequisites: Computer Science 112 and Mathematics 205 or permission of instructor. Offered in alternate years.
CMPSC 380: Principles of Database Systems
Instructor: Gregory Kapfhammer
Lecture: M,W,F — 1:30 PM – 2:20 PM, Lab: Th — 2:30 PM – 4:20 PM
A study of the design and implementation issues in database management systems. Topics include data models, logical/physical database design, data access/search techniques, normalization theory, mappings from logical to physical structures, storage, and utilization. Additional topics include database reorganization, migration, database integrity, consistency, privacy and security, distributed database systems, architecture of knowledge-based systems, and intelligent query interfaces. One laboratory per week. Prerequisite: Computer Science 112. Offered in alternate years.
CMPSC 580: Junior Seminar: Topics and Research Methods in Computer Science
Instructor: Gregory Kapfhammer, Robert Roos
Lecture: T,Th — 11:00 AM – 12:15 PM, Lab: F — 2:30 PM – 4:20 PM
An advanced treatment of selected topics from various areas of computer science with an emphasis on appropriate research methods. Practical skills are acquired in technical writing, critical reading, and presentation of technical literature in preparation for the senior project. One laboratory per week. Prerequisite: Completion of the computer science core or permission of the instructor.
Programs
The major and minor field programs are designed to provide a solid academic basis in the principles of computer science combined with practical experience in software systems design, implementation and analysis. Courses are divided into four categories: basic courses, core courses, advanced courses and applications. There are two majors in computing, Computer Science and Applied Computing, and several interest-focused minors.
The Computer Science major is designed to prepare students for advanced study of computer science or any of a variety of positions in the computing industry or in other industries requiring computing expertise. The Applied Computing major is designed to prepare students for entry level software development positions or entrepreneurial and management positions in computing and computing related areas.
The Computer Science Major
The major in Computer Science requires successful completion of at least 44 semester hours in Computer Science. A student seeking a Bachelor of Science degree in Computer Science must complete the three basic courses, Computer Science 111 and 112, and Mathematics 205 (see Mathematics course descriptions); four core courses, Computer Science 210, 220, 230, and 250; plus one or more advanced courses, Computer Science 420, 440, or 441; and two Computer Science electives. Computer Science electives may be chosen from courses listed in the core, applications and advanced categories below, or in some cases, special topics courses (Computer Science 490) or independent study courses (Computer Science 590). Additionally, students pursuing the major in Computer Science must complete a mathematics unit consisting of two courses to be chosen from Mathematics 320, 325, 345, 360, and 365, or, with approval of the faculty of the Department of Computer Science, some special topics courses in mathematics (those numbered 490 through 499). Students who plan to pursue graduate studies in Computer Science are encouraged to also complete the calculus sequence through Mathematics 210. As a capstone to the major in Computer Science, the student must complete the Junior Seminar (Computer Science 580), and write and defend a Senior Thesis (Computer Science 600 and 610).
The Applied Computing Major
Students seeking to major in Applied Computing must select either the Software Development track or the Management and Entrepreneurship track.
The Software Development Track
The major in the Software Development track of the Applied Computing major requires successful completion of at least 44 semester hours in computer science, four semester hours in economics, and 12 semester hours in mathematics. Students must complete:
- Four basic courses, Computer Science 111 and 112, Mathematics 205, and Economics 100.
- Four core courses, Computer Science 210, 220, 250, and 290.
- One advanced course, Computer Science 440 or 441.
- One applications course: Computer Science 370, 380, or 381.
- An internship sequence consisting of Computer Science 500, an internship approved by the department faculty, and Computer Science 501. If, after completion of CS 500, the student is unable to obtain an internship meeting the department’s guidelines, the department may allow a substitute requirement. In any case, the student must complete CS 500 and 501.
- A mathematics unit consisting of Mathematics 170, and either Mathematics 320, 345, 360, or 365.
- As a capstone, the student must complete the Junior Seminar (Computer Science 580), and prepare and defend a Senior Project (Computer Science 600 and 610).
The Management and Entrepreneurship Track
The major in the Management and Entrepreneurship track of the Applied Computing major requires successful completion of at least 32 semester hours in computer science, 20 semester hours in economics, four semester hours in mathematics, and eight semester hours of research project (junior seminar and senior project) in the student’s choice of computer science or economics. Students must complete
- Four basic courses, Computer Science 111 and 112, Mathematics 205, and Economics 100.
- Five core courses: Computer Science 210, 220, and 250, and Economics 200 and 240
- One advanced course, Computer Science 440.
- One application course, Computer Science 380 or 381.
- An economics component consisting of Economics 202 and either Economics 290 or 440.
- An internship sequence consisting of Computer Science 500, an internship approved by the department faculty (Computer Science 510-512), and Computer Science 501.
- As capstone, the student must complete an independent research project made up of a Junior Seminar and a Senior Project (Computer Science 580, 600, and 610 or Economics 580-589 and 620).
To graduate with a major in Computer Science or Applied Computing, a student must have an earned GPA of at least 2.0 in required Computer Science and other courses presented for the major.
The Minor
The minor in Computer Science requires the completion of at least 20 semester hours of course work in Computer Science including one of Computer Science 210, 220, 230, 250 or 290, and an additional eight semester hours of courses numbered 200 or above. Course sequences for various interests follow:
Computer Architecture
Computer Languages
Computer Systems
Artificial Intelligence
Computers, Databases, and Data Transmission
Computers and Mathematics
Computer Applications
Software Systems Design
Computer Interface Design
With the exception of Computer Science 111, no course presented for the major or minor in Computer Science may be taken on the Credit/No Credit grade basis.Unless otherwise noted, all Computer Science courses count as four semester credit hours.
Basic Courses
111 Introduction to Computer Science I
An introduction to the principles of computer science with an emphasis on algorithmic problem solving and the realization of algorithms using a modern object-oriented programming language. Topics include algorithms, problem solving, programming, classes, primitive data types and objects, control structures, arrays and vectors, principles of object-oriented design and programming, and an introduction to graphics and graphical user interfaces. The course also includes an overview of the discipline of computer science and a study of the social implications of computer use. May serve as the laboratory course in the Natural Science Division’s distribution requirement. One laboratory per week. Prerequisite: Knowledge of elementary algebra.
112 Introduction to Computer Science II
A continuation of Computer Science 111 with an emphasis on data structures, data abstraction, algorithm design, the analytical and experimental evaluation of algorithm performance, and object-oriented design and implementation techniques. Topics include stacks, queues, deques, lists, strings, trees and graphs, dictionaries, recursion, searching and sorting algorithms, and an introduction to program verification. May serve as the laboratory course in the Natural Science Division’s distribution requirement. One laboratory per week. Prerequisite: Computer Science 111 or permission of the instructor.
Core Courses
210 Principles of Computer Organization
An introduction to the basic organization and operation of computers including logical structure, hardware components, machine and assembly language, and computer system performance. Topics include internal representation of information, instruction set architecture, instruction types and addressing techniques, computer arithmetic, memory systems, design and operation of the control unit, input/output devices and interfaces, assembly language and translation techniques, and modern architectural enhancements such as pipelining and multiprocessors. Special emphasis is on systems programming and assignments in a particular assembly language. One laboratory per week. Prerequisite: Computer Science 112.
220 Programming Language Concepts
A study of the important concepts in the design of programming languages, with emphasis on data types, scoping, binding times, control structures, facilities for abstraction, parallel constructs, and storage allocation. Language constructs are evaluated both for their usefulness in supporting the software development process and the overhead incurred in implementing and using them. Both procedural and non-procedural languages are studied, and students acquire enough literacy in a few of these languages to write moderately sophisticated programs. One laboratory. Prerequisite: Computer Science 210.
230 Theory of Computation and Formal Languages
(also listed as Mathematics 310)
An introduction to the theories of finite-state machines, pushdown automata and Turing machines as well as the relation between automata and the formal languages they recognize.Students explore computational theory and its practical applications in lexical analysis and language parsing. Prerequisites: Computer Science 112 and Mathematics 205 or permission of instructor. Offered in alternate years.
250 Analysis of Algorithms
A treatment of selected topics from the analysis of algorithms including models of computation, design of efficient algorithms, computational complexity, and NP-completeness. Students develop expertise in mathematical analysis and algorithmic programming methodology. One laboratory per week. Prerequisites: Computer Science 112 and Mathematics 205.
290 Principles of Software Development
A study of the principles and concepts used in the specification, design, implementation, testing, and maintenance of large software systems. Topics include requirements elicitation and analysis, formal specification, software architectures, object-oriented design, software measurement, software testing and analysis, and evolution of a program. Students practice the principles of software development by participating as group members in the creation of a significant software application. One laboratory per week. Prerequisites: Computer Science 210 and 220 or permission of the instructor. Offered in alternate years.
Applications
303 Human-Centered Design
A collaborative introduction to interface design. Students engage with members of the local community to design (not program or develop) an interface to a real-world system. Over the course of a semester, students identify target users for a design, elicit and model user goals, define a conceptual model that supports user tasks to accomplish defined goals, and develop paper-based prototypes and case studies to inform the future implementation of software. Students also evaluate existing systems using a variety of methods. One two-hour design studio per week. Open to students of all backgrounds.
360 Scientific and Numerical Computation
A study of computational methods for the solution of algebraic and differential equations and systems of equations, interpolation and approximation, numerical integration, calculation of eigenvalues, and error estimation. Implementation of these techniques using general-purpose programming languages and symbolic arithmetic systems is explored. Theoretical issues include the nature of computer arithmetic and error generation and propagation. One laboratory per week. Prerequisites: Computer Science 111, Mathematics 290 and 320, or permission of the instructor.
370 Artificial Intelligence
A survey of the theory, computational techniques, and applications of artificial intelligence. Topics include agents, knowledge representation, machine learning, general problem solving, natural language processing, neural networks, evolutionary computation, computer vision, robotics, and philosophical questions. One laboratory per week. Prerequisite: Computer Science 112. Offered in alternate years.
380 Principles of Database Systems
A study of the design and implementation issues in database management systems. Topics include data models, logical/physical database design, data access/search techniques, normalization theory, mappings from logical to physical structures, storage, and utilization. Additional topics include database reorganization, migration, database integrity, consistency, privacy and security, distributed database systems, architecture of knowledge-based systems, and intelligent query interfaces. One laboratory per week. Prerequisite: Computer Science 112. Offered in alternate years.
381 Data Communications and Networks
An introduction to the theory and techniques of data communications and network design and analysis. Topics include data communications concepts, layered network architectures, local and wide area networks, protocols, switching, routing, security, and areas of current interest. The protocols of the Internet and the World Wide Web are used throughout to illustrate networking concepts. Students complete a large programming project involving some aspect of networking. One laboratory per week. Prerequisite: Computer Science 112. Offered in alternate years.
390 Visual Computing
An introduction to the fundamentals of computer graphics, visualization, and visual computing. Topics covered include concepts of light, color, two-and three-dimensional representations, data visualization, image processing, image rendering, and animation. These concepts are illustrated using medical imaging, simulation, human vision processing, computer art, and other applications. Laboratory assignments covering each major course topic provide a solid basis for advanced work in computer graphics and visualization. One laboratory per week. Prerequisites: One course in programming and one course in mathematics, or permission of the instructor.
Advanced Courses
420 Introduction to Compiler Design
An introduction to the basic concepts of compiler design and implementation from lexical, syntactic, and semantic analysis to target code generation. Topics are presented from an implementation point of view. The semester project includes construction of a compiler for a small language using lexing and compiler-compiler languages. One laboratory per week. Prerequisites: Computer Science 220 and 230 or permission of the instructor. Offered in alternate years.
440 Operating Systems
A study of operating systems and their design and implementation. Topics include the evolution of modern computer operating systems, basic components of an operating system, and hardware issues of importance to operating system design and implementation. Consideration is given to processes and threads, resource (processor, memory, device, and software) management, process and device scheduling, deadlocks, input/output, file systems, and system security. A representative operating system is examined in detail. One laboratory per week. Prerequisite: Computer Science 210. Offered in alternate years.
441 Principles of Distributed Systems
An examination of the principles and paradigms associated with the design, implementation, and analysis of distributed systems. Topics include the characterization of distributed system models, remote communication, distributed scheduling, synchronization and mutual exclusion, naming and time, consistency and replication, and fault tolerance. Selected distributed system development environments are discussed in the context of the above topics. One laboratory per week. Prerequisites: Computer Science 290 or 440 or permission of the instructor.
Internships
500-501 Internship Seminar
A corequisite seminar for all students participating in the Internship Program. Internship students enroll twice, once prior to and once following the Internship. Computer Science 500 focuses on expectations and planning, leading to the Internship Proposal required for all students planning an internship. Computer Science 501 provides the opportunity for students who have completed the Internship to prepare written and oral reports on the Internship experience. The student, in consultation with the faculty of the Department of Computer Science, is responsible for arranging for an acceptable internship. The courses meet together weekly for one-half a semester. Credit: One semester hour for each course. Prerequisites: Completion of at least two core courses.
510 Internship: Software Development
An experiential learning opportunity with an employer in the area of software development. Students identify a potential employer as part of their work in the first internship seminar, Computer Science 500, work (usually during the summer) for this employer under the guidance of a mentor, write a report on their experiences, and share the insights gained from the internship with Department in a public presentation. Students mentor future interns as part of the second internship seminar, Computer Science 501. Prerequisite: Computer Science 500. Co-requisite: Computer Science 501. Two credits.
511 Internship: Management
An experiential learning opportunity with an employer in the area of management of software projects. Students identify a potential employer as part of their work in the first internship seminar, Computer Science 500, work (usually during the summer) for this employer under the guidance of a mentor, write a report on their experiences, and share the insights gained from the internship with the Department in a public presentation. Students mentor future interns as part of the second internship seminar, Computer Science 501. Prerequisite: Computer Science 500. Co-requisite: Computer Science 501. Two credits.
512 Internship: Computing
An experiential learning opportunity with an employer in some area of computer science other than software development or software management, e.g., database or network management. Students identify a potential employer as part of their work in the first internship seminar, Computer Science 500, work (usually during the summer) for this employer under the guidance of a mentor, write a report on their experiences, and share the insights gained from the internship with Department in a public presentation. Students mentor future interns as part of the second internship seminar, Computer Science 501. Prerequisite: Computer Science 500. Co-requisite: Computer Science 501. Two credits.
Other Courses
580 Junior Seminar: Topics and Research Methods in Computer Science
An advanced treatment of selected topics from various areas of computer science with an emphasis on appropriate research methods. Practical skills are acquired in technical writing, critical reading, and presentation of technical literature in preparation for the senior project. One laboratory per week. Prerequisite: Completion of the computer science core or permission of the instructor.
590 Independent Study
Individual research under the guidance of a member of the Department’s faculty. A project proposal must be submitted to the Department and approved in the semester prior to the semester in which the student intends to register for the course.
600 Senior Thesis I
Independent research in computer science. Prerequisite: Computer Science 580. Credit: One semester hour.
610 Senior Thesis II
Continuation of independent research in computer science. Prerequisite: Computer Science 600. Credit: Three semester hours.
