CLA Computer Science B.A. Major Electives: Overview and Interest Areas

Students in the B.A. program need a minimum of 8 credits of upper division (4000-5000-level) electives from CSCI-designator courses. Since most upper division CSCI elective courses are three credits, students typically take three 3-credit courses to meet the 8 credit minimum. The Department of Computer Science & Engineering has a wide variety of 4000-5000 level CSCI elective courses that have been grouped into broad interest areas of study within computer science.

Rather than focusing on “choosing” an interest area students are encouraged to view the upper division major electives as a way to explore one or more interests within computer science and use those courses as a way to further develop their knowledge and skills. The interest areas are not meant to limit your course options; students are welcome choose CSCI electives from within as many interest areas as they'd like.

Interest areas have a few non-CSCI courses options listed, which could be considered for use towards the 18* credit upper division outside the major requirement all CLA students must fulfill.


How do I choose my CSCI electives?
 Each of the interest areas below has "key themes and skills" section. A great strategy for exploring and choosing elective courses is to start checking out job descriptions that interest you (and also to start doing some informational interviewing!). 

We recommend putting job descriptions in one window or tab, Schedule Builder in another, and this page in a third; then, you can cross-reference the keywords and skills you're seeing in those job descriptions with the key themes and skills of these interest areas/ the course descriptions of elective options.

Ideally, students can choose courses that interest them, but it's also totally fine to simply choose courses that work in your schedule. No single elective will make or break your skill set (or future goals!).

A few other things to note/keep in mind as recommendations (not rules!):

  1. We generally recommend students take just one project-based course per semester
    1. Writing intensive courses are always project-based, and your peers and classmates and online info (Reddit threads, Discords) are also great sources of information here!
    2. CSCI 3081W and CSCI 4061 are both project-based courses within the CS core curriculum
       
  2. 5xxx-level courses (in any/all departments!) are graduate-level courses, and consequently are often more rigorous and faster-paced. Both advisors and faculty recommend taking a maximum of two 5xxx-level courses per semester, and not alongside any project-based courses (CSCI 3081W and CSCI 4061 are both project-based).

Faculty-developed interest areas

Artificial Intelligence/Robotics

This area focuses on principles and methods of designing intelligent systems that analyze information and learn to act to achieve objectives. This can include both physical systems like robots and virtual agents that try to understand and interact with the world digitally. Topics covered in this area include knowledge representation, planning and acting for autonomous systems, discovery of patterns in data, learning and prediction, control of complex systems under uncertainty, and the theory of learning such as understanding fundamental bounds on generalization. Students completing these classes might work in robotics, data understanding, automation of human activities, and personalization. Courses in this area typically cover theory, principles, and algorithms and involve large-scale projects that mix a diverse set of programming problems and hardware implementations.

Key themes and skills: computer vision, autonomous robots, sensing, decision making, machine learning

Fundamental CSCI elective courses for this area (the basics/essentials!):

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

Additional options:

  • CSCI 4521 - Applied Machine Learning for Computer and Data Scientists (3 cr)
    • note that this course may need to be manually added to your APAS report after registering. Please email your CS advisor to request this add!
  • CSCI 4707 - Practice of Database Systems (3 cr)
  • CSCI 4980 - Special Topic - Applied Machine Learning (Spring 2023) (3 cr)
  • CSCI 5521 - Introduction to Machine Learning (3 cr)
  • CSCI 5523 - Introduction to Data Mining (3 cr)
  • CSCI 5525 - Machine Learning (3 cr)
  • CSCI 5527 - Deep Learning: Models, Computation, and Applications (3 cr)
  • CSCI 5541 - Natural Language Processing (3 cr)
  • CSCI 5552 - Sensing and Estimation in Robotics (3 cr)
  • CSCI 5563 - Multiview 3D Geometry in Computer Vision (3 cr)
  • CSCI 5715 - From GPS and Virtual Globes to Spatial Computing (3 cr)

Non-CSCI courses in this area to consider (could count towards the CLA 18 credits of upper division coursework required outside of the major)

  • LING 5801 - Computational Linguistics (4 cr)
  • PSY 5018H - Math Models Human Behavior (3 cr)
  • PSY 5036W - Computational Vision (3 cr)

Computer Systems

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 area might work as network engineers, hardware designers, systems developers, or security engineers. The most relevant required classes for this area are CSCI 2021 and CSCI 4061. Coursework tends to involve a mixture of analytical and programming assignments.

Key themes and skills: computer architecture, networks, security, distributed systems

Fundamental CSCI elective courses for this area (the basics/essentials!):

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

