Undergraduate Program

Why Major in Computer Science?

Computing has become ubiquitous, impacting almost every aspect of modern life and playing an important role in many technological advances. You don’t need previous programming experience to do well in CS@Mines.

Students who enjoy solving puzzles, thinking logically, and looking for patterns are well-suited to computer science. Our curriculum reflects a mixture of theory and practice, including discrete structures, design and analysis of algorithms, principles of programming languages, computer architecture, operating systems, and software engineering.

Computing jobs are among the highest paid, and computing professionals generally report high job satisfaction. Graduates from our program have found employment with many different types of companies including technology, engineering, and financial companies.

Job Opportunities

The U.S. Bureau of Labor reports that the number of computing jobs has been increasing steadily for the last decade. Predictions for new jobs through 2024 also favor computing, and the number of students earning CS degrees is currently not keeping up with projected demand.

But it’s more than just jobs opportunities, it’s also happiness. A Wall Street Journal article on the 10 Best Jobs put Software Engineer in the first spot, with Computer Systems Analyst as number four.

Hear from our students, alumni and faculty why CS@Mines might be perfect for you!

The Computer Science program is accessible to students with or without prior programming experience. CS@Mines allows you to choose your path with the following options:

 

 

 

CS GENERAL

This curriculum allows students to tailor senior level electives toward personal and career interests in areas such as algorithmic robotics, applied algorithms and data structures, high performance computing, machine learning, networking, security and privacy, graphics, or mobile and web development.

Degree Requirements | Flowchart

CS + DATA SCIENCE

All fields are experiencing rapid growth in access to massive amounts of information. In partnership with the Department of Applied Mathematics & Statistics, CS + Data Science retains the CS Core and focuses electives to help students analyze and make meaning of large amounts of data, resulting in smarter decision making, reduction in costs, and increased productivity. Data Science is an emerging discipline at the intersection of computer science and statistics, focusing on the extraction of knowledge from data.

Degree Requirements | Flowchart

CS + COMPUTER ENGINEERING

Advances in engineering revolve around automation, computerization, and digitization. In partnership with the Department of Electrical Engineering, CS + Computer Engineering retains the CS Core and focuses electives to help students identify the way hardware and software concepts such as programming, digital circuit design, and embedded systems transform any tech field.

Degree Requirements | Flowchart

CS + ROBOTICS AND INTELLIGENT SYSTEMS

Many disciplines of engineering focus on the physical creation and kinematics of robots and intelligent systems. In partnership with the Department of Mechanical Engineering, CS + Robotics and Intelligent Systems retains the CS Core and focuses electives to help students bring life to systems and give machines the ability to operate autonomously.

Degree Requirements | Flowchart

The CS degree at Mines is designed to be accessible to students with or without prior programming experience. The Introduction to Computer Science course introduces students to the building blocks of CS and provides a brief introduction to procedural programming in Python. The second computing course, Programming Concepts, emphasizes development of programming skills in an object-oriented language. The third introductory course, Data Structures, provides an understanding of the classic data representation schemes, algorithms, and algorithm analysis that form the foundation for all advanced work in computing.

Required CS courses provide the fundamental skills and knowledge that are critical to success in computing. These courses reflect a mixture of theory and practice, including discrete structures, design and analysis of algorithms, principles of programming languages, computer architecture, operating systems, and software engineering. In the required Elements of Computing Systems course, students consolidate their understanding of CS by constructing a simulator for an entire modern computer from the ground up. The capstone field session course provides students an opportunity to work in teams to create software products for real clients.

Elective courses in CS allow students to explore a variety of important computing topics, such as graphics and visualization, human computer interaction, artificial intelligence, database management, and web programming. Elective courses often relate to recent trends in computing, covering topics such as security, high performance computing, wireless sensor networks, and mobile applications.

Computing is a broad field with applicability to most science and engineering domains. The CS minor is designed for students in other disciplines to receive a solid grounding in the basics, which should enable them to apply their computing skills to solve problems in other domains.

Computer Science Core

The flowchart below lists all required computer science courses numbered 200 and above with arrows indicating prerequisites. This is not intended as a list of all required courses but rather an indication of the breadth and depth of material covered as part of the Computer Science degree.

Overall, all Computer Science majors must take at least 12 credit hours of computer science courses, not including CSCI-101.

CS Core Curriculum flowchart

