Home Page
Home Page

University of Montana Catalog 2025-2026

Computer Science/Programming (CSCI)

CSCI 105 - Computer Fluency. 3 Credits.

Offered autumn and spring. Offered at Missoula College. Introduces the skills and concepts of information technology, both from practical and a more theoretical point of view. During lectures and interactive computer labs, students will explore a wide range of digital and information technologies, including common PC applications, networking, databases, privacy, and security.

CSCI 106 - Careers in Computer Science. 1 Credit.

Offered autumn.  Exploration of various careers available in the general area of Computer Science.  Includes discussion of strategies for success in the major.  Computer Science faculty members also will discuss possible undergraduate research opportunities and motivation for graduate education.

CSCI 113 - Programming with C++ I. 3 Credits.

Offered spring. Offered at Missoula College. M 090 or ALEKS score >= or M01-Maplesoft Arithmetic score >= 9 recommended prior to taking course. Object oriented programming using C++. Implementation of structured programming concepts along with construction of classes to create data types for defining objects.

CSCI 150 - Introduction to Computer Science. 3 Credits.

Offered autumn and spring. This course covers basic programming concepts such as variables, data types, iteration, flow of control, input/output, functions, and objects. The course will also cover programming ideas such as libraries, files, modularity, where to turn to for help, and debugging. Students will learn about the role computation can play in solving problems by writing programs to address practical problems. No prior programming experience is expected. Includes two hours of independent lab per week.

CSCI 151 - Interdisciplinary Computer Science I. 3 Credits.

Offered autumn and spring. Offered on both Mountain Campus and at Missoula College. Prereq., CSCI 150 or CSCI 100. This course will introduce students to fundamental computer science concepts including functions, libraries and APIs, recursion, data types, optimization, searching and sorting, all while using a high level structured programming language.

CSCI 152 - Interdisciplinary Computer Science II. 3 Credits.

Offered autumn and spring. Offered at both Mountain Campus and Missoula College. Prereq., CSCI 151 and M 162 or M 171 or M 172 or M 273. Prereq. or coreq., M 151. Survey of computer science topics including recursion, basic data structures, algorithms, computational theory, computing architecture, and modern software development practices.

CSCI 172 - Intro to Computer Modeling. 3 Credits.

Offered fall and spring. Offered on the Mountain Campus and at Missoula College. Problem solving and data modeling using computer productivity software. Emphasis using spreadsheets and database for data analysis.

CSCI 181 - Web Design and Programming. 3 Credits.

Offered spring. Students will learn how to critically analyze the usability of web sites and create their own by understanding and applying universal principles of design. Programming and other key concepts covered include HTML, CSS, JavaScript, and Web Graphics. Students will complete many different types of Web projects throughout the semester, culminating in an online portfolio used to showcase work completed in this class and others. No prior programming experience is expected.

CSCI 191 - Special Topics. 1-6 Credits.

(R-12) Offered intermittently. Experimental offerings of visiting professors, experimental offerings of new courses, or one-time offerings of current topics.

CSCI 192 - Independent Study. 1-6 Credits.

(R-6) Offered intermittently. Course material appropriate to the needs and objectives of the individual student.

CSCI 205 - Programming with C/C++. 3 Credits.

Offered intermittently. Prereq., CSCI 152. Concepts and principles of programming languages with an emphasis on C, C++, and object-oriented programming. Syntax and semantics of object-oriented languages. Principles and implementation of memory allocation and de-allocation, type-checking, scope, polymorphism, inheritance.

CSCI 215E - Social & Ethical Issues in CS. 3 Credits.

Offered autumn and spring. Offered at Missoula College. Prereq., WRIT 101. Exploration of ethical issues in the field of computing. Skills needed to identify and analyze various ethical concerns. Standard ethical concepts and theories, methods of ethical analysis. Strong emphasis on practical application of the ethical process.

Gen Ed Attributes: Ethical & Human Values, Writing Across the Curriculum

