Computing Curricula

UVic computer science
pan
Posts: 63111
Joined: Mon Sep 11, 2006 10:23 am

Re: Computing Curricula

Post by pan »

https://csed.acm.org/wp-content/uploads ... -Gamma.pdf
Networking and Communication (NC)

Preamble

Networking and communication play a central role in interconnected computer systems that are
transforming the daily lives of billions of people. The public Internet provides connectivity for
networked applications that serve ever-increasing numbers of individuals and organizations
around the world. Complementing the public sector, major proprietary networks leverage their
global footprints to support cost-effective distributed computing, storage, and content delivery.
Advances in satellite networks expand connectivity to rural areas. Device-to-device
communication underlies the emerging Internet of things.

This knowledge area deals with key concepts in networking and communication, as well as their
representative instantiations in the Internet and other computer networks. Beside the basic
principles of switching and layering, the area at its core provides knowledge on naming,
addressing, reliability, error control, flow control, congestion control, domain hierarchy, routing,
forwarding, modulation, encoding, framing, and access control. The area also covers knowledge
units in network security and mobility, such as security threats, countermeasures, device-todevice communication, and multihop wireless networking. In addition to the fundamental
principles, the area includes their specific realization in the Internet as well as hands-on skills in
implementation of networking and communication concepts. Finally, the area comprises emerging
topics such as network virtualization and quantum networking.

As the main learning outcome, learners develop a thorough understanding of the role and
operation of networking and communication in networked computer systems. They learn how
network structure and communication protocols affect behavior of distributed applications. The
area educates on not only key principles but also their specific instantiations in the Internet and
equips the student with hands-on implementation skills. While computer-system, networking, and
communication technologies are advancing at a fast pace, the gained fundamental knowledge
enables the student to readily apply the concepts in new technological settings.
https://csed.acm.org/wp-content/uploads ... -Gamma.pdf
Operating Systems (OS)

Preamble

Operating system is the collection of services needed to safely interface the hardware with
applications. Core topics focus on the mechanisms and policies needed to virtualize
computation, memory, and I/O. Overarching themes that are reused at many levels in
computer systems are well illustrated in operating systems (e.g. polling vs interrupts, caching,
flexibility costs overhead, similar scheduling approaches to processes, page replacement, etc.).
OS should focus on how those concepts apply in other areas of CS - trust boundaries,
concurrency, persistence, safe extensibility.

Operating systems remains an important Computer Science Knowledge Area in spite of how OS
functions may be redistributed into computer architecture or specialized platforms. A CS
student needs to have a clear mental model of how a pipelined instruction executes to how data
scope impacts memory location. Students can apply basic OS knowledge to domain-specific
architectures (machine learning with GPUs or other parallelized systems, mobile devices,
embedded systems, etc.). Since all software must leverage operating systems services,
students can reason about the efficiency, required overhead and the tradeoffs inherent to any
application or code implementation. The study of basic OS algorithms and approaches provides
a context against which students can evaluate more advanced methods. Without an
understanding of sandboxing, how programs are loaded into processes, and execution,
students are at a disadvantage when understanding or evaluating vulnerabilities to vectors of
attack.
pan
Posts: 63111
Joined: Mon Sep 11, 2006 10:23 am

Re: Computing Curricula

Post by pan »

https://csed.acm.org/wp-content/uploads ... Report.pdf

Professional dispositions – the whole person view
Professional dispositions are essential for not just succeeding in the workplace but also thriving as a
professional over the long run. The dispositions identified by multiple CS2023 knowledge areas as
essential for computer science graduates include:
Adaptable, as the discipline is continually evolving;
Collaborative, as most real-world applications are team efforts;
Inventive in order to devise new solutions and apply existing solutions to new contexts;
Meticulous to ensure the correctness and completeness of solutions;
Persistent, since computational problem-solving is an iterative process;
Proactive to anticipate issues pertaining to usability, security, ethics, etc.;
Responsible in all aspects of a solution including design, implementation, and maintenance;
Self-directed, as commitment to life-long learning is required due to rapid evolution of the
discipline.
These characteristics change in importance over the career of a graduate: some characteristics are
more important during early career while others are essential for success over the long run [4].
Moreover, given the dynamic nature of computer science, the desirable characteristics of computer
science graduates will also continue to evolve.

