# Course Learning Outcomes

- CSC 105: Computing Competencies for College and the Workplace
**LAST DATE OF AMENDMENT: 08/20/2014**At the end of this course, the student should be able to:

- Explain how information is stored, accessed, and represented in computers. [IL1].
- Be fluent in the language of technology and be able to discuss the state of past, current and emerging technologies. [IL1].
- Assess the appropriateness of various technological tools to apply to a given problem. [IL1].
- Discuss computer applications in the context of how and when they are best applied. [IL1].
- Understand a variety of Web-based sources for accessing information including various methods of Internet searching, communications, commercial transactions and utilities. [IL2], [IL3].
- Discuss basic Internet security and privacy issues. [IL2], [IL5].
- Understand how databases are created and used. [IL2], [IL4].
- Understand and demonstrate appropriate uses of technology including basic proficiency, decision-making, and information evaluation. [IL3], [IL4], [IL5].
- Demonstrate appropriate research strategies as applied to a specific task. [IL3].
- Demonstrate proficiency using computer applications to organize and disseminate information related to a given task. [IL4].
- Develop an awareness of some of the social and ethical issues raised by computers and technology. [IL4], [IL5].

- CSC 112: Introduction to Computer Programming (for non-majors)
**LAST DATE OF AMENDMENT: 03/31/2017 (addition of SLO 6 and 7)**At the end of this course, the student should be able to:

- Students study and then apply the basic elements of computer programming, including variables, data representation, mathematical and logical expressions, predicates, conditionals, loops, and functions, and object-oriented modeling (QRE 1, Modeling TTC 2).
- Students study, interpret, create, and solve various problems, from real-world domains (e.g., finance, biology, physics, chemistry, health care), while writing computer programs that express and solve these problems (QRE 1, Modeling TTC 1).
- Students study and practice the construction of algorithms to solve problems and implement these algorithms in a particular programming language (QRE 2, Modeling TTC 3).
- Students study and complete the process of the software life-cycle while learning to evaluate, test, and revise computer programs (QRE 2).
- Students gain programming experience and knowledge by subdividing problems, devising solutions, and independently implementing their own solutions to these problems in software using a particular programming language (QRE 3, Modeling TTC 3).