CSCI 221 - System Analysis and Design. 3 Credits.

Offered spring. Offered at Missoula College. Analysis of the system development life cycle. Emphasis on planning, analyzing, designing, implementing and supporting information systems to meet business requirements. Covers feasibility studies, time and cost estimates, modeling tools, design tools, implementation and support strategies. A simulated business design project will be developed.

CSCI 232 - Intermediate Data Structures and Algorithms. 4 Credits.

Offered autumn and spring. Prereq., CSCI 152 with a minimum grade of B-. Abstract data types, analysis of algorithms, stacks, queues, lists, recursion, trees, hashing, graphs, and applications of data structures in algorithm development. Course is offered in the Java programming language.

CSCI 240 - Databases and SQL. 3 Credits.

Offered autumn. Offered at Missoula College. Relational database design including: requirements analysis, data structure, entity relationships, normalization, relational algebra and integrity. Physical implementation focuses on data storage, retrieval and modification, concurrency, optimization, security, SQL, and XML.

CSCI 258 - Web Application Development. 3 Credits.

Offered autumn. Prereq., CSCI 152. This class is designed to give students introductory exposure to client-server web development. Students will be exposed to modern web/software development principles, practices and systems.

CSCI 290 - Undergraduate Research. 1-6 Credits.

(R-10) Independent research under the direction of a faculty member.

CSCI 291 - Special Topics. 1-6 Credits.

(R-12) Offered intermittently. Experimental offerings of visiting professors, experimental offerings of new courses, or one-time offerings of current topics.

CSCI 292 - Independent Study. 1-6 Credits.

(R-6) Offered intermittently. Course material appropriate to the needs and objectives of the individual student.

CSCI 315E - Computers, Ethics, and Society. 3 Credits.

Offered autumn and spring. Prereq., WRIT 101. Ethical problems that computer scientists face. The codes of ethics of professional computing societies. The social implications of computers, computing, and other digital technologies.

Gen Ed Attributes: Ethical & Human Values, Writing in the Disciplines

CSCI 322 - Advanced Web Application Development. 3 Credits.

Offered spring. Prereq., CSCI 258. This course imparts advanced web development and associated practical skills, including contemporary web architectures, cloud deployment, database migrations, custom front end interfaces, high performance computing integration, web systems debugging, and group development.

CSCI 323 - Software Science. 3 Credits.

Offered fall. Prereq., CSCI 152. Study, implementation, and assessment of software processes, techniques, methods, and CASE tools.  Project management and cost estimation techniques will be examined.  A group project may be required.

CSCI 332 - Advanced Data Structures and Algorithms. 3 Credits.

Offered autumn. Prereq., CSCI 232 and M 225. Algorithm design, analysis, and correctness. Commonly used algorithms including searching and sorting, string search, dynamic programming, branch and bound, graph algorithms, and parallel algorithms. Introduction to NP-complete problems.

CSCI 340 - Database Design. 3 Credits.

Offered fall.  Prereq., CSCI 232.  Fundamentals of data modeling, the relational mode, normal forms, file organization, index structures and SQL.  Major project involving the design and implementation of a relational database.

CSCI 358 - Mobile Application Development. 3 Credits.

Offered fall. Prereq., CSCI 152 and CSCI 258. This course introduces the process of developing mobile applications. It is well suited to students with experience writing programs using an object-oriented programming language such as Java and who have experience working with basic data structures. This course will focus on creating user interfaces and program logic for a variety of different applications.

CSCI 361 - Computer Architecture. 3 Credits.

Offered spring. Prereq., CSCI 152. Bottom up creation of a complete computer system. Beginning with logic gates, ALU, CPU, and memory hierarchy.  Instruction set design and hardware control. Assembly language and creation of an assembler. Virtual machines and implementation of a virtual machine. High level languages and basic compiler construction. 

CSCI 370 - Sports Analytics. 3 Credits.