pan
Posts: 63111
Joined: Mon Sep 11, 2006 10:23 am

Re: Computing Curricula

Post by pan »

Code: Select all

Number	Source	Learning outcome
1	CS1	Design, implement, test, and debug a solution based on an abstract description of a problem.
2	CS1	Develop programs that use fundamental programming constructs (variables, types, expressions, assignment, basic I/O, conditional and iterative control structures, functions and parameter passing, structured decomposition)
3	CS1	Apply rigorous testing to validate the correctness of an implementation.
4	CS1	Describe the behaviour of a program through an examination of its source code.
5	CS1	Develop programs that use the different structured or compound data types provided in the language.
6	CS1	Describe the properties of good software design.
7	CS1	Describe the responsibility of a single programmer when working on a larger-scale project as part of a team.
8	CS1	Explain code of conduct and intellectual property relevant to programmers and software development.
9	Ethics	Articulate how computing technologes affect and must be designed considering social context, including social interactions, diversity of population including under-represented populations and the disabled, cultures, identities, and communities, as well as the role and impact of technology in democracy
10	Ethics	Analyze an argument to identify premises and conclusion and analyze (and avoid) basic logical fallacies in an argument.
11	Ethics	Evaluate how and why ethics is so important in computing and how it relates to cultural norms, values, and law.
12	Ethics	Identify, evaluate and address ethical issues that arise in software design, development practices, and software deployment, including software correctness, reliability and safety
13	Ethics	Describe, compare and select appropriate software license for a given project.
14	Ethics	Justify legal and ethical uses of copyrighted materials, including considering fair use and the many forms of plagiarism.
15	Ethics	Produce and evaluate concise and accurate technical documents following well-defined standards and formats.
16	Ethics	Develop and deliver an audience-aware, accessible, and organized formal presentation.
17	Ethics	Effectively, appropriately and collegially work and communicate as a member of a team, including applying conflict resolution techniques, effective communication, and inclusive and respectful interactions that value diversity of ideas.
18	Ethics	Understand the relevance and impact of computing history on recent events, present context, and possible future outcomes. Ideally from more than one cultural perspective.
19	Ethics	Define and distinguish equity, equality, diversity, inclusion, and accessibility.
20	Ethics	Describe the impact of power and privilege in the computing profession as it relates to culture, industry, products, and society, and factors that contribute to inequitable access, engagement, and achievement in computer science among marginalized groups.
21	HCI	Identify the different users of a design and their different needs and wants, both in terms of functionality and in terms of experience (functional and non-functional requirements)
22	HCI	Motivate, identify and argue for the value of considering human factors and knowledge about humans in the design of good interfaces,  considering the potential impacts of a design on society and relevant communities to address concerns such as sustainability, inclusivity, safety, security, privacy, harm, and disparate impact, and challenging developer's asumptions.
23	CS2	Develop programs that create simple classes and instantiate objects of those classes.
24	CS2	Describe the importance of abstraction and encapsulation in the design of programs.
25	CS2	Use a modern IDE to trace, step-through, and debug a program.
26	CS2	Recognize, analyze, and apply recursion to solve a problem.
27	CS2	Write reference-based and array-based implementations of basic algorithms and data structures
28	CS2	Describe the tradeoffs associated with a particular choice of data structure by reasoning about its efficiency in relation to a problem domain.
29	CS2	Describe the basic building blocks of computers and their role in the historical development of computer architecture.
30	Theory1	Given requirements for a real-world application, determine and evaluate data structures and algorithms in terms of suitability and impact on the environment and society.
31	Theory1	Define and give an example of an iterative algorithm, a recursive algorithm, as well as algorithm paradigms such as Brute-Force and Divide-and-Conquer.
32	Theory1	Define and use Big O notation (including Omega and Theta) to analyse time and space complexity of algorithms.
33	Theory1	Define and informally determine the foundational complexity class of simple algorithms.
34	Theory1	Perform empirical studies to determine the runtime complexity of algorithms.
35	Theory1	Describe in depth a prototypical example and its paradigm for graph and sorting algorithms.
36	Theory1	Graph algorithms (such as Shortest Path, Minimal spanning tree, transitive closure, and topological sort).
37	Theory1	Sorting algorithms (including those with O(n^2), O(n log n), and pseudo O(n) complexity).
38	Theory1	Informally describe common matching algorithms such as string matching, longest common subsequence matching, and regular expression matching.
39	Theory1	Define and describe the properties and associated operations of data structures such as sets, heaps, queues, graphs, and hash tables.
40	Theory2	Prove that the halting problem is undecidable and give an example of proving a problem is undecidable by reducing the halting problem to it.
41	Theory2	Given a real-world problem, design an appropriate automaton to address it.
42	Theory2	Define, compare and contrast, and give examples for each class of automata: Finite state, Pushdown, Linear Bounded, Turing Machine including universal Turing machine
43	Theory2	Explain at least one approach for addressing a computational problem whose algorithmic solution is exponential.
44	Theory2	Determine if a greedy approach leads to an optimal solution.
45	Theory2	Explain how invariants assist in proving the correctness of an algorithm as a formal model
46	Theory2	Describe an efficient string matching algorithm, longest common subsequence matching. and regular expression matching.
47	Theory2	Understand and explain in detail the following operations on data structures: collision avoidance and resolution in hash tables, and tree balance in binary search tree operations.
48	Theory2	Define the classes P and NP.
49	Theory2	Define, compare, and give examples of NP-complete and NP-hard problems.
50	Theory2	Prove that a problem is NP-complete by reducing it to a NP-complete problem.
51	Theory2	Convert between equivalently powerful notations for a language, e.g., DFAs, NFAs, and regular expressions; PDAs and CFGs.
52	Theory2	Use a pumping lemma to prove limitations of finite state and pushdown automata.
53	SW1	Learn how to work in a team, including communication, conflict resolution and collaboration
54	SW1	Use the mechanics and tools of SW teamwork such as version control and pull requests
55	SW1	Use version control
56	SW1	Write unit tests that establish robustness
57	SW1	Distinguish between program validation and verification. 
58	SW1	Use exception handling to make code robust.
59	SW1	Implement, document, and test a small component
60	SW2	Work in a team to build a multi module software project
61	SW2	Apply requirements modeling and elicitation to prepare a software specification.
62	SW2	Differentiate between different software architecture styles.
63	SW2	Select and use an appropriate design paradigm to design a simple software system and explain how system design principles have been applied in this design. 
64	SW2	Apply design principles and dependency models to analyze and re-design a flawed system
65	SW2	Trace requirements to design to implementation to tests of those requirements.
66	SW2	Conduct tradeoff analysis of software designs with respect to quality attributes.
67	SW2	Rewrite a simple program to remove common vulnerabilities, such as buffer overflows, integer overflows and race conditions.
68	SW2	Automate testing in a small software project. 
69	SW2	Undertake, as part of a team activity, a code review of a medium-size code segment. 

