Course Bulletin
Every course offered by the CIS department — with descriptions, prerequisites, and learning outcomes.
Foundation
CMPSC 100 Computational Expression
An introduction to the principles of computer science with an emphasis on creative expression through the medium of a programming language. Participating in hands-on activities that often require teamwork, students learn the computational structures needed to solve problems and produce computational artifacts which address these problems in real-world contexts. Students also learn how to organize and document a program's source code so that it effectively communicates with the intended users and maintainers. Additionally, the introduction includes an overview of the discipline of computer science and computational thinking. During a weekly laboratory session students use industry-grade technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Apply Python programming fundamentals to execute and explain computer code that implements interactive, novel solutions to a variety of computable problems.
- 2. Implement code consistent with industry-standard practices using professional-grade integrated development environments (IDEs), command-line tools, and version control systems.
- 3. Analyze and suggest revisions to existing Python language code to add functionality or repair defects.
- 4. Evaluate the practical and ethical implications of writing computer code and discuss the contexts, perceived effects, and impacts exerted on and by computer code as a cultural force or artifact.
- 5. Design, describe, and implement original projects incorporating industry-standard practices and Python language fundamentals.
CMPSC 101 Data Structures
Prerequisite: CMPSC 100 or permission of the instructor
A continuation of CMPSC 100 with an emphasis on implementing, using, and evaluating the computational structures needed to efficiently store and retrieve digital data. Participating in hands-on activities that often require teamwork, students create data structures and algorithms whose correctness and performance they study through proofs and experimentation. Students continue to refine their ability to organize and document a program's source code so that it effectively communicates with the intended users and maintainers. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. When solving a problem with a Python program, accurately describe data structures and algorithms and their inherent trade-offs.
- 2. Use data structures and algorithms to correctly and efficiently solve a problem through the use of a Python program.
- 3. Use empirical methods to characterize the performance of a Python program that uses data structures and algorithms.
- 4. Use industry-standard practices, such as testing and debugging, and professional-grade integrated development environments (IDEs), command-line tools, and version control systems to implement Python programs.
- 5. Implement Python programs and documentation that conforms to industry-standard formats and styles.
CMPSC 102 Discrete Structures
Prerequisite: CMPSC 100
An introduction to the foundations of computer science with an emphasis on understanding the abstract structures used to represent discrete objects. Participating in hands-on activities that often require teamwork, students learn the computational methods and logical principles that they need to create and manipulate discrete objects in a programming environment. Students also learn how to write, organize, and document a program's source code so that it is easily accessible to intended users of varied backgrounds. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Justify the decision to select a suitable discrete structure for use when solving a problem with a computer program.
- 2. Connect mathematical definitions, notations, and concepts of discrete structures to their computational representation by writing correct and efficient Python programs.
- 3. Use the computational constructs of the Python programming language to perform mathematical operations.
- 4. Correctly describe the properties of a given discrete structure and verify those properties through computational testing and/or mathematical proofs.
- 5. Implement, test, and evaluate a Python function that performs data analysis using one or more sets of textual, numerical, categorical, binary, or combined data.
CMPSC 104 Document Engineering
An introduction to creation of effective documents and documentation using industry-standard approaches to creating and treating "documentation as code." Participating in project-based and hands-on activities, students create purpose-driven digital writing with special attention to forms, formats, and conventions expected of contemporary technical communication. Students also gain experience with creating collaborative and ethically-consistent content working in a team-based setting. During a weekly laboratory session students employ contemporary software tools to complete technical documentation projects, reporting on their results through both written reflections and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Describe and explain processes such as software installation or design for a variety of technical and non-technical audiences ranging from inexperienced to expert.
- 2. Use professional-grade integrated development environments (IDEs), command-line tools, and version control systems to compose, edit, and deploy well-structured, web-ready documents and industry-standard documentation tools.
- 3. Build automated publishing pipelines to format, check, and ensure both the uniformity and quality of digital documents.
- 4. Identify and apply appropriate conventions of a variety of technical communities, tools, and computer languages to produce industry-consistent diagrams, summaries, and descriptions of technical topics or processes.
CMPSC 105 Data Exploration
An introduction to the methods of collecting, exploring, transforming and visualizing data for storytelling. Often participating in team-based and hands-on activities, students learn how to use web platforms and dashboards to acquire, explore and investigate data to generate summarized key data insights using visual techniques. Students also apply open-source programming language to discover patterns in the data, test hypotheses, and check assumptions using graphical representations. During a weekly laboratory session, students employ cutting-edge software tools to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Develop hypotheses based on motivating problems and/or observations and identify appropriate data to address hypotheses.
- 2. Identify and describe key elements in different types of data visualizations.
- 3. Use web-based platforms to accurately present data sets through multiple visualizations.
- 4. Use an open-source programming language to compute summary statistics and visualize key patterns in the data.
- 5. Contribute to and present structured, web-based documentation that describes data exploration steps and visualization-based conclusions.
Core
CMPSC 200 Computer Organization
Prerequisite: CMPSC 102
A study of the low-level operation of computer systems. Participating in hands-on activities that often require teamwork, students investigate how computers process instructions in modern computers as information is encoded, stored, and executed in a machine's physical structures. In addition to learning how to program in assembly and machine languages, students investigate the design and logical operation of processors and the mathematics of machine computation. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Write a step-by-step description that explains how programs written in high-level computer programming languages execute through the use of lower-level computer circuitry.
- 2. Identify the levels of the memory hierarchy and explain the implications of using the various levels to implement high-performance programs.
- 3. Develop C and Assembly language programs that use the appropriate levels of the memory hierarchy and processor registers to create performant, executable programs and arithmetic logic units.
- 4. Describe and use parallel processing techniques to increase a program's performance and efficiency.
- 5. Integrate hardware and software components using original C and Assembly language code to develop hardware-based, performant computational projects.
CMPSC 201 Programming Languages
Prerequisite: CMPSC 101 or CMPSC 102
A study of the fundamental concepts that arise in different programming language paradigms. Students learn how programming languages are designed and implemented, and how these factors affect the overall usability, performance, and effectiveness of computer software. Participating in hands-on activities that often require teamwork, students gain experience in leveraging the styles and features of programming languages to implement and evaluate correct and efficient computer software. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly identify and describe the steps in the design and implementation of a programming language.
- 2. Effectively use programming language constructs to design correct, efficient, and well-tested programs in multiple programming languages, including but not limited to Java.
- 3. Interpret and use an existing programming language grammar.
- 4. Design, implement, and evaluate a correct scanner and parser for a programming language.
- 5. Using knowledge of the general principles of programming languages, correctly implement a computer program in a heretofore unknown programming language.
CMPSC 202 Algorithm Analysis
Prerequisite: CMPSC 101 or CMPSC 102
A study of fundamental methods for designing and implementing algorithms and analyzing their efficiency. While developing expertise in select models of computation and the key mathematical and experimental approaches to studying algorithm efficiency, students investigate different types of algorithms through hands-on activities that often require teamwork. Students also learn how to determine whether a problem can be efficiently solved by an algorithm that is implemented as a computer program. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly implement both well-established and custom data structures using a programming language so as to solve a problem with a computer program.
- 2. Perform an asymptotic analysis of an algorithm to arrive at its correct worst-case time complexity class.
- 3. Conduct experiments that measure the efficiency of different combinations of programming languages, data structures, and algorithms.
- 4. Use both theoretical and experimental results to pick the data structure(s) and algorithm(s) that balance the trade-offs associated with correctly and efficiently solving a problem with a computer program.
- 5. Effectively apply algorithmic problem solving techniques like searching, sorting, and memoization to correctly and efficiently solve a problem through the use of a computer program.
CMPSC 203 Software Engineering
Prerequisite: CMPSC 101
A human-centric study of the principles used during the engineering of high-quality software systems. In addition to examining the human behaviors and social processes undergirding software development methodologies, students participate in teams tasked with designing, developing, and delivering a significant software application for a customer. During a weekly laboratory session, students use state-of-the-art software engineering, management, and communication tools to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Effectively create a solution to a domain-specific problem delivered as a maintainable software system.
- 2. Demonstrate competency in the theories, models, and practices of the project domains that require the engineering of software.
- 3. Effectively manage and predict the cost, scope, and deadline of a software engineering project.
- 4. Apply knowledge about the implementation of the Python programming language to create and use software engineering tools that support activities like testing and debugging.
- 5. Use effective oral and written communication methods to explain both the technical and product-use details of a software artifact.
CMPSC 204 Theoretical Machines
Prerequisite: CMPSC 102
A study of theoretical computer science concepts that addresses both the fundamental nature and limitations of computation and the ways in which to practically apply these insights. While using a machine-centered abstraction of computation implemented in a general-purpose programming language, students investigate what is computable and explore the categories and complexity of computational problems. Participating in hands-on activities that often require teamwork, students gain experience in the use of a programming language to characterize a problem solving strategy. During a weekly laboratory session, students use industry-grade technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Use both intuitive analysis and theoretical proof techniques to correctly distinguish between problems that are tractable, intractable, and uncomputable.
- 2. Correctly use one or more variants of the Turing machine (TM) abstraction to both describe and analyze the solution to a computational problem.
- 3. Correctly use one or more variants of the finite statement machine (FSM) abstraction to describe and analyze the solution to a computational problem.
- 4. Use a formal proof technique to correctly classify a problem according to whether or not it is in the P, NP, NP-Hard, and/or NP-Complete complexity class(es).
- 5. Apply insights from theoretical proofs concerning the limits of either program feasibility or complexity to the implementation of both correct and efficient real-world Python programs.
CMPSC 301 Data Science
Prerequisite: CMPSC 101 or CMPSC 102
A study of computational methods of data analysis with an emphasis on understanding and reflecting on the social, cultural, and political issues surrounding data and its interrogation. Participating in hands-on activities that often require teamwork, students study, design, and implement analytics software and learn how to build predictive models with foundational machine learning algorithms to extract knowledge from various sources of data. Students also investigate the biases, discriminatory views, and stereotypes that may be present during the collection and analysis of data, reflecting on the ethical implications of using the resulting machine learning techniques. During a weekly laboratory session, students use industry-grade open source statistical software to complete projects, reporting on their findings through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Apply machine learning models to data sets using standard Python and R programming language libraries.
- 2. Create and evaluate classification, regression, and classical neural network models for analytical and predictive tasks.
- 3. Design, implement, and deploy a web-based dashboard that displays real-world data visualizations and its analysis.
- 4. Describe the contemporary roles of power and difference as they relate to the knowledge derived from data sets and their analysis.
- 5. Explore and explain both in writing and orally various types of data analysis methods used in various fields and the biases that may be present during data collection, analysis, and decision making.
CMPSC 302 Web Design
Prerequisite: CMPSC 104
An introduction to the principles and applications of web design with an emphasis on understanding intercultural perspectives that arise during the design, implementation, and maintenance of responsive, modern web sites. Participating in hands-on activities that often require teamwork, students learn the computational methods needed to create websites that are useful to people from different cultures and nationalities. Students also investigate approaches to developing efficient, accessible, and aesthetically pleasing web sites that adhere to the international standards set by the World Wide Web Consortium. During a weekly laboratory session students use industry-grade web development technologies to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Apply HTML, CSS, Markdown, and basic Javascript to develop well-structured, responsive World Wide Web Consortium (W3C) standards-compliant web sites.
- 2. Evaluate and implement web accessibility measures consistent with the Web Content Accessibility Guidelines (WCAG) version 2 specification.
- 3. Design front-end user experiences using accepted web design patterns, methods, and information structures.
- 4. Identify and use strategies of successful visual rhetoric for the web.
- 5. Compare and select web technologies such as static site generators or frameworks as appropriate candidates for building web sites.
CMPSC 350 Computational Narrative
Prerequisite: CMPSC 101
A study of the craft and deployment of procedurally-generated digital narratives, placing an emphasis on using data sources and computational methods as storytelling media. Students focus on critical, close reading of professional and student works while completing a single long-form work of their own. Topics include natural language processing (NLP), procedural illustration, computational constraint, and the development of conceptual documentary works. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly describe and apply best practices of prompt engineering across a range of large language model (LLM) platforms to design successful prompts.
- 2. Evaluate texts generated by language technologies by applying contemporary and historical language, technology, and information theory.
- 3. Demonstrate and criticize systemic bias, ethical issues, and failure modes inherent in language technologies such as LLMs.
- 4. Develop software to interact with language model application programmer interfaces (APIs).
- 5. Create and justify a body of text products that leverage text-to-text, text-to-image, and other language model technologies.
CMPSC 404 Web Applications
Prerequisite: CMPSC 203 or CMPSC 302
An exploration of technologies and data relationships which power modern web applications. Participating in hands-on activities which require teamwork, students build web applications that incorporate the "full stack," including databases, application programming interfaces (APIs), and public-facing web pages or mobile applications. Students develop a broad knowledge of different development approaches, languages, and design paradigms to learn advantages and disadvantages of technologies and frameworks. During weekly laboratory sessions, students participate in iterative design processes and report progress and technical details through written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Define the structure of the web application "stack" and describe the meaning and implications of implementing a "full stack" application.
- 2. Explain the layers of the Transmission Control Protocol/Internet Protocol (TCP/IP) and describe their relationship to server-side and client-side web applications.
- 3. Develop secure, reliable application programmer interfaces (APIs) using the Representational State Transfer (REST) or Simple Object Access Protocol (SOAP) specification(s).
- 4. Model industry standard server security practices such as, but not limited to, firewall, web server, and database configuration.
- 5. Select solution-appropriate open-source software to implement a "full stack" web application project using server-side and/or client-side rendering frameworks.
CMPSC 405 Deep Learning
Prerequisite: CMPSC 301
An interrogation of foundational capabilities, challenges and consequences of deep learning algorithms. Participating in hands-on activities that often require teamwork, students master theoretical concepts to build and train neural network architectures and learn how to improve them. Leveraging insights and tools from an industry partner, students also investigate real-world cases such as speech recognition, machine translation, computer vision, and natural language processing. During a weekly laboratory session students use advanced operating systems software to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Apply concepts from calculus and linear algebra to create predictive models that use a deep neural network.
- 2. Use Python to implement and interpret a multilayer neural network that can process various sources of data.
- 3. Use an existing deep learning model in an application for predictive data analysis and communicate the results effectively in both written and oral formats.
- 4. Evaluate, optimize, and improve the performance of a deep learning model with a focus on its ethical impact.
- 5. Build, train, test, document, and deploy a new deep learning model in a software application.
CMPSC 406 Internet of Things
Prerequisite: CMPSC 200
An introduction to small-scale, purpose-built physical computational objects which embed sensors, integrate with networks, and process environmental signals. Exploring various industrial architectures, students develop devices that respond to physical stimuli and transmit data across networks to motivate additional device behavior and interactivity while considering human interaction design (HID) and "people-centered" principles that drive device design. During weekly laboratory sessions, students complete projects which focus on industry standards of data transmission and privacy in addition to optimizing device performance for real-time, high-availability applications. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Identify components of the Internet of Things (IoT) architecture and select the most appropriate IoT devices and sensors for an IoT application.
- 2. Set up the electronic circuitry needed for IoT devices, and then collect and analyze data from IoT devices.
- 3. Design, implement, test, and deploy an IoT system that is connected to cloud computing infrastructure while keeping human interaction in mind.
- 4. Select an appropriate protocol for communication between IoT devices and secure the elements of the IoT device while considering issues of privacy.
- 5. Use effective oral and written communication methods to explain the technical details of an IoT artifact.
Electives
CMPSC 300 Bioinformatics
Prerequisite: BIO 221 and FSBIO 201, or CMPSC 100
An introduction to the development and application of methods, from the computational and information sciences, for the investigation of biological phenomena. In this interdisciplinary course, students integrate computational techniques with biological knowledge to develop and use analytical tools for extracting, organizing, and interpreting information from genetic sequence data. Often participating in team-based and hands-on activities, students implement and apply useful bioinformatics algorithms. During a weekly laboratory session students employ cutting-edge software tools and programming environments to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly connect biological foundations, including the Central Dogma of Biology, DNA, genes, genomes, and gene expression, to computational study and bioinformatics.
- 2. Automatically collect and analyze biological data using a Python program.
- 3. Use industry-standard, web-based and computational library-based tools to process, explore, examine, and analyze genetic data.
- 4. Apply industry-standard bioinformatics algorithms to tasks such as sequence alignment, gene assembly, and protein modeling, thereby gaining insights from biological data.
- 5. Communicate both technical and biological details of a bioinformatics artifact through effective oral and written communication methods.
CMPSC 303 Artificial Intelligence
Prerequisite: CMPSC 101 or CMPSC 102
A study of the design and implementation of intelligent computer systems that can learn, plan, and solve problems autonomously. In addition to examining techniques for designing intelligent software agents, students investigate the social, political, and ethical implications of intelligent systems. Through hands-on activities that often require team-work, students explore the application of artificial intelligence methods in areas such as computer vision, natural language processing, and video game development. During a weekly laboratory session students use industry-grade technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly implement an intelligent agent and accurately describe its properties.
- 2. Correctly apply search algorithms to solve an agent-based problem.
- 3. Design, implement, and assess an intelligent system for various artificial intelligence applications.
- 4. Correctly explain and justify how a problem could be solved through the use of supervised, unsupervised, and/or reinforcement machine learning algorithms.
- 5. Evaluate intelligent systems while considering their social, political, and ethical implications and communicate their outcomes in both written and oral forms.
CMPSC 304 Robotic Agents
Prerequisite: CMPSC 101 or CMPSC 102
A study of the design and implementation of autonomous robotic systems that individually and cooperatively complete complex tasks. In addition to examining techniques for robot navigation, coordination, and manipulation, students learn how to apply the field's technologies to address the challenges facing local and global communities. Participating in hands-on activities that often require teamwork, students develop and evaluate several autonomous robot systems, while also reflecting on the civic issues surrounding the use of these systems. During a weekly laboratory session students use industry-grade technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Identify components of the robot and associate each part with its task in a complete robotic system.
- 2. Design, implement, and test robotic applications for a wheeled, arm, and aerial robots.
- 3. Demonstrate the use of a robot operating system (ROS) in simulation and in wheeled robots.
- 4. Demonstrate actuating, sensing, locomotion, navigation, manipulation, and learning capabilities of robotic systems.
- 5. Describe the ethical and social impact of robotics on public problems and participate in civic engagement activities with robots, while additionally reflecting on the nuances of public problems.
CMPSC 305 Database Systems
Prerequisite: CMPSC 101
A study of the application and evaluation of database management systems. Participating in hands-on activities that often require teamwork, students design, implement, and deploy database systems that store interdisciplinary data sets. In addition to learning how to develop and assess interfaces for databases, students study the efficiency and effectiveness of alternative data management systems. During a weekly laboratory session students use industry-grade technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly describe object-oriented data storage, low-level data storage, transactions and concurrency control, data warehousing and data mining.
- 2. Design and implement SQL databases and formulate advanced structured queries to extract knowledge from databases.
- 3. Implement Python programs to access databases, define and execute queries, and produce web-based visualizations of the data and query results.
- 4. Create and/or use post-relational database management systems and contrast them with relational database systems.
- 5. Clearly and persuasively communicate the results of database inquiries and critically examine and reflect on their ethical implications.
CMPSC 400 Operating Systems
Prerequisite: CMPSC 200 or CMPSC 201
A study of the principles used in the design, implementation, and evaluation of operating systems. Participating in hands-on activities that often require teamwork, students create and assess components of an operating system that runs on modern computer hardware. Leveraging insights and tools from an industry partner, students also investigate the resource management, process scheduling, and file systems used in representative operating systems. During a weekly laboratory session students use advanced operating systems software to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly describe and use the process management and CPU scheduling modules in an operating system.
- 2. Design, implement, and/or use a correct memory management module that can allocate and deallocate objects to a computer's memory.
- 3. Correctly implement and, in a step-by-step fashion, describe the behavior of concurrent and/or parallel computer programs.
- 4. Design and implement correct computer programs that use persistent storage modules, like block storage devices and file systems, to store varied types of data.
- 5. Create and use benchmarking tools to experimentally characterize the performance and correctness of operating system modules and the software programs that use them.
CMPSC 403 Computer Security
Prerequisite: CMPSC 200 or CMPSC 201
A study of the principles used in the design, implementation, and evaluation of secure computer hardware and software. Participating in hands-on activities that often require teamwork, students assess the trade-offs in security policies and create software with efficient and effective security mechanisms. Leveraging insights and tools from an industry partner, students also investigate techniques for providing access control, secure channels, and intrusion detection. During a weekly laboratory session students use advanced security software to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Correctly identify the threats to an application's security and describe the suitable mitigation(s) for addressing the threats.
- 2. Correctly apply security principles, memory management strategies, architecture and algorithmic principles, and cryptography in the modeling and implementation of security solutions.
- 3. Correctly use hardware and/or software tools to diagnose and fix web and network security risks.
- 4. Evaluate the effectiveness of various hardware and software systems with respect to computer security.
- 5. Design, implement, document, test, and explain secure software with emphasis on social, political, legal, and ethical vulnerabilities.
CMPSC 529 Internship: Computer Science
Prerequisite: Permission of instructor
Academic study completed in support of an internship experience with a partner institution. An Allegheny faculty member assigns and evaluates the academic work done by the student. May be repeated for credit. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
CMPSC 590 Independent Study
Prerequisite: Permission of instructor
Individual research under the guidance of a member of the Department's faculty. A project proposal must be submitted to the Department and approved in the semester prior to the semester in which the student intends to register for the course. May be repeated for credit. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Project & Thesis
CMPSC 580 Junior Seminar
Prerequisite: Permission of instructor
An investigation of select topics in computer and information science that prepares students for the completion of a senior project with the purpose of identifying knowledge gaps in the discipline. Students learn how to read scholarly papers, state and motivate research questions, create a software prototype or develop scholarly artifacts to address their findings, and collect and organize evidence for evaluating the outcome of their project. During a weekly laboratory session students use industry-grade technology to gain practical skills in technical writing, the presentation of technical concepts, and the production of an artifact. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Learning Outcomes
- 1. Illustrate a component of a viable and appropriate open-source research project idea.
- 2. Identify appropriate sources to motivate the research idea and determine research project objectives.
- 3. Demonstrate feasibility of a research idea through an application of existing computational resources.
- 4. Describe a research idea, its motivation, goals, and anticipated outcomes in writing.
- 5. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews, and formal presentations.
CMPSC 600 Senior Thesis I
Prerequisite: CMPSC 580
Independent research in computer science culminating in the development of prototype or early draft of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate proposal for an independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and two chapters of a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews and formal presentations.
- 4. Produce and document a working prototype of computational artifact.
- 5. Evaluate the produced prototype and reflect on theoretical, practical, ethical and social impact of the proposed artifact.
- 6. Produce an original project that includes integration of theory and practice or software and hardware.
CMPSC 610 Senior Thesis II
Prerequisite: CMPSC 600
Continuation of independent research in computer science culminating in the development of and release of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews, and formal presentations.
- 4. Produce and document a working and completed computational artifact.
- 5. Evaluate the produced artifact and reflect on theoretical, practical, ethical and social impact of the developed artifact.
- 6. Produce an original project that includes integration of theory and practice or software and hardware.
DS 600 Senior Thesis I
Prerequisite: CMPSC 580
Independent research in data science culminating in the development of a prototype or early draft of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate proposal for an independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and two chapters of a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews and formal presentations.
- 4. Produce and document a working prototype of a data-oriented artifact.
- 5. Evaluate the produced prototype and reflect on theoretical, practical, ethical and social impact of the proposed artifact.
- 6. Produce an original project that uses a large, complex data set to create a web dashboard or extend an existing data science framework via analysis.
DS 610 Senior Thesis II
Prerequisite: DS 600
Continuation of independent research in data science culminating in the development of and release of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews and formal presentations.
- 4. Produce and document a working and completed data-oriented artifact.
- 5. Evaluate the produced artifact and reflect on theoretical, practical, ethical and social impact of the developed artifact.
- 6. Produce an original project that uses a large, complex data set to create a web dashboard or extend an existing data science framework via analysis.
INFM 600 Senior Project I
Prerequisite: CMPSC 580 or other approved junior seminar and permission of the instructor
Independent research in informatics culminating in the development of a prototype or early draft of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate proposal for an independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and two chapters of a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews and formal presentations.
- 4. Produce and document a working prototype of an information-informed artifact.
- 5. Evaluate the produced prototype and reflect on theoretical, practical, ethical and social impact of the proposed artifact.
- 6. Produce an original project that integrates multiple disciplines and provides critical engagement of impact of technology on various communities.
INFM 610 Senior Project II
Prerequisite: INFM 600 and permission of instructor
Continuation of independent research in informatics culminating in the development of and release of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews and formal presentations.
- 4. Produce and document a working and completed information-informed artifact.
- 5. Evaluate the produced artifact and reflect on theoretical, practical, ethical and social impact of the developed artifact.
- 6. Produce an original project that integrates multiple disciplines and provides critical engagement of impact of technology on various communities.
SE 600 Senior Thesis I
Prerequisite: CMPSC 580
Independent research in software engineering culminating in the development of a prototype or early draft of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate proposal for an independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and two chapters of a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews, and formal presentations.
- 4. Produce and document a working prototype of an engineered software artifact.
- 5. Evaluate the produced prototype and reflect on theoretical, practical, ethical, and social impact of the produced artifact.
- 6. Produce an original software project that is working, well-tested, and deployed into production use.
SE 610 Senior Thesis II
Prerequisite: SE 600
Continuation of independent research in software engineering culminating in the development of and release of a computational artifact. Must be taken on the letter-grade basis.
Learning Outcomes
- 1. Develop a viable and appropriate independent and open-source research project.
- 2. Describe a research process, its methods, and outcomes in writing in the form of an incremental research notebook and a formal thesis document.
- 3. Present and communicate complex ideas in a variety of media through both informal discussions, peer reviews and formal presentations.
- 4. Produce and document a working, completed, engineered software artifact.
- 5. Evaluate the produced prototype and reflect on theoretical, practical, ethical, and social impact of the produced artifact.
- 6. Produce an original software project that is working, well-tested, and deployed into production use.