Faculty with Research Interests
For information regarding faculty visit the Department of Computer Science website.
Computers have changed what we do and how we do it in our homes, in our offices, and throughout our world. The discipline of computer science focuses upon the many challenging problems encountered in the development and use of computing systems and software. Areas of study in computer science range from theoretical analyses into the nature of computing and computing algorithms, through the development of advanced computing devices and networks, to the design and implementation of sophisticated software systems.
The department offers two undergraduate programs in core computer science: a Bachelor of Science (B.S.) in Computer Science and Bachelor of Science (B.S.) in Computer Information Systems, as well as a Bachelor of Science (B.S.) in Artificial Intelligence.
Both core computer science programs provide an excellent background in the field and allow for ample study in other areas. Where these programs differ is in the approach they take to computer science. The B.S. in Computer Science provides an in-depth experience focusing on the theory and practice of computer science while the B.S. in Computer Information Systems provides a more interdisciplinary experience, balancing study in computer science with study in another field. Both programs begin with a set of introductory courses that work together to provide students with a firm foundation in computer science. These introductory courses include regular labs wherein students analyze and solve a variety of problems using accepted software development techniques. Having completed the introductory core, a student is prepared to work independently within a well-structured design and coding paradigm in the classroom or on the job.
The last two years of study build upon this foundation. The B.S. in Computer Science focuses on the concepts and techniques used in the design and development of advanced software systems. Students in this program explore the conceptual underpinnings of computer science—its fundamental algorithms, programming languages, database systems, operating systems, and software engineering techniques. In addition, students choose from a rich set of electives including artificial intelligence, machine learning, biometrics, cloud computing, data mining, natural language processing, computer vision, computer graphics, information retrieval, information security, intelligent text analysis, knowledge management systems, and mobile application development, among others. As with the introductory sequence, these advanced courses stress “hands-on" learning by doing. Students can opt to complete one of the computer science specializations: data science, distributed and cloud computing, information security, or information and knowledge management systems. An allotment of free electives allows students to combine study in computer science with study in another field to complete a minor.
The B.S. in Computer Information Systems program emphasizes the use of computing for complex problem solving. Students in this program pursue an interdisciplinary course of study that combines a solid foundation in computer science with a focus in another discipline. This program is designed for students who seek to blend their computer science abilities with skills specific to another domain to solve problems in that domain. Examples include computing with a business focus (e.g., management information systems) or computing with a natural science focus (e.g., computational physics).
The B.S. in Artificial Intelligence (AI), one of the first degrees of its kind in the country, gives students the broad and deep foundations necessary to build computational systems that can interpret sensory input, learn from experience, understand human language, plan ahead, and support intelligent decision making. The program starts with introductory courses in programming, computer science, mathematics, and statistics that provide students with a firm technical foundation. Students are then prepared to learn core AI concepts and techniques including state-space search, game-playing, machine learning, neural networks, planning, computer vision, and language understanding. For breadth of understanding necessary in this interdisciplinary field, students choose from a diverse set of advanced courses in cognitive science, philosophy of mind, and linguistics, and also must complete a minor in another area. Given the societal impact of AI, emphasis is placed on ethics and social responsibility throughout the coursework. The program also includes a large variety of advanced AI electives to enable students to develop technical mastery in specific sub-fields.
The mission statement for the Department of Computer Science may be found on the Department of Computer Science website.
- Bachelor of Science in Artificial Intelligence
- Bachelor of Science in Computer Information Systems
- Bachelor of Science in Computer Science
The Department of Computer Science also offers the following co-terminal degrees, which enables a student to simultaneously complete both an undergraduate and graduate degree in as few as five years:
- Bachelor of Science in Applied Mathematics/Master of Computer Science
- Bachelor of Science in Applied Mathematics/Master of Science in Computer Science
- Bachelor of Science in Artificial Intelligence/Master of Artificial Intelligence
- Bachelor of Science in Artificial Intelligence/Master of Computer Science
- Bachelor of Science in Artificial Intelligence/Master of Cybersecurity
- Bachelor of Science in Artificial Intelligence/Master of Data Science
- Bachelor of Science in Artificial Intelligence/Master of Science in Computer Science
- Bachelor of Science in Artificial Intelligence/Master of Science in Computational Decision Sciences and Operations Research
- Bachelor of Science in Biology/Master of Computer Science
- Bachelor of Science in Biology/Master of Science in Computer Science
- Bachelor of Science in Computer Engineering/Master of Computer Science
- Bachelor of Science in Computer Engineering/Master of Science in Computer Science
- Bachelor of Science in Computer Science/Master of Artificial Intelligence
- Bachelor of Science in Computer Science/Master of Computer Science
- Bachelor of Science in Computer Science/Master of Cybersecurity
- Bachelor of Science in Computer Science/Master of Data Science
- Bachelor of Science in Computer Science/Master of Science in Applied Mathematics
- Bachelor of Science in Computer Science/Master of Science in Computer Science
- Bachelor of Science in Computer Science/Master of Science in Computational Decision Sciences and Operations Research
- Bachelor of Science in Computer Science/Master of Intellectual Property Management and Markets
- Bachelor of Science in Physics/Master of Computer Science
- Bachelor of Science in Physics/Master of Science in Computer Science
These co-terminal degrees allow students to gain greater knowledge in specialized areas while, in most cases, completing a smaller number of credit hours with increased scheduling flexibility. For more information, please visit the Department of Computer Science website (science.iit.edu/computer-science).
An introduction to science and engineering as a profession. Examines the problem-solving process used in engineering and science. Emphasizes the interdisciplinary and international nature of problem-solving and the need to evaluate solutions in terms of a variety of constraints: computational, financial, and social.
Introduces the use of high-level programming language as a problem-solving tool in engineering including basic data structures and algorithms, structured programming techniques, and software documentation. Designed for students who have had little or no prior experience with computer programming. Students should only take one of these courses (CS 104, CS 105, CS 115).
Introduces the use of high-level programming language as a problem-solving tool, including basic data structures and algorithms, structured programming techniques, and software documentation. Designed for students who have had little or no prior experience with computer programming. Students should only take one of these courses (CS 104, CS 105, CS 115).
An introduction to the following "big ideas" of computer science: (1) computing is a creative activity; (2) abstraction reduces information and detail to facilitate focus on relevant concepts; (3) data and information facilitate the creation of knowledge; (4) algorithms are used to develop and express solutions to computational problems; (5) programming enables problem solving, human expression, and creation of knowledge; (6) the internet pervades modern computing; and (7) computing has global impacts.
Introduces the use of a high-level object-oriented programming language as a problem-solving tool, including basic data structures and algorithms, object-oriented programming techniques, and software documentation. Designed for students who have had little or no prior experience with computer programming. For students in CS and CS-related degree programs. Students should only take one of these courses (CS 104, CS 105, CS 115).
Introduces more advanced elements of object-oriented programming, including dynamic data structures, recursion, searching and sorting, and advanced object-oriented programming techniques. For students in CS and CS-related degree programs.
Problem-solving and design using an object-oriented programming language. Introduces a variety of problem-solving techniques, algorithms, and data structures in object-oriented programming.
Introduction to the use of formal mathematical structures to represent problems and computational processes. Topics covered include Boolean algebra, first-order logic, recursive structures, graphs, and abstract language models. Credit will not be granted for both CS 330 and MATH 230.
Implementation and application of the essential data structures used in computer science. Analysis of basic sorting and searching algorithms and their relationship to these data structures. Particular emphasis is given to the use of object-oriented design and data abstraction in the creation and application of data structures.
This class balances the imperative, object-oriented bent of the introductory programming sequence by presenting alternative programming paradigms and asks students to write complex programs from scratch while amassing a repertoire of reusable programming patterns and techniques. Programming assignments, drawn from various domains of computer science, will highlight the importance of selecting appropriate data structures, algorithms, and techniques for the problem at hand.
Introduction to the internal architecture of computer systems, including micro-, mini-, and mainframe computer architectures. Focuses on the relationship among a computer's hardware, its native instruction set, and the implementation of high-level languages on that machine. Uses a set of assembly language programming exercises to explore and analyze a microcomputer architecture. Credit will not be granted for both CS 350 and ECE 242.
Examines the components of sophisticated multilayer software systems, including device drivers, systems software, applications interfaces, and user interfaces. Explores the design and development of interrupt-driven and event-driven software.
**Instructor permission required.**
First course in a two-course sequence that is designed to prepare students for graduate study in computer science. Explores the implementation and application of fundamental data structures and algorithms with an emphasis on object-oriented programming in Java. Examines the relationship between these elements and the mathematical structures that form the foundation of computer science. This course does not apply toward M. S./Ph. D. credit in Computer Science.
Second course in a two-course sequence that is designed to prepare students for graduate study in computer science. Explores the development of the multiple layers of software that form a sophisticated software system, from device drivers to application interfaces to user interfaces. Examines how computer architecture influences software development. Emphasizes the design and implementation of interrupt-driven/event-driven software.
This course is a six-credit hour integration of CS 401 and CS 402. The course is an introduction to data structures but is designed to expand programming skills/concepts using software development methodology techniques. The course also provides an introduction to computer architecture and systems programming including assembly language programming, event handling and multi-threading.
This course will provide students with an understanding of some basic discrete mathematics and techniques for designing computer algorithms and measuring and analyzing their behavior. We emphasize the necessary mathematical ideas such as how to prove a mathematical statement, how to analyze the worst case and the average case complexity of an algorithm. We also introduce students to some new techniques used in designing algorithms, such as the approximation algorithms and randomized algorithms.
Overview of display devices and applications. Vector graphics in two and three dimensions. Image generation, representation, and manipulation. Homogeneous coordinates. Modeling and hidden line elimination. Introduction to raster graphics. Perspective and parallel projections.
This course will provide an introductory look at concepts and techniques in the field of data mining. After covering the introduction and terminologies to Data Mining, the techniques used to explore the large quantities of data for the discovery of meaningful rules and knowledge such as market basket analysis, nearest neighbor, decision trees, and clustering are covered. The students learn the material by implementing different techniques throughout the semester.
Overview of database architectures, including the Relational, Hierarchical, Network, and Object Models. Database interfaces, including the SQL query language. Database design using the Entity-Relationship Model. Issues such as security, integrity, and query optimization.
Overview of fundamental issues of information retrieval with theoretical foundations. The information-retrieval techniques and theory, covering both effectiveness and run-time performance of information-retrieval systems are covered. The focus is on algorithms and heuristics used to find documents relevant to the user request and to find them fast. The course covers the architecture and components of the search engine such as parser, stemmer, index builder, and query processor. The students learn the material by building a prototype of such a search engine. Requires strong programming knowledge.
Introduction to the design, behavior, and analysis of computer algorithms. Searching, sorting, and combinatorial algorithms are emphasized. Worst case, amortized, and expected bounds on time and space usage.
Study of commonly used computer programming languages with an emphasis on precision of definition and facility in use. Scanning, parsing, and introduction to compiler design. Use of compiler generating tools.
Students will learn a variety of software engineering techniques and design patterns to assist in the rapid development and prototyping of applications, leveraging frameworks and APIs provided by current mobile development platforms (such as Android and iOS). Application lifecycles, data management and persistence mechanisms, and user interface design, among other topics, will be covered. Industry speakers will be invited to speak about best practices. Students (individually or in teams) will take ideas from concept to final implementation and will present their work at the end of the semester. When appropriate, students may take the additional step of deploying their work on the appropriate application marketplace(s).
This course covers the design and implementation of a compiler for modern languages by implementing the following: abstract syntax trees; intermediate representations; static analysis; fix-point operations; symbol tables and type checking; and first-order and high-order function implementation. Students will incrementally create a series of compilers.
Introduction to methodologies for object-oriented design and programming. Examines the object model and how it is realized in various object-oriented languages. Focuses on methods for developing and implementing object-oriented systems.
This course provides an introduction to architecture, analysis, design, and implementation of distributed, multi-tier applications using distributed object technology. The course focuses on the services and facilities provided by an Object Request Broker (ORB). Students will use a commercially available ORB and Database Management System to develop distributed object applications.
Introduction to operating system concepts-including system organization for uniprocessors and multiprocessors, scheduling algorithms, process management, deadlocks, paging and segmentation, files and protection, and process coordination and communication.
This course covers general introductory concepts in the design and implementation of parallel and distributed systems covering all the major branches such as cloud computing, grid computing, cluster computing, supercomputing, and many-core computing.
Introduction to data communication concepts and facilities with an emphasis on protocols and interface specifications. Focuses on the lower four layers of the ISO-OSI reference model.
This class provides an opportunity for students to obtain a fundamental understanding of the nature and operation of the full range of wireless networks (personal, local area, wide area, and satellite) and their performance characteristics, future potential, and challenges through class lectures, assigned readings, homework, projects, and various hands-on experiences.
An introduction to the fundamentals of computer and information security. This course focuses on algorithms and techniques used to defend against malicious software. Topics include an introduction to encryption systems, operating system security, database security, network security, system threats, and risk avoidance procedures.
Introduction to the functional elements and structures of digital computers. Detailed study of specific machines at the register transfer level illustrates arithmetic, memory, I/O and instruction processing.
Introduction to computational methods for intelligent control of autonomous agents, and the use of programming paradigms that support development of flexible and reactive systems. These include heuristic search, knowledge representation, constraint satisfaction, probabilistic reasoning, decision-theoretic control, and sensor interpretation. Particular focus will be places on real-world application of the material.
Theory and programming paradigms that enable systems to understand human language texts and extract useful information and knowledge. For example, extraction of structured event representations from news stories or discovering new research hypotheses by analyzing thousands of medical research articles. the course covers a variety of text analysis and text mining methods, with an emphasis on building working systems. Connections to information retrieval, data mining, and speech recognition will be discussed.
This capstone course is designed as a project course whose purpose is to enable students to see how the various algorithms and systems they have learned about in their prerequisite courses can be used in context to create useful knowledge management tools. Class periods will be divided among discussion of design of information and knowledge management systems, lectures on effective project management techniques, and hands-on advising of student project group meetings.
An introduction to machine learning concepts and algorithms, including classification, clustering, and regression. Topics include k-means clustering, nearest neighbors classification, decision trees, naive Bayes, logistic regression, support vector machines, and neural networks. Special focus will be on practical aspects of machine learning, including data preparation, experimental design, and modern tools for building machine learning systems. Basic probability theory knowledge is required.
Discussion of the impact of computer technology on present and future society. Historical development of the computer. Social issues raised by cybernetics.
Study of the principles and practices of software engineering. Topics include software quality concepts, process models, software requirements analysis, design methodologies, software testing and software maintenance. Hands-on experience building a software system using the waterfall life cycle model. Students work in teams to develop all life cycle deliverables: requirements document, specification and design documents, system code, test plan, and user manuals.
**Instructor permission required.**
Prepares undergraduate computer science majors for conducting research.
This course will treat a specific topic, varying from semester to semester, in which there is particular student or staff interest.