Sys1

* Understand and explain the history and evolution of computer architecture and organization.
* Describe and explain the binary data representation and format translation in computer systems.
* Describe and explain the classic von Neumann machine architecture, instruction set, and instruction cycle and pipelining in CPU.
* Describe and compare the performance of the memory hierarchy in current computer systems.
* Describe and compare the access methods and performance of input/output (I/O) devices.
* Write small programs in C to understand data representation and the interaction of CPU, memory and I/O devices.
* Describe and understand the principles and tradeoffs of the design, performance, reliability and security of computer systems.
* Understand the objectives and functions of modern operating systems.

Sys2

* Understand and explain the history and evolution of computer operating systems and structures.
* Describe and explain the principles and interaction of computer systems, operating systems and user applications with safety and protection.
* Describe and explain the scheduling, communication, synchronization and concurrency of processes and threads.
* Describe and compare the functionality and performance of cache, main memory and virtual memory.
* Describe and compare the management of different I/O devices, particularly storage devices.
* Describe and compare the design and implementation tradeoffs of file systems, directories and files.
* Write programs in C to understand and evaluate operating systems interfaces, CPU scheduling, memory allocation and filesystem implementation.
* Understand the objectives and functions of modern computer networks as an extension of operating systems.

pan
Posts: 63111
Joined: Mon Sep 11, 2006 10:23 am

