# Courses

Here you will find course numbers and a brief description of every course currently offered by the UNM CS Department, as well as (if available) the syllabus for that course. Please note that not every course may be available every semester – please consult the UNM Schedule of Classes to determine if a course is going to be offered in a given (or upcoming) semester.

- UNM Schedule of Classes
- UNM Catalog

## Computer Science (CS)

### 105L. Introduction to Computer Programming. (3)

Introduction to Computer Programming is a gentle and fun introduction. Students will use a modern Integrated Development Environment to author small programs in a high-level language that do interesting things.

### 108L. Computer Science for All: An Introduction to Computational Science and Modeling. (3)

This course offers an introduction to computer science through modeling and simulation. Students will learn agent-based modeling of complex systems and see the applicability of computer science across fields. The course cannot apply to major in computer science or any other SOE major.

### 151. Computer Science Fundamentals for Non-Majors. (3)

This course is a freshman-level introduction to computer science. Topics include programming constructs and the basics of data-structures and asymptotics.

### 151L. Computer Programming Fundamentals for Non-Majors. (3)

An introduction to the art of computing. Not intended for Computer Science majors or minors. The objective of the course is an understanding of the relationship between computing and problem-solving.

### 152. Computer Programming Fundamentals using Java (3)

CS152 is an introduction to the art of computing.

### 152L. Computer Programming Fundamentals. (3)

Introduction to the art of computing. The course objectives are understanding relationships between computation, problem-solving, and programming using high-level languages.

Prerequisite: 105L or 108L or 151L or ECE131.

### 241L. Data Organization. (3)

Data representation, storage and manipulation. Covers the memory organization of data storage and its relation to computation and efficiency. Topics include: linked vs. contiguous implementations, memory management, the use of indices and pointers, and an introduction to issues raised by the memory hierarchy. Programming assignments in C provide practice with programming styles that yield efficient code and computational experiments investigate the effect of storage design choices on the running time of programs.

Prerequisite: 152L with a grade of "B-" or better or 259L with a grade of "C" or better.

### 251. Intermediate Programming using Java. (3)

This course continues the journey you began in CS 151: namely, learning how to solve problem-solving tasks on a computer, using a general-purpose programming language|specifically, Java.

Spring 2021

### 251L. Intermediate Programming. (3)

An introduction to the methods underlying modern program development. Specific topics will include object-oriented design and the development of graphical user interfaces. Programming assignments will emphasize the use of objects implemented in standard libraries. Three lectures, 1 hr. recitation.

Prerequisite: 152L with a grade of "B-" or better.

### 259L. Data Structures with JAVA. (5)

An accelerated course covering the material of 151L and 251L in one semester. Topics include elementary data structures and their implementation, recursive procedures, data abstraction and encapsulation, and program organization and verification. Programs will be written in JAVA. Credit not allowed for both 259L and 151L/251L.

### 261. Discrete Mathematics (3)

This course is an introduction to the formal mathematical concepts of computer science for the beginning student. Topics include proof techniques, elementary logic, set theory, counting and classic probability, relations, graph theory, etc.

### 293. Social and Ethical Issues in Computing. (1)

This class provides an overview of the social and ethical issues surrounding computer science. It should prompt you to think deeply about what your professional and personal responsibilities are, as a computer scientist, technology developer, and citizen.

### 341. Introduction to Computer Architecture and Organization. (3)

This course is a survey of various levels of computer architecture and design: microprogramming and processor architecture, advanced assembly language programming, operating system concepts and input/output via the operating system.

Spring 2021

### 341L. Introduction to Computer Architecture and Organization. (3)

This course is a survey of various levels of computer architecture and design: microprogramming and processor architecture, advanced assembly language programming, operating system concepts and input/output via the operating system.

### 351. Design of Large Programs. (4)

This project-oriented course is intended to help students acquire the design and programming skills needed to perform well in professional settings where they are expected to translate customer needs into functioning code.

### 357L. Declarative Programming. (3)

Course focuses on one of the declarative programming paradigms: functional, logic, or constraint programming. Specialized techniques are introduced with a view towards general principles. Selected advanced topics in programming language design and implementation are covered.

