CSCI 315: Computational Biology [PHYS 315] (Q)

This course will provide an overview of Computational Biology, the application of Computer Science problem-solving techniques to interpret the rapidly expanding amount of biological data. Topics covered will include database searching, DNA sequence alignment, phylogeny reconstruction, protein structure prediction, microarray analysis, and genome assembly using techniques such as string matching, dynamic programming, suffix trees, hidden Markov models, and expectation-maximization. Continue reading »

CSCI 319: Integrative Bioinformatics, Genomics, and Proteomics Lab [BIOL 319, CHEM 319, MATH 319, PHYS 319] (Q)

What can computational biology teach us about cancer? In this capstone experience for the Genomics, Proteomics, and Bioinformatics program, computational analysis and wet-lab investigations will inform each other, as students majoring in biology, chemistry, computer science, mathematics/statistics, and physics contribute their own expertise to explore how ever-growing gene and protein data-sets can provide key insights into human disease. In this course, we will take advantage of one well-studied system, the highly conserved Ras-related family of proteins, which play a central role in numerous fundamental processes within the cell. The course will integrate bioinformatics and molecular biology, using database searching, alignments and pattern matching, phylogenetics, and recombinant DNA techniques to reconstruct the evolution of gene families by focusing on the gene duplication events and gene rearrangements that have occurred over the course of eukaryotic speciation. By utilizing high through-put approaches to investigate genes involved in the MAPK signal transduction pathway in human colon cancer cell lines, students will uncover regulatory mechanisms that are aberrantly altered by siRNA knockdown of putative regulatory components. This functional genomic strategy will be coupled with independent projects using phosphorylation-state specific antisera to test our hypotheses. Proteomic analysis will introduce the students to de novo structural prediction and threading algorithms, as well as data-mining approaches and Bayesian modeling of protein network dynamics in single cells. Flow cytometry and mass spectrometry will be used to study networks of interacting proteins in colon tumor cells.  Continue reading »

CSCI 331: Introduction to Computer Security

Program flaws are common. Many of these flaws lie dormant in production code, being either undiscovered or dismissed as benign. However, such flaws frequently offer malicious users an opportunity to alter program behavior. Coupled with widespread internet connectivity, latent vulnerabilities mean that most connected devices are potential targets. Programmers who treat computer security as a second class design consideration do so at their peril. This class explores common vulnerabilities in computer systems, how attackers exploit them, and how systems engineers design defenses to mitigate them. The goal is to be able to recognize potential vulnerabilities in one's own software and to practice defensive design. Hands-on experience writing C/C++ code to inspect and modify the low-level operation of running programs is emphasized. Finally, regular reading and writing assignments round out the course to help students understand the cultural and historical background of the computer security "arms race." Continue reading »

CSCI 334: Principles of Programming Languages (Q)

This course examines concepts and structures governing the design and implementation of programming languages. It presents an introduction to concepts of compilers and run-time representations of programming languages; features of programming languages supporting abstraction; and programming language paradigms including procedural programming, functional programming, object-oriented programming, polymorphism, and concurrency. Programs will be required in languages illustrating each of these paradigms. Continue reading »

CSCI 336: Computer Networks (Q)

This course explores the principles underlying the design of computer networks. We will examine techniques for transmitting information efficiently and reliably over a variety of communication media. We will look at the addressing and routing problems that must be solved to ensure that transmitted data gets to the desired destination. We will come to understand the impact that the distributed nature of all network problems has on their difficulty. We will examine the ways in which these issues are addressed by current networking protocols such as TCP/IP and Ethernet. Students will meet weekly with the instructor in pairs to present solutions to problem sets and reports evaluating the technical merit of current solutions to various networking problems. PROJECT COURSE Continue reading »

CSCI 337T: Digital Design and Modern Architecture (Q)

This tutorial course considers topics in the low-level design of modern architectures. Course meetings will review problems of designing effective architectures including instruction-level parallelism, branch-prediction, caching strategies, and advanced ALU design. Readings will be taken from recent technical literature. Labs will focus on the development of custom CMOS circuits to implement projects from gates to bit-sliced ALU's. Final group projects will develop custom logic-demonstrating concepts learned in course meetings. Continue reading »

CSCI 339: Distributed Systems (Q)

This course studies the key design principles of distributed systems, which are collections of independent networked computers that function as single coherent systems. Covered topics include communication protocols, processes and threads, naming, synchronization, consistency and replication, fault tolerance, and security. Students also examine some specific real-world distributed systems case studies, ranging from the Internet to file systems. Class discussion is based on readings from the textbook and research papers. The goals of this course are to understand how large-scale computational systems are built, and to provide students with the tools necessary to evaluate new technologies after the course ends. PROJECT COURSE Continue reading »

CSCI 353: Algorithms and Applications: Opportunities and Risks

Algorithms are designed to address specific needs, but these algorithms also may have unintended consequences. For example, in her book, Weapons of Math Description, Cathy O'Neil describes "how big data increases inequality and threatens democracy." This tutorial will examine approximately five application areas, including problems being addressed, selected details of the underlying algorithmic solutions, effectiveness of the solutions, and potential risks. Initial work for this tutorial will use O'Neil's book as a starting point. What data are collected for several socially-oriented applications, what algorithms are used, to what extent are results biased, and how might one measure that bias? The selection of later topics will depend upon the interests of students in the class. For each such application, students will first determine a (partial) list of specifications, and attention will then focus on needed hardware, networks, algorithms, and other implementation challenges. With this background, students will explore the current state-of-the-art for modern systems. What results are achieved successfully, how might systems be tested, what risks might arise, what impact the systems might on various stakeholders, and how might challenges be addressed? Continue reading »

CSCI 356T: Advanced Algorithms (Q)

This course explores advances in algorithm design, algorithm analysis and data structures. The primary focus is on randomized and approximation algorithms, randomized and advanced data structures, and algorithmic complexity. Topics include combinatorial algorithms for cut, packing, and covering problems, linear programming algorithms, approximation schemes, hardness of approximation, random search trees, and hashing. Continue reading »

CSCI 361: Theory of Computation [MATH 361] (Q)

This course introduces a formal framework for investigating both the computability and complexity of problems. We study several models of computation including finite automata, regular languages, context–free grammars, and Turing machines. These models provide a mathematical basis for the study of computability theory—the examination of what problems can be solved and what problems cannot be solved—and the study of complexity theory—the examination of how efficiently problems can be solved. Topics include the halting problem and the P versus NP problem. Continue reading »