Offered spring. Restricted to students with at least junior standing. This course will discuss how technology is affecting sports and the ethical consequences. Students will be introduced to several computer science topics that are used to analyze all aspects of the sports industry, including performance, safety, game strategy, and the fan experience.

CSCI 390 - Research. 1-6 Credits.

(R-6) Offered intermittently. Directed individual research and study appropriate to the background and objectives of the student.

CSCI 391 - Special Topics. 1-6 Credits.

(R-12) Offered intermittently. Restricted to students with at least junior standing. Experimental offerings of visiting professors, experimental offerings of new courses, or one-time offerings of current topics.

CSCI 392 - Independent Study. 1-6 Credits.

(R-6) Offered intermittently. Course material appropriate to the needs and objectives of the individual student.

CSCI 394 - Seminar. 1-6 Credits.

(R-6) Offered intermittently. Guidance in special work. Topics vary.

CSCI 398 - Internship. 1-6 Credits.

(R-6) Offered intermittently. Business or government internship. Prior approval must be obtained from faculty supervisor. Only three credits applicable to computer science major or minor. A maximum of 6 credits of Internship (198, 298, 398, 498) may count toward graduation.

CSCI 406 - Careers in Computer Science. 1 Credit.

Prereq., CSCI 426. This course should be taken in the student's final year of the degree. This course is designed to equip graduating computer science students with the essential skills and strategies to successfully navigate the job market. It includes career development activities, interview preparation, and professional guidance. For those interested in continuing their education, this course also provides insights into preparing strong graduate school applications. A comprehensive program assessment exam will also be administered in this course. Level: Undergraduate

CSCI 423 - Advanced Software Engineering. 3 Credits.

Offered spring. Prereq., CSCI 258 and CSCI 332. This course focuses on both foundational and contemporary practices of software engineering with a special emphasis on design patterns. It blends theory with hands-on practice, equipping students with a comprehensive understanding of advanced software design and development methodologies. As software systems continue to evolve, mastering these time-tested techniques becomes essential to create efficient, scalable, and maintainable software. Beyond design patterns, this course delves into object-oriented, the Unified Modeling Language (UML), software testing, collaborative software engineering, and a host of other software engineering principles. Co-convenes with CSCI 523. Level: Undergraduate

CSCI 426 - Software Design & Development I. 3 Credits.

Offered autumn. Prereq., CSCI 322, CSCI 323, and CSCI 340. Restricted to students with senior standing. Class represents first in senior capstone experience. Students will work in groups to design and prototype real-world software. Focus will be on client interaction, software engineering methodologies, project management tools, requirements specification and analysis, design, user feedback, documentation and presentation. Level: Undergraduate

CSCI 427 - Software Design and Development II. 3 Credits.

Offered spring. Prereq., CSCI 426. Design and implementation of a major software project in a group setting, with required documentation, presentation, installation, and approval by the instructor. Level: Undergraduate

CSCI 432 - Advanced Algorithm Topics. 3 Credits.

Offered spring. Prereq., B- or better in CSCI 332. Advanced algorithm and data structure concepts, including theory, approximation algorithms, randomized algorithms, parallel algorithms, streaming algorithms, linear programming. Co-Convenes with CSCI 532. Level: Undergraduate

CSCI 443 - User Interface Design. 3 Credits.

Offered intermittently. Prereq., CSCI 232. Introduction to usability and key concepts of human behavior. Focus on the process of user-centered design, including requirements specification, prototyping, and methods of evaluation. Incorporation of regular design critiques of classmates' work, and emphasis on both oral and written communication skills. Co-convenes with CSCI 543. Level: Undergraduate

CSCI 444 - Data Visualization. 3 Credits.

Offered fall. Restricted to students with at least junior status. Programming experience is necessary for success in this course. This course emphasizes the practice of data visualization, compelling students to identify and master tools to produce visualizations of data having relational, raster, vector, geographical, networked, mesh based, spectral, or phase space properties. The unique challenges of each data type will be covered. The emphasis on production is coupled to a framework for critique, allowing students to differentiate between high and low qualities visualizations. Level: Undergraduate-Graduate