The Computer Science core consists of the following 11 courses:

  • CSCI-101 Introduction to Computer Science
  • CSCI-261 Programming Concepts
  • CSCI-262 Data Structures
  • CSCI-306 Software Engineering
  • CSCI-341 Computer Organization
  • CSCI-358 Discrete Mathematics
  • CSCI-370 Advanced Software Engineering
  • CSCI-400 Principles of Programming Languages
  • CSCI-406 Algorithms
  • CSCI-442 Operating Systems

Computer Science Electives

In addition to the core courses listed above, students must take at least 12 credit hours of elective computer science courses. Any 400-level course with a prefix of CSCI will meet this requirement. Depending on the track, students must take 3.0-12.0 credit hours of elective computer science courses. Any 400-level CSCI course or MATH307 or EENG383 meet this requirement.

Free Electives

Also in addition to the core course requirements, students must also earn an additional 19 hours of free electives. Unlike the Computer Science Electives, the free elective hours are not restricted to courses within the department but rather may be use for minors or majors with other departments or simply to take classes that you find interesting. Depending on the track, students must take 9.0-18.0 credit hours of free electives.

Flowcharts

The requirements for your major may be dependent upon the year you enter Colorado School of Mines and are reflected in the corresponding bulletin. Sample flowcharts indicating a generic schedule for a Computer Science major’s four year career are available. However, the information represented in the sample flowcharts are recommendations. For specific course requirements, please refer to the appropriate catalog. The current as well as past catalogs are available at catalog.mines.edu.

Minors, ASIs and Double Majors

If you plan to obtain two BS degrees, be sure to review the Multiple Degrees section of Undergraduate Degree Requirements in the catalog.

If you plan to obtain a minor or ASI from another department, you should review these general requirements.

The Department of Computer Science is pleased to offer students the opportunity to earn both a Bachelor of Science (BS) and a Master of Science (MS) degree simultaneously.

Features of the Combined Program

  • Students may be able to complete a Non-Thesis or Thesis M.S. in at least one additional year to the B.S. Normally a Master’s Degree requires 36 credit hours and takes two years to complete. Under the Combined Program, students will count two courses(CSCI406 and CSCI442) toward both degrees, so only 30 additional credit hours are needed to complete the degree.
  • Students selecting the Non-Thesis option will be required to complete 30 credit hours of coursework.
  • Students selecting the Thesis option will be required to complete 18 credit hours of coursework and a thesis (12 credit hours).
  • There are two required graduate-level courses: CSCI564 (Advanced Architecture) and CSCI561 (Theory of Computation). The remaining courses are all electives.
  • No more than 6 credits of elective courses may be taken outside the Department.
  • No more than 9 credits of 400-level course work may count toward graduate degree requirements (i.e., at most one 400-level course in addition to CSCI406 and CSCI442). Only CSCI406 and CSCI442 may be double counted.

Admission Criteria

  • Students may not apply for the combined program until they have taken five or more Computer Science classes at CSM (classes transferred from other universities will not be considered). This requirement may be met by any 200-level or above course with a CSCI prefix (e.g., CSCI261, CSCI306, CSCI442, CSCI498 etc.) except CSCI370, CSCI499 and CSCI 274. CSCI 274 is only a one-credit hour course. Since CSCI370 (Advanced Software Engineering) is based almost exclusively on team work, it may not be counted as one of the five courses. Independent study courses (i.e., CSCI499) have varying requirements and are therefore also not included.
  • Students should have an overall GPA of at least 2.5 and a GPA of 3.2 for courses in the major. The calculation of GPA in the major will be based on all 200-level or above CSCI courses except those excluded above (i.e., CSCI370, CSCI499 and CSCI 274). If a course is taken multiple times, all of the grades will be included in the gpa calculation.
  • Interested students with a lower GPA must write an essay to explain why they should be admitted to the program. See Application Procedure below.