Prerequisite: 241L with a grade of "C" or better and (251L with a grade of "C" or better or 259L with a grade of "C" or better) and 261 with a grade of "C" or better.

Restriction: admitted to School of Engineering.

### 361. Data Structures and Algorithms. (3)

This course is about algorithm design and analysis. These are skills that will be useful to you throughout your career as a computer scientist. Hopefully they will give you a new way of thinking about computational tasks and algorithms; a lens that will help you solve real-life programming tasks better, faster, and with less debugging time.

### 362. Data Structures and Algorithms. (3)

An introduction to data structures and algorithms and the mathematics needed to analyze their time and space complexity. Topics include asymptotic notation, recurrence relations and their solution, sorting, hash tables, basic priority queues, search trees (including at least one balanced structure), and basic graph representation and search. Students complete a term project that includes an experimental assessment of competing data structures.

Prerequisite: 241L with a grade of "C" or better and 261 with a grade of "C" or better.

Restriction: admitted to School of Engineering.

Spring 2021

### 362. Data Structures and Algorithms II. (3)

A continuation of 361L with an emphasis on design of algorithms. Topics include: amortized analysis and self-adjusting data structures for trees and priority queues; union-find; minimum spanning tree, shortest path and other graph algorithms; elementary computational geometry; greedy and divide-and-conquer paradigms.

Prerequisite: 361L with a grade of "C" or better.

Restriction: admitted to School of Engineering.

### 365. Introduction to Scientific Modeling. (3)

This course covers the use of computational modeling as a tool for analyzing scientific data, making predictions based on that analysis, and rational design of engineered systems.

### *375. Introduction to Numerical Computing. (3)

(Also offered as MATH **375)

An introductory course covering such topics as solution of linear and nonlinear equations; interpolation and approximation of functions, including splines; techniques for approximate differentiation and integration; solution of differential equations; familiarization with existing software.

Prerequisite: (151L or 152L or ECE 131 or PHYS 2415) and (MATH **314 or MATH **316 or MATH **321).

Restriction: admitted to School of Engineering.

### 390. Topics in Computer Science for Non-Majors-Undergraduate. (1-3, no limit Δ)

This course is intended to provide students in other disciplines with an opportunity to study aspects of modern computer science, tailored to their own field of study.

Restriction: admitted to School of Engineering and permission of instructor.

### 412. Introduction to Computer Graphics: Scanline Algorithms. (3)

This course is an introduction to the technical aspects of raster algorithms in computer graphics. Students will learn the foundational concepts of 2-D and 3-D graphics as they relate to real-time and offline techniques. Students will develop a video game as a final project to demonstrate the algorithms learned in class.

Prerequisite: 361L or ECE **331.

Restriction: admitted to School of Engineering. {Fall}

### 422 / 522. Digital Image Processing. (3)

Introduction to fundamentals of digital image processing. Specific topics include grey level histograms, geometric/grey level transformations, linear systems theory, Fourier transforms, frequency domain filtering, wavelet transforms, image compression, edge detection, color vision, and binary image morphology.

Prerequisite: MATH **314 or MATH **321.

Restriction: admitted to School of Engineering.

### **423. Introduction to Complex Adaptive Systems. (3)

Introduces topics in complex adaptive systems, including: definitions of complexity, fractals, dynamical systems and chaos, cellular automata, artificial life, game theory, neural networks, genetic algorithms and network models. Regular programming projects are required. Prerequisite: 251L and MATH 1512.

Restriction: admitted to School of Engineering.

### 423/523. Complex Adaptive Systems

A graduate-level introduction to selected topics in complex adaptive systems (CAS). The course focuses on computational tools to simulate and measure complexity, and analysis of biological and computational complex adaptive systems.

### 427 / 527. Principles of Artificially Intelligent Machines. (3)

Survey of artificial intelligence exclusive of pattern recognition. Heuristic search techniques, game playing, mechanical theorem proving, additional topics selected by the instructor.

Prerequisite: 351L.

Restriction: admitted to School of Engineering.

### 429 / 529. Introduction to Machine Learning. (3)

