Computing Curricula

UVic computer science
pan
Posts: 56766
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: 56766
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: 56766
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.

Post Reply

Return to “UVic CS”