Application Procedure

  • Complete the Online Application.
  • For online applications from CSM undergraduates, the application fee is only $25.
  • Indicate whether you intend to pursue the Non-Thesis or Thesis M.S. in Mathematical & Computer Sciences. Note that you may change from Non-Thesis to Thesis (or vice versa) if you change your mind.
  • Students are not required to take the GRE or submit letters of recommendation. The system currently requires letters of reference, even though our department does not. You will need to enter a first and last name for the recommender (doesn’t have to be real, you could use ‘a’ for first name and ‘b’ for last name). You should also specify that the recommender will not be submitting online.
  • Students must submit a transcript.
  • Students who meet the gpa requirements do not need to write a unique “Statement of Goals” for the application. To ensure that your application will be correctly processed, the Statement of Goals should be: “I am currently a CS major at CSM. I meet the gpa requirements. I would like to apply for the Combined B.S./M.S. program.”
  • Students who do not meet the gpa requirements must submit an essay to explain why they have a low gpa and to provide convincing arguments for their ability to do graduate level work.
  • Students may apply as early as the first semester, Junior year. Admission must be granted no later than the end of registration, last semester Senior year. Be sure to check the application cut-off dates on the Graduate School website.
  • Since you are not allowed to “officially” work on both degrees at the same time, you must enter a date for “expected BS completion date” on the Educational Information page of the online application. Then enter an Intended Entry semester for the graduate program that is after that date.

Taking 500-level Courses

  • Students should not take 500-level courses until they are admitted into the program. You must be admitted by Census Day of the semester you begin to take graduate courses.
  • Students taking 500-level courses during their senior year will need to obtain approval from their advisor and the course instructor. You should check the box for Graduate Credit only. If you have been accepted into the program prior to taking any graduate courses, those credits should automatically transfer to your MS degree as soon as you receive your undergraduate degree.
  • If a student takes 500-level courses prior to obtaining their BS degree, his or her account will have a hold that says Graduate CSM BS Degree (Need Proof of CSM BS Degree). This hold will remain until the start date of the graduate program. Note that students must turn in an undergraduate transcript upon graduation, and there will be a delay before they are able to register for graduate courses.
  • If prior consent is not received or if the student has not been accepted by OGS as a combined program student, all 500-level graduate courses taken as an undergraduate Combined Degree Program student will be applied to the student’s undergraduate degree transcript. If these are not used toward an undergraduate degree requirement, they may, with program consent, be applied to a graduate degree program as transfer credit.
  • Some courses within Computer Science are co-taught as 400/500 level (e.g., CSCI474/CSCI574). Since there are a limited number of graduate courses offered each semester, students who want to pursue the combined master’s should enroll in these courses at the 500 level.

Financial Aid

  • Courses taken as an undergraduate student but applied directly toward a graduate degree are not eligible for undergraduate financial aid or the Colorado Opportunity Fund.
  • Upon completion of their undergraduate degree requirements, a Combined Degree Program student is considered enrolled full-time in his/her graduate program. Once having done so, the student is no longer eligible for undergraduate financial aid, but may now be eligible for graduate financial aid.
  • To complete their graduate degree, each Combined Degree Program student must register as a graduate student for at least one semester.

Timeline

  • If possible, students should apply during Spring semester of their junior year, in order to begin taking 500-level courses during the Fall semester of the senior year.
  • To be able to earn the MS degree in five years, students will need to carry a heavier load during Spring semester of the junior year and both semesters of the senior year. Note that there is no requirement to finish in five years, so students may follow a more normal schedule and take an extra semester to complete their degree.
  • The timeline for completing the degree will vary depending on whether students select the thesis or non-thesis option. These are described below.

MS Project Track

Students are required to take 6 credits of CSCI700 to fulfill the MS project requirement. (It is recommended that the 6 credits consist of two consecutive semesters of 3 credits each.) At most 6 hours of CSCI700 will be counted toward the Masters non-thesis degree. Deliverables include a report and a presentation to a committee of two EECS faculty including the Advisor (at least one committee member must be a CS faculty member). Deliverables must be successfully completed in the last semester in which the student registers for CSCI700. A student must receive two “pass” votes (i.e., a unanimous vote) to satisfy the project option.

MS Thesis Defense

At the conclusion of the MS (Thesis Option), the student will be required to make a formal presentation and defense of her/his thesis research. A student must “pass” this defense to earn an M.S. degree.

You may want to review the detail requirements in this sample timeline. For students in the combined program to complete the degree in five years, items listed in the sample timeline as 1st Semester and 2nd Semester should be completed during the senior year.

For more information about projects in this program, click here.

 

Overview:

The Department of Computer Science offers a discipline-specific research honors program for our majors. This program provides the opportunity for undergraduate computer science majors to broaden their overall Mines experience with research and innovation, as well as explore computer science in more depth through scholarship. The program emphasizes experiential learning for motivated students who seek hands-on opportunities in order to become leaders in industry or want enhanced preparation for graduate school. These research experiences will broaden the understanding of the interdisciplinary work of computer science, and allow students to explore their field through scholarship. CS Research Honor students will work more closely with faculty than what occurs in the classroom.