Additional options:

  • CSCI 4131 - Internet Programming (3 cr)
  • CSCI 4271W - Development of Secure Software Systems (4 cr)
  • CSCI 4707 - Practice of Database Systems (3 cr)
  • CSCI 5105 - Introduction to Distributed Systems (3 cr)
  • CSCI 5143 - Real-Time and Embedded Systems (3 cr)
  • CSCI 5161 - Introduction to Compilers (3 cr)
  • CSCI 5221 - Foundations of Advanced Networking (3 cr)
  • CSCI 5231 - Wireless and Sensor Networks (3 cr) (inactive course)
  • CSCI 5271 - Introduction to Computer Security (3 cr)
  • CSCI 5451 - Introduction to Parallel Computing (3 cr)
  • CSCI 5471 - Modern Cryptography (3 cr)
  • CSCI 5551 - Introduction to Intelligent Robotic Systems (3 cr)
  • CSCI 5708 - Architecture and Implementation of DBMS (3 cr)
  • CSCI 5751 - Big Data Engineering and Architecture (3 cr)
  • CSCI 5801 - Software Engineering I (3 cr)

Non-CSCI courses in this area to consider (could count towards the CLA 18 credits of upper division coursework required outside of the major)

  • MATH 5248 - Cryptology and Number Theory (4 cr)
  • MATH 5251 - Error-Correcting Codes (4 cr)
  • INET 4011 - Network Administration (4 cr)
  • INET 4021 - Network Programming (4 cr)
  • INET 4041 - Emerging Network Technologies and Applications (3 cr)
  • EE 4341 - Embedded System Design (4 cr)
  • EE 5505 - Wireless Communication (3 cr)

Data-Driven Computing

This area focuses on the principles and methods of designing systems that can enable a better understanding of the massive amounts of data generated in all aspects of 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 area develop the knowledge/skills to work in practically any job related to disciplines like data science, big data, etc.

Key themes and skills: big data, machine learning, database, scientific computing, spatial data science, bioinformatics

Fundamental CSCI elective courses for this area (the basics/essentials!):

  • CSCI 4707 - Practice of Database Systems (3 cr)
  • CSCI 5105 - Introduction to Distributed Systems (3 cr)
  • CSCI 5304 - Computational Aspects of Matrix Theory (3 cr)
  • CSCI 5521 - Introduction to Machine Learning (3 cr) OR CSCI 5523 - Introduction to Data Mining (3 cr)
  • CSCI 5708 - Architecture and Implementation of DBMS (3 cr)

Additional options:

  • CSCI 4521 - Applied Machine Learning for Computer and Data Scientists (3 cr)
    • note that this course may need to be manually added to your APAS report after registering. Please email your CS advisor to request this add!
  • CSCI 5302 - Analysis of Numerical Algorithms (3 cr)
  • CSCI 5461 - Functional Genomics, Systems Biology, and Bioinformatics (3 cr)
  • CSCI 5481 - Computational Techniques for Genomics (3 cr)
  • CSCI 4131 - Internet Programming (3 cr)
  • CSCI 4211 - Introduction to Computer Networks (3 cr)
  • CSCI 4511W - Introduction to Artificial Intelligence (4 cr)
  • CSCI 4521 - Applied Machine Learning for Computer and Data Scientists (3 cr)
  • CSCI 5103 - Operating Systems (3 cr)
  • CSCI 5421 - Advanced Algorithms and Data Structures (3 cr)
  • CSCI 5451 - Introduction to Parallel Computing (3 cr)
  • CSCI 5512 - Artificial Intelligence II (3 cr)
  • CSCI 5527 - Deep Learning: Models, Computation, and Applications (3 cr)
  • CSCI 5541 - Natural Language Processing (3 cr)
  • CSCI 5609 - Visualization (3 cr)
  • CSCI 5715 - From GPS and Virtual Globes to Spatial Computing (3 cr)
  • CSCI 5751 - Big Data Engineering and Architecture (3 cr)
  • CSCI 4611 - Programming Interactive Computer Graphics and Games OR CSCI 5607 - Intro to Computer Graphics Programming (3 cr)

