Computer Science  

CS 400 - Introduction to Computing
Credits: 1.00
Initial exploration of computing, including comparison of the various subfields. A wide range of issues, including fundamental concepts, selected current topics and the role of both computing and computing professionals in organizations and in society are also discussed. Cr/F.

CS 401 - Computers and Their Applications
Credits: 4.00
Use of computers to manage and analyze information across a variety of settings and disciplines. Introduces major categories of computer software, including word processing, spreadsheets and database systems. Covers basic computer concepts and the computer's role in today's society. Significant hands-on work required outside of the class. Not open to CS majors. CEPS students should check with their major department for approval.

CS 401H - Honors/Computers & Their Appl
Credits: 4.00
Use of computers to manage and analyze information across a variety of settings and disciplines. Introduces major categories of computer software, including word processing, spreadsheets and database systems. Covers basic computer concepts and the computer's role in today's society. Significant hands-on work required outside of the class. Not open to CS majors. CEPS students should check with their major department for approval.

CS 403 - Weaving the Web: Creating Content for the World Wide Web
Credits: 4.00
Introductory course exploring the World Wide Web and its role in modern society. Students develop an understanding of the Web's underlying technologies and learn how to utilize them as contributing members of the online community. Students become proficient with creating and publishing Web pages using XHTML and CSS. Additional subjects include the security of computer communications and the various social implications of a networked world. No prior knowledge or experience is assumed. No credit if credit earned for CIS 405 (Note: CIS 405 is offered at UNH Manchester, and is not related to CS 405 at UNH Durham.)

CS 404 - Do-It-Yourself Internet
Credits: 4.00
The objective of this course is to demystify the design process that leads to the evolution of the Internet. In doing so, we investigate the ways that technology changes to meet the needs of society, how society changes in response to these new technologies and how these societal changes create pressures that produce needs for new technologies.

CS 405 - Introduction to Applications Programming with Visual Basic
Credits: 4.00
Introduces the concepts and techniques of microcomputer windows programming. Students use the Visual Basic language to develop modular, event-driven programs/applications. Topics include: forms, properties, controls, variables, decision structures, and built-in and user-defined functions and subroutines. CEPS students should check with their major department for approval. Not open to CS majors.

CS 408 - Living in a Networked World: The Good, the Bad, and the Ugly
Credits: 4.00
The objective of this course is to explore the implications of living in a networked world. The course surveys the fundamental technologies and practices that make up the Internet and then ask the student to examine the ramifications of using the technologies. Users of the technologies should understand the technology in order to make educated decisions about how to use it safely and effectively. Students have the opportunity to self-publish by using various current technologies including blogs, discussion boards, email and creating web pages using xhtml.

CS 410 - Introduction to Scientific Programming
Credits: 4.00
Introduces the concepts and techniques of computer programming. Particular emphasis on computer programming as a problem-solving technique in science and engineering applications. The C language is taught and used for assignments. Good programming style is stressed. Significant out-of-class programming required. Not open to students who have completed CS 407, 415, or the equivalent. Pre- or Coreq: MATH 425.

CS 415 - Introduction to Computer Science I
Credits: 4.00
Theory and practice of computer science. Algorithm development and analysis; data abstraction techniques; elementary data structures; dynamic memory manipulation; debugging; and program design issues. Computer systems and applications. Intended for CS majors.

CS 416 - Introduction to Computer Science II
Credits: 4.00
Theory and practice of computer science. Algorithm development and analysis; data abstraction techniques; elementary data structures; dynamic memory manipulation; debugging; and program design issues. Computer systems and applications. Intended for CS majors.

CS 444 - Computer Technology: Balancing Risks Against Reward
Credits: 4.00
Computer technology permeates life in our modern world, for better and for worse. Its rewards to individuals and society are unprecedented. Yet so are its risks. This course examines computer technology's role in modern society and endeavors to assess its impact - both beneficial and detrimental. Problems are evaluated from a variety of perspectives, including technological, societal, legal, commercial and ethical.

CS 503 - Introduction to Web Programming
Credits: 4.00
Introduces the concepts and techniques of client-side development for the World Wide Web. Students will be taught the basics of programming and how to apply that knowledge to enhance Web pages. Topics include variables, control structures, functions, events, objects, user feedback, form handling, and the Document Object Model. Significant out-of-class programming required. Prereq: CS 403.

CS 515 - Data Structures
Credits: 4.00
Reviews basic data structures; advanced data structures such as graphs, B-trees, and AVL trees; abstract data structure design and programming techniques; use of data abstraction language. Introduction to algorithm analysis. Prereq: CS 416.

CS 520 - Assembly Language Programming and Machine Organization
Credits: 4.00
Assembly language programming and machine organization: program and data representation; registers, instructions, and addressing modes; assemblers and linkers. Impact of hardware on software and software on hardware. Historical perspectives. Prereq: CS 515.