The program is open to any student who has demonstrated strong academic performance and has an aspiration to make an impact through research and innovation. The CS Research Honors program offers depth and breadth of knowledge in areas such as machine learning, cybersecurity, and robotics. The courses and projects that honor students select concentrate on the impact of analytical investigation, creativity, leadership, and innovation. The CS Research Honors program aims to foster professional development while offering students the opportunity to be involved in a community of scholars. Students who successfully complete the CS Research Honors program will graduate with a BS in Computer Science “with honors.”

CS faculty will post available undergraduate research honors projects for the following academic year each February. Students should list the projects of interest in their application, as well as whether they are open to others. To participate in the program, it is recommended (not required) that students have a cumulative 3.5 GPA.

Program Requirements:

–          3 credits of GPGN 350: Science and Communication Skills (a research methods/communications course that students can take before committing to this Honors program)

–          6 credits of honors courses specified by the student’s advisor (will be graduate-level courses or honors independent study courses in CS); these courses count as CSCI 400-level electives in the CS degree program

–          6 credits of honors thesis (taken over two semesters); counts as CSCI 400-level electives in the CS degree program

–          Completion of an honors thesis (including a formal proposal and defense)

–          Presentation of a research poster at the department’s annual C-MAPP Award Event (in January) and the Undergraduate Research Fair (in April)

–          NOTE: students can participate in this program without taking extra classes

Program Benefits:

–          Receive honors distinction on transcripts and distinction at graduation

–          Opportunity to work closely with a faculty member and his/her research team

–          Opportunity for extra connections (e.g., meet with department’s industrial partners)

–          Opportunity to attend international research conferences via travel scholarship

–          Opportunity for summer research experience at Mines or other collaborating universities

–          Invitation to special events for honor students (e.g., seminars, professional development)

–          Stronger application to graduate school via an amplified research experience

–          Increased visibility to be awarded graduate research assistantship

Program Application (due by April 3rd):

Write a short essay that details your motivation to participate in the honors program. In the essay, specify which posted research projects are of interest. Submit your application to Shannon Roebuck sroebuck@mines.edu by April 3rd.

For the most up-to-date information, please consult the catalog.

 

AREA OF SPECIAL INTEREST IN COMPUTER SCIENCES

  • CSCI-262: Data Structures
  • CSCI-306: Software Engineering
  • CSCI-358: Discrete Mathematics & Algebraic Structures
  • CSCI-406: Design & Analysis of Algorithms

OR

  • CSCI-262: Data Structures
  • CSCI-306: Software Engineering
  • CSCI-341: Computer Organization
  • CSCI-442: Operating Systems