CSCI 447 - Machine Learning. 3 Credits.

Offered autumn. Prereq., CSCI 232. Introduction to the framework of learning from examples, various learning algorithms such as neural networks, and generic learning principles such as inductive bias, Occam's Razor, and data mining.  Co-convenes with CSCI 547. Level: Undergraduate

CSCI 451 - Computational Biology. 3 Credits.

Offered autumn. Designed for attendance by both computer scientists and biologists. The course will explore the interdisciplinary nature at the juncture of the two fields. Students will be introduced to bioinformatics (emphasis: computational genomics), with exposure to fundamental problems, algorithms, and tools in the field. This includes a basic introduction to genomics, along with in-depth coverage of algorithms and methods relevant to modern computational genomics, including: biological sequence alignment, sequence database homology search, and phylogeny inference. The programming expectations are limited for a 400-level computer science course, but at least one semester of a programming-intensive course is required. Co-convenes with CSCI 558. Level: Undergraduate

CSCI 455 - Embedded Systems. 3 Credits.

Offered spring. Prereq., CSCI 232. Students are expected to have knowledge of computer architecture and operating systems and an experience with at least one programming language, such as Python or C. This course is designed to bring students to the design, implement, and evaluate embedded systems. Such systems usually include four main components: data collection, data processing, data communication, and adaptive control. In that, the data collection includes hardware and software to control embedded sensors to “sense” the information and report to host computer. Data processing includes a set of methods to remove noises from the raw data and only maintain the information of interested. Data communication includes hardware and software to exchange data between embedded controllers, sensors, and host machine (e.g., Bluetooth or Wi-Fi). Finally, yet importantly, adaptive control includes a set of algorithms provides the “act” to the system according to the input data. In this class, students will have opportunity to walk through all the components mentioned earlier and have a capability of design and implement a small cyber-physical project by the end of the semester. Level: Undergraduate

CSCI 460 - Operating Systems. 3 Credits.

Offered spring. Prereq., CSCI 232. Operating system design principles. Processes, threads, synchronization, deadlock, memory management, file management and file systems, protection, and security, comparison of commonly used existing operating systems, writing programs that make use of operating system services. It is recommended, but not required, that the student also attend Programming Languages (in order to be prepared to write C programs) and Architecture (in order to understand interactions between the operating system and processor hardware) prior to attending this course. Level: Undergraduate-Graduate

CSCI 461 - Internet of Things. 3 Credits.

Prereq., CSCI 232. Students are expected to have experience with at least one programming language prior to registration. Wireless and mobile systems have become ubiquitous. They are playing a significant role in our everyday life nowadays. However, the increasing demand for wireless connectivity and the emergence of new areas such as the Internet of Things present new research challenges. This course will introduce the spectrum of research on the Internet of Things (IoT). The lectures cover a range of techniques in sensing, computing, communication, and wireless networking and connect them to various applications in analytics, localization, cyber-physical systems, mobile health, security, and wearables. Co-convenes with CSCI 561. Level: Undergraduate

CSCI 466 - Networks. 3 Credits.

Offered intermittently. Prereq., CSCI 232. Concepts and practice of computer networking, network protocol layers, switching, routing, flow, and congestion control.  Network programming. Level: Undergraduate-Graduate

CSCI 476 - Computer Security. 3 Credits.

Offered intermittently. Prereq., M 225. Introduction to computer security. Understand the basis of cryptography and secure systems, as well as exploits used to penetrate such systems. Level: Undergraduate

CSCI 477 - Simulation. 3 Credits.

