The computer science major elective track options shown below are intended solely as advisory guides to help you choose your elective coursework. Elective tracks are not officially noted on any student transcripts or diplomas upon graduation.
AI and ML
What is this track about? Artificial Intelligence (AI) is a branch of computer science that creates systems to perform tasks requiring human intelligence, such as reasoning, learning, problem-solving, perception, and language understanding. AI can be divided into narrow AI, for specific tasks, and general AI, which can perform any intellectual task a human can. Machine Learning (ML), a subset of AI, develops algorithms and models that enable computers to learn from data and improve performance over time. ML systems identify patterns and make decisions based on data with techniques such as supervised learning, unsupervised learning, and reinforcement learning.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Theoretical Foundations: Understanding the principles of AI and ML (CS 111, 165A-B).
- Practical Skills: Hands-on experience with ML algorithms and their applications in vision and language (CS 165B, CS 181, CS 188, CS 190I-DeepLearning).
- Deep Learning and Analytical Tools: Proficiency in deep learning techniques and statistical methods to analyze, validate, and enhance AI/ML models (CS 190I-DeepLearning, PSTAT 120B).
- Ethical Awareness: Knowledge of responsible AI practices (CS 165A).
Why should you take this track? In this track, students explore the world of intelligent systems and gain the expertise to develop algorithms that can reason, learn, and evolve. From transforming healthcare diagnostics to revolutionizing financial strategies and advancing the development of autonomous machines, mastering AI and ML opens up endless possibilities. Step into the forefront of technological innovation and carve out your path to shape the future of different industries.
Lead Faculty Contact: Ambuj Singh
Algorithms
What is this track about? In computer science, algorithms are essential for performing computations, processing data, and automating tasks. Studying algorithms involves understanding their design, analysis, and implementation to create efficient and effective solutions for various computational problems.
How will the courses in this track prepare you?
- Theoretical Foundations: Understanding the core principles and techniques of algorithm design and analysis, formal languages, automata theory, and computational models (CS132, CS134, CS138).
- Practical Skills: Hands-on experience applying algorithms to solve real-world problems (CS132).
- Advanced Techniques: Exposure to specialized areas such as randomized algorithms and cryptography (CS134, CS178).
- Decision-Making Strategies: Techniques for making informed decisions under uncertainty and competition (CS190A-Suri).
Why should you take this track? Algorithms form the foundation of computing and impact all other areas of study within computer science. Advances in algorithms can lead to breakthroughs in all of computing. Expertise in algorithms opens doors to careers in software engineering, data science, artificial intelligence, and cryptography, where algorithmic proficiency is highly valued for developing innovative solutions and optimizing system performance.
Lead Faculty Contact: Daniel Lokshtanov
Data Engineering
What is this track about? Data Engineering involves concepts, techniques, and tools to manage large volumes of data to support querying, transaction processing, and data analysis. It encompasses designing, constructing, and maintaining data infrastructure and systems to ensure efficient and reliable data flow and access.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Database and Networking Proficiency: Comprehensive knowledge of database systems and computer communication networks is crucial for managing large datasets. Courses cover database architectures, SQL, query processing, transaction management, and networking protocols, ensuring students can handle data storage and transmission (CS174A-B, CS176A).
- Foundational Computing Techniques: Courses cover core principles and advanced techniques in computational science, parallel computing, and distributed systems. Students learn essential numerical algorithms, high-performance computing, and the architecture and programming of distributed systems (CS111, CS140, CS 171).
- Practical Application and Project Development: Hands-on experience through team-based project development and advanced programming skills are emphasized. Students engage in software engineering practices, interface design, testing, and project management, preparing them for real-world data engineering challenges (CS148, CS156, CS189A-B).
- Artificial Intelligence and Machine Learning: Fundamental and advanced courses in AI and ML provide students with the skills to develop intelligent systems and apply machine learning techniques to data engineering tasks. Topics include intelligent agents, heuristic search, neural networks, and probabilistic reasoning (CS165A, CS165B).
Why should you take this track? Learning about data engineering is essential due to the exponential growth of data and the increasing reliance on data-driven decision-making across various industries. Proficiency in data engineering opens doors to careers in fields such as data engineering, data analysis, database administration, and cloud computing, where professionals are in high demand to design, build, and maintain data infrastructure and systems to support the ever-expanding data needs of organizations.
Lead Faculty Contact: Jianwen Su
Computer Networks
What is this track about? The Computer Networks track provides students with essential computer communications and network knowledge, laying the foundation for understanding digital connectivity infrastructure. This track encompasses various networking aspects, from hardware architecture to distributed systems, security protocols, and the integration of machine learning techniques for network optimization and decision-making.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Foundational Understanding: Gain insights into system architecture, operating systems, distributed systems, and computer communication networks, covering hardware components, software-hardware tradeoffs, process management, and network protocols (CS154, CS170, CS 171, CS176A).
- Advanced Networking Technologies: Explore advanced networking concepts, including socket programming, wireless and mobile networking, multimedia, and security protocols, to address challenges in Internet computing (CS176B-C, CS177).
- Machine Learning Integration: Discover how machine learning techniques can optimize networking decisions and address learning problems in network protocols, enhancing network performance and reliability (CS165B, CS190N-Gupta).
- Practical Application: Apply theoretical knowledge in practical scenarios, working with real data and developing analytical models for networking optimization (CS190N-Gupta).
Why should you take this track? Specializing in computer networks is crucial in the digital age as it underpins the infrastructure of modern connectivity. It enables seamless communication and data exchange across various devices and platforms, essential for individuals and organizations. Careers in this field include network administrators, network engineers, architects, and cybersecurity analysts, where professionals design, implement, and secure network infrastructures to ensure reliable and efficient data transfer.
Lead Faculty Contact: Arpit Gupta
Computer Security
What is this track about? The Computer Security track equips students with concepts and techniques for protecting the security and privacy of software and data systems. It aims to impart students with an adversarial mindset, thinking like an attacker who deeply reasons about the details and limitations of designs and implementations. Computer security is inherently horizontal and cuts across many different computer science areas. Hence, this track emphasizes understanding the architecture of computer systems, programming languages, operating systems, networking fundamentals, and cryptographic principles, all essential for securing information systems effectively and ensuring data privacy.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Security Principles and Cryptography: Explore the basics of computer security, privacy, and cryptographic techniques, addressing the technical challenges of producing secure computer information systems and ensuring data confidentiality and integrity (CS177, CS178).
- Foundational Understanding: Master the architecture of computer systems and the basics of operating systems, essential for understanding security vulnerabilities and implementing protective measures (CS154, CS170).
- Programming Languages and Software Engineering: Gain proficiency in programming languages and software engineering practices, crucial for developing secure software systems and implementing security protocols (CS 138, CS 160, CS162, CS172).
- Networking Fundamentals: Acquire fundamental knowledge of computer communication networks and internet technologies, including networking protocols and web-based techniques, essential for securing networked systems (CS176A, CS176B).
Why should you take this track? Specializing in computer security is crucial due to the increasing reliance on digital systems and the growing threat landscape of cyberattacks. Careers in computer security include roles such as cybersecurity analyst, security engineer, penetration tester, security consultant, incident responder, and security architect, spanning various industries, including finance, healthcare, government, technology, and defense, safeguarding organizations against cyber threats and vulnerabilities. Even more broadly, a solid understanding of security is critical for any software engineer who wants to ensure that their applications and services avoid common vulnerabilities and are robust to malicious hackers.
Lead Faculty Contact: Chris Kruegel
Software Engineering
What is this track about? The Software Engineering track provides students with the methodology and techniques essential for designing and implementing large-scale software systems. This track integrates concepts in software project management, advanced programming practices, database fundamentals, mobile application development, and practical project development.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Software Engineering and Project Management: Learn principles of software engineering and acquire skills in software project management, including problem analysis, system design, and implementation strategies (CS148, CS156, CS172, CS189A-B).
- Advanced Programming Skills: Develop expertise in advanced programming techniques such as automatic memory management, software testing, and legacy code maintenance (CS 148, CS156).
- Programming Languages: Gain proficiency in programming languages crucial for understanding advanced programming practices required for developing large software systems (CS138, CS160, CS162).
- Proficiency in Databases and Mobile Applications: Learn database system architectures, SQL, and database design principles, which are crucial for building robust, data-driven software systems. Cultivate proficiency in mobile application design, focusing on interaction design principles and iterative development methodologies (CS174A, CS184).
Why should you take this track? Specializing in software engineering remains essential due to the continued demand for tailored software solutions across industries. Software engineers design, develop, and maintain software systems, ensuring they meet specific requirements and quality standards. Career opportunities include roles such as software developer, architect, quality assurance engineer, DevOps engineer, and project manager, offering diverse opportunities for innovation and contributing to business success.
Lead Faculty Contact: Tevfik Bultan
Systems
What is this track about? The Systems track equips students with essential skills for designing, integrating, optimizing, and deploying computer systems, encompassing hardware, software, operating/embedded/distributed systems, and networks. This track teaches you about the fundamental role that computer systems play across our society and economy and how they work, are implemented, interoperate, and support modern applications and services.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Systems and Networks Proficiency: Develop expertise in operating systems, computer communication networks, and network computing, essential for building and managing networked systems (CS170, CS176A, CS176B).
- Foundational Understanding: Become proficient in formal languages and automata, programming languages, and program implementations that provide the building blocks for computer programs and systems (CS138, CS160, CS162).
- Efficient Parallel and Distributed Computing: Master parallel computing techniques, distributed systems, including parallel architectures, cloud computing, connected device interoperation, and optimization methodologies to enhance performance (CS140, CS 171, CS186).
- Systems Architecture and Interface Design: Gain insights into hardware-software interfaces and computer architecture critical to system design and implementation (CS/ECE153A, ECE 153B, CS154).
Why should you take this track? A specialty in computer systems prepares you for a wide range of exciting fields, including cloud computing, IoT and embedded systems, graphics and machine learning accelerators, data center engineering, performance-oriented programming, and cybersecurity. Everything relies on the fundamentals covered in this track, from the tiniest sensors to the largest supercomputers in the world. Whether you're leading teams engineering software solutions, working to enhance system performance and efficiency, or exploring fundamentally new ways of structuring computer systems through research, a specialization in computer systems gives you a rock-solid foundation on which to build an impactful and rewarding career.
Lead Faculty Contact: Chandra Krintz
Visual and Interactive Computing
What is this track about? This track delves into concepts, tools, and techniques for handling images, 3D models, and spatial interfaces, covering computer graphics, image processing, visualization, computer vision, virtual and augmented reality, video processing, social computing, design, creativity, decision-making, intelligent systems, and cognitive modeling.
How will the courses in this track prepare you? The courses in this track collectively provide:
- Graphics, Visualization, and Computer Vision: Understanding the OpenGL graphics standard, 3D graphics pipeline, shading models, texturing, as well as image formation, edge detection, pattern recognition, optical flow, stereo vision, and object recognition techniques (CS180, CS181, CS185).
- Spatial Interface Design and Implementation: Learning to design and implement spatial user interfaces (SUIs) for task assistance in AR/VR, combining theoretical insights with practical Unity projects (CS190I-Sra).
- Advanced Programming Practices and Audio Synthesis: Developing proficiency in high-level programming languages and software development methodologies, including generic programming, exception handling, and application maintenance (CS 148, CS156, CS190D-Conrad).
- Machine Learning Fundamentals: Exploring essential machine learning techniques such as neural networks, decision trees, genetic algorithms, and Bayesian learning (CS165B).
Why should you take this track? The Visual and Interactive Computing track offers expertise in leveraging visual media and interactive technologies, crucial in today's digital era. Proficiency in computer graphics, image processing, computer vision, and spatial interface design opens exciting career paths. From crafting immersive virtual experiences to revolutionizing human-computer interaction, professionals in this field play a pivotal role in shaping the future of entertainment, education, healthcare, and beyond.
Lead Faculty Contact: Tobias Höllerer
More Options
Looking to explore beyond the courses offered in the above tracks? Consider taking any of the following electives:
CS 110: Introduction to Research in CS
This course teaches students foundational research skills by developing a research project in a CS faculty specialization area. Students learn to identify and formulate research problems, communicate about research, both orally and in written form, and design research studies. Consider taking this class if you'd like to find out what research is all about, gain experience with solving real-world problems, observe a research group in action, and learn from CS faculty and graduate students.
Lead Faculty Contact: Ziad Matni
CS 190H: Quantum Computing (Parts I and II)
If you want to consider working on quantum computing research or join the quantum industry in the future, take part 1 of this course to learn about the basic architecture of quantum computation. Develop your interest further by taking part 2 of the course, preparing you to dive directly into research and comfortably engage with quantum computing research papers. What sets this course apart from traditional undergraduate courses is its specific emphasis on the near-term practical aspects of quantum computing systems, including deploying quantum computing protocols in laboratories. This hands-on experience, accessible through simulations or cloud-based platforms, ensures that students are thoroughly prepared for real-world quantum computing research applications.
Lead Faculty Contact: Murphy Niu