Non-CSCI-designator options:

  • AST 4041 - Computational Methods in the Physical Sciences (4 cr)
  • INET 4061 - Introduction to Data Warehousing (3 cr)
  • INET 4710 - Big Data Architecture (3 cr)
  • MATH 5075 - Mathematics of Options, Futures, and Derivative Securities I (4 cr)
  • MATH 5467 - Introduction to the Mathematics of Image and Data Analysis (4 cr)
  • MATH 5587 - Elementary Partial Differential Equations I (4 cr)
  • MATH 5588 - Elementary Partial Differential Equations II (4 cr)
  • MATH 5651 - Basic Theory of Probability and Statistics (4 cr) OR STAT 5101 - Theory of Statistics I (4 cr)
  • MATH 5711 - Linear Programming (4 cr)
  • GEOG 5561 - Principles of Geographic Information Science(4 cr)
  • FNRM 5131 - GIS for Natural Resources (4 cr)
  • FNRM 5262 - Remote Sensing of Natural Resources (3 cr)
  • FNRM 5462 - Advanced Remote Sensing and Geospatial Analysis (3 cr)

Human-Centered Computing

Human-Centered Computing is a branch of computer science that 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. Technical elective courses in this area typically involve large-scale, hands-on programming or design projects that span the course of several weeks.

Key themes and skills: virtual reality, information visualization, computer graphics, human-computer interaction, social computing, user experience research and design, front-end development

Fundamental CSCI elective courses for this area (the basics/essentials!):

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

Additional options:

  • CSCI 4707 - Practice of Database Systems (3 cr)
  • CSCI 5123 - Recommender Systems (3 cr)
  • CSCI 5127W - Embodied Computing: Design & Prototyping (3 cr)
  • CSCI 5117 - Developing the Interactive Web (3 cr)
  • CSCI 5302 - Analysis of Numerical Algorithms (3 cr)
  • CSCI 5523 - Introduction to Data Mining (3 cr)
  • CSCI 5541 - Natural Language Processing (3 cr)
  • CSCI 5561 - Computer Vision (3 cr)

Non-CSCI-designator courses:

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

Languages & Theory

This area 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 5707, MATH 5711). Security (5271, 5471) involves aspects from all of these areas and thus fits into this area. 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.

Key themes and skills: models and proofs, algorithms, logic, languages, compilers

Fundamental CSCI elective courses for this area (the basics/essentials!):

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

Additional options:

  • CSCI 4707 - Practice of Database Systems (3 cr)
  • CSCI 5103- Operating Systems (3 cr)
  • CSCI 5161- Introduction to Compilers (3 cr)
  • CSCI 5302 - Analysis of Numerical Algorithms (3 cr)
  • CSCI 5304 - Computational Aspects of Matrix Theory (3 cr)
  • >CSCI 5271 - Introduction to Computer Security (3 cr)
  • CSCI 5451 - Introduction to Parallel Computing (3 cr)
  • CSCI 5471 - Modern Cryptography (3 cr)
  • CSCI 5481 - Computational Techniques for Genomics (3 cr)
  • CSCI 5525 - Machine Learning (3 cr)
  • CSCI 5801 - Software Engineering I (3 cr)
  • CSCI 5802 - Software Engineering II (3 cr)

Non-CSCI-designator options:

  • MATH 5165 - Mathematical Logic I (4 cr)
  • MATH 5166 - Mathematical Logic II (4 cr)
  • MATH 5707 - Graph Theory (4 cr)
  • MATH 5711 - Linear Programming (4 cr)

Software Engineering & Data Systems

This area 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.

Key themes and skills: software engineering theory and practice, software development, database theory, modeling and practice, data engineering

Fundamental CSCI elective courses for this area (the basics/essentials!):

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

Additional options:

  • CSCI 4131 - Internet Programming (3 cr)
  • CSCI 4521 - Applied Machine Learning for Computer and Data Scientists (3 cr)
    • note that this course may need to be manually added to your APAS report after registering. Please email your CS advisor to request this add!
  • CSCI 4980 - Special Topic - Applied Machine Learning (Spring 2023) (3 cr)
  • CSCI 5103 - Operating Systems (3 cr)
  • CSCI 5106 - Programming Languages (3 cr)
  • CSCI 5115 - User Interface Design (3 cr)
  • CSCI 5161 - Introduction to Compilers (3 cr)
  • CSCI 5271 - Introduction to Computer Security (3 cr)
  • CSCI 5471 - Modern Cryptography (3 cr)
  • CSCI 5521 - Introduction to Machine Learning (3 cr)
  • CSCI 5523 - Introduction to Data Mining (3 cr)
  • CSCI 5708 - Architecture and Implementation of Database Management Systems (3 cr)
  • CSCI 5715 - From GPS and Virtual Globes to Spatial Computing (3 cr)
  • CSCI 5751 - Big Data Engineering and Architecture (3 cr)
  • CSCI 5802 - Software Engineering II (3 cr)

Non-CSCI-designator courses:

  • INET 4061 - Introduction to Data Warehousing (3 cr)
  • INET 4710 - Big Data Architecture (3 cr)