Computer Science  

CS 400 - Introduction to Computer Science
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 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 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 516 - Introduction to Software Design and Development
Credits: 4.00
Principles of problem analysis and solution design applied to the development cycle of a software system (i.e., from system requirements specifications to design, implementation, and system test). Experience in understanding and debugging existing software systems. 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 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 516.

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 719 - Object-Oriented Methodology
Credits: 4.00
Object-oriented system design and programming. Languages for object-oriented programming. Design intensive. Prereq: CS 671 or permission.

CS 719W - Object-Oriented Methodology
Credits: 4.00
Object-oriented system design and programming. Languages for object-oriented programming. Design intensive. Prereq: CS 671 or permission. Writing intensive.

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 516 and CS 620.

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 516 and CS 620.

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 516 and CS 620.

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 516 and CS 620.

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 #765 - Introduction to Computational Linguistics
Credits: 4.00
Introduces computational analysis of natural language with a focus on semantic representations and the resolution of ambiguity. Provides an elementary working knowledge of linguistic and artificial intelligence analysis methods as motivated by examples of potential input texts. Topics include parsing, formal grammars, representation of knowledge and memory, inference, and interpretation of non-literal language. Prereq: elementary knowledge of LISP or instructor's permission.

CS #765W - Introduction to Computational Linguistics
Credits: 4.00
Introduces computational analysis of natural language with a focus on semantic representations and the resolution of ambiguity. Provides an elementary working knowledge of linguistic and artificial intelligence analysis methods as motivated by examples of potential input texts. Topics include parsing, formal grammars, representation of knowledge and memory, inference, and interpretation of non-literal language. Prereq: elementary knowledge of LISP or instructor's permission. 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.