Courses

CSCI-101 - Introduction to Computer Science (I, II)

An introductory course to the building blocks of Computer Science. Topics include conventional computer hardware, data representation, the role of operating systems and networks in modern computing, algorithm design, relational databases, structured queries, and computer simulations. A popular procedural programming language will be learned by students and programming assignments will explore ideas from algorithm development, optimization, and computer simulation.
 
Prerequisite: none.
3 hours lecture; 3 semester hours.


CSCI-198 - Special Topics (I, II, S)

Pilot course or special topics course. Topics chosen from special interests of instructor(s) and student(s). Usually the course is offered only once.
 
Prerequisite: Consent of Instructor.
Variable credit: 1 to 6 semester hours. Repeatable for credit under different titles.


CSCI-199 - Independent Study (I, II, S)

Individual research or special problem projects supervised by a faculty member; also, when a student and instructor agree on a subject matter, content, and credit hours.
 
Prerequisite: Independent Study form must be completed and submitted to the Registrar.
Variable Credit: 1 to 6 credit hours. Repeatable for credit.


CSCI-250 - Python-Based Computing: Building a Sensor System (I, II)

This course will teach students the skills needed for data collection, analysis, and visualization on a small embedded device (e.g., Raspberry Pi). Students will learn basic Linux, Python, and the programming skills needed to control the hardware and associated sensors. This hands-on course includes a baseline project, four introductory projects (e.g., acoustic, acceleration, magnetic field, optical), and a final Capstone project. The Capstone project will have students create their own application using the techniques learned during the first half of the semester; students will then present their Capstone project through a formal presentation, write-up, and demonstration. 
 
Prerequisite: none.
3 hours lecture; 3 semester hours.


CSCI-260 - Fortran Programming (I)

Computer programming in Fortran90/95 with applications to science and engineering. Program design and structure, problem analysis, debugging, program testing. Language skills: arithmetic, input/output, branching and looping, functions, arrays, data types. Introduction to operating systems.
 
Prerequisite: none.
2 hours lecture; 2 semester hours.


CSCI-261 - Programming Concepts (I, II, S)

This course introduces fundamental computer programming concepts using a high-level language and a modern development environment. Programming skills include sequential, selection, and repetition control structures, functions, input and output, primitive data types, basic data structures including arrays and pointers, objects, and classes. Software engineering skills include problem solving, program design, and debugging practices.
 
Prerequisite: none.
3 hours lecture; 3 semester hours.


CSCI-262 - Data Structures (I, II, S)

Defining and using data structures such as linked lists, stacks, queues, binary trees, binary heap, hash tables. Introduction to algorithm analysis, with emphasis on sorting and search routines. Language skills: abstract data types, templates and inheritance.
 
Prerequisite: CSCI261 with a grade of C- or higher.
3 hours lecture; 3 semester hours.


CSCI-274 - Introduction to the Linux Operating System (I, II)

Introduction to the Linux Operating System will teach students how to become proficient with using a Linux operating system from the command line. Topics will include: remote login (ssh), file system navigation, file commands, editors, compilation, execution, redirection, output, searching, processes, usage, permissions, compression, parsing, networking, and bash scripting.
 
Prerequisite: CSCI 261 or instructor approval
1 hour lecture; 1 semester hour.


CSCI-298 - Special Topics (I, II, S)

Selected topics chosen from special interests of instructor and students.
 
Prerequisite: Consent of Department Head.
1 to 3 semester hours. Repeatable for credit under different titles.


CSCI-299 - Independent Study (I, II, S)

Individual research or special problem projects supervised by a faculty member; also, when a student and instructor agree on a subject matter, content, and credit hours.
 
Prerequisite: Independent Study form must be completed and submitted to the Registrar.
Variable Credit: 1 to 6 credit hours. Repeatable for credit.


CSCI-303 - Introduction to Data Science (II)

This course will teach students the core skills needed for gathering, cleaning, organizing, analyzing, interpreting, and visualizing data.  Students will learn basic SQL for working with databases, basic Python programming for data manipulation, and the use and application of statistical and machine learning toolkits for data analysis.  The course will be primarily focused on applications, with an emphasis on working with real (non-synthetic) datasets.
 
Prerequisite: CSCI 101 or CSCI 261 or instructor approval (for those with prior programming experience).
3 hours lecture; 3 semester hours.


CSCI-306 - Software Engineering (I, II)

Introduction to software engineering processes and object-oriented design principles. Topics include the Agile development methodology, test-driven development, UML diagrams, use cases and several object-oriented design patterns. Course work emphasizes good programming practices via version control and code reviews.
 
