The most important aspect of Computer Science is problem solving, an essential skill for life. Students study algorithmic processes and the design, development and analysis of software and hardware used to carry out these processes. Since computers are used for a variety of purposes by people in all walks of life, there is a significant human side to computer science as well.
Some graduates choose to continue their studies in graduate or professional school (not necessarily in computer science) before seeking employment. Majors accepting positions upon graduation typically work for companies that provide computing hardware, software or services for use in business, education, government and research.
The department regularly offers Computer Science I and other courses of a more general nature for students interested in surveying key topics in computing. Departmental programs consist of a computer science major and a computer science minor. Most courses provide hands-on computing experience.
Computing facilities include pen-based computer laboratories that are part of the University network. They provide tools for computer science, standard desktop productivity, e-mail and connectivity to the Internet. The department maintains a state-of-the-art laboratory of Linux workstations with high-end servers that provide robust file services and a full array of software development tools. The department also has a computer-based, cooperative-work laboratory and a lounge for use by its majors.
University programs of interest to computer science majors include: Science Research Fellows Program, Information Technology Associates Program and Winter Term internships. Some employment and research opportunities with the department and the Computer Center are available during the year and summer. Finally, the student computer clubs (Association for Computing Machinery and ACM-Women) provide coordinated programs each year.
Requirements for a major
|Total courses required||Nine and one-half CSC + MATH 123 + one allied course|
|Core courses||CSC 121, CSC 122, CSC 231, CSC 232, CSC 233, CSC 240, CSC 498|
|Other required courses||One CSC course at the 400 level in addition to CSC 498.|
|Number 300 and 400 level courses||Four including CSC 498|
|Senior requirement and capstone experience||The senior requirement is CSC 498. As a culmination of the computer science major, each senior completes an independent project with credit earned through the course CSC498. Each student describes his or her project idea in a formal project proposal. Projects typically involve the design, implementation, testing and documentation of a software system that builds on earlier coursework both inside and outside the department. Students are mentored by a faculty member and meet regularly in groups to present their work and to discuss related topics such as the ethical implications of their work.|
|Additional information||MATH 123 is also required. MATH 223 may be substituted for MATH 123 with approval of the advisor. Students are required to take one allied course from a list maintained by the department; with approval of the advisor, students may substitute a 300/400 level CSC course for the allied course. Students are encouraged to complete an internship or research experience related to the major. This is not a requirement, however, and no departmental credit is awarded for these experiences. The advisor will offer guidance on selection of courses inside and outside of the department for students who may be interested in focusing on particular areas related to computer science.|
|Recent changes in major||Beginning Fall 2013, the number of CSC courses required for the major is reduced from 10 to 9.5. CSC 240, Writing in Computer Science (.5 credit) has been added to the core courses for the major. Students are now required to take an allied course. These new requirements apply to students entering DePauw Fall 2012 and after.|
|Writing in the Major||
Computer scientists must be able to communicate effectively with other computer scientists (e.g., as a member of a team designing a large system, or conveying results of research) and non-computer scientists (e.g., user documentation such as a user manual, or describing a project to a potential investor or customer). Communicating with other people, both orally and in writing, is an essential skill required of all computer scientists. Students majoring in Computer Science develop writing skills across several courses:
Writing assignments will comprise a significant portion of the course grade for each of the above-mentioned courses, and the course grade will reflect students' writing proficiency. Students will meet the Writing in Computer Science requirement by earning credit for CSC232 Object Oriented Software Development, CSC240, Writing in Computer Science, at least one 400-level elective course, and CSC498.
Requirements for a minor
|Total courses required||Five|
|Core courses||CSC 121 and CSC 122|
|Other required courses||At least two of the courses from: CSC 231, CSC 232, CSC 233. At least one CSC course at the 300 or 400 level.|
|Number 300 and 400 level courses||One|
Courses in Computer ScienceCSC 121
This is an introductory course in which problem solving and algorithm development are studied by considering computer science topics, such as computer graphics, graphical user interfaces, modeling and simulation, artificial intelligence and information management systems. Interesting and relevant programming assignments related to these topics are written in a high-level programming language that supports objects. Additional assignments utilize writing and data analysis to reinforce central course concepts and to address related areas of computing, such as ethics, history and the meaning of intelligence. The course meets three hours in class and two hours in laboratory (3-2). Offered each semester. Not offered pass/fail.
|Science and Mathematics||1 course|
This course builds on CSC 121 and includes programming topics such as sorting and searching, sets, recursion and dynamic data types. Additional concepts involve data type abstraction and implementation developed through studying structures such as lists, stacks, queues, hash tables and binary search trees. The course emphasizes object oriented implementation of these structures. Students learn tools for algorithm analysis and explore the use of standard libraries. The concept of tradeoffs (i.e., time vs. space, iteration vs. recursion, static vs. dynamic) recurs as a theme throughout the course. Prerequisite: CSC 121. Offered each semester. Not offered pass/fail.
|Science and Mathematics||CSC 121||1 course|
A seminar focused on a theme related to the study of computer science. Open only to first-year students. Does not count toward the major in computer science or into the major GPA.
This is an introduction to the study of computer hardware and its relationship to software. Topics include information representation, architecture of the central processing unit, memory organization and hierarchy, assembly language and machine level representation of programs, interactions and relationships among system components (hardware, operating systems, compilers, network environments), and the impact of architectural decisions on performance. Prerequisites: CSC 122. Offered each semester. Not offered pass/fail. Not open to students who have credit for CSC 221.
|CSC 122||1 course|
A study of fundamental techniques and tools for managing software development projects, together with relevant professional and ethical issues. Topics include methodologies such as UML diagrams for software specification and design, documentation standards, and tools for testing, code management, analysis, and debugging. Object oriented programming techniques such as inheritance and polymorphism are emphasized. Students will develop skills in individual and team software development through extensive practice designing and implementing object oriented software systems. In addition, students gain experience reading, documenting, presenting and critiquing such systems. Prerequisites: CSC 122. Offered each semester. Not offered pass/fail.
|CSC 122||1 course|
This course explores the theoretical foundations of computation at various levels of abstraction. Specific topics include graph theory and related algorithms; functional programming with an emphasis on recursion and recurrences; the description of languages using formalisms such as regular expressions, finite state machines, and context free grammars; and digital logic and its application to sequential and combinational circuits. Prerequisite: CSC 122 and Math123. Offered each semester. Not offered pass/fail.
|CSC 122 and MATH 123||1 course|
In this course students learn to communicate technical and non-technical information about computer science to technical and non-technical audiences. This writing includes communication with users (e.g., user manuals), the general public (e.g., op-ed pieces related to technical issues), and other non-technical audiences (e.g., legislators, potential investors, customers). Students also develop a project proposal document. Some of the writing in this course deals with ethical and social issues. Prerequisite or corequisite: CSC232
|CSC 232 (pre- or co-requisite)||1/2 course|
Topics are chosen from computer science content areas that extend explorations of content in existing courses or allow exploration of content not duplicated in regular course offerings. May count as an allied course in the computer science major depending on the topic. Does not count toward the major GPA.
This course examines fundamental principles in Human Computer Interaction as seen from the viewpoint of a computer scientist. Topics include user-centered design, expert reviews, usability tests, tradeoffs between interaction devices, alternative input-output methods, including handwriting recognition and associated algorithms, the design of interfaces for users with visual or motor impairments, construction of appropriate error messages and implementation of graphical user interfaces (GUIs). Prerequisite: CSC 232. Typically offered annually. Not offered pass/fail.
|CSC 232||1 course|
This course examines the core concepts and fundamental principles of computer networks and the services built on top of them. Topics covered include protocol organization, circuit-switch and packet-switch networks, routing, flow control, congestion control, reliability, security, quality-of-service and Internet protocols (TCP/IP). Prerequisites: CSC 231 and CSC 232. Typically offered annually. May not be taken pass/fail.
|CSC 231||1 course|
This course examines the implementation of intelligent algorithms on a computer system. The concept of an intelligent algorithm is motivated by initial discussions of the nature of intelligence and its relation to computers, particularly the Turing test. The course begins with two basic topics of artificial intelligence. The first is problem definition, state spaces and search methods, and the second is knowledge representation and logical reasoning. Following these topics is coverage of more advanced topics, such as game-playing algorithms, genetic algorithms, planning algorithms, computer vision, learning algorithms and natural language processing, among others. Prerequisite: CSC 232 and 233. Typically offered annually. Not offered pass/fail.
|CSC 232 and 233.||1 course|
This course covers some fundamental networking concepts, web application development and web application security. Topics covered include: introduction to the Internet, World Wide Web and internet protocols, markup languages, client side scripting, server side scripting, database concepts, encryption/decryption, web application vulnerabilities and how to build secure web applications. Prerequisites: CSC 232 and either CSC 231 or CSC 233. Typically offered bi-annually. Not offered pass/fail.
|CSC 231 or CSC 233.||1 course|
This course is an introduction to the concepts, techniques, algorithms and implementation of computer graphics. Topics include moving and drawing lines in absolute and relative coordinates, transformations, windowing, clipping, projections, perspective, polygon filling, hidden surface techniques and a variety of applications, including graphical user interfaces and menuing systems. Prerequisite: CSC 232. Typically offered annually. Not offered pass/fail.
|CSC 232||1 course|
Autonomous robots collect data from their environments and respond to the values gathered from their sensors in order to solve problems. In this introduction to autonomous robotics, students will first learn the basic principles of mechanical construction, electronics, sensors, motors and robot programming. Then, they will design, build and program original robots to solve problems such as finding the brightest light in a room and traversing a maze. In the hands-on course, students spend the majority of their time actually working with robots under instructor supervision. There is a significant writing component used in assessment, so students enhance their scientific writing skills. Prerequisites: CSC231 and CSC233. Typically offered annually. Not offered pass/fail.
|CSC 231 and CSC 233||1 course|
Topics are chosen from computer science content areas that extend explorations of content in existing courses or allow exploration of content not duplicated in regular course offerings. Open to students by permission of instructor or to those who satisfy prerequisites determined by the instructor.
|Open to students by permission of instructor or to those who satisfy prerequisites determined by the instructor.||1/2-1 course|
The topics of this course include a history of programming languages, virtual machines, representation of data types, sequence control, data control, lexical vs. dynamic scoping, sharing, type checking, parameter passing mechanisms, run-time storage management, context-free grammars, language translation systems, semantics and programming paradigms. Prerequisite: CSC 231, CSC 232, and CSC 233.Typically offered annually. Not offered pass/fail.
|CSC 231, CSC 232||1 course|
This course offers the study of theories related to compilers with the goal of implementing a compiler for a simplified variation of a language such as C++. Topics include formal languages, grammars, lexical, syntactic and semantic analysis, code generation and optimization. Prerequisites: CSC 231, CSC 232, and CSC 233. Typically offered annually.
|CSC 231, CSC 232, CSC 233||1 course|
Topics in operating system concepts and design, such as file systems, CPU scheduling, memory management, virtual memory, disk scheduling, deadlocks, concurrent processes, protection and distributed systems are studied in this course. Topics are treated thoroughly in a generic way and also discussed in detail with respect to a specific operating system. Prerequisites: CSC 231, CSC 232, with a pre- or co-requisite of CSC 233. Typically offered annually. Not offered pass/fail.
|CSC 231, CSC 232, CSC 233||1 course|
This course examines and discusses computer security, how to protect our computing infrastructure from illegal access, tempering, denial of access, etc. We will first define terms such as security and secure computing, then we'll talk about cryptography including symmetric and public key cryptographic techniques and their applications. Other topics covered include secure software, cyber security, database security, system security and hardware security. Prerequisites: CSC231, CSC232, and CSC233.
|CSC231, CSC232, and CSC233.||1 course|
Various models of formal languages (which provide a basis for compilers) and computation (which defines the kinds of problems that can be solved by a computer) are studied. Topics include regular languages, regular expressions, finite state automata, context-free languages, context-free grammars, push-down automata and Turing machines. The application of these models to several practical problems in computer science is considered. Computational limits are also discussed, using as examples several problems which cannot be solved by any algorithm. Prerequisite: CSC 233. Typically offered annually. Not offered pass/fail.
|CSC 233||1 course|
This course provides an external and an internal view of relational database management systems (DBMSs). The external view consists of database design and implementation. The database query and manipulation language SQL will be studied to the degree that students will be able to become proficient in this language on their own. The internal view involves characteristics of secondary storage devices, methods of organizing information, various file organization and accessing techniques and other topics related to database engine implementation. Programming assignments complement topics discussed in class, including the building of a few key components of a database engine. Prerequisite: CSC 231, CSC 232 and CSC 233. Typically offered annually. Not offered pass/fail.
|CSC 231, CSC 232, CSC 233||1 course|
Topics are chosen from content areas of computer science that either extend explorations of content in existing courses or allow explorations of content not duplicated in our current course offerings. Open by permission of instructor to students with more advanced prerequisites chosen by the instructor.
|Open by permission of instructor to students with more advanced prerequisites chosen by the instructor.||1/2-1 course|
Students complete a project proposal and a project under the sponsorship of a member of the computer science faculty. Students build on previous course work and/or internship experiences to complete their projects, to produce a project write-up, and to examine ethical issues related to their projects. Periodic progress reports will also be given. Prerequisite: CSC 231, CSC 232 and CSC 233, CSC 240 (beginning in 2015-16), senior standing and at least one computer science course at the 300 or 400 level. Offered each semester. Not offered pass/fail.
|CSC 231, CSC 232, CSC 233, CSC 240 (beginning in 2015-16)||1 course|