- CSC 131: Introduction to Computer Science
**LAST DATE OF AMENDMENT: 09/16/2013 (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- Students demonstrate an understanding of basic programming concepts including data types, variables, modularity, parameters, conditional statements, iteration, and arrays.
- Students demonstrate program development techniques to describe and understand the problem statement, think through input/process/output, leading to problem representation and finally coding.
- Students demonstrate the ability to use program control structures (i.e., iteration, conditionals).
- Students develop and use algorithms to solve a variety of problems, for instance those related to array processing, statistical calculations, image and audio processing, and text processing.
- Students practice modular programming by developing, debugging and integrating modules into a larger program.
- Students demonstrate the ability to use programming language specific software libraries.
- Students demonstrate the ability to use basic file input and output.
- Students demonstrate the ability to use software development tools from command line compile and run commands to an integrated development environment.

- CSC 133: Discrete Mathematical Structures
**LAST DATE OF AMENDMENT: 09/11/2009 (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- Students develop knowledge of and the capability to use logical forms, valid arguments, direct and indirect proofs, and mathematical induction.
- Students develop knowledge of set theory, Boolean algebra, relations, and functions.
- Students develop knowledge in the representation of problems in the form of graphs and trees.
- Students develop the ability to perform counting and probability calculations on sets.
- Students develop the ability to express these concepts and ideas through correct application of standard notation and symbols.

- CSC 220: 3D Computer Graphics Tools and Literacy
**LAST DATE OF AMENDMENT: 09/20/2014**At the end of this course, the student should be able to:

- Demonstrate the ability to critically analyze, appreciate, and make cogent judgments regarding form, lighting, shading, composition, and other visual elements.
- Demonstrate an understanding of visual concepts, their development, and their application for creating works with computer graphics tools.
- Demonstrate an understanding and appreciation of the significance of major historical, cultural, and technological developments for the medium of computer graphics, as well as its importance to modern visual art and communication.
- Demonstrate knowledge of the importance of the medium of computer graphics as a tool for expression, communication, and visualization of meaningful ideas.
- Students gain experience in presenting, discussing, and critiquing visual works.
- Students gain the artistic and technical knowledge necessary to create their own computer graphics works.

- CSC 231: Introduction to Data Structures
**LAST DATE OF AMENDMENT: 08/16/2014 (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- Students develop knowledge of basic data structures for storage and retrieval of ordered or unordered data. Data structures include: arrays, linked lists, binary trees, heaps, and hash tables.
- Students develop knowledge of applications of data structures including the ability to implement algorithms for the creation, insertion, deletion, searching, and sorting of each data structure.
- Students learn to analyze and compare algorithms for efficiency using Big-O notation.
- Students implement projects requiring the implementation of the above data structures.

- CSC 242: Computer Organization
**LAST DATE OF AMENDMENT: 09/18/2009 (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- Students develop knowledge and understanding between hardware/middleware and frameworks for high level programming languages.
- Students develop knowledge of combinational and sequential logic circuits.
- Students learn how modern computers are constructed from basic logic gates and sequential elements.
- Students learn the major components of a modern processor, ALU, Control Unit and Memory.
- Students learn how to create and use processor specific assembly language.

- CSC 315: Application Development for Mobile Devices
**LAST DATE OF AMENDMENT: 09/22/2014**At the end of this course, the student should be able to:

- Students learn aspects of a mobile platform language and development environment.
- Students refine understanding and application of object-oriented design principles on a larger scale than previously used.
- Students learn to navigate and apply classes and methods from a large software framework for Mobile-centric activities such as multimedia, networking, and location-based services.
- Students gain understanding of limitations and capabilities of current mobile devices.
- Students gain experience in designing mobile-device interfaces.
- Students gain experience in mobile application design, programming, and implementation.

- CSC 320: Computer Animation
**LAST DATE OF AMENDMENT: 09/18/2009 (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- Students gain understanding in mathematical, algorithmic, and conceptual techniques related to animating computer graphics models and environments.
- Students develop the ability to model and rig objects and characters in 3-D using constraints, expressions, and scripting in computer animation software.
- Students learn aspects of the topology of polygon, NURBs, and subdivision-surface modeling that relate to deformations used in animation.
- Students understand and apply concepts of narrative structure and animation technique.
- Students model, rig, shade, and animated characters completely of their own creation, presenting their work for class critique.
- Students work together as a large, coordinated group to complete a fully realized animated short film project from concept through to post-production and screening.
- Students learn aspects of digital production and workflow as applied in current industry.

- CSC 331: Object-Oriented Programming and Design
**LAST DATE OF AMENDMENT: 08/16/2014 (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- Students develop their understanding of basic object-oriented concepts like classes, methods, and objects and refine their knowledge one and two-dimensional arrays, and basic program control.
- Students develop an understanding of more advanced object-oriented concepts (e.g., interfaces, polymorphism, inheritance, user interfaces, event handling, file I/O, exceptions, encapsulation, cohesion, coupling).
- Students develop the ability to recognize and apply object-oriented approaches to analysis and design of algorithms.
- Students learn to work in small teams (2-3 students) to develop a sizable project.
- Students learn to present their work in front of their peers.
- Students develop skills in documenting their code using a tool such as javadoc.
- Students learn to use software development tools like Eclipse and software development processes like refactoring.

- CSC 340: Scientific Computing
**LAST DATE OF AMENDMENT: 03/31/2017**At the end of this course, the student should be able to:

- Students develop knowledge of computer data representation and its relationship to computational error and error propagation.
- Students develop a knowledge of vector and matrix operations (e.g., addition, subtraction, transpose, multiplication, inverse).
- Students learn how to find and use eigenvectors and eigenvalues and students implement programs to find these.
- Students implement and learn to use programs to find roots for functions.
- Students implement and learn to use programs to fit data using both linear and nonlinear functions.
- Students develop a knowledge of algorithm and implementation alternatives that enables them to choose appropriately.
- Students develop skills in writing technical reports that describe findings that arise from application of software that they develop.
- Students demonstrate knowledge from two or more STEM disciplines.
- Students apply STEM problem solving methodologies, such as the scientific method, the engineering design process, or modeling, to real-world problems.

- CSC 342: Operating Systems
**LAST DATE OF AMENDMENT: 08/27/2009**At the end of this course, the student should be able to:

- Students develop the ability to implement algorithms using the C language.
- Students develop knowledge of various concepts and issues pertaining to operating system internals.
- Students gain knowledge of solutions and algorithms developed by the computer science community to address issue of operating systems.
- Students develop knowledge of computer data representation used by these algorithms.
- Students work in teams to implement some of the algorithms used by operating systems.
- Students gain knowledge of the methods used by real operating systems such as Windows, Linux, Unix, and Mac operating systems.

- CSC 344: Computer Networks
**LAST DATE OF AMENDMENT: 02/17/2010**At the end of this course, the student should be able to:

- Students gain knowledge of the fundamental concepts and principles of computer networks.
- Students learn the operational details of numerous networking protocols including: TCP, UDP, IP, Ethernet, ARP, DNS, DHCP, ICMP, SMTP, and HTTP.
- Students gain hands-on experience with protocols and networking concepts by implementing algorithms and protocols in a computer network laboratory.
- Students gain knowledge of the issues of network security.
- Students implement application programs that require the use of socket programming.

- CSC 360: Formal Languages and Computability
**LAST DATE OF AMENDMENT: 09/04/2009**At the end of this course, the student should be able to:

- Students develop knowledge of the mathematical foundations of computer science including set theory, relations, functions, recursion, and mathematical induction.
- Students develop knowledge of languages and the ability to express regular languages using regular sets, regular expressions, and context-free grammars.
- Students learn how to perform transformations of context-free grammars to normal forms.
- Students develop knowledge of and an ability to create finite state automata that can accept regular languages. Further students, can remove non-determinism and produce minimal deterministic finite automata.
- Students develop knowledge of and an ability to create pushdown automata that can accept context-free languages.
- Students can determine whether a given language is regular, context-free, or neither by application of closure properties and the Pumping Lemmas.
- Students can effectively communicate the concepts of this course by employing acceptable standard nomenclature and symbols of mathematics, proofs, sets, relations, functions, and graph theory.

- CSC 370: Computer Graphics
**LAST DATE OF AMENDMENT: 07/01/2010**At the end of this course, the student should be able to:

- Students gain understanding of the representation and generation of images using computers.
- Students learn and practice mathematics required for representation of graphic primitives in 2D and 3D with transformations.
- Students learn and implement algorithms for graphical representations and transformations.
- Students gain understanding of and experience using a modern graphics pipeline.
- Students gain experience programming 2D and 3D graphical solutions using graphical APIs such as OpenGL.
- Students learn mathematics and algorithms for lighting and shading of graphical objects.
- Students complete software projects related to graphics by synthesizing and combining ideas from material covered.

- CSC 380: Design and Analysis of Algorithms
**LAST DATE OF AMENDMENT: xx/xx/xxxx (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to:

- CSC 385: Professional and Ethical Issues in Computer Science
**LAST DATE OF AMENDMENT: 06/02/2017**At the end of this course, the student should be able to:

- Identify ethical issues as they impact computer science and related disciplines. [IL1] [IL3] [WI2]
- Differentiate between the main ethical theories and be able to use the ethical theories in evaluating the ethical issues impacting computer science and related disciplines. [IL2] [WI1] [WI2]
- Discuss ethical issues in writing, using appropriate reference to the established Code of Ethics of the professional society relevant to that student’s field (ACM, IEEE, etc), and apply professional codes of ethics to analyze and resolve ethical questions. [IL4] [WI1] [WI2]
- Demonstrate the ability to write within the computer science discipline including writing one or more research papers that demonstrate the student’s grasp of ethical issues, display a clear understanding of how the ideas of other persons may be properly cited and used in written documents, and illustrate use of popular formats for presenting published papers in computer science. [WI1] [WI2]
- Prepare and present information on a technical topic in a professional manner. [IL4]
- Identify and locate appropriate sources of information to support decisions and written ideas. [IL1] [IL3] [IL4] [WI1]
- Analyze and evaluate arguments using rules of logic and be able to formulate effective arguments based on sound premises. [IL3] [WI2]

- CSC 415: Artificial Intelligence
**LAST DATE OF AMENDMENT: 02/01/2010**At the end of this course, the student should be able to:

- Students develop knowledge of representational issues and their relationship to applications of artificial intelligence.
- Students learn and implement search methods, including depth-first, breadth-first, and heuristic search techniques, to find solutions for computationally intractable problems.
- Students learn to model natural processes that perform computation.
- Students implement computational paradigms that mimic natural processes.
- Students develop knowledge of algorithm and implementation alternatives that enables them to choose appropriately.
- Students develop skills in writing technical reports that describe findings that arise from application of software that they develop.

- CSC 421: Computer Gaming
**LAST DATE OF AMENDMENT: 02/12/2010**At the end of this course, the student should be able to:

- Students gain understanding in mathematical, algorithmic, and conceptual techniques related to generating, displaying, and animating meshes for 3D computer games.
- Students develop the ability to model and rig objects and characters in 3-D geared for realtime rendering and use in advanced game engines.
- Students learn aspects of object representation, scene-graph hierarchy, and algorithms related to real-time rendering of graphical objects.
- Students learn and apply mathematical concepts, including linear algebra, parametric equations, and quaternions, needed for 3D computer gaming.
- Students learn, discuss, and consider the history, development, and design of computer games as well as basic artificial intelligence and physics for games.
- Students design and code their own 2D game, creating all resources (sprites, images, sounds), modifying and expanding a C++ game engine for main control of rendering.
- Students design and code their own 3D game in small groups, creating all resources (3D models, 3D terrain, textures, character rigging and animation) necessary for it, modifying and expanding a C++ game engine for game control and rendering.

- CSC 430: Digital Visual Effects
**LAST DATE OF AMENDMENT: 02/12/2010**At the end of this course, the student should be able to:

- Students gain understanding in mathematical, algorithmic, and conceptual techniques related to representing images and sequences of images with digital technologies.
- Students develop the ability to manipulate aspects of digital images to create and composite photo-realistic, synthetic images, either through software or code.
- Students learn aspects of digital cinematography and how physical cameras, lenses, and movement relate to digital representations and how to match these virtually.
- Students learn techniques and aspects of algorithms for rendering photo-realistic imagery using computer graphics software.
- Students model, render, and composite images and videos completely of their own creation, presenting their work for class critique.
- Students work together as a large, coordinated group to complete a fully realized short film project from concept through to post-production and screening.
- Students learn aspects of digital production and workflow as applied in current industry.

- CSC 434: Programming Languages
**LAST DATE OF AMENDMENT: 08/27/2009**At the end of this course, the student should be able to:

- Students develop the ability to implement algorithms using 5 or 6 different languages.
- Students gain the confidence to learn a new programming language well enough to implement simple algorithms.
- Students learn the history of programming languages and how they were developed.
- Students develop knowledge of various concepts and issues pertaining to programming languages.
- Student gain knowledge of the implementation of programming languages.
- Students gain knowledge of the strengths and weaknesses of programming languages as well as the domains for which they are intended.

- CSC 437: Parallel Computing
**LAST DATE OF AMENDMENT: 02/01/2010**At the end of this course, the student should be able to:

- Students develop solutions and implement the solutions for scientific problems using multiple processors in a cluster.
- Students acquire knowledge in writing programs which require processes to synchronize and exchange data using Message Passing Interface (API).
- Students acquire knowledge in writing programs which require processes to spawn multiple treads that share memory on multiple core processors.
- Students learn to profile parallel programs by placing event probes and to log them for analysis and tuning of the program performance.

- CSC 442: Computer System Architecture
**LAST DATE OF AMENDMENT: 02/17/2010**At the end of this course, the student should be able to:

- Students develop knowledge of single and multi-processor organization alternatives.
- Students develop knowledge of I/O sub-system design alternatives.
- Students learn how pipelined processing is used to provide instruction level parallelism.
- Students learn to use CPU simulation as a tool to evaluate the consequences of processor architectural decisions.
- Students learn alternative strategies for multi-level and virtual memory design.
- Students develop a knowledge of architectural alternatives that enables them to choose algorithms that exploit architectural features appropriately.

- CSC 446: Grid Computing
**LAST DATE OF AMENDMENT: 02/17/2010**At the end of this course, the student should be able to:

- Students gain knowledge of the concepts of Grid computing including: job management, security, certificates and digital signatures, scheduling, web and grid services, index services, notification, and workflow management and portal tools.
- Students gain knowledge of the infrastructure and mechanics of the software that implements a Grid.
- Students implement algorithms in grid services.
- Students implement a solution to a problem that requires the use of multiply Grid resources at multiply sites.

- CSC 450: Software Engineering
**LAST DATE OF AMENDMENT: 09/22/2014**At the end of this course, the student should be able to:

- Gain experience, knowledge and skills working as individuals and as part of a team to develop quality software and present project results orally and in writing.
- Apply current theories, models, techniques and tools during problem identification and analysis, requirements specification, software design, implementation, software testing, software evolution and documentation.
- Design alternative solutions to a given problem and describe and reconcile alternate approaches taking into considerations technical and non-technical concerns.
- Develop the knowledge, skills, and professional awareness foundational to the practice of software engineers including an appreciation for the need for continuing professional development, leadership, good communication, negotiation, as well as effective work habits.
- Present technical software engineering material and defend design decisions as evidenced by artifacts created during the software development lifecycle.
- Critically analyze, evaluate and discuss in writing theories, models, techniques and tools relevant to problem identification and analysis, requirements specification, software design, implementation, software testing, software evolution and documentation as well as the ethical and societal impact of software engineering.
- Demonstrate the ability to analyze and evaluate arguments using rules of logic and display a clear understanding of how the ideas of other persons may be properly cited and used in written documents.
- Identify and locate appropriate sources of software engineering and related information to support decisions and written ideas.

- CSC 455: Database Design and Implementation
**LAST DATE OF AMENDMENT: 06/03/2015**At the end of this course, the student should be able to:

- Students understand advantages and disadvantages to using database management systems.
- Students comprehend major objectives of database design: reduced redundancy, referential integrity, and normalization.
- Students comprehend major objectives of data management: atomicity, consistency, isolation, and durability.
- Students gain experience modeling data.
- Students gain experience using multiple database products and interfaces.
- Students gain experience implementing a fully functional database system.
- Students gain experience working with a group on a substantial software development project.

- CSC 457: Compiler Construction
**LAST DATE OF AMENDMENT: 02/17/2010**At the end of this course, the student should be able to:

- Describe the process of translating a high-level program into machine code.
- List and explain the algorithms used at various phases of the compile process.
- Create and explain the data structures used at various phases of the compile process.
- Describe the process of implementing programming language constructs.
- Implement a working compiler for a small subset of a high-level language.
- Evaluate and describe the impact on performance and space of using various constructs and techniques of a given programming language.

- CSC 465: Database-Driven Web Application Development
**LAST DATE OF AMENDMENT: xx/xx/xxxx (adopted the Course Learning Outcomes)**At the end of this course, the student should be able to: