Department of Computer Science
Introduction
The Department of Computer Science offers instruction and performs research in the essential areas of computer science. Majors receive rigorous training in the foundations of computer science and the relevant mathematics, then have ample opportunity to specialize in advanced courses.
Majors can receive credit for practical training as a computing professional through an internship with a company or organization in the computing or information technology fields. Internships typically are paid positions and involve the student working off campus. All internships for credit must be approved in advance. Students interested in pursuing such an internship must submit a learning contract prior to the start of the internship. See the department's website for additional information.
Majors who excel in the program also have the opportunity to perform undergraduate research in computer science. Students can receive credit for conducting research that can be applied to the upper division elective requirement for the major and/or may be used as a vehicle for graduating with department honors. Students interested in receiving credit for research must submit a learning contract prior to the start of the semester in which credit is earned. See the department's website for additional information.
Students with no prior programming experience should consider taking one of the introductory courses, COMP 110 or COMP 116. COMP 110 is intended for potential majors and COMP 116 for non-majors. Students with prior programming experience should begin their studies with COMP 210. COMP 380 and COMP 388 are philosophical and moral reasoning courses that have no programming prerequisite.
Advising
In addition to general advising through the Academic Advising Program, students can consult designated faculty members within the Department of Computer Science who act as departmental advisors for requirements specific to the department's degree programs. Beyond course selection, advisors are also available for discussing internships, study abroad in computer science, honors projects, and undergraduate research opportunities. See the department website for a list of current department advisors and walk-in advising times.
Professors
Stan Ahalt, Ron Alterovitz, James Anderson, Mohit Bansal, Samarjit Chakraborty, Prasun Dewan, Henry Fuchs, Kevin Jeffay, Marc Niethammer, Stephen M. Pizer, Donald Porter, Jack Snoeyink, David Stotts.
Associate Professors
Jasleen Kaur, Ketan Mayer-Patel, Leonard McMillan, Shahriar Nirjon, Montek Singh, Cynthia Sturton.
Assistant Professors
Benjamin Berg, Gedas Bertasius, Praneeth Chakravarthula, Snigdha Chaturvedi, Parasara Sridhar Duggirala, Saba Eskandarian, Andrew Kwong, Junier Oliva, Roni Sengupta, Shashank Srivastava, Natalie Stanley, Daniel Szafir, Danielle Szafir, Huaxiu Yao.
Research Professors
Jay Aikat, Jan-Michael Frahm, Ashok Krishnamurthy, David Luebke, Dinesh Manocha, David A. Plaisted, Diane Pozefsky, Michael K. Reiter, F. Donelson Smith, Mary C. Whitton.
Research Associate Professors
Alexander C. Berg, Martin Styner.
Adjunct Professors
J. Steven Marron, Julian Rosenman, Dinggang Shen, P.S. Thiagarajan, Alexander Tropsha, Gregory F. Welch, Turner Whitted, Hongtu Zhu.
Adjunct Associate Professors
Jaime Arguello, Stephen Aylward, Tamara L. Berg, David Gotz, Pew-Thian Yap.
Adjunct Assistant Professors
Harlin Lee, Beatriz Paniagua, Quoc Tran-Dinh, Guorong Wu.
Adjunct Research Professor
Russell M. Taylor II.
Teaching Professor
Tessa Joseph-Nicholas.
Teaching Associate Professor
Sayeed Ghani.
Teaching Assistant Professors
Alyssa Lytle, Connor McMahon, Brent Munsell, Jorge Silva, Kevin Sun.
Adjunct Teaching Assistant Professor
Jorge Silva.
Professors of the Practice
Kris Jordan.
Professors Emeriti
Gary Bishop, Peter Calingaert, John Halton, Anselmo Lastra, Ming C. Lin, John B. Smith, Donald F. Stanat, Stephen Weiss, William Wright.
COMP–Computer Science
Undergraduate-level Courses
The goal of this first-year seminar is to understand the use of computing technology in our daily activities. In this course, we will study various examples of how computing solves problems in different aspects in our daily life. Honors version available.
This seminar explores the process of design and the nature of computers by designing, building, and programming LEGO robots. Competitions to evaluate various robots are generally held at the middle and at the end of the semester. Previous programming experience is not required. Honors version available.
Explore the art of origami, the science of protein, and the mathematics of robotics through lectures, discussions, and projects involving artistic folding, mathematical puzzles, scientific exploration, and research. Honors version available.
Service-learning course exploring issues around computers and people with disabilities. Students work with users and experts to develop ideas and content for new technologies. No previous computer experience required. Honors version available.
This seminar will study the concepts associated with video gaming by having small teams design a game, build a prototype, and put together a business proposal for the game. Honors version available.
Special topics course. Content will vary each semester. Honors version available.
The nature of computers, their capabilities, and limitations. How computers work, popular applications, problem-solving skills, algorithms and programming. Lectures and laboratory assignments. Students may not receive credit for this course after receiving credit for COMP 110 or higher.
Introduces students to programming and data science from a computational perspective. With an emphasis on modern applications in society, students gain experience with problem decomposition, algorithms for data analysis, abstraction design, and ethics in computing. No prior programming experience expected. Foundational concepts include data types, sequences, boolean logic, control flow, functions/methods, recursion, classes/objects, input/output, data organization, transformations, and visualizations. Students may not enroll in COMP 110 after receiving credit for COMP 210. Honors version available.
An introduction to programming for computationally oriented scientists. Fundamental programming skills, typically using MATLAB or Python. Problem analysis and algorithm design with examples drawn from simple numerical and discrete problems.
A ground-up introduction to current principles, standards, and best practice in website design, usability, accessibility, development, and management through project-based skills development in HTML5, CSS, and basic JavaScript. Intended for nonmajors.
We will investigate ways computer technology can be used to mitigate the effects of disabilities and the sometimes surprising response of those we intended to help. Honors version available.
Concepts of computer game development and their application beyond entertainment to fields such as education, health, and business. Course includes team development of a game. Excludes COMP majors. Honors version available.
Special topics in computing targeted primarily for students with no computer science background. This course has variable content and may be taken multiple times for credit. As the content will vary with each offering, there are no set requisites but permission from instructor is required.
This course will teach you how to organize the data used in computer programs so that manipulation of that data can be done efficiently on large problems and large data instances. Rather than learning to use the data structures found in the libraries of programming languages, you will be learning how those libraries are constructed, and why the items that are included in them are there (and why some are excluded).
This is the first course in the introductory systems sequence. Students enter the course having taken an introductory programming course in a high-level programming language (COMP 110) and a course in discrete structures. The overarching goal is to bridge the gap between a students' knowledge of a high-level programming language (COMP 110) and computer organization (COMP 311).
Structured practice to develop and refine programming skills in preparation for the ACM programming competition.
Fundamentals of computer science pedagogy and instructional practice with primary focus on training undergraduate learning assistants for computer science courses. Emphasis on awareness of social identity in learning, active learning in the computer science classroom, and effective mentorship. All students must be granted a computer science learning assistantship or obtain prior approval to substitute relevant practicum experience prior to enrollment.
Introduces discrete structures (sets, tuples, relations, functions, graphs, trees) and the formal mathematics (logic, proof, induction) used to establish their properties and those of algorithms that work with them. Develops problem-solving skills through puzzles and applications central to computer science. Honors version available.
Non-technical topics in computer science for computer science majors. May not be used to satisfy any degree requirements for a computer science major. This course has variable content and may be taken multiple times for credit.
Computer science majors only. A signed learning contract is required before a student may register. Work experience in non-elementary computer science. Permission of instructor and director of undergraduate studies required.
Students will learn how to reason about how their code is structured, identify whether a given structure is effective in a given context, and look at ways of organizing units of code that support larger programs. In a nutshell, the primary goal of the course is to equip students with tools and techniques that will help them not only in later courses in the major but also in their careers afterwards.
Introduction to computer organization and design. Students will be introduced to the conceptual design of a basic microprocessor, along with assembly programming. The course includes fundamental concepts such as binary numbers, binary arithmetic, and representing information as well as instructions. Students learn to program in assembly (i.e., machine) language. The course covers the fundamentals of computer hardware design, transistors and logic gates, progressing through basic combinational and sequential components, culminating in the conceptual design CPU.
Explores real-world skills for successfully developing and launching a software startup in an experiential learning environment. Customer outreach and feedback, market analysis, business model development, agile product development, with mentors from the entrepreneurship community.
This discussion-based, participatory course explores the personal, sociocultural, and ethical effects and implications of the development and use of computing technologies and the Internet. Honors version available.
Explores Internet history and cyberphilosophy; online identify construction, community, communication, creativity; bodies/cyborgs; intelligence and AI. Students perform independent research into and analyze virtual worlds, social media, anonymous bulletin boards, mobile media, and more, and create digital art and literature. Seminar-style; students collaborate on designing and leading class.
Elective topics in computer science for computer science majors. May not be used to satisfy any degree requirements for a computer science major. This course has variable content and may be taken multiple times for credit.
Students develop a software program for a real client under the supervision of a faculty member. Projects may be proposed by the student but must have real users. Course is intended for students desiring practical experiences in software engineering but lacking the experience required for external opportunities. Majors only.
Advanced Undergraduate and Graduate-level Courses
Required preparation, a first formal course in computer programming (e.g., COMP 110, COMP 116). Advanced programming: object-oriented design, classes, interfaces, packages, inheritance, delegation, observers, MVC (model view controller), exceptions, assertions. Students may not receive credit for this course after receiving credit for COMP 301. Honors version available.
The analysis of data structures and their associated algorithms. Abstract data types, lists, stacks, queues, trees, and graphs. Sorting, searching, hashing. Students may not receive credit for this course after receiving credit for COMP 210.
Digital logic, circuit components. Data representation, computer architecture and implementation, assembly language programming. Students may not receive credit for this course after receiving credit for COMP 311.
Placement of data on secondary storage. File organization. Database history, practice, major models, system structure and design. Previously offered as COMP 521.
Developing applications for the World Wide Web including both client-side and server-side programming. Emphasis on Model-View-Controller architecture, AJAX, RESTful Web services, and database interaction.
Application-level protocols HTTP, SMTP, FTP, transport protocols TCP and UDP, and the network-level protocol IP. Internet architecture, naming, addressing, routing, and DNS. Sockets programming. Physical-layer technologies. Ethernet, ATM, and wireless.
Principles of mobile applications, mobile OS, mobile networks, and embedded sensor systems. Coursework includes programming assignments, reading from recent research literature, and a semester long project on a mobile computing platform (e.g., Android, Arduino, iOS, etc.).
Introduction to topics in computer security including confidentiality, integrity, availability, authentication policies, basic cryptography and cryptographic protocols, ethics, and privacy. A student may not receive credit for this course after receiving credit for COMP 535.
Recommended preparation, some knowledge of basic linear algebra. An introduction to quantum computing. Basic math and quantum mechanics necessary to understand the operation of quantum bits. Quantum gates, circuits, and algorithms, including Shor's algorithm for factoring and Grover's search algorithm. Entanglement and error correction. Quantum encryption, annealing, and simulation. Brief discussion of technologies.
Introduction to the theory of computation. Finite automata, regular languages, pushdown automata, context-free languages, and Turing machines. Undecidable problems.
Fundamentals of modern software 2D graphics; geometric primitives, scan conversion, clipping, transformations, compositing, texture sampling. Advanced topics may include gradients, antialiasing, filtering, parametric curves, and geometric stroking.
Natural language processing (NLP) uses mathematics, machine learning, linguistics, and computer science to make language computationally accessible and analyzable. In this course, you will learn to do essential NLP tasks using Python and survey a selection of NLP applications to describe the problems or tasks each addresses, the materials and methods used, and how the applications are evaluated. At least a semester of Python or equivalent practical experience is highly recommended.
Study of information retrieval and question answering techniques, including document classification, retrieval and evaluation techniques, handling of large data collections, and the use of feedback.
Business and Computer Science students join forces in this course to create data-driven business insights. We transgress the data science pipeline using cloud computing, artificial intelligence, and real-world datasets. Students acquire hands-on skills in acquiring data, wrangling vast unstructured data, building advanced models, and telling compelling stories with data that managers can understand.
Independent research conducted under the direct mentorship of a computer science faculty member. If repeated, the repeated course can not be counted for the major. For computer science majors only. Permission of instructor required.
Permission of the department. Computer science majors only. For advanced majors in computer science who wish to conduct an independent study or research project with a faculty supervisor. May be taken repeatedly for up to a total of six credit hours.
Design and construction of compilers. Theory and pragmatics of lexical, syntactic, and semantic analysis. Interpretation. Code generation for a modern architecture. Run-time environments. Includes a large compiler implementation project.
Organization and scheduling of software engineering projects, structured programming, and design. Each team designs, codes, and debugs program components and synthesizes them into a tested, documented program product.
Concepts of high-level programming and their realization in specific languages. Data types, scope, control structures, procedural abstraction, classes, concurrency. Run-time implementation.
Types of operating systems. Concurrent programming. Management of storage, processes, devices. Scheduling, protection. Case study. Course includes a programming laboratory. Honors version available.
Distributed systems and their goals; resource naming, synchronization of distributed processes; consistency and replication; fault tolerance; security and trust; distributed object-based systems; distributed file systems; distributed Web-based systems; and peer-to-peer systems.
Principles of securing the creation, storage, and transmission of data and ensuring its integrity, confidentiality and availability. Topics include access control, cryptography and cryptographic protocols, network security, and online privacy.
Introduces both the applied and theoretical sides of cryptography. Main focus will be on the inner workings of cryptographic primitives and how to use them correctly. Begins with standard cryptographic tools such as symmetric and public-key encryption, message authentication, key exchange, and digital signatures before moving on to more advanced topics. Potential advanced topics include elliptic curves, post-quantum cryptography, and zero-knowledge proofs. Honors version available.
This course is an introduction to digital logic as well as the structure and electronic design of modern processors. Students will implement a working computer during the laboratory sessions.
Introduction to programming embedded control systems that lie at the heart of robots, drones, and autonomous vehicles. Topics will include modeling physical systems, designing feedback controllers, timing analysis of embedded systems and software, software implementations of controllers on distributed embedded platforms and their verification. Honors version available.
Formal specification and verification of programs. Techniques of algorithm analysis. Problem-solving paradigms. Survey of selected algorithms.
Bioinformatics algorithms. Topics include DNA restriction mapping, finding regulatory motifs, genome rearrangements, sequence alignments, gene prediction, graph algorithms, DNA sequencing, protein sequencing, combinatorial pattern matching, approximate pattern matching, clustering and evolution, tree construction, Hidden Markov Models, randomized algorithms.
Introduction to techniques and applications of modern artificial intelligence. Combinatorial search, probabilistic models and reasoning, and applications to natural language understanding, robotics, and computer vision.
Machine learning as applied to speech recognition, tracking, collaborative filtering, and recommendation systems. Classification, regression, support vector machines, hidden Markov models, principal component analysis, and deep learning. Honors version available.
The course provides a hands on introduction to techniques in computational photography--the process of digitally recording light and then performing computational manipulations on those measurements to produce an image or other representation. The course includes an introduction to relevant concepts in computer vision and computer graphics.
Hardware, software, and algorithms for computer graphics. Scan conversion, 2-D and 3-D transformations, object hierarchies. Hidden surface removal, clipping, shading, and antialiasing. Not for graduate computer science credit.
Mathematics relevant to image processing and analysis using real image computing objectives and provided by computer implementations.
We will investigate ways computer technology can be used to mitigate the effects of disabilities and the sometimes surprising response of those we intended to help.
Hands-on introduction to robotics with a focus on the computational aspects. Students will build and program mobile robots. Topics include kinematics, actuation, sensing, configuration spaces, control, and motion planning. Applications include industrial, mobile, personal, and medical robots. Honors version available.
Concepts of computer game development and their application beyond entertainment to fields such as education, health, and business. Course includes team development of a game. Honors version available.
Through this course, students will develop an understanding of the general field of Natural Language Processing with an emphasis on state-of-the-art solutions for classic NLP problems. Topics include: text representation and classification, parts-of-speech tagging, parsing, translation, and language modeling.
This course has variable content and may be taken multiple times for credit. Different sections may be taken in the same semester. Honors version available.
Students will learn how to write OS kernel code in C and a small amount of assembly. Students will implement major components of the OS kernel, such as page tables, scheduling, and program loading.
Topics in designing global-scale computer networks (link layer, switching, IP, TCP, congestion control) and large-scale distributed systems (data centers, distributed hash tables, peer-to-peer infrastructures, name systems).
Required preparation, a first course in operating systems and a first course in algorithms (e.g., COMP 530 and 550). Principles and practices of parallel and distributed computing. Models of computation. Concurrent programming languages and systems. Architectures. Algorithms and applications. Practicum.
This course builds an understanding of the core issues encountered in the design of wireless (vs. wired) networks. It also exposes students to fairly recent paradigms in wireless communication.
Design and implementation of distributed collaborative systems. Collaborative architectures, consistency of replicated objects, collaborative user-interfaces, application and system taxonomies, application-level multicast, performance, causality, operation transformation, and concurrency and access control.
Required preparation, a first course in algorithms (e.g., COMP 550). Design and analysis of algorithms and data structures for geometric problems. Applications in graphics, CAD/CAM, robotics, GIS, and molecular biology.
Theory and practical issues arising in linear algebra problems derived from physical applications, e.g., discretization of ODEs and PDEs. Linear systems, linear least squares, eigenvalue problems, singular value decomposition.
Introduction to the field of deep learning and its applications. Basics of building and optimizing neural networks, including model architectures and training schemes.
Required preparation, a first course in data structures and a first course in discrete mathematics (e.g., COMP 410 and MATH 383). Display devices and procedures. Scan conversion. Matrix algebra supporting viewing transformations in computer graphics. Basic differential geometry. Coordinate systems, Fourier analysis, FDFT algorithm. Human visual system, psychophysics, scale in vision.
Introduces students to modeling, programming, and statistical analysis applicable to computer simulations. Emphasizes statistical analysis of simulation output for decision-making. Focuses on discrete-event simulations and discusses other simulation methodologies such as Monte Carlo and agent-based simulations. Students model, program, and run simulations using specialized software. Familiarity with computer programming recommended.
Algorithms and data mining techniques used in modern biomedical data science and single-cell bioinformatics. Graph signal processing, graph diffusion, clustering, multimodal data integration.
This course has variable content and may be taken multiple times for credit. COMP 690 courses do not count toward the major or minor.
For computer science majors only and by permission of the department. Individual student research for students pursuing an honors thesis in computer science under the supervision of a departmental faculty adviser.
Permission of the department. Required of all students in the honors program in computer science. The construction of a written honors thesis and an oral public presentation of the thesis are required.
Department of Computer Science
Brooks Computer Science Building, 201 S. Columbia Street, CB# 3175
(919) 590-6000