Prerequisite: CSCI262 with a grade of C- or higher.
3 hours lecture; 3 semester hours.


CSCI-340 - Cooperative Education (I, II, S)

Supervised, full-time engineering-related employment for a continuous six-month period (or its equivalent) in which specific educational objectives are achieved.
 
Prerequisite: Second semester sophomore status and a cumulative grade point average of at least 2.00.
0 to 3 semester hours.
Note: Cooperative Education credit does not count toward graduation except under special conditions.


CSCI-341 - Computer Organization (I, II)

Covers the basic concepts of computer architecture and organization. Topics include machine level instructions and operating system calls used to write programs in assembly language, computer arithmetics, performance, processor design, and pipelining techniques. This course provides insight into the way computers operate at the machine level.
 
Prerequisite: CSCI261. Co-requisite CSCI 262.
3 hours lecture; 3 semester hours.


CSCI-358 - Discrete Mathematics (I, II)

This course is an introductory course in discrete mathematics and algebraic structures. Topics include: formal logic; proofs, recursion, analysis of algorithms; sets and combinatorics; relations, functions, and matrices; Boolean algebra and computer logic; trees, graphs, finite-state machines and regular languages.
 
Prerequisite: MATH213, MATH223 or MATH224.
3 hours lecture; 3 semester hours.


CSCI-370 - Advanced Software Engineering (S)

This capstone course has three primary goals: (1) to enable students to apply their course work knowledge to a challenging applied problem for a real client, (2) to enhance students' verbal and written communication skills, and (3) to provide an introduction to ethical decision making in computer science. Ethics and communication skills are emphasized in a classroom setting. The client work is done in small teams, either on campus or at the client site. Faculty advisors provide guidance related to the software engineering process, which is similar to Scrum. By the end of the course students must have a finished product with appropriate documentation.
 
Prerequisite: CSCI 306.
6-week summer session; 6 semester hours.
Note: At a minimum CS students should have completed coursework through CSCI-306. This is a writing inten


CSCI-398 - Special Topics (I, II, S)

Selected topics chosen from special interests of instructor and students.
 
Prerequisite: Consent of Department Head.
1 to 3 semester hours. Repeatable for credit under different titles.


CSCI-399 - Independent Study (I, II, S)

Individual research or special problem projects supervised by a faculty member given agreement on a subject matter, content, and credit hours.
 
Prerequisite: Independent Study form must be completed and submitted to the Registrar.
Variable Credit: 1 to 6 credit hours. Repeatable for credit.


CSCI-400 - Principles of Programming Languages (I, II)

Study of the principles relating to design, evaluation and implementation of programming languages, including basic compiler techniques and context-free grammars. Students will be exposed to different categories of programming languages, such as functional, imperative, object-oriented and scripting. Best practices for programming will be explored, including effective use of exceptions and threads. The primary languages discussed are: Java, C++, Scheme, and Perl
 
Prerequisite: CSCI306.
3 hours lecture; 3 semester hours.


CSCI-403 - Database Management (I,II)

Design and evaluation of information storage and retrieval systems, including defining and building a database and producing the necessary queries for access to the stored information. Relational database management systems, structured query language, and data storage facilities. Applications of data structures such as lists, inverted lists and trees. System security, maintenance, recovery and definition. Interfacing host languages to database systems and object-relational mapping tools. NoSQL databases and distributed databases.
 
Prerequisite: CSCI262 with a grade of C- or higher.
3 hours lecture; 3 semester hours.


CSCI-404 - Artificial Intelligence (I)

General investigation of the Artificial Intelligence field. Several methods used in artificial intelligence such as search strategies, knowledge representation, logic and probabilistic reasoning are developed and applied to practical problems. Fundamental artificial intelligence techniques are presented, including neural networks, genetic algorithms, and fuzzy sets. Selected application areas, such as robotics, natural language processing and games, are discussed.
 
Prerequisite: CSCI262 with a grade of C- or higher and MATH201 or consent of instructor
3 hours lecture; 3 semester hours.


CSCI-406 - Algorithms (I, II)

Reasoning about algorithm correctness (proofs, counterexamples). Analysis of algorithms: asymptotic and practical complexity. Review of dictionary data structures (including balanced search trees). Priority queues. Advanced sorting algorithms (heapsort, radix sort). Advanced algorithmic concepts illustrated through sorting (randomized algorithms, lower bounds, divide and conquer). Dynamic programming. Backtracking. Algorithms on unweighted graphs (traversals) and weighted graphs (minimum spanning trees, shortest paths, network flows and bipartite matching); NP-completeness and its consequences.
 