MINOR IN COMPUTER SCIENCES

  • CSCI-261: Programming Concepts
  • CSCI-262: Data Structures
  • CSCI-306: Software Engineering
  • CSCI-406: Design & Analysis of Algorithms
  • Two 400-level CSCI classes (

OR

  • CSCI-261: Programming Concepts
  • CSCI-262: Data Structures
  • CSCI-341: Computer Organization
  • CSCI-442: Operating Systems
  • Two 400-level CSCI classes (or MATH307 or EENG383)

MINOR IN COMPUTER ENGINEERING

The Computer Engineering minor combines key software and hardware concepts, such as programming skills and digital circuit design, to create hardware-software systems that are used in embedded systems. Students must take at least 18 credits from the classes below. At least 9 of which must be 300-level or above.

  • CSCI-261: Programming Concepts
  • CSCI-262: Data Structures
  • CSCI-341: Computer Organization
  • CSCI-442: Operating Systems
  • EENG-281 Intro to Electrical Circuits, Electronics and Power or EENG 282: Electrical Circuits
  • EENG-284: Digital Logic
  • EENG-383: Microcomputer Architecture
  • PHGN215/317 may be substituted for EENG281/284 with approval

*If a student is in a major that does not require CSCI261, the student must take only three of the CSCI courses.

MINOR IN DATA SCIENCE

The Data Science minor is an emerging discipline at the intersection of computer science and statistics, focusing on the extraction of knowledge from data. This minor introduces students to necessary skills in data analysis, manipulation, and storage.

  • CSCI-261: Programming Concepts
  • CSCI-262: Data Structures
  • CSCI-303: Introduction to Data Science
  • CSCI-403: Database Management
  • CSCI-470: Intro to Machine Learning
  • MATH-201: Probability and Statistics for Engineers

OR

  • CSCI-261: Programming Concepts
  • CSCI-262: Data Structures
  • CSCI-303: Introduction to Data Science
  • MATH-201: Probability and Statistics for Engineers
  • MATH-334: Intro to Probability
  • MATH-335: Intro to Mathematical Statistics

MINOR IN ROBOTICS AND INTELLIGENT SYSTEMS

The Robotics and Intelligent Systems minor focuses on the software needed to operate robots and other intelligent systems. The software processes information to achieve objectives, learn from past experience, adapt to a changing environment, and interact smoothly with people.

  • CSCI-261: Programming Concepts
  • CSCI-262: Data Structures
  • CSCI-404: Artificial Intelligence
  • CSCI-473: Human-Centered Robotics
  • MATH-201: Probability and Statistics
  • MEGN441: Introduction to Robotics

(For all courses, click on course title to go to course page)

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, privacy and information security, data science, artificial intelligence, and computer ethics. A popular procedural programming language will be learned by students and programming assignments will explore ideas in algorithm development, optimization, and data manipulation.

Prerequisite: none.
3 hours lecture; 3 semester hours.

CSCI-102 – INTRODUCTION TO COMPUTER SCIENCE – LAB (I, II)

This course is a 1-credit hour optional lab course for CSCI 101 that offers an opportunity for new programmers to learn the Python programming language. Python is a powerful interpreted programming language with a simple syntax and a large set of libraries. While Python is an easy language for beginner programmers to learn, it is a language that is widely used in many scientific areas (e.g., data science). This lab course will introduce students to basic programming concepts: conditionals, loops, lists, strings, file input/output, functions, and objects. Take this course with CSCI 101 to either create a 4-credit hour distributed science elective or gain more experience with algorithmic design/programming in Python.

Prerequisite: none.
1 hour lecture;1 semester hour.

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.

Co-requisites: MATH213, PHGN200.
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
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 instructor.
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 (i, 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
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. Repeatable.
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 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 intense course.

CSCI-398 – SPECIAL TOPICS (I, II, S)

Selected topics chosen from special interests of instructor and students.

Prerequisite: Consent of instructor.
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. No SQL 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, CSCI358, and MATH201
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), and (MATH300 or MATH/CSCI358).
3 hours lecture; 3 semester hours.

CSCI-410 – ELEMENTS OF COMPUTING SYSTEMS (Infrequent)

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 INTERFACES (I)

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: CSCI262.
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, (MATH323 or MATH201), and CSCI274
3 hours lecture; 3 semester hours

CSCI-437 – INTRODUCTION TO COMPUTER VISION (I)

Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques.

Prerequisite:  MATH201 or EENG311, MATH332, CSCI261, Senior level standing.
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: CSCI 262 with a grade of C- or higher, CSCI341.
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 and MATH332.
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, CSCI274, and CSCI341.
3 hours lecture; 3 semester hours.

CSCI-443 – ADV PROGRAMMING CONCEPTS USING JAVA (I, 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: 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: 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; 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: CSCI 262; Co-req: CSCI403
3 hours lecture, 3 semester hours.

CSCI-447 – SCIENTIFIC VISUALIZATION (I)

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, CSCI262, and MATH441.
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 with a grade of C- or higher.
3 hours lecture, 3 semester hours; Repeatable if taught on a different platform (e.g. Android vs. iPhone) up to 6 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, MATH332.
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: CSCI262 and CSCI274.
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: CSCI262, CSCI358 and (MATH334 or MATH335 or MATH201)
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.

CSCI-477 – ELEMENTS OF GAMES AND GAME DEVELOPMENT

This course provides an overview of computer and video game development along with practical game projects designed to introduce the student to the computer entertainment industry. Topics will include the nature of games, the game player, game play, game design, game mechanics, story and character, game worlds, interface and the game development process. Students will be required to develop code both in C++ and with the use of a game engine.

Prerequisite: CSCI 262
3 hrs lecture; 3 semester hours.

CSCI-480 – COMPUTER SCIENCE HONORS THESIS (I, II)

Prerequisite: CSCI 306
3 hours research; 3 semester hours. Repeatable for credit up to 6 semester hours.

CSCI-498 – SPECIAL TOPICS (I, II)

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-499 – INDEPENDENT STUDY (I, II)

Individual research or special problem projects supervised by a faculty member, 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-6 credit hours. Repeatable for credit.