Re: Computing Curricula

Post by pan »

https://uwaterloo.ca/centre-for-teachin ... ssessments

Bloom's Taxonomy Learning Activities and Assessments
Cognitive Domain
Bloom's Taxonomy: Cognitive Domain (PDF)

Cognitive Domain: intellectual skills and abilities required for learning, thinking critically and problem solving

Remember: Retain, recall and recognize knowledge

Understand: Translate and interpret knowledge

Apply: Apply knowledge to different situations

Analyze: Break down information to look at relationships

Evaluate: Make judgements based on evidence found

Create: Compile information to generate new solutions

similarly in research too, although focusing toward the discovery and creation side as well

pan
Posts: 63111
Joined: Mon Sep 11, 2006 10:23 am

Re: Computing Curricula

Post by pan »

uvic cs core courses

Section II
The following list of the nine computer science areas shows the learning outcomes for the corresponding
University of Victoria Department of Computer Science 300-level course that covers each area. This
information provides guidance on the skills and knowledge required to cover the corresponding areas. A
substantial (but not perfect) match is expected for courses in Table A.

1. Operating Systems
UVic corresponding course: CSC 360 Operating Systems
Students will be able to understand the data structures and algorithms for the main components in a modern
operating system.
By the end of the course, the students will be able to
• understand operating systems history, principles and structures;
• interact with operating systems through system calls and Application Programming Interface;
• understand process and thread management including process/thread operations, scheduling,
communications and synchronization;
• understand memory management including main memory and virtual memory allocation, mapping
and replacement;
• understand common input/output management, particularly storage management;
• understand file systems organization and implementation.

2. Computer Communications and Networks
UVic corresponding course: CSC 361 Computer Communications and Networks
The course objectives are to help students gain a general understanding of the principles and concepts
governing the operations of computer networks and to provide them with the opportunity to become skilled
in implementing and using communication protocols.
By the end of the course, the students will be able to
• use Wireshark to capture and analyze Internet traffic,
• use socket programming to implement/analyze an application-level protocol,
• develop programs to analyze a traffic trace file's structure and statistical features,
• understand TCP behaviour and identify TCP anomalies,
• config and test virtual routing devices, and
• test network performance using tools such as ping and traceroute.

3. Programming Languages
UVic corresponding course: CSC 330 Programming Languages
This course introduces fundamental concepts in computer programming languages, their design, syntax,
semantics, pragmatics and applications. Students will be exposed to (and will write programs using) very
different approaches towards expressing computation. Contrasting programming languages will be used for
assignments (Haskell, Rust, Javascript) that provide experience with different programming paradigms.
By the end of the course, the students will, among other learning outcomes, be able to
• summarize the evolution of programming languages by showing how we have arrived at paradigms
available to us today;
• compare and contrast the compiled and interpreted execution models;
• explain the value of declaration models;
• identify and describe the property of variables given a particular programming paradigm;
• demonstrate different forms of binding, visibility, scoping and lifetime management of variables;
• defend the importance of abstraction mechanisms made available by programming languages;
• justify the philosophy of object-oriented design and concepts of encapsulation, abstraction,
inheritance and polymorphism;
• design, code, test and debug programs using the object-oriented paradigm in a language other than
Java or C#;
• describe how iterators access the elements of a container;
• outline the strengths and weaknesses of the functional programming paradigm;
• design, code, test and debug programs using the functional paradigm;
• describe the steps and algorithms used by language translators;
• recognize the underlying formal models use to define a language through regular expressions and
grammars;
• evaluate languages with regard to typing.