Prerequisite: CSCI262 with a grade of C- or higher, MATH213, MATH223 or MATH224, MATH/CSCI358.
3 hours lecture; 3 semester hours.


CSCI-410 - Elements of Computing Systems (Varies)

This comprehensive course will help students consolidate their understanding of all fundamental computer science concepts. Topics include symbolic communication, Boolean logic, binary systems, logic gates, computer architecture, assembly language, assembler construction, virtual machines, object-oriented programming languages, software engineering, compilers, language design, and operating systems. Using a hardware simulator and a programming language of their choice, students construct an entire modern computer from the ground up, resulting in an intimate understanding of how each component works.
 
Prerequisite: CSCI 341 or EENG 383.
3 hours lecture; 3 semester hours.


CSCI-422 - User Interface Design (infrequent)

User Interface Design is a course for programmers who want to learn how to create more effective software. This objective will be achieved by studying principles and patterns of interaction design, critiquing existing software using criteria presented in the textbooks, and applying criteria to the design and implementation of one larger product. Students will also learn a variety of techniques to guide the software design process, including Cognitive Walkthrough, Talk-aloud and others.
 
Prerequisite: CSCI306.
3 hours lecture; 3 semester hours.


CSCI-423 - Computer Simulation (I)

A first course in computer simulation. A project based course emphasizing the rigorous development of simulation applications. Topics will include random number generation, Monte Carlo simulation, discrete event simulation, and the mathematics behind their proper implementation and analysis. To a lesser extent we may discuss, time-step simulations and parallel simulations. The course uses journaling, programming projects and exams for assessment.
 
Prerequisite: CSCI306, and (MATH335 or MATH201), and CSCI274
3 hours lecture; 3 semester hours


CSCI-440 - Parallel Comp for Scientists and Engineers (II)

This course is designed to introduce the field of parallel computing to all scientists and engineers. The students will be taught how to solve scientific problems using parallel computing technologies. They will be introduced to basic terminologies and concepts of parallel computing, learn how to use MPI to develop parallel programs, and study how to design and analyze parallel algorithms.
 
Prerequisite: Programming experience in C++, consent of instructor.
3 hours lecture; 3 semester hours.


CSCI-441 - Computer Graphics (I)

This class focuses on the basic 3D rendering and modeling techniques. In particular, it covers ray tracing, graphics pipeline, modeling techniques based on polynomial curves and patches, subdivision for curves and surfaces, scene graphs, BSP trees and their applications, and elements of global illumination.
 
Prerequisite: CSCI262 with a grade of C- or higher.
3 hours lecture, 3 semester hours.


CSCI-442 - Operating Systems (I, II)

Introduces the essential concepts in the design and implementation of operating systems: what they can do, what they contain, and how they are implemented. Despite rapid OS growth and development, the fundamental concepts learned in this course will endure. We will cover the following high-level OS topics, roughly in this order: computer systems, processes, processor scheduling, memory management, virtual memory, threads, and process/thread synchronization. This course provides insight into the internal structure of operating systems; emphasis is on concepts and techniques that are valid for all computers. We suggest the student takes "Introduction to the Linux Operating System" before this course (if the student is new to the Unix/Linux environment).
 
Prerequisite: CSCI262 with a grade of C- or higher, CSCI341.
3 hours lecture; 3 semester hours.


CSCI-443 - Adv Programming Concepts using Java (II)

This course will quickly review programming constructs using the syntax and semantics of the Java programming language. It will compare the constructs of Java with other languages and discuss program design and implementation. Object oriented programming concepts will be reviewed and applications, applets, servlets, graphical user interfaces, threading, exception handling, JDBC, and networking as implemented in Java will be discussed. The basics of the Java Virtual Machine will be presented.
 
Prerequisite: CSCI261, CSCI262, CSCI306.
3 hours lecture, 3 semester hours.


CSCI-444 - Advanced Computer Graphics (II)

This is an advanced computer graphics course, focusing on modern rendering and geometric modeling techniques. Students will learn a variety of mathematical and algorithmic techniques that can be used to develop high-quality computer graphics software. In particular, the course will cover global illumination, GPU programming, geometry acquisition and processing, point based graphics and non-photorealistic rendering.
 
Prerequisite: Basic understanding of computer graphics and graphics-related programming, for example CSCI441.
3 hours lecture, 3 semester hours.


CSCI-445 - Web Programming (I)

Web Programming is a course for programmers who want to develop web-based applications. It covers basic website design extended by client-side and server-side programming. Students should acquire an understanding of the role and application of web standards to website development. Topics include Cascading Style Sheets (CSS), JavaScript, PHP and database connectivity. At the conclusion of the course students should feel confident that they can design and develop dynamic Web applications on their own.
 