Offered spring. Prereq., M 172 or CSCI 151. Matrix languages. ODE solving; Euler-Richardson, Runge-Kutta, PDE solving; finite differences, finite elements, multi-grid techniques. Discrete methods for solution, renormalization group method, critical phenomena. Emphasis on presentation of results and interactive programs. Co-convenes with CSCI 577. Level: Undergraduate

CSCI 490 - Research. 1-6 Credits.

(R-6) Offered intermittently. Directed individual research and study appropriate to the background and objectives of the student. Level: Undergraduate-Graduate

CSCI 491 - Special Topics. 1-6 Credits.

(R-18) Offered intermittently. Experimental offerings of visiting professors, experimental offerings of new courses, or one-time offerings of current topics. Level: Undergraduate

CSCI 492 - Independent Study. 1-6 Credits.

(R-6) Offered intermittently. Course material appropriate to the needs and objectives of the individual student. Level: Undergraduate-Graduate

CSCI 494 - Seminar. 1-6 Credits.

(R-6) Offered intermittently. Guidance in special work. Topics vary. Level: Undergraduate-Graduate

CSCI 498 - Internship. 1-3 Credits.

(R-3) Offered Intermittently. Business or government internship. Prior approval must be obtained from the faculty supervisor. Only three credits of CSCI 398 and/or CSCI 498 applicable to computer science major or minor. A maximum of 6 credits of Internship (198, 298, 398, 498) may count toward graduation. Level: Undergraduate-Graduate

CSCI 499 - Senior Thesis/Capstone. 1-6 Credits.

(R-6) Offered every term. Senior thesis for computer science majors and/or Watkins scholars. Level: Undergraduate

Gen Ed Attributes: Writing in the Disciplines

CSCI 501 - Graduate Research Methods. 3 Credits.

Offered autumn. Development of the skills required for effective research in Computer Science, including literature review, research proposal development, oral and visual presentation techniques. Included is mandatory attendance of a colloquium featuring presentations from UM faculty and students as well as external researchers from academics and industry. Level: Graduate

CSCI 523 - Advanced Software Engineering. 3 Credits.

This course focuses on both foundational and contemporary practices of software engineering with a special emphasis on design patterns. It blends theory with hands-on practice, equipping students with a comprehensive understanding of advanced software design and development methodologies. As software systems continue to evolve, mastering these time-tested techniques becomes essential to create efficient, scalable, and maintainable software. Beyond design patterns, this course delves into object-orientation, the Unified Modeling Language (UML), software testing, collaborative software engineering, and a host of other software engineering principles. Co-convenes with CSCI 423. Level: Graduate

CSCI 532 - Advanced Algorithm Topics. 3 Credits.

Offered spring. Advanced algorithm and data structure concepts, including theory, approximation algorithms, randomized algorithms, parallel algorithms, streaming algorithms, linear programming. Co-Convenes with CSCI 432. Level: Graduate

CSCI 543 - Human-Computer Interaction. 3 Credits.

Offered intermittently. Principles of good design for interactive systems and web-based applications. User-centered design methodology including requirements specification, low and high-fidelity prototyping, heuristic evaluation, cognitive walkthrough, predictive modeling, and usability testing. Advanced HCI research project. Co-convenes with CSCI 443. Level: Graduate

CSCI 547 - Machine Learning. 3 Credits.

Offered autumn. Fundamentals of machine learning including neural networks, decision trees, Bayesian learning, instance-based learning, and genetic algorithms; inductive bias, Occam's razor, and learning theory; data mining; software agents. Co-convenes with CSCI 447. Level: Graduate

CSCI 556 - Embedded Systems. 3 Credits.

Offered spring. Students wanting to register for this course are expected to have knowledge of computer architecture and operating systems and have experience with at least one programming language, such as Python or C. This course is designed to bring students to the design, implementation, and evaluation of embedded systems. Such systems usually include four main components: data collection, data processing, data communication, and adaptive control. Data collection includes hardware and software to control embedded sensors to “sense” information and report to a host computer. Data processing includes a set of methods to remove noise from the raw data and only maintain the information of interest. Data communication includes hardware and software to exchange data between embedded controllers, sensors, and a host machine (e.g., Bluetooth or Wi-Fi). Finally, yet importantly, adaptive control includes a set of algorithms providing the “act” to the system according to the input data. In this class, students will have the opportunity to walk through all of these components and will design and implement a small cyber-physical project by the end of the semester. Co-convenes with CSCI 455. Level: Graduate