Introduction to principles and practice of systems that improve performance through experience. Topics include statistical learning framework, supervised and unsupervised learning, Bayesian analysis, time series analysis, reinforcement learning, performance evaluation and empirical methodology; design tradeoffs.

Prerequisite: 362 and STAT **345 and (MATH **314 or MATH **321).

Restriction: admitted to School of Engineering.

### 442 / 542. Introduction to Parallel Processing. (3)

Introduction to parallel scientific and data intensive programming architectures and systems. Performance issues, speed-up and efficiency. Parallel programming issues and models: control parallel, data parallel and data flow. Programming assignments on massively parallel machines.

Prerequisite: 341L or *471 or 467 or MATH *471.

### 444 / 544. Introduction to Cybersecurity. (3)

This class will focus on proactive security, i.e. designing networks, algorithms and data structures which are provably robust to attack. Grades will be based on class participation, presentations, and class projects.

Restriction: admitted to School of Engineering.

Spring 2021

### 456 / 556. Advanced Declarative Programming. (3)

Continued study in one of the declarative programming paradigms: functional, logic, or constraint programming. Specialized techniques are introduced with a view towards general principles.

Prerequisite: 357L.

Restriction: admitted to School of Engineering.

### 460. Software Engineering. (3)

Software engineering principles will be discussed and applied to a large team developed project. Other topics relevant to the production of software will also be covered, including ethics, legalities, risks, copyrights and management issues.

Spring 2021

### 464 / 564. Introduction to Database Management. (3)

This course is an introduction to Database Systems at the senior level. It provides a broad description of the Database discipline.

Spring 2021

### 467 / 567. Introduction to Big Data. (3)

The field of computer science is experiencing a transition from computation-intensive to data-intensive problems, wherein data is produced in massive amounts by large sensor networks, new data acquisition techniques, simulations, and social networks.

### *471. Introduction to Scientific Computing. (3)

Introduction to scientific computing fundamentals, exposure to high performance programming language and scientific computing tools, case studies of scientific problem solving techniques.

Restriction: admitted to School of Engineering.

### **481. Computer Operating Systems. (3)

Fundamental principles of modern operating systems design, with emphasis on concurrency and resource management. Topics include processes, interprocess communication, semaphores, monitors, message passing, input/output device, deadlocks memory management, files system design.

Prerequisite: 341L or ECE **331.

Restriction: admitted to School of Engineering.

Spring 2021

### 485/585, ECE 440. Computer Networking

The Internet became the most way for people to communicate; it is interesting to learn how this vast network works! In this course, we will emphasize the design and administration of local area networks (LANs).

### 491. Special Topics-Undergraduates. (1-6 to a maximum of 12 Δ)

Undergraduate seminars in special topics in computer science.

Restriction: admitted to School of Engineering.

Spring 2021

### 495 / 595. Advanced Topics in Computer Science. (3, no limit Δ)

This course will cover advanced topics in Computer Science.

Restriction: admitted to School of Engineering.

### 499. Individual Study-Undergraduate. (1-3 to a maximum of 6 Δ)

Guided study, under the supervision of a faculty member, of selected topics not covered in regular courses. At most 3 hours may be applied toward the CS hour requirement.

Restriction: admitted to School of Engineering.

### 500. Introduction to the Theory of Computation. (3)

Covers basic topics in automata, computability and complexity theory, including: models of computation (finite automata, Turing machines and RAMs); regular sets and expressions; recursive, r.e., and non-r.e. sets and their basic closure properties; complexity classes; determinism vs. non-determinism with and without resource bounds; reductions and completeness; practice with NP- and P-completeness proofs; and the complexity of optimization and approximation problems.

### 506. Computational Geometry. (3)

This course will cover topics in Geometric and Probabilistic methods in Computer Science, with an eye towards interesting, modern applications of these tools.

### 510. Mobile Computing. (3)

Internet and wireless communication are two technologies having a significant impact on the social fabric. This course is concerned with methods and principles for the development of systems that exhibit some form of mobility.

### 512. Introduction to Computer Graphics. (3)

Covers image synthesis techniques from the perspective of high-end scanline rendering, including physically-based rendering algorithms. Topics: radiometry, stochastic ray tracing, variance reduction, photon mapping, reflection models, participating media, advanced algorithms for light transport.