CS 595 - Professional Ethics and Communication in Computer Science
Credits: 2.00
A seminar course intended to improve both reasoning and ability to communicate effectively in front of an audience. Students learn basic forms of ethical argument, they read about ethical situations in which technology and technology professions play a key role, and they participate in student-led discussions about the reading. Students also make oral presentations about both ethical and technical topics, and evaluate each others' presentations in order to improve their sense for what makes a good presentation.

CS 600 - Internship
Credits: 1.00
Provides opportunity to apply academic experience in settings associated with future professional employment. A written proposal for the internship must be approved by the department chair. The proposal must specify what the student will learn from the internship, why the student is properly prepared for the internship, and what supervision will be available to the student during the internship. A mid-semester report and a final report are required. Prereq: permission. May be repeated up to a maximum of 4 credits. Cr/F.

CS 619 - Introduction to Object-Oriented Design and Development
Credits: 4.00
Principles of problem analysis ans software design applied to the development cycle of a software system (i.e. from system requirements specification to design, implementation, and system test). Design and implementation using object-oriented principles, patterns, and tools. Experience in understanding and debugging software systems. Experience in working in groups. Prereq: CS 515.

CS 620 - Operating System Fundamentals
Credits: 4.00
Introduces operating system concepts and design. Job, process, and resource management; scheduling; file systems; inter-process communication. Prereq: CS 515 and CS 520 or ECE 562.

CS #645 - Introduction to Formal Specification and Verification
Credits: 4.00
Mathematical reasoning can be applied to study the behavior of software systems, an approach that is particularly relevant to critical systems. This can be achieved through the description of those systems along with their properties in formally-defined, logically-based languages. Introduces techniques relevant to the application of formal specification and verification methods, including symbolic logic and proof techniques related to program correctness. Prereq: CS 515, MATH 531, MATH 532.

CS 659 - Introduction to the Theory of Computation
Credits: 4.00
Review of sets, relations, and languages. Induction and diagonalization. Finite automata, context-free languages, pushdown automata. Basic complexity theory. Prereq: MATH 531

CS 671 - Programming Language Concepts and Features
Credits: 4.00
Explores the main features of modern, high-level, general purpose programming languages from the user (programmer) point of view. Provides students with an opportunity to use non-imperative programming paradigms, such as object-oriented, functional, and logical, and to learn how specific features of such languages can be used efficiently in solving programming problems. Prereq: CS 619.

CS 696 - Independent Study
Credits: 1.00 to 6.00
Individual projects developed and conducted under the supervision of a faculty member. Prereq: permission of faculty supervisor and department chairperson. May be repeated for credit.

CS 696W - Independent Study
Credits: 1.00 to 6.00
Individual projects developed and conducted under the supervision of a faculty member. Prereq: permission of faculty supervisor and department chairperson. May be repeated for credit. Writing intensive.

CS 712 - Compiler Design
Credits: 4.00
Formal languages and formal techniques for syntax analysis and parsing; organization of the compiler and its data structures; code generation. LL and LR parsing; automatic generation of scanners and parsers from high level descriptions. Implementation of features from imperative and object-oriented languages. Students required to design and implement a compiler for a simple language. This course can be counted as either a theory elective or an implementation-intensive elective, but not both. Prereq: CS 520 and CS 659.

CS 720 - Operating System Programming
Credits: 4.00
Detailed discussion of operating system concepts and features. Practical examples and exercises that utilize advanced operating system features, including inter-process communication, synchronization, client-server communication, shared memory, threads, remote procedure calls, and device-level I/O. Discussion of POSIX 1003.1 Part I Standards. Prereq: CS 520 and CS 619.

CS 721 - Operating System Kernel Design
Credits: 4.00
Design and implementation of an operating system kernel, using LINUX as an example. Detailed discussion of the data structures and algorithms used in the kernel to handle interrupts, schedule processes, manage memory, access files, deal with network protocols, and perform device-level I/O. Course is project-oriented, and requires the student to make modifications and additions to the LINUX kernel. Prereq: CS 720 or permission.

CS 723 - Performance Evaluation of Computer Systems
Credits: 4.00
Introduces the main concepts, techniques, and tools needed to evaluate the performance of computer systems under various configurations and workloads. The techniques allow one to perform capacity planning based on quality of service requirements of users and workload characteristics. Course is mainly based on the use of analytic queuing network models of computers systems. The performance techniques are applied to study the performance of centralized, distributed, parallel, and client/server systems. The course also discusses performance measuring tools for operating systems such as Unix and Windows NT. Prereq: CS 620 or equivalent.

CS 725 - Computer Networks
Credits: 4.00
Introduces local, metropolitan, and wide area networks using the standard OSI Reference Model as a framework. Introduces the Internet protocol suite and network tools and programming. Discusses various networking technologies. Prereq: CS 520.

