# 5.3. Upper Division Major Track Options

**Computer Science & Engineering Track Suggestions**

Students in the B.S. program need 23 credits of upper-division elective coursework, including at least one course that satisfies the upper division math-oriented requirement. The Department of Computer Science and Engineering has a wide variety of upper-division elective courses that have been grouped into areas of study, commonly referred to as our tracks.

Rather than focusing on “choosing” a track, students are encouraged to view track elective courses as a way to go deeper into one or more specialties within computer science and use those courses as a way to further develop computer science knowledge and skills. A track is not meant to limit your course options; indeed, students are able to mix and match elective courses across tracks if they want to explore more than one area of study. Additionally, students are reminded that tracks are neither declared nor approved, and they do not appear on your transcript or diploma.

Beginning Summer 2020, the previous 15 areas of study will be merged into 6. This new simplified track structure can be summarized in two main changes:

Historically identified tracks have been combined. For example, the four formally separate Architecture, Networking, Security, and Systems tracks have been merged into one “Computer Systems” track. As a consequence of the merging, these merged tracks are now more flexible than the old tracks (e.g., you can take a blend of security and networking classes while still progressing in the unified Computer Systems track).

Each track now comes with some text to provide guidance about why you might want to take this track. This includes a description of what type of material is covered in each track, what kind of coursework can typically be expected, and for which kinds of jobs the classes in the track might help you best prepare. To view these descriptions, please visit the CS Undergraduate Guide (https://www.cs.umn.edu/academics/undergraduate/guide)

**Faculty-Developed Track Options:**

### Artificial Intelligence/Robotics

Computer Systems

Data-Driven Computing

Human-Centered Computing

Languages & Theory

Software Engineering & Data Systems

**Artificial Intelligence/Robotics**

This track focuses on principles and methods of designing intelligent systems that analyze information and learn to act to achieve objectives. Themes explored include knowledge representation, planning and acting, discovery of patterns in data, learning and prediction, control of complex systems under uncertainty, theory of learning including fundamental bounds on generalization. Students completing these classes might work in robotics, data understanding, automation of human activities, and personalization. Courses in this track typically cover theory and principles and algorithms and involve large-scale projects that mix a diverse set of programming problems and hardware implementations.

Example course sequences:

For students interested in robotics: CSCI 4511W, CSCI 5512, CSCI 5551, CSCI 5552, CSCI 5561

For students interested in AI and machine learning: CSCI 4511W, CSCI 5512, CSCI 5521 or CSCI 5523, CSCI 5561

*Choose at least 4 if your goal is to “complete” a track*

At least 2 core:

**CSCI 4511W - Introduction to Artificial Intelligence (4)****CSCI 5512 - Artificial Intelligence II (3)****CSCI 5551 - Introduction to Intelligent Robotic Systems (3)****CSCI 5561 - Computer Vision (3)**

** ** Other Track Courses:

CSCI 4707 - Practice of Database Systems (3)

CSCI 5521 - Introduction to Machine Learning (3)

CSCI 5523 - Introduction to Data Mining (3)

CSCI 5525 - Machine Learning (3)

CSCI 5552 - Sensing and Estimation in Robotics (3)

CSCI 5715 - From GPS and Virtual Globes to Spatial Computing

LING 5801 -- Computational Linguistics (4)

PSY 5018H -- Math Models Human Behavior (3)

PSY 5036W -- Computational Vision (3)

Computer Systems is the area that studies the organization, design and implementation of computing platforms that provide services (such as computation, storage, communication) primarily intended to support other software. Classes investigate how these systems are organized into layers from processors, memory organization and virtualization, operating systems, compilers, networks and distributed systems. Students study how these layers interface with other systems, or how to improve them in various ways, such as performance, reliability, security, power consumption or cost. Students completing this track might work as network engineers, hardware designers, systems developers, or security engineers. The most relevant required classes for this track are CSCI 2021 and CSCI 4061. Course work tends to involve a mixture of analytical and programming assignments.

Example course sequences:

For students interested in hardware design: CSCI 4203, CSCI 5204, CSCI 5143, CSCI 4211, CSCI 5451 or 5161

For students interested in operating systems: CSCI 5103, CSCI 5105, CSCI 4203, CSCI 4211, CSCI 5451 or 4707

For students interested in computer security: CSCI 4211, CSCI 4203, CSCI 4271W, MATH 5248, CSCI 5271, CSCI 5105

For students interested in computer networks: CSCI 4211, CSCI 5103, CSCI 5221, and one or more of CSCI 4131, CSCI 5105, CSCI 5231 or EE 5505

*Choose at least 4 if your goal is to “complete” a track*

At least 2 core:

**CSCI 4203 - Computer Architecture (4)****CSCI 4211 - Introduction to Computer Networks (3)****CSCI 5103 - Operating Systems (3)****CSCI 5204 - Advanced Computer Architecture (3)**

** **Other Track Courses:

CSCI 4131 - Internet Programming (3)

CSCI 4271W - Development of Secure Software Systems (4)

CSCI 4707 - Practice of Database Systems (3)

CSCI 5105 - Introduction to Distributed Systems (3)

CSCI 5143 - Real-Time and Embedded Systems (3)

CSCI 5161 - Introduction to Compilers (3)

CSCI 5221 - Foundations of Advanced Networking (3)

CSCI 5231 - Wireless and Sensor Networks (3)

CSCI 5271 - Introduction to Computer Security (3)

CSCI 5451 - Introduction to Parallel Computing (3)

CSCI 5471 - Modern Cryptography (3)

CSCI 5551 - Introduction to Intelligent Robotic Systems (3)

CSCI 5708 - Architecture and Implementation of DBMS (3)

CSCI 5801 - Software Engineering I (3)

MATH 5248 - Cryptology and Number Theory (4)

MATH 5251 - Error-Correcting Codes (4)

INET 4011 - Network Administration (4)

INET 4021 - Network Programming (4)

INET 4041 - Emerging Network Technologies and Applications (3)

EE 4341 - Embedded System Design (4)

EE 5505 - Wireless Communication (3)

Key themes: Big-Data, Machine Learning, Database, Scientific Computing, Spatial Data Science, Bioinformatics

Jobs: Data scientist, Data Specialist, Research Computing, Financial Analyst. Examples of focuses: data stacking, genomics, GIS

This track focuses on the principles and methods of designing systems that can enable better understanding of the massive amounts of data generated in all aspects of the society today. This can lead to a more nuanced understanding of scientific phenomena - across all disciplines of science, novel applications based on this understanding, and improvement in all kinds of processes. Themes explored include techniques for handling very large-scale datasets, techniques for extraction of patterns/models from data using semi- and fully-automated methods, and understanding of the patterns/models and their significance in the context of the phenomena. Additionally, there are courses that discuss specialized techniques for certain domains, e.g. biology and geography. Students choosing this track develop the knowledge/skills to work in practically any job related to disciplines like data science, big data, etc.

Example course sequences:

For students interested in databases: CSCI 4707, CSCI 5708, CSCI 4131, CSCI 5421, CSCI 4211

For students interested in bioinformatics: CSCI 5461, CSCI 5481, CSCI 4707, CSCI 5421, CSCI 5521 or 5523

For students interested in computational science: CSCI 5302, CSCI 5304, CSCI 5523, CSCI 5609, MATH 5587

For students interested in big data: CSCI 4707 or 5105, CSCI 5521 or 5523, CSCI 4511W, CSCI 5451, MATH 5651 or STAT 5101

For students interested in Spatial Data Science & GIS: Csci 5715, CSCI 4707, GEOG 5561, CSCI 5708, CSCI 4611, FNRM 5131 or 5262 or 5412

*Choose at least 4 if your goal is to “complete” a track*

At least 2 core:

**CSCI 4707 - Practice of Database Systems (3)****CSCI 5105 - Introduction to Distributed Systems (3)****CSCI 5304 - Computational Aspects of Matrix Theory (3)****CSCI 5521 - Introduction to Machine Learning (3) OR****CSCI 5523 - Introduction to Data Mining (3)**

**CSCI 5708 - Architecture and Implementation of DBMS (3)**

** **Other Track Courses:

CSCI 5302 - Analysis of Numerical Algorithms (3)

CSCI 5461 - Functional Genomics, Systems Biology, and Bioinformatics (3)

CSCI 5481 - Computational Techniques for Genomics (3)

CSCI 4131 - Internet Programming (3)

CSCI 4211 - Introduction to Computer Networks (3)

CSCI 4511W - Introduction to Artificial Intelligence (4)

CSCI 5103 - Operating Systems (3)

CSCI 5421 - Advanced Algorithms and Data Structures (3)

CSCI 5451 - Introduction to Parallel Computing (3)

CSCI 5512 - Artificial Intelligence II (3)

CSCI 5609 - Visualization (3)

CSCI 5715 - From GPS and Virtual Globes to Spatial Computing (3)

CSCI 4611 - Programming Interactive Computer Graphics and Games OR

CSCI 5607 - Intro to Computer Graphics Programming (3)

AST 4101 - Computational Methods in the Physical Sciences (4)

INET 4061 - Introduction to Data Warehousing (3)

INET 4710 - Big Data Architecture (3)

MATH 5075 - Mathematics of Options, Futures, and Derivative Securities I (4)

MATH 5467 - Introduction to the Mathematics of Image and Data Analysis (4)

MATH 5587 - Elementary Partial Differential Equations I (4)

MATH 5588 - Elementary Partial Differential Equations II (4)

MATH 5651 - Basic Theory of Probability and Statistics (4) OR

STAT 5101 - Theory of Statistics I (4)

MATH 5711 - Linear Programming (4)

GEOG 5561. Principles of Geographic Information Science

FNRM 5131 - GIS for Natural Resources (4)

FNRM 5262 - Remote Sensing of Natural Resources (3)

FNRM 5412 - Digital Remote Sensing (3)

Human-Centered Computing is a branch of computer science which focuses on systems where humans and computers are closely interacting. Themes explored in human-centered computing include studying how to generate computer graphics and animation; how to represent and visualize digital information; and how to design, evaluate and implement interactive computing systems for human use. Students completing this class might work in the fields of computer games programming, computer graphics, information visualization, virtual reality, user interface design, and computer-supported collaborative work. Courses in this track typically involve large-scale, hands-on programming or design projects that span the course of several weeks.

Example course sequences:

For students interested in 3D computer graphics and animation: CSCI 4611, CSCI 5607, CSCI 5611, CSCI 5609, CSCI 5619, CSCI 5115

For students interested in data or information visualization: CSCI 5609, CSCI 5619, CSCI 5115, CSCI 5607, CSCI 5117

For students interested in human computer interaction: CSCI 5115, CSCI 5125, CSCI 5127W, CSCI 5117, CSCI 5123, CSCI 5609

*Choose at least 4 if your goal is to “complete” a track*

At least 2 core:

**CSCI 4611 - Programming Interactive Computer Graphics and Games (?)****CSCI 5115 - User Interface Design (3)****CSCI 5125 - Collaborative and Social Computing (3)****CSCI 5607 - Fundamentals of Computer Graphics I (3)****CSCI 5608 - Computer Graphics II (3)****CSCI 5609 - Visualization (3)****CSCI 5611 - Animation and Planning in Games (3)****CSCI 5619 - Virtual Reality and 3D Interaction (3)**

Other Track Courses:

CSCI 4707 - Practice of Database Systems (3)

CSCI 5123 - Recommender Systems (3)

CSCI 5127W - Embodied Computing: Design & Prototyping (3)

CSCI 5117 - Developing the Interactive Web (3)

CSCI 5302 - Analysis of Numerical Algorithms (3)

CSCI 5523 - Introduction to Data Mining (3)

CSCI 5561 - Computer Vision (3)

KIN 5001 - Foundations of Human Factors/Ergonomics (3)

This track focuses on the foundations and principles of programming language design, analysis, and implementation, and the design of algorithms and data structures. Classes are more concerned with foundations and principles than the application of these ideas, but applications are often considered as well. Courses in programming languages (5106 and 5161) and math logic consider the paradigms and principles in the area, as well as implementation concerns (especially 5161). The algorithm and data structures courses include the primary course (5421) and others in specific areas (5302, 5304, 5451, 5481, 5525, MATH 5701, MATH 5711). Security (5271, 5471) involves aspects from all of these areas and thus fits into this track. Many of these depend on ideas from 4011 in at least some way, this course also prepares students in ways of thinking about formalisms for specifying languages and computations.

Example course sequences:

For a programming language focus: CSCI 4011, CSCI 5106, CSCI 5161, MATH 5165/5166

For a focus on algorithms and data structures: CSCI 4011, CSCI 5421, then CSCI 5302 and CSCI 5304 for a focus on numerical methods, or CSCI 4271W and CSCI 5271 for a focus on security.

*Choose at least 4 if your goal is to “complete” a track*

At least 2 core:

**CSCI 5106 - Programming Languages (3)****CSCI 5421 - Advanced Algorithms and Data Structures (3)****CSCI 4011 - Formal Languages and Automata Theory (4)**

Other Track Courses:

CSCI 4707 - Practice of Database Systems (3)

CSCI 5103- Operating Systems (3)

CSCI 5161- Introduction to Compilers (3)

CSCI 5302 - Analysis of Numerical Algorithms (3)

CSCI 5304 - Computational Aspects of Matrix Theory (3)

CSCI 5271 - Introduction to Computer Security (3)

CSCI 5451 - Introduction to Parallel Computing (3)

CSCI 5471 - Modern Cryptography (3)

CSCI 5481 - Computational Techniques for Genomics (3)

CSCI 5525 - Machine Learning (3)

CSCI 5801 - Software Engineering I (3)

CSCI 5802 - Software Engineering II (3)

MATH 5165 - Mathematical Logic I (4)

MATH 5166 - Mathematical Logic II (4)

MATH 5707 - Graph Theory (4)

MATH 5711 - Linear Programming (4)

**Software Engineering & Data Systems**

Key themes: Software engineering theory and practice, software development, databases.

Jobs: Software Engineer, Software Developer, Product Manager

This track focuses on the foundations, principles and practice of software engineering and databases; two pillars in the career of any professional software engineer. Classes are concerned with both the foundations and principles as well as the practical applications of the concepts. Courses in software engineering (5801, 5802) focus on the processes, methodologies, and techniques used for developing complex software systems. Courses in databases (4707, 5708, 5715) focus on modeling and storing data in a database, querying, transaction processing,data security and privacy, scaling and performance, multiple data types including text/hypertext/spatial/spatio-temporal/images, and new database technologies like big data, Hadoop/Map-Reduce, block-chain, etc.

Security (4271W, 5271) involves theory and practice of computer security, an aspect of critical importance when building modern software systems.

*Choose at least 4 if your goal is to “complete” a track*

At least 2 core:

**CSCI 4707 - Practice of Database Systems (3)****CSCI 5801 - Software Engineering I (3)****CSCI 4271W - Developing Secure Software Systems (3)**

Other Track Courses:

CSCI 4131- Internet Programming (3)

CSCI 5103- Operating Systems (3)

CSCI 5106- Programming Languages (3)

CSCI 5115- User Interface Design (3)

CSCI 5161- Introduction to Compilers (3)

CSCI 5271 - Introduction to Computer Security (3)

CSCI 5471 - Modern Cryptography (3)

CSCI 5708 - Architecture and Implementation of Database Management Systems (3)

CSCI 5802- Software Engineering II (3)

INET 4061 - Introduction to Data Warehousing (3)

CSCI 5715 - From GPS and Virtual Globes to Spatial Computing (3)

CSCI 5521 - Introduction to Machine Learning (3)

CSCI 5523 - Introduction to Data Mining (3)

INET 4710 - Big Data Architecture (3)