4. Software Development Methods
UVic corresponding course: SENG 365 Software Systems Development.
Upon successful completion of the course, students will be able to
• describe the importance/impact of bad/good interface design;
• identify the potential human factor elements in a design;
• identify the representative users of a design and discuss who else could be impacted by this design
• identify the standard software architecture of a given high-level design;
• select and use an appropriate design paradigm to design a simple software system and explain how
system design principles have been applied in this design;
• discuss factors other than computational efficiency that influence the choice of algorithms, such as
programming time, maintainability, and the use of application-specific patterns in the input data;
• compare and contrast the different types and levels of testing (regression, unit, integration, systems,
and acceptance);
• describe techniques for creating a test plan and generating test cases;
• employ the fundamental principles of test-driven development methods and explain the role of
automated testing in these methods;
• undertake, as part of a team activity, a code review of a medium-size code segment;
• describe the role that tools can play in the validation of software;
• automate testing in a small software project;
• understand the use of Continuous Integration systems as a ground-truth for the state of the team’s
shared code (build and test success);
• describe the issues that are important in selecting a set of tools for the development of a particular
software system, including tools for requirements tracking, design modeling, implementation, build
automation, and testing;
• propose and delegate necessary roles and responsibilities in a software development team; and
• facilitate through involvement in a team project, the central elements of team building, establishing
healthy team culture, and team management including creating and executing a teamwork plan.

5. Human-centered Computing
UVic corresponding course: SENG 310 Human Computer Interaction
In this course, students will be introduced to the three main phases of HCI work: (a) understanding people,
(b) developing prototypes and (c) evaluation. More specifically, students will focus on understanding and
applying the human-centred design process. This course is not about developing technically robust software
systems, but instead will require students to develop an understanding of people’s everyday interactions
with computer technology and apply that understanding to critically reflect upon and suggest new ways to
improve or enhance human-computer interactions.
At the end of the course, students will be able to
• define foundational concepts in human-centred design and be able to differentiate between
different approaches and methods that can be considered when designing, implementing, and
evaluating a prototype computer-based interface;
• identify the goals, requirements, users, stakeholders, ethical considerations, context, and desired
outcomes of a design situation;
• apply design principles to design and develop an interactive prototype using appropriate rapid
prototyping tools and techniques, such as sketching, journey maps, storyboarding, and video
prototyping;
• plan and conduct an evaluation to address a user research problem, including the selection of an
appropriate evaluation technique and a critical assessment of the chosen method;
• as a team, critically analyze and synthesize findings to document and present the results from a
range of evaluation techniques such as controlled experiments, questionnaires, video evaluations,
field studies, and analytically based evaluations;
• synthesize diverse perspectives within a team to collaboratively define, design, and evaluate an
interactive prototype, and articulate the group's rationale for key design decisions.