CS 730 - Introduction to Artificial Intelligence
Credits: 4.00
In-depth introduction to artificial intelligence, concentrating on aspects of intelligent problem-solving. Topics include situated agents, advanced search techniques, knowledge representation, logical reasoning techniques, reasoning under uncertainty, advanced planning and control, and learning. Prereq: CS 671.

CS 730W - Introduction to Artificial Intelligence
Credits: 4.00
In-depth introduction to artificial intelligence, concentrating on aspects of intelligent problem-solving. Topics include situated agents, advanced search techniques, knowledge representation, logical reasoning techniques, reasoning under uncertainty, advanced planning and control, and learning. Prereq: CS 671. Writing intensive.

CS 735 - Introduction to Parallel and Distributed Programming
Credits: 4.00
Programming with multiple processes and threads on distributed and parallel computer systems. Introduces programming tools and techniques for building applications on such platforms. Course requirements consist primarily of programming assignments. Prereq: CS 620 and CS 671.

CS 745 - Formal Specifications and Verification of Software Systems
Credits: 4.00
Course focuses on the formal specification and verification of reactive systems, most notably concurrent and distributed systems. Topics relevant to these systems, such as non-determinism, safety and liveness properties, asynchronous communication or compoistional reasoning, as discussed. We rely on a notation (TLA+, the Temporal Logic of Actions) and a support tool (TLC, the TLA+ Model Checker). Prereq: CS 659.

CS 758 - Algorithms
Credits: 4.00
An introduction to important concepts in the design and analysis of algorithms and data structures, including implementation, complexity analysis, and proofs of correctness. Prereq: CS 515 and CS 659.

CS 760 - Introduction to Human-Computer Interaction
Credits: 4.00
Human-computer interaction is a discipline concerned with the design, evaluation, and implementation of interactive computing systems for human use and with the study of major phenomena surrounding them. Prereq: CS 619.

CS 760W - Introduction to Human-Computer Interaction
Credits: 4.00
Human-computer interaction is a discipline concerned with the design, evaluation, and implementation of interactive computing systems for human use and with the study of major phenomena surrounding them. Prereq: CS 516 and CS 620. Writing intensive.

CS 767 - Interactive Data Visualization
Credits: 4.00
Detailed discussion of how an understanding of human perception can help us design better interactive displays of data. Topics include color, space perception, object perception and interactive techniques. Students write interactive programs, give presentations and undertake a project designing and evaluating a novel display technique. Prereq: instructor's permission.

CS 767W - Interactive Data Visualization
Credits: 4.00
Detailed discussion of how an understanding of human perception can help us design better interactive displays of data. Topics include color, space perception, object perception and interactive techniques. Students write interactive programs, give presentations and undertake a project designing and evaluating a novel display technique. Prereq: instructor's permission. Writing intensive.

CS 770 - Computer Graphics
Credits: 4.00
Input-output and representation of pictures from hardware and software points of view; interactive techniques and their applications; three-dimensional image synthesis techniques and their applications. Prereq: CS 671.

CS 770W - Computer Graphics
Credits: 4.00
Input-output and representation of pictures from hardware and software points of view; interactive techniques and their applications; three-dimensional image synthesis techniques and their applications. Prereq: CS 671. Writing intensive.

CS 771 - Web Programming Paradigms
Credits: 4.00
In this course you will learn languages to program the Web. Languages integrated into browsers, like JavaScript, and languages invoked on the server, like Ruby. You will also learn about frameworks, like Rails, and various techniques used to support the programming process. In addition, you will learn languages you will need to create, modify, and process Web documents. Although we will learn how to read and write in these languages, our primary goal will be an understanding of how the design of these multi-paradigm dynamic languages support the process of developing Web applications. Prereq: CS 671.

CS 775 - Database Systems
Credits: 4.00
Database analysis, design, and implementation. Focus on the relational model. Data description and manipulation languages, schema design and normalization, file and index organizations, data integrity and reliability. Usage of selected DBMS. No credit if credit earned for IT 775. Prereq: CS 671 and MATH 531.

CS 780 - Topics
Credits: 1.00 to 4.00
Material not normally covered in regular course offerings. May be repeated for credit.

CS 791 - Senior Project I
Credits: 2.00
The principal goal of CS 791 is to develop precise functional specifications for the senior projects as well as a complete software design specification. The course will review and expand upon design concepts presented in previous courses, including UML, and CRC approach, and design patterns. Students apply these concepts to the design of their own senior projects. A significant component of the design includes specifications of the testing methodology to be used. Prereq: CS 620 and CS 671.

CS 792 - Senior Project II
Credits: 2.00
Continuation of CS 791: Senior Project I. Students complete the project by implementing their design. Students work in teams. Successful completion of this course fulfills the Capstone Experience requirement for Computer Science majors. Prereq: CS 791.