### 520. Topics in Interdisciplinary Biological and Biomedical Sciences. (3, no limit Δ)

Varying interdisciplinary topics taught by collaborative scientists from UNM, SFI, and LANL.

### 521. Data Mining Techniques. (3)

Introductory topics in data mining including: clustering, classification, outlier detection and association-rule discovery. Advanced topics: technologies for data mining, algorithms for mining rich data types and applications of mining algorithms.

### 522 / 422. Digital Image Processing. (3)

**522 / 422. Digital Image Processing. (3)**

Introduction to fundamentals of digital image processing. Specific topics include grey level histograms, geometric/grey level transformations, linear systems theory, Fourier transforms, frequency domain filtering, wavelet transforms, image compression, edge detection, color vision, and binary image morphology.

Prerequisite: MATH **314 or MATH **321.

### 523. Complex Adaptive Systems. (3)

A graduate introduction to computational tools to measure, simulate and analyze complexity in biological and social systems. Topics include cellular automata, dynamical systems, genetic algorithms and other biologically inspired computational methods. Programming maturity is required.

### 527 / 427. Principles of Artificially Intelligent Machines. (3)

Survey of artificial intelligence exclusive of pattern recognition. Heuristic search techniques, game playing, mechanical theorem proving, additional topics selected by the instructor.

Prerequisite: 351L.

### 529 / 429. Introduction to Machine Learning. (3)

Introduction to principles and practice of systems that improve performance through experience. Topics include statistical learning framework, supervised and unsupervised learning, Bayesian analysis, time series analysis, reinforcement learning, performance evaluation and empirical methodology; design tradeoffs.

Prerequisite: 362 or 530 or 561.

### 530. Geometric and Probabilistic Methods in Computer Science. (3)

Introduction to applied mathematics for computer scientists. Specific topics include discrete and continuous random variables (including transformation and sampling), information theory, Huffman coding, Markov processes, linear systems theory, Fourier transforms, principal component analysis and wavelet transforms.

Prerequisite: STAT 345.

### 533. Experimental Methods in Computer Science. (3)

An introduction to experimental methods in Computer Science.

### 542 / 442. Introduction to Parallel Processing. (3)

CS442/542 is a senior/graduate-level class in parallel programming systems, including programming and systems issues of shared memory machines, distributed memory machines (e.g. clusters), co-processor systems (GPUs), and Big Data systems.

### 544 / 444. Introduction to Cybersecurity. (3)

This class will focus on proactive security, i.e. designing networks, algorithms and data structures which are provably robust to attack. Grades will be based on class participation, presentations, and class projects.

### 547. Neural Networks. (3)

A study of neuron models, basic neural nets and parallel distributed processing. Prerequisite: MATH **314 or **321.

### 550. Programming Languages and Systems. (3)

Current trends in design and philosophy of languages and systems. Data abstraction, data flow languages, alternative control structures, environments, correctness, software tools.

Prerequisite: 558.

### 551. Individual Study-Graduate. (1-3 to a maximum of 6 Δ)

The guided study, under the supervision of a faculty member, of selected topics not covered in regular courses.

Restriction: permission of instructor.

### 554 [554 / 454]. Compiler Construction. (3)

Syntax analysis and semantic processing for a block-structured language. Lexical analysis, symbol tables, run-time management. Students will write a compiler.

Prerequisite: 341L and 351L.

### 555. Advanced Topics in Compiler Construction. (3)

Aspects needed to write production-quality compilers. Optimization, error recovery, parse table compression, semantic processing of complex data structures, type checking, run-time support, code generation, compiler-writing systems.

Prerequisite: 454 or 554.

### 556 / 456. Advanced Declarative Programming. (3)

Continued study in one of the declarative programming paradigms: functional, logic, or constraint programming. Specialized techniques are introduced with a view of general principles.

Prerequisite: 558.

### 558. Software Foundations. (3)

Introduction to modern programming techniques and programming language features and the theory used to describe and define programming languages, using types as the organizational principle.

### 561. Algorithms/Data Structure. (3)