6. Data Systems
UVic corresponding course: CSC 370: Database Systems
The objective of the course is to present an introduction to database management systems (DBMS), with an
emphasis on how to organize, maintain and retrieve--efficiently, and effectively--information from a DBMS.
By the end of this course, students will be able to
Database Design
• describe real-world domains in terms of data models (e.g., ER diagrams, relational
schemas);
• apply normalization and schema refinement techniques to design robust databases;
Data Analysis
• formulate and execute queries to extract, manipulate, and analyze data using query
languages (e.g., SQL);
• translate real-world questions into formal database queries and interpret results correctly;
Concurrency and Robustness
• explain how a DBMS handles concurrent access and transactions;
• demonstrate understanding of isolation levels, deadlocks, and recovery from system
failures;
Query Evaluation and Optimization
• explain how a DBMS parses, plans, and executes queries;
• compare different query execution strategies and evaluate their efficiency;
• apply query optimization techniques (e.g., use of indexes, join strategies, cost-based
optimization);
Efficiency and Scalability
• describe how databases store and index large volumes of data;
• evaluate query performance and identify bottlenecks;
• understand trade-offs in scaling databases to support large applications.

7. Artificial Intelligence and Machine Learning
UVic corresponding course: CSC 321 Course outline unavailable. (Placeholder CSC 421 Intro to AI)
By the end of the course, the students will have learned to
• understand the abstraction of agents as a framework for understanding AI concepts, as well as
integrating the various concepts and ideas learned during the course into working systems. For
example:
o mapping agent frameworks to specific problems,
o developing example systems to solve problems given in a specification;
• formulate various structured problems as search problems and be familiar with the variety of
algorithms and associated trade-offs that can be used to solve them. For example:
o leveraging structure in Constraint Satisfaction Problems (CSP) for efficiency,
o constructing multiple algorithmic solutions in the same theme to solve the same problem,
and understanding the trade-offs of these solutions;
• represent facts and knowledge using logic and understand the principles behind inference systems.
For example:
o converting a given specification into a given logic notation,
o developing a parser and basic inference system for this notation,
o using more advanced inference systems to solve a problem;
• be able to communicate about and structure various problems that feature uncertainty using
probabilities and probabilistic reasoning. For example:
o construct a probabilistic problem from scratch and then reason about outcomes,
o chart the change in belief over drawn samples using different probabilistic tools,
o reason about how AI agents can use this information to update their beliefs when solving
problems;
• be familiar with the basic terminology and development of machine learning techniques. For
example:
o using data to train effective algorithms,
o investigating measures of success/failure regarding trained models;
• be able to think critically about the ethical and safety implications of building systems using AI
technologies. For example:
o reason about the ethical implications of particular AI usage choices,
o map potential safety requirements/concerns to AI deployment scenarios,
o map ethical frameworks to dilemmas in AI development and deployment.

8. Graphics
UVic corresponding course: CSC 305 Intro to Computer Graphics
This course is an introduction to the field of computer graphics and its three main branches: modelling,
animation, and rendering. The course covers both theoretical and applied concepts such as transformations,
raster graphics with modern OpenGL, data structures for graphics, rendering algorithms, and computer
animation algorithms.
By the end of the course, the student will understand
• the modern real-time graphics pipeline;
• the transformations used in the graphics pipeline;
• projections, projection matrices, and their derivations;
• the development of shader-based rendering methods to implement the real-time graphics pipeline;
• texturing and UV mapping;
• hierarchical transformation modelling and developing animated linked transformations;
• both real-time and offline ray tracing and ray marching methods for high-fidelity rendering.

9. Computer Science Theory
UVic corresponding course: CSC 320 Foundations of Computer Science
By successfully completing the course, the student will be able to
• understand and analyze when it is possible to solve a problem computationally,
• understand and prove when a problem is undecidable,
• understand and illustrate how limitations on computational resources limit the class of problems
that can be solved,
• understand and apply models of computation for different problems in the Chomsky hierarchy,
• characterize and analyze computational problems that are tractable,
• characterize and prove computational problems that are intractable,
• characterize the class of problems solvable in a model,
• understand what it means for models of computation to be equivalent,
• understand and apply reductions to prove intractability and undecidability of problems,
• transform an automaton into a different equivalent representation, and vice versa.

Post Reply

Return to “UVic CS”