131. The Beauty and Joy of Computing
Computing has changed the world in profound ways. It has opened up wonderful new ways for people to connect, design, research, play, create, and express themselves. This course will focus on some of the "Big Ideas" of computing that have changed the world and consider where it will go in the future. We will discuss the challenges and implications of computer technology, including the responsibilities of those who design and use computer systems. Students will learn a bit about computer programming and a lot about writing at the college level. The lab portion of the course will introduce students to computer programming using languages and development tools designed for students with no programming experience.

140. Foundations of Computer Science
This course introduces students to problems that engage the interests of computer scientists and define the field. The course introduces students to object-oriented design, a principal discipline that computer scientists use to solve problems. Students learn to divide large problems into small problems, bundle related data with methods that operate on that data, and incorporate into new designs elements of previously completed designs. The course emphasizes creative expression using an abstract notation. Students practice designing, writing, testing, and presenting programs. Success in the course does not require previous programming experience.

144. Software Architecture
Disciplined design, coding, and testing of substantial programs. Specification of relationships among components of a program using composition and inheritance. Discernment of a client's requirements. Evaluation of the communication between a computer program and its human user. Prerequisite: CSC 140.

151. Discrete Mathematics for Computer Science
Logic, algorithms, combinatorics, trees, graphs, and other topics from discrete mathematics used in computer science. Prerequisite: 3-1/2 years of high school mathematics. (Mathematics) 

155. Topics in Computer Science
See Topics Courses.

218. Computer Organization
A view of the layers in the design of modern computers that begins at the level of individual logic gates, and progresses upward through elementary circuits, the design of a microprocessor, and programming at the lowest levels. An examination of costs and advantages gained by shifting functions from hardware to software, or vice versa. Prerequisites: CSC 140 and 151.

222. Geographic Information Systems
This course introduces students to computer science through a study of one of its important applications. Through work on projects related to their major fields of interest, students will learn how to use the visualization and statistical functions of geographic information systems as aids in making decisions. Students will learn how to represent, analyze, and display geographic data. Case studies will familiarize students with applications of the technology in the natural sciences, public policy, business, and other fields. Readings, discussions, and exercises will acquaint students with current standards, available tools, significant achievements, and the potential for the future development of geographic information systems.

230. Database Technologies for Analytics
An introduction to elements of relational database design and query with an emphasis on Structured Query Language (SQL).  Introduction to data mining including data interchange, filtering, scraping, and cleaning. Working with Big Data using NoSQL technology. This course meets half time in a classroom for lecture/discussion and half time in a computer lab for hands on experience with the software systems.

255-257. Topics in Computer Science
A focus on some part of the social context in which computer scientists work: professional ethics, leadership, and creativity in the technical professions; the software engineer's opportunities and responsibilities for helping to solve pressing social problems; or how innovations in the technology of computing are changing the way ordinary people live, work, and learn. See Topics Courses.

280/380. Internship in Computer Science
Participation in a computer-related area such as working with a business, government, or other appropriate institution under the direction of the organization's leaders and a faculty supervisor. Prerequisites: junior or senior standing; at least two 300-level Computer Science courses; approval by the faculty supervisor, the participating institution, and the Department. The maximum credit that may be earned in a Computer Science internship is two term credits. See Additional Academic Programs, All-College Independent Study Courses 280/380. (CR)

289/389. Group Project: See Additional Academic Programs, All-College Independent Study Courses 289/389.

290/390. Individual Project: See Additional Academic Programs, All-College Independent Study Courses 290/390.

301. Algorithms and Data Structures
Measurements of complexity. Comparison of methods for searching and sorting data. Alternative ways of organizing data in lists, tables, and trees. Prerequisites: CSC 140, 144, 151, and MAT 120 or 121.

302. Electronics
Same course as PHY 302 (see for course description). Prerequisites: CSC 140 and 151 or PHY 142 or 162. (Laboratory Science)

311. Systems Software
Process scheduling and synchronization, interprocess communication, allocation of memory and disk space. Creation and use of software, libraries, tools, and methods for the production of efficient, reliable software. Prerequisites: CSC 144 and 218. Alternate years.

314. Data Management Systems
Concepts and structures necessary to design and implement a database management system. Relational and object database models. Prerequisites: CSC 144 and 151. Alternate years.

315. Programming Language Concepts
Principles of design and implementation of high-level programming languages. Language definition structure, run-time behavior. Alternative programming paradigms, including functional languages. Programming examples from selected languages. Prerequisites: CSC 144 and 151. Alternate years.

317. Computer Networks
In this course, students examine the challenges of communication through dynamic networks, including the challenges of routing messages and making communication reliable and secure. The top-down approach begins with a study of application level protocols (application level protocols govern, for example, communication through the Web and via e-mail) and proceeds to a study of the lower level transport and network layer TCP/IP protocols that are at the heart of the Internet. At the still lower link layer, students explore methods for resolving addresses and allowing multiple access on local area networks. Measurement, analysis, and simulation of networks in the laboratory. Prerequisites: CSC 140, 151, and 218.

321. Computer Graphics
Introduction to the concepts and algorithms of computer graphics. Architecture of display systems, 2D and 3D geometry and algorithms, viewing transformations, interactive techniques, color concepts. Prerequisite: CSC 301. Alternate years.

355-360. Advanced Topics in Computer Science
A study in greater depth of a topic covered in the core curriculum, an introduction to an area of specialization within computer science, or readings in the research literature. Intended to broaden students' perspectives on the range of opportunities that will be available to them in professional practice and graduate-level study. Recent topics have included Algorithms, Computer Networks, Robotics, Client Server Systems, Structure and Interpretation of Computer Programs, and Bioinformatics.  See Topics Courses. Prerequisites: CSC 140 and 151.

511. Extended Research in Computer Science (1/4)
Reading coupled with research on a specialized topic. This adjunct course must be taken over four successive terms. Prerequisites: departmental GPA of 3.0 or higher, prior completion of one course in the Department at or above the 200 level, and permission of instructor. (CR)

512. Professional Practice in Computer Science (1/4)
Each student will gain experience in the iterative development of software through all stages of development, in presentations of a project to their peers, and in the review of their peers’ projects. Success will require application of knowledge and skills acquired in several core and elective courses. This practice solving problems like those encountered in industry and advanced study will prepare students for the challenges and opportunities that await them after graduation. Students should consult with an advisor in the department before beginning the course. In this course, students should plan on improving a project begun and substantially completed in another course. That other course may be taken concurrently. The course involves meeting twice each term for a total of 12 hours per semester and approximately 24 hours of work outside of class. Is repeatable once for credit. Prerequisites: CSC 140, CSC 144, CSC 151, CSC 218, CSC 301. Students should take this course during (or after) the year in which they complete other requirements for the major. (CR)