Study of data structures and algorithms and mathematics needed to analyze their time and space complexity. Topics include amortized analysis and self-adjusting data structures for trees and priority queues, graphing algorithms, greedy and divide-and-conquer paradigms.

### 564 / 464. Introduction to Database Management. (3)

Introduction to database management systems. Emphasis is on the relational data model. Topics covered include query languages, relational design theory, file structures, and query optimization. Students will implement a database application using a nonprocedural query language interfaced with a host programming language.

Prerequisite: 561.

Spring 2021

### 565. Topics in Database Management. (3)

A continuation of 464/564 with emphasis on query optimization, leading-edge data models, transaction management and distributed databases. Additional topics determined by student interests.

Prerequisite: 564.

### 567 / 467. Principles and Applications of Big Data. (3)

This course explores data analysis and management techniques, which applied to massive datasets are the cornerstones that enable real-time decision making in distributed environments, business intelligence, and scientific discovery on a large scale.

### 575. Introductory Numerical Analysis: Numerical Linear Algebra. (3)

Direct and iterative methods of the solution of linear systems of equations and least-squares problems. Error analysis and numerical stability. The eigenvalue problem. Descent methods for function minimization, time permitting.

Prerequisite: MATH 464 or MATH 514.

{Spring}

### 576. Introductory Numerical Analysis: Approximation and Differential Equations. (3)

The solution of nonlinear problems and minimization. Numerical approximation of functions. Interpolation by polynomials, splines, and trigonometric functions. Numerical integration and solution of ordinary differential equations. An introduction to finite difference and finite element methods, time permitting.

Prerequisite: MATH **316 or MATH 401.

{Fall}

### 580. The Specification of Software Systems. (3)

This course reviews several important classes of concurrent algorithms and presents a formal method for specifying, reasoning about, verifying, and deriving concurrent algorithms.

Spring 2021

### 581. Fundamentals of Software Testing. (3)

Introduces the components of software development life cycle and role of the software test process, test planning and strategy, static testing, tracking bugs, dynamic testing, use of automated testing as well as other testing concepts.

### 583. Object-Oriented Testing. (3)

Introduction to the software test process. Topics include testing perspectives, object-oriented concepts, UML diagrams, development/testing processes, test design, test case development, verifying tests, test case automation, test patterns, and understanding basic concepts of class hierarchies.

### 585. Computer Networks. (3)

A theoretical and practical study of computer networks, including network structures and architectures; protocols and protocol hierarchies; error handling; routing; reliability; point-to-point networks; broadcast networks; local area networks; efficiency and throughput; communications technologies; case studies.

### 587. Advanced Operating Systems. (3)

Theory of design of operating systems. Modeling, simulation, synchronization, concurrency, process hierarchies, networks, and distributed systems.

### 590. Topics in Computer Science for Non-Majors-Graduate. (1-3, no limit Δ)

This course is intended to provide students in other disciplines with an opportunity to study aspects of modern computer science, tailored to their own field of study.

Restriction: permission of instructor.

### 591. Special Topics-Graduate. (1-6, no limit Δ)

Graduate seminars on special topics in computer science.

Restriction: permission of instructor.

Spring 2021

### 592. Colloquium. (1, can be repeated three times Δ)

Required of all graduate students. May be repeated, with at most 2 credits towards the M.S. requirements and at most 2 further credits towards the Ph.D. requirements. Students will write a short essay on the topic of one or more of the colloquia offered that semester.

Offered on a CR/NC basis only.

### 595 / 495. Advanced Topics in Computer Science. (3, no limit Δ)

This course will cover advanced topics in Computer Science.

### 599. Master's Thesis. (1-6, no limit Δ)

Offered on a CR/NC basis only.

### 600. Computer Science Research Practicum. (3)

Develop and practice the skills required to conduct an independent research project. Intended for graduate students pursuing a Ph.D. in Computer Science.

Restriction: admitted to Ph.D. Computer Science.

### 650. Reading and Research. (3, may be repeated once Δ)

Restriction: permission of instructor.

### 691. Seminar in Computer Science. (1-6 to a maximum of 12 Δ)

Restriction: permission of instructor.

### 699. Dissertation. (3-12, no limit Δ)

Offered on a CR/NC basis only.