Prerequisite: CSCI 262 or consent of instructor; Co-req: CSCI403
3 hours lecture, 3 semester hours.


CSCI-446 - Web Applications (II)

Web Applications is a course for programmers who want to learn how to move beyond creating dynamic web pages and build effective web-based applications. At the completion of this course, students should know HTTP, Hypertext Markup Language (HTML), Cascading Style Sheets (CSS), JavaScript, Ajax, Ruby, RESTful architectures and Web services. Additionally students should have considered a variety of issues related to web application architecture, including but not limited to security, performance and cloud-based deployment environments.
 
Prerequisite: CSCI445. Co-requisite CSCI400.
3 hours lecture, 3 semester hours.


CSCI-447 - Scientific Visualization (infrequent)

Scientific visualization uses computer graphics to create visual images which aid in understanding of complex, often massive numerical representation of scientific concepts or results. The main focus of this course is on modern visualization techniques applicable to spatial data such as scalar, vector and tensor fields. In particular, the course will cover volume rendering, texture based methods for vector and tensor field visualization, and scalar and vector field topology.
 
Prerequisite: Basic understanding of computer graphics and algorithms.
3 hours lecture, 3 semester hours.


CSCI-448 - Mobile Application Development (I)

This course covers basic and advanced topics in mobile application development. Topics include the mobile application lifecycle, user interface components and layouts, storing persistent data, accessing network resources, using location and sensor APIs including GPS and accelerometer, starting and stopping system services, and threading. This is a project-based course where students will design and develop complete applications.
 
Prerequisite: CSCI 306, Software Engineering, with a grade of C- or higher.
3 hours lecture, 3 semester hours


CSCI-470 - Introduction to Machine Learning (I)

The goal of machine learning is to build computer systems that improve automatically with experience, which has been successfully applied to a variety of application areas, including, for example, gene discovery, financial forecasting, and credit card fraud detection. This introductory course will study both the theoretical properties of machine learning algorithms and their practical applications. Students will have an opportunity to experiment with machine learning techniques and apply them to a selected problem in the context of term projects.
 
Prerequisite: MATH201 Probability and Statistics, MATH332 Linear Algebra.
3 hours lecture, 3 semester hours.


CSCI-471 - Computer Networks I (I)

This introduction to computer networks covers the fundamentals of computer communications, using TCP/IP standardized protocols as the main case study. The application layer and transport layer of communication protocols will be covered in depth. Detailed topics include application layer protocols (HTTP, FTP, SMTP, and DNS), transport layer protocols (reliable data transfer, connection management, and congestion control), network layer protocols, and link layer protocols. In addition, students will program client/server network applications.
 
Prerequisite: CSCI442 or consent of instructor.
3 hours lecture, 3 semester hours.


CSCI-473 - Human Centered Robotics (I)

Human-centered robotics is an interdisciplinary area that bridges research and application of methodology from robotics, machine vision, machine learning, human-computer interaction, human factors, and cognitive science. Students will learn about fundamental research in human-centered robotics, as well as develop computational models for robotic perception, internal representation, robotic learning, human-robot interaction, and robot cognition for decision making.
 
Prerequisite: CSCI 262 and MATH 201
3 hours lecture; 3 semester hours.


CSCI-474 - Introduction to Cryptography (II)

This course is primarily oriented towards the mathematical aspects of cryptography, but is also closely related to practical and theoretical issues of computer security. The course provides mathematical background required for cryptography including relevant aspects of number theory and mathematical statistics. The following aspects of cryptography will be covered: symmetric and asymmetric encryption, computational number theory, quantum encryption, RSA and discrete log systems, SHA, steganography, chaotic and pseudo-random sequences, message authentication, digital signatures, key distribution and key management, and block ciphers. Many practical approaches and most commonly used techniques will be considered and illustrated with real-life examples.
 
Prerequisite: CSCI 262, (MATH 300 or CSCI 358) and (MATH 335 or MATH 201)
3 hours lecture; 3 credit hours


CSCI-475 - Information Security & Privacy (I)

Information Security and Privacy provides a hands-on introduction to the principles and best practices in information and computer security. Lecture topics will include basic components of information security including threat assessment and mitigation, policy development, forensics investigation, and the legal and political dimensions of information security.
 
Prerequisite: CSCI 262 and CSCI 341 (required); CSCI 274 (recommended).
3 hours lecture; 3 semester hours.

© 2017 Colorado School of Mines | | Equal Opportunity | Privacy Policy | Directories | Text Only | Mines.edu | rss

 
Last Updated: 08/18/2017 11:43:54