Western's Computer Science major is designed to provide students with the knowledge and skills for a career in software development, cyber security or further study in graduate school. Our graduates have jobs in software engineering, network administration, web development, database management and information security.
Western's Computer Science students can pursue the 42 credit Standard major, the 57 credit Information Security Comprehensive Emphasis, the 60 credit Software Engineering Comprehensive Emphasis or the 62 credit Scientific Computing Emphasis . The majors share a core of course work in programming fundamentals, database management, web development, algorithms, systems and software engineering. The Standard major requires a minor. The Information Security major requires additional CS course work in computer security topics. The Software Engineering major requires additional CS course work in advanced topics and has a wide range of available electives. The Scientific Computing major requires additional work in applied mathematics.
The main teaching and development languages are Python, C, C++ and Java. Course work covers programming, web development technologies, data science, database management , data structures , algorithms and software engineering. Study is focused on real-world problem solving with emphasis on modem software engineering techniques.
All Computer Science Majors require the 30-credit Computer Science Core.
All CS 200+ classes require a suitable student owned computer. Specifications are available from the MCS department.
Western also offers a 128 credit partnership program with the University of Colorado (CU) Boulder, in which a student can graduate with a B.S. degree from CU Boulder's College of Engineering & Applied Science (CEAS).
Program Goals
- Student Will Have Problem Solving Skills.
- Students Will Have Professional Viewpoints and Skills.
- Students Will Have Skills with Modern Tools & Paradigms.
- Students Will Be Agile Learners.
- Students Will Be Professionally Employable.
- Computer Science Comprehensive Major: Applied Machine Learning Emphasis
- Computer Science Comprehensive Major: Information Security Emphasis
- Computer Science Comprehensive Major: Scientific Computing Emphasis
- Computer Science Major: Software Engineering Comprehensive Emphasis
- Computer Science Major: Standard Program
- Computer Science Minor
- Computer Science, Western - University of Colorado Boulder Partnership
- Data Science Minor
- Full Stack Web Development Certificate
- Web Design and Development Minor
Capstone Course Requirement
The following course fulfills the capstone course requirement in the Computer Science Major: CS 495 Senior Project.
Computer Science Courses
A comprehensive study of the essentials of software used by professionals, emphasizing applications of spreadsheets to fundamental data organization, presentation, analysis and decision making applications.
For the complete beginner, an introduction to computer programming by writing basic animations and arcade games. Standard programming issues such as language constructs, problem solving and debugging are combined with game specific considerations such as animation, scoring, collision detection, game levels and working with multiple moving objects. The course uses industry-standard software such as Python.
An introduction to the use of computing devices and their impact on society. Topics include: how computers work, the history of computing, philosophical issues in computing, the economics of software development, intellectual property issues, privacy and security, applications of computing, legal issues, the digital divide, the role of computing in government, and computer-assisted collaboration.
An introduction to creating web pages and sites with XHTML and CSS as well as using site building software and commercial plugin capabilities. This course is designed for students without a background in computer science.
An introduction to the principles and concepts of information security and hacking. The course uses real world examples to illustrate attacks on computer systems and networks. Topics include vulnerabilities, threats and attackers, data protection and encryption and the nature of malware. Basic hacking concepts are introduced along with defensive measures and counterattacks.
An introduction to software development taught in Python. Topics include control structures, I/O, functions, strings, lists, files, other data structures and basic algorithms that use them. Emphasis is placed on good problem-solving practices, testing and debugging.
A continuation of CS 190 taught in C++. Students develop applications of increasing sophistication. Topics include control structures, I/O, functions, strings, arrays, files, objects and classes, elementary searching and sorting algorithms. Emphasis is placed on software engineering and an introduction to object-oriented programming. Prerequisite: CS 190 with a minimum grade of “C-” or score of at least 75% on the Western CS 191 entrance exam or CU Partnership status. Or instructor permission.
An introduction to the principles and practice of relational database design, implementation and manipulation. Topics include Structured Query Language (SQL), relational models, elementary database design as well as database management with a programming language such as Java. Prerequisite: CS 190 with a minimum grade of C- or instructor permission.
Special topics.
Introductory knowledge discovery using computational, statistical, and informatics methods. Topics include analysis of any data that is in digital form, including text, symbolic data or image data, and finding patterns in science, the arts, and society. Prerequisite: CS 190 with a minimum grade of “C-” and MATH 140, MATH 141, MATH 151 or an Accuplacer AAF Test score of 245 or above. Or instructor permission.
An investigation of the transmission of data and information between computer systems. Topics include simple data communications, protocols, error control, local-area networks, wide-area networks such as the Internet packet-switching networks, and several networking models. Various data communication hardware and software are also examined. Prerequisites: CS 191 with a minimum grade of C- or instructor permission.
An introduction to web site design, focusing on HTML5 and CSS for page structure and style, the embedded Java-Script language for interactivity, and a web application server language for database access. The student learns to implement the essentials of a interactive, database driven website. Prerequisite: CS 195 or instructor permission.
A continuation of CS 191 taught in C++. Students use the Standard Template Library to solve moderately difficult problems. Topics include multi-dimensional arrays, vectors, stacks, queues, hash maps, associative arrays, linked lists, trees and heaps. Emphasis is placed on object-oriented design. Prerequisite: CS 191 with a minimum grade of C- or instructor permission.
Special topics
A study of computer systems that learn. Topics include decision trees, concept learning, neural networks, reinforcement learning, linear and non-linear models, clustering, validation, feature selection, support vector machines and hidden Markov models with applications to the arts and sciences. Prerequisite: CS 190 with minimum grade of “C-”.
A project-based course focusing on medium-sized projects in a given programming language using tools and environments appropriate to the selected language. Students gain proficiency in the language by doing projects from a variety of subjects such as artificial intelligence, graphics, machine learning, compilers, and Human-Computer Interaction. This course contains individual and group work. May be repeated with a different implementation language. Prerequisite: CS 191 with a minimum grade of C- or instructor permission.
An investigation of the theory, usage, and implementation of programming languages. Emphasis is on the theoretical basis for programming languages and practical examples of their use. Basic language paradigms are developed: imperative, functional, object-oriented, and logic. Other topics include type systems and language translation. Languages studied include C, C++, Java, Lisp, Haskell, Prolog, and Python. Prerequisite: CS 280 with a minimum grade of C- or instructor permission.
A study of how hardware and operating systems work in a multiprocessing computer system. The Intel architecture including the instruction set, memory hierarchy, and exception handling are covered. The Windows and Linux operating systems functions and programming interfaces are studied to understand modern computing environments. Prerequisite: CS 191 or instructor permission.
A study of problem solving using various computational models. Three primary topics will be discussed: automata theory, computability, and decidability. Emphasis will be placed on proof techniques, automata and languages, Turing Machines, decidability, reducibility, time complexity, and complexity classes. Prerequisite(s) CS 280 with a minimum grade of C-, or instructor permission.
A presentation of the design and use of computer-graphics systems (hardware and software) and construction of two- and three-dimensional graphics. Applications of computer graphics in business, industry, education, and communications are emphasized. Prerequisite: CS 190 with a minimum grade of C- or instructor permission.
A study of client-server applications designed around the World Wide Web. Students design and implement interactive applications which provide access to centralized resources such as databases and mail servers from web browsers. Students utilize JavaScript and server-based technologies to construct web-based programs that communicate with servers. Technologies such as Ajax, XML, JSON, and commonly used JavaScript libraries are included. Prerequisite: CS 250 with a minimum grade of C- or instructor permission.
A study of system level hacking. Topics include workstation and server vulnerabilities, security and protection mechanisms. The nature of system attacks combined with standard intrusion detection systems will demonstrate the challenge of correctly preventing, diagnosing and responding to attacks. Prerequisite: CS 330 or instructor permission.
An intensive study of big data and informatics applications for digital data. Topics include text analysis using classic works and social media, numeric analysis using economic and scientific data and symbolic analysis using genomic data. Emphasis is on programming solutions to complex problems. Prerequisite: CS 220 and MATH 151 with minimum grade of C- or instructor permission.
A study of C programming in a UNIX environment. Topics include the C language, the system call interface for file I/O, process management, interprocess communication and threads, command line utilities for file system navigation, file editing, compiling, execution and scripting. Prerequisite: CS 280 with a minimum grade of C- or instructor permission.
A hands-on introduction to the theory and programming of wireless embedded systems - the Internet of Things. Topics include sensors, actuators, state machines, scheduling, wireless communications, time synchronization, localization, fault tolerance, and security related to cyber-physical systems. Prerequisite: CS 330 or CS 370 with minimum grade of C- or instructor permission.
This course is an introduction to the theory and methodology of Natural Language Processing using a wide breadth of machine learning techniques. The field of NLP focuses on giving computers the ability to understand text and spoken words. Topics include, but are not limited to, stemming, lemmatization, parts of speech tagging, parsing, machine translation, and text generation. Prerequisites: MATH 213 and CS 303 or instructor permission.
A hands-on and project-based course on startup entrepreneurship for software technologies. Students develop and test product ideas, identify market segments, develop customer personas, create minimum viable products and pitch their ideas. Prerequisites: CS 250 and CS 280 with minimum grades of C-; or instructor permission.
An advanced topic in computing, selected by the instructor from areas of computer science not usually included in the regular curriculum, conducted in a lecture, seminar or individualized format. Student involvement through presentations is emphasized. May be taken under different topics for a total of three credits. Prerequisite: CS 191 with a minimum grade of C- or instructor permission.
Special topics
The fundamental concepts of systems analysis and design are studied in the context of computerized information systems. Topics include high-level system construction tools, system design methodology, data representation languages such as XML, server-based system design, web services, system security, and system description languages such as UML. Also addressed is the human element in system design: working with users and domain experts to develop system requirements, and understanding the challenges of large scale system projects. Each student completes a number of systems design projects during the term. Prerequisite: CS 310 with a minimum grade of C- or instructor permission.
An introduction to the fundamental principles of software engineering. Formal software development techniques and high-level software tools are emphasized. Topics include object-oriented design and programming, software testing, quality and formal methods for software design. Prerequisite: CS 280 with a minimum grade of C- or instructor permission.
A continuation of study of the software lifecycle. Topics include methods and tools for the implementation, integration, testing and maintenance of large software systems, software development, test environments and quality assurance, team organization and management. Technical presentation methods and practice are emphasized. There is a significant group project. Prerequisite: CS 412 with a minimum grade of C- or instructor permission.
A hands-on introduction to Computer Vision. Key topics will include image formation, filtering, analysis of images in the frequency domain, feature detection, template matching, stereo vision, motion, and deep learning/convolutional neural networks. The course will utilize modern tools such as the OpenCV computer vision framework and the TensorFlow machine learning framework. Prerequisites: MATH 260 and CS 303 or instructor permission.
A study of how to build neural networks for real world applications. This course will cover modern neural network architectures, deep learning, and solution optimizations like pruning and quantization. Students will learn modern frameworks like TensorFlow, and ultimately deploy and test their applications on hardware such as programmable drones or embedded systems. Prerequisites: MATH 260 and CS 303 or instructor permission.
A course focused on the subfield of algorithms dedicated to solving problems related to, and involving, geometric objects. We will investigate problems and efficient solutions related to convex hulls, polygon triangulation, Voronoi diagrams, line segment intersections, terrain guarding, range searching, and more. Emphasis will be placed on time complexity and applications to real-world problems. Prerequisite(s): CS 280 with a minimum grade of C-, or instructor permission.
An introduction to mobile application development using the Android platform. Topics include development tools, the application life-cycle, interfaces, asynchronous tasks, events, data storage and services. Prerequisite: CS 280 with a minimum grade of C- or instructor permission.
A programming intensive introduction to distributed computing with attention to applications in machine learning and data analysis. Topic includes distributed sequential analysis methods, distributed Markov model-based methods, and distributed support vector machine-based methods. Prerequisite: CS 303 or CS 365 with a minimum grade of C-; or instructor permission.
Application of computer hacking principles to determine vulnerabilities in computer systems and to design preventative processes. Each stage of the attack process from reconnaissance to final objective will be used to analyze attack methods and determine the best method to detect and remediate an attack using an incident response process. Prerequisite: CS 330 or instructor permission.
A study of network and web hacking. Topics include web vulnerabilities, cryptographic tools, web security and protection mechanisms. The nature of network attacks using sample data sets combined with standard intrusion detection systems will demonstrate the challenge of correctly diagnosing and responding to attacks. Prerequisite: CS 235 and CS 330; or instructor permission.
A continuation of CS 280 taught in a language such as Python or C++. Students design and develop more complex algorithms. Topics include complexity analysis, advanced sorting and searching, graph algorithms, greedy algorithms, intractability and heuristics. Emphasis is placed on math foundations and algorithm design, testing, and efficiency. Prerequisite: CS 280 with a minimum grade of C- or instructor permission.
Students develop a comprehensive application project with a supervising faculty member. A summary paper is written or public presentation of the project is made to the CS faculty and students. Prerequisite: 18 credits of Computer Science course work, including nine upper-division credits, and instructor permission.
A series of organized meetings dealing with a topic of current interest. Offered periodically in a variety of computer-related subjects. Only three credits of this title can be applied toward a Computer Science Minor.
A hands-on and project-based course on the design and construction of sizeable software products. Topics include requirements, software architecture, professional tools for design, testing and project management. Students participate in and manage development teams. Prerequisite: CS 412 with a minimum grade of C- or instructor permission.
Special topics
Students participate in a supervised internship or field experience with a cooperating university or corporation, in the computer science field. A summary paper is written or public presentation of the field experience is made before the CS faculty and students, and a review from the supervisor is prepared. Prerequisite: 18 credits of Computer Science course work, including nine upper-division credits, and instructor permission.