CSCI 557 - Deep Learning. 3 Credits.

Offered spring. Prereq., CSCI 547. This course is a survey of state-of-the-art methods in deep learning. Covered topics are expected to change, but will typically include convolutional and recurrent neural networks, transformers, automatic differentiation, uncertainty quantification, generative models, deep reinforcement learning, training parallelism, model distillation, and interesting applications of all of the above to scientific problems. Students will read primary literature, present it to their peers, and develop computational implementations. Level: Graduate

CSCI 558 - Intro to Bioinformatics. 3 Credits.

Offered autumn. Designed for attendance by both computer scientists and biologists. The course will explore the interdisciplinary nature at the juncture of the two fields. Students will be introduced to bioinformatics (emphasis: computational genomics), with exposure to fundamental problems, algorithms, and tools in the field. This includes a basic introduction to genomics, along with in-depth coverage of algorithms and methods relevant to modern computational genomics, including: biological sequence alignment, sequence database homology search, and phylogeny inference. The programming expectations are limited for a 500-level computer science course, but at least one semester of a programming-intensive course is required. A substantial project is a key component of the course. Level: Graduate

CSCI 561 - Internet of Things. 3 Credits.

Students are expected to have experience with at least one programming language prior to registration. Wireless and mobile systems have become ubiquitous. They are playing a significant role in our everyday life nowadays. However, the increasing demand for wireless connectivity and the emergence of new areas such as the Internet of Things present new research challenges. This course will introduce the spectrum of research on the Internet of Things (IoT). The lectures cover a range of techniques in sensing, computing, communication, and wireless networking and connect them to various applications in analytics, localization, cyber-physical systems, mobile health, security, and wearables. Co-convenes with CSCI 461. Level: Graduate

CSCI 574 - Computer Security. 3 Credits.

Offered intermittently. Understand and apply cryptosystems, penetration testing, and fundamental exploits. Level: Graduate.

CSCI 577 - Simulation Modeling. 3 Credits.

Offered spring. Matrix languages. ODE solving; Euler-Richardson, Runge-Kutta, PDE solving; finite differences, finite elements, multi-grid techniques. Discrete methods for solution, renormalization group method, critical phenomena. Emphasis on presentation of results and interactive programs. Conduct, document, and present graduate level research involving computer simulation methods. Co-convenes with CSCI 477. Level: Graduate

CSCI 590 - Research. 1-6 Credits.

(R-6) Offered intermittently. Directed individual research and study appropriate to the background and objectives of the student. Level: Graduate

CSCI 591 - Special Topics. 1-6 Credits.

(R-12) Offered intermittently. Experimental offerings of visiting professors, experimental offerings of new courses, or one-time offering of current topics. Level: Graduate

CSCI 592 - Independent Study. 1-6 Credits.

(R-6) Offered intermittently. Course material appropriate to the needs and objectives of the individual student. Level: Graduate

CSCI 594 - Graduate Seminar. 1-6 Credits.

(R-6) Offered intermittently. Seminar on current research topics in computer science. Level: Graduate

CSCI 595 - Practicum. 1-6 Credits.

(R-12) Offered intermittently. Organized field experience. Level: Graduate

CSCI 598 - Internship. 1-9 Credits.

(R-9) Offered intermittently. Business or government internship. Prior approval must be obtained from faculty supervisor. Level: Graduate

CSCI 599 - Thesis/Professional Paper. 1-6 Credits.

(R-40) Offered every term. Research for and preparation of the master's thesis or professional paper. Level: Graduate