From aa317dfe33b296fe9a332950b8da0d64d247b762 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Tue, 23 Feb 2016 16:34:07 +1300 Subject: [PATCH 01/63] Add skeleton structure for new AP CSP curriculum guide --- generator/static-translations.conf | 4 + guide-settings.conf | 11 ++ .../apcsp/guide-abstraction-introduction.md | 93 ++++++++++++++ .../apcsp/guide-algorithms-introduction.md | 91 ++++++++++++++ .../apcsp/guide-create-performance-task.md | 1 + .../apcsp/guide-creativity-introduction.md | 63 ++++++++++ ...guide-data-and-information-introduction.md | 73 +++++++++++ .../apcsp/guide-explore-performance-task.md | 1 + .../apcsp/guide-global-impact.md | 9 ++ .../apcsp/guide-programming-introduction.md | 115 ++++++++++++++++++ .../apcsp/guide-the-internet-introduction.md | 9 ++ text/en/curriculum-guides/apcsp/index.md | 79 ++++++++++++ 12 files changed, 549 insertions(+) create mode 100644 text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md create mode 100644 text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md create mode 100644 text/en/curriculum-guides/apcsp/guide-create-performance-task.md create mode 100644 text/en/curriculum-guides/apcsp/guide-creativity-introduction.md create mode 100644 text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md create mode 100644 text/en/curriculum-guides/apcsp/guide-explore-performance-task.md create mode 100644 text/en/curriculum-guides/apcsp/guide-global-impact.md create mode 100644 text/en/curriculum-guides/apcsp/guide-programming-introduction.md create mode 100644 text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md create mode 100644 text/en/curriculum-guides/apcsp/index.md diff --git a/generator/static-translations.conf b/generator/static-translations.conf index d143107b12..3ca9ddda32 100644 --- a/generator/static-translations.conf +++ b/generator/static-translations.conf @@ -14,6 +14,10 @@ de: Lehrplan Guides en: NCEA de: NCEA +[apcsp] +en: APCSP +de: APCSP + [further-information] en: Further Information de: Weitere Informationen diff --git a/guide-settings.conf b/guide-settings.conf index cc48a9b1ee..b40e8006c0 100644 --- a/guide-settings.conf +++ b/guide-settings.conf @@ -42,6 +42,17 @@ curriculum-guides: ncea/assessment-guide-level-3-software-engineering-methodologies ncea/assessment-guide-level-3-complexity-tractability-TSP ncea/assessment-guide-level-3-formal-languages-FSA-RE + apcsp/index + apcsp/guide-algorithms-introduction + apcsp/guide-abstraction-introduction + apcsp/guide-creativity-introduction + apcsp/guide-data-and-information-introduction + apcsp/guide-global-impact + apcsp/guide-programming-introduction + apcsp/guide-the-internet-introduction + apcsp/guide-create-performance-task + apcsp/guide-explore-performance-task + # Path from text/further-information/ # These pages are not numbered and do not have a table of contents sidebar diff --git a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md new file mode 100644 index 0000000000..7ad1cc39c8 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md @@ -0,0 +1,93 @@ +# Abstraction + +## Overview +- EU 2.1 A variety of abstractions built on binary sequences can be used to represent all digital data. +- EU 2.2 Multiple levels of abstraction are used to write programs or create other computational artifacts. +- EU 2.3 Models and simulations use abstraction to generate new understanding and knowledge. + +## Reading from the Computer Science Field Guide +Start by reading through: + +- [Data Representation](chapters/data-representation.html) +- [Software Engineering - Layers of Abstraction](chapters/software-engineering.html#design-how-do-we-build-it) + +## Learning objectives +The above chapter readings include specific knowledge for EK's marked in bold. + +###LO 2.1.1 Describe the variety of abstractions used to represent data. +- **EK 2.1.1A Digital data is represented by abstractions at different levels. +- EK 2.1.1B At the lowest level, all digital data are represented by bits. +- EK 2.1.1C At a higher level, bits are grouped to represent abstractions, including but not limited to numbers, characters, and color. +- EK 2.1.1D Number bases, including binary, decimal, and hexadecimal, are used to represent and investigate digital data. +- EK 2.1.1E At one of the lowest levels of abstraction, digital data is represented in binary (base 2) using only combinations of the digits zero and one. +{panel type="teacher-note" summary="Exclusion EK 2.1.1E"} +EXCLUSION STATEMENT (for - EK 2.1.1E): Two’s complement conversions are beyond the scope of this course and the AP Exam. +{panel end} +- EK 2.1.1F Hexadecimal (base 16) is used to represent digital data because hexadecimal representation uses fewer digits than binary. +- EK 2.1.1G Numbers can be converted from any base to any other base.** + +###LO 2.1.2 Explain how binary sequences are used to represent digital data. +- **EK 2.1.2A A finite representation is used to model the infinite mathematical concept of a number. +{panel type="teacher-note" summary="Exclusion EK 2.1.2A"} +EXCLUSION STATEMENT (for - EK 2.1.2A): Binary representations of scientific notation are beyond the scope of this course and the AP Exam. +{panel end} +- EK 2.1.2B In many programming languages, the fixed number of bits used to represent characters or integers limits the range of integer values and mathematical operations; this limitation can result in over flow or other errors. +{panel type="teacher-note" summary="Exclusion EK 2.1.2B"} +EXCLUSION STATEMENT (for - EK 2.1.2B): Range limitations of any one language, compiler, or architecture are beyond the scope of this course and the AP Exam. +{panel end}** +- EK 2.1.2C In many programming languages, the fixed number of bits used to represent real numbers (as floating-point numbers) limits the range of floating-point values and mathematical operations; this limitation can result in round off and other errors. +- **EK 2.1.2D The interpretation of a binary sequence depends on how it is used.** +- EK 2.1.2E A sequence of bits may represent instructions or data. +- EK 2.1.2F A sequence of bits may represent different types of data in different contexts. + +###LO 2.2.1 Develop an abstraction when writing a program or creating other computational artifacts. +- EK 2.2.1A The process of developing an abstraction involves removing detail and generalizing functionality. +- EK 2.2.1B An abstraction extracts common features from specific examples in order to generalize concepts. +- EK 2.2.1C An abstraction generalizes functionality with input parameters that allow software reuse. +{panel type="teacher-note" summary="Exclusion EK 2.2.1C"} +EXCLUSION STATEMENT (for - EK 2.2.1C): An understanding of the difference between value and reference parameters is beyond the scope of this course and the AP Exam. +{panel end} + +###LO 2.2.2 Use multiple levels of abstraction to write programs. +- EK 2.2.2A Software is developed using multiple levels of abstractions, such as constants, expressions, statements, procedures, and libraries. +- EK 2.2.2B Being aware of and using multiple levels of abstraction in developing programs helps to more effectively apply available resources and tools to solve problems. + +###LO 2.2.3 Identify multiple levels of abstractions that are used when writing programs. +- EK 2.2.3A Different programming languages offer different levels of abstraction. +{panel type="teacher-note" summary="Exclusion EK 2.2.3A"} +EXCLUSION STATEMENT (for - EK 2.2.3A): Knowledge of the abstraction capabilities of all programming languages is beyond the scope of this course and the AP Exam. +{panel end} +- EK 2.2.3B High-level programming languages provide more abstractions for the programmer and make it easier for people to read and write a program. +- EK 2.2.3C Code in a programming language is often translated into code in another (lower level) language to be executed on a computer. +- EK 2.2.3D In an abstraction hierarchy, higher levels of abstraction (the most general concepts) would be placed toward the top and lower level abstractions (the more specific concepts) toward the bottom. +- EK 2.2.3E Binary data is processed by physical layers of computing hardware, including gates, chips, and components. +- EK 2.2.3F A logic gate is a hardware abstraction that is modeled by a Boolean function. +{panel type="teacher-note" summary="Exclusion EK 2.2.3F"} +EXCLUSION STATEMENT (for - EK 2.2.3F): Memorization of specific gate visual representations is beyond +the scope of this course and the AP Exam. +{panel end} +- EK 2.2.3G A chip is an abstraction composed of low-level components and circuits that perform a specific function. +- EK 2.2.3H A hardware component can be low level like a transistor or high level like a video card. +- EK 2.2.3I Hardware is built using multiple levels of abstractions, such as transistors, logic gates, chips, memory, motherboards, special purpose cards, and storage devices. +- EK 2.2.3J Applications and systems are designed, developed, and analyzed using levels of hardware, software, and conceptual abstractions. +- EK 2.2.3K Lower level abstractions can be combined to make higher level abstractions, such as short message services (SMS) or email messages, images, audio files, and videos. + +###LO 2.3.1 Use models and simulations to represent phenomena. +- EK 2.3.1A Models and simulations are simplified representations of more complex objects or phenomena. +- EK 2.3.1B Models may use different abstractions or levels of abstraction depending on the objects or phenomena being posed. +- EK 2.3.1C Models often omit unnecessary features of the objects or phenomena that are being modeled. +- EK 2.3.1D Simulations mimic real-world events without the cost or danger of building and testing the phenomena in the real world. + +###LO 2.3.2 Use models and simulations to formulate, refine, and test hypotheses. +- EK 2.3.2A Models and simulations facilitate the formulation and refinement of hypotheses related to the objects or phenomena under consideration. +- EK 2.3.2B Hypotheses are formulated to explain the objects or phenomena being modeled. +- EK 2.3.2C Hypotheses are re ned by examining the insights that models and simulations provide into the objects or phenomena. +- EK 2.3.2D The results of simulations may generate new knowledge and new hypotheses related to the phenomena being modeled. +- EK 2.3.2E Simulations allow hypotheses to be tested without the constraints of the real world. +- EK 2.3.2F Simulations can facilitate extensive and rapid testing of models. +- EK 2.3.2G The time required for simulations is impacted by the level of detail and quality of the models and the software and hardware used for the simulation. +- EK 2.3.2H Rapid and extensive testing allows models to be changed to accurately reflect the objects or phenomena being modeled. + +##Additions to FG? +- re-work a unit / activity on hardware and software abstraction layers below high level language (from the software engineering one) +- models and simulations (there are some CS unplugged ones) diff --git a/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md b/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md new file mode 100644 index 0000000000..a93c9b1f56 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md @@ -0,0 +1,91 @@ +# Algorithms + +## Overview +- EU 4.1 Algorithms are precise sequences of instructions for processes that can be executed by a computer and are implemented using programming languages. +- EU 4.2 Algorithms can solve many, but not all, computational problems. + +## Reading from the Computer Science Field Guide +Start by reading through: +- [Algorithms](chapters/algorithms.html) +- [Complexity and Tractability](chapters/complexity-tractability.html) + +## Learning objectives +The above chapter readings include specific knowledge for EK's marked in bold. + +### LO 4.1.1 Develop an algorithm for implementation in a program + +- EK 4.1.1A Sequencing, selection, and iteration are building blocks of algorithms. +- EK 4.1.1B Sequencing is the application of each step of an algorithm in the order in which the statements are given. +- EK 4.1.1C Selection uses a Boolean condition to determine which of two parts of an algorithm is used. +- EK 4.1.1D Iteration is the repetition of part of an algorithm until a condition is met or for a specifed number of times. +- EK 4.1.1E Algorithms can be combined to make new algorithms. +- EK 4.1.1F Using existing correct algorithms as building blocks for constructing a new algorithm helps ensure the new algorithm is correct. +- **EK 4.1.1G Knowledge of standard algorithms can help in constructing new algorithms.** +- **EK 4.1.1H Different algorithms can be developed to solve the same problem.** +- EK 4.1.1I Developing a new algorithm to solve a problem can yield insight into the problem. + +### LO 4.1.2 Express an algorithm in a language. +- **EK 4.1.2A Languages for algorithms include natural language, pseudocode, and visual and textual programming languages.** +- **EK 4.1.2B Natural language and pseudocode describe algorithms so that humans can understand them.** +- **K 4.1.2C Algorithms described in programming languages can be executed on a computer.** +- EK 4.1.2D Different languages are better suited for expressing different algorithms. +- EK 4.1.2E Some programming languages are designed for specific domains and are better for expressing algorithms in those domains. + +### LO 4.2.1 Explain the difference between algorithms that run in a reasonable time and those that do not run in a reasonable time. +{panel type="teacher-note" summary="Exclusion LO 4.2.1"} +EXCLUSION STATEMENT (for LO 4.2.1): Any discussion of nondeterministic polynomial (NP) is beyond the scope of this course and the AP Exam. +{panel end} +- **EK 4.2.1A Many problems can be solved in a reasonable time.** +- **EK 4.2.1B Reasonable time means that as the input size grows, the number of steps the algorithm takes is proportional +to the square (or cube, fourth power, fifth power, etc.) +of the size of the input.** +- **EK 4.2.1C Some problems cannot be solved in a reasonable time, even for small input sizes.** +- **EK 4.2.1D Some problems can be solved but not in a reasonable time. In these cases, heuristic approaches may be helpful to +find solutions in reasonable time.** + +### LO 4.2.2 Explain the difference between solvable and unsolvable problems in computer science. +{panel type="teacher-note" summary="Exclusion LO 4.2.2"} +EXCLUSION STATEMENT +(for LO 4.2.2): Determining whether a given problem is solvable or unsolvable is beyond the scope +of this course and the AP Exam. +{panel end} +- **EK 4.2.2A A heuristic is a technique that may allow us to find an approximate solution when typical methods fail to find an exact solution.** +- **EK 4.2.2B Heuristics may be helpful for finding an approximate solution more quickly when exact methods are too slow.** +{panel type="teacher-note" summary="Exclusion EK 4.2.2B"} +EXCLUSION STATEMENT (for EK 4.2.2B): +Specific heuristic solutions are beyond the scope of this course and the AP Exam. +{panel} +- **EK 4.2.2C Some optimization problems such as “find the best” or “find the smallest” cannot be solved in a reasonable time but approximations to the optimal solution can.** +- **EK 4.2.2D Some problems cannot be solved using any algorithm.** + +### LO 4.2.3 Explain the existence of undecidable problems in computer science. +- **EK 4.2.3A An undecidable problem may have instances that have an algorithmic solution, but there is no algorithmic solution that solves all instances of the problem.** +- EK 4.2.3B A decidable problem is one in which an algorithm can be constructed to answer “yes” or “no” for all inputs (e.g., “is the number even?”). +- EK 4.2.3C An undecidable problem is one in which no algorithm can be constructed that always leads to a correct yes-or-no answer. +{panel type="teacher-note" summary="Exclusion EK 4.2.3C"} +EXCLUSION STATEMENT (for EK 4.2.3C): Determining whether a given problem is undecidable is beyond the scope of this course and the AP Exam. +{panel end} + +### LO 4.2.4 Evaluate algorithms analytically and empirically for efficiency, correctness, and clarity. +- EK 4.2.4A Determining an algorithm’s efficiency is done by reasoning formally or mathematically about the algorithm. +- EK 4.2.4B Empirical analysis of an algorithm is done by implementing the algorithm and running it on different inputs. +- EK 4.2.4C The correctness of an algorithm is determined by reasoning formally or mathematically about the algorithm, not by testing an implementation of the algorithm. +{panel type="teacher-note" summary="Exclusion EK 4.2.4C"} +EXCLUSION STATEMENT (for EK 4.2.4C): Formally proving program correctness is beyond the scope of this course and the AP Exam. +{panel end} +- -EK 4.2.4D Different correct algorithms for the same problem can have different efficiencies.** +- **EK 4.2.4E Sometimes, more efficient algorithms are more complex.** +- **EK 4.2.4F Finding an efficient algorithm for a problem can help solve larger instances of the problem.** +- EK 4.2.4G Efficiency includes both execution time and memory usage. +{panel type="teacher-note" summary="Exclusion EK 4.2.4G"} +EXCLUSION STATEMENT (for EK 4.2.4G): Formal analysis of algorithms (Big-O) and formal reasoning using mathematical formulas are beyond the scope of this course and the AP Exam. +{panel end} +- **EK 4.2.4H Linear search can be used when searching for an item in any list; binary search can be used only when the list is sorted.** + +##Additions to FG? +- sequencing, selection, iteration as building blocks for algorithms +- algorithm correctness +- combining algorithms +- language choice for algorithms +- theoretical vs empirical analysis +- efficiency of memory usage diff --git a/text/en/curriculum-guides/apcsp/guide-create-performance-task.md b/text/en/curriculum-guides/apcsp/guide-create-performance-task.md new file mode 100644 index 0000000000..dd2e854d1e --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-create-performance-task.md @@ -0,0 +1 @@ +# Create Performance Task diff --git a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md new file mode 100644 index 0000000000..f75f94df23 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md @@ -0,0 +1,63 @@ +# Creativity + +## Overview +- EU 1.1 Creative development can be an essential process for creating computational artifacts. +- EU 1.2 Computing enables people to use creative development processes to create computational artifacts for creative expression or to solve a problem. +- EU 1.3 Computing can extend traditional forms of human expression and experience. + +## Reading from the Computer Science Field Guide +Start by reading through: + +- Human Computer Interaction + - [Interface Usability](chapters/human-computer-interaction.html#interface-usability) + +## Learning objectives +The above chapter readings include specific knowledge for EK's marked in bold. + +###LO 1.1.1 Apply a creative development process when creating computational artifacts. +- EK 1.1.1A A creative process in the development of a computational artifact can include, but is not limited to, employing nontraditional, nonprescribed techniques; the use of novel combinations of artifacts, tools, and techniques; and the exploration of personal curiosities. +- EK 1.1.1B Creating computational artifacts employs an iterative and often exploratory process to translate ideas into tangible form. + +###LO 1.2.1 Create a computational artifact for creative expression. +- EK 1.2.1A A computational artifact is something created by a human using a computer and can be, but is not limited to, a program, an image, audio, video, a presentation, or a Web page file. +- EK 1.2.1B Creating computational artifacts requires understanding of and use of software tools and services. +- EK 1.2.1C Computing tools and techniques are used to create computational artifacts and can include, but are not limited to, programming integrated development environments (IDEs), spreadsheets, 3D printers, or text editors. +- EK 1.2.1D A creatively developed computational artifact can be created by using nontraditional, nonprescribed computing techniques. +- EK 1.2.1E Creative expressions in a computational artifact can reflect personal expressions of ideas +or interests. + +###LO 1.2.2 Create a computational artifact using computing tools and techniques to solve a problem. +- EK 1.2.2A Computing tools and techniques can enhance the process of finding a solution to a problem. +- EK 1.2.2B A creative development process for creating computational artifacts can be used to solve problems when traditional or prescribed computing techniques are not effective. + +###LO 1.2.3 Create a new computational artifact by combining or modifying existing artifacts. +- EK 1.2.3A Creating computational artifacts can be done by combining and modifying existing artifacts or by creating new artifacts. +- EK 1.2.3B Computation facilitates the creation and modi cation of computational artifacts with enhanced detail and precision. +- EK 1.2.3C Combining or modifying existing artifacts can show personal expression of ideas. + +###LO 1.2.4 Collaborate in the creation of computational artifacts. +- EK 1.2.4A A collaboratively created computational artifact reflects effort by more than one person. +- EK 1.2.4B Effective collaborative teams consider the use of online collaborative tools. +- EK 1.2.4C Effective collaborative teams practice interpersonal communication, consensus building, conflict resolution, and negotiation. +- EK 1.2.4D Effective collaboration strategies enhance performance. +- EK 1.2.4E Collaboration facilitates the application of multiple perspectives (including sociocultural perspectives) and diverse talents and skills +in developing computational artifacts. +- EK 1.2.4F A collaboratively created computational artifact can reflect personal expressions of ideas. + +###LO 1.2.5 Analyze the correctness, usability, functionality, and suitability of computational artifacts. +- **EK 1.2.5A The context in which an artifact is used determines the correctness, usability, functionality, and suitability of the artifact. +- EK 1.2.5B A computational artifact may have weaknesses, mistakes, or errors depending on the type of artifact. +- EK 1.2.5C The functionality of a computational artifact may be related to how it is used or perceived. +- EK 1.2.5D The suitability (or appropriateness) of a computational artifact may be related to how it is used or perceived.** + +###LO 1.3.1 Use computing tools and techniques for creative expression. +- EK 1.3.1A Creating digital effects, images, audio, video, and animations has transformed industries. +- EK 1.3.1B Digital audio and music can be created by synthesizing sounds, sampling existing audio and music, and recording and manipulating sounds, including layering and looping. +- EK 1.3.1C Digital images can be created by generating pixel patterns, manipulating existing digital images, or combining images. +- EK 1.3.1D Digital effects and animations can be created by using existing software or modified software that includes functionality to implement the effects and animations. +- EK 1.3.1E Computing enables creative exploration of both real and virtual phenomena. + +##Additions to FG? +- computational tools such as photoshop, virtual synthesizers, etc +- collaborative tools (open source, github/google doc) +- computational artifacts are more than programs diff --git a/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md b/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md new file mode 100644 index 0000000000..cf66732f37 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md @@ -0,0 +1,73 @@ +# Data and Information + +## Overview +- EU 3.1 People use computer programs to process information to gain insight and knowledge. +- EU 3.2 Computing facilitates exploration and the discovery of connections in information. +- EU 3.3 There are trade-offs when representing information as digital data. + +## Reading from the Computer Science Field Guide +Start by reading through: + +- [Data Representation](chapters/data-representation.html) +- [Coding](chapters/coding-introduction.html) +- [Human Computer Interaction](chapters/human-computer-interaction.html) + +## Learning objectives +The above chapter readings include specific knowledge for EK's marked in bold. + +### LO 3.1.1 Find patterns and test hypotheses about digitally processed information to gain insight and knowledge. +- EK 3.1.1A Computers are used in an iterative and interactive way when processing digital information to gain insight and knowledge. +- EK 3.1.1B Digital information can be filtered and cleaned by using computers to process information. +- EK 3.1.1C Combining data sources, clustering data, and data classification are part of the process of using computers to process information. +- EK 3.1.1D Insight and knowledge can be obtained from translating and transforming digitally represented information. +- EK 3.1.1E Patterns can emerge when data is transformed using computational tools. + +### LO 3.1.2 Collaborate when processing information to gain insight and knowledge. +- EK 3.1.2A Collaboration is an important part of solving data-driven problems. +- EK 3.1.2B Collaboration facilitates solving computational problems by applying multiple perspectives, experiences, and skill sets. +- EK 3.1.2C Communication between participants working on data-driven problems gives rise +to enhanced insights and knowledge. +- EK 3.1.2D Collaboration in developing hypotheses and questions, and in testing hypotheses +and answering questions, about data helps participants gain insight and knowledge. +- EK 3.1.2E Collaborating face-to-face and using online collaborative tools can facilitate processing information to gain insight and knowledge. +- EK 3.1.2F Investigating large data sets collaboratively can lead to insight and knowledge not obtained when working alone. + +### LO 3.1.3 Explain the insight and knowledge gained from digitally processed data by using appropriate visualizations, notations, and precise language. +- EK 3.1.3A Visualization tools and software can communicate information about data. +- EK 3.1.3B Tables, diagrams, and textual displays can be used in communicating insight and knowledge gained from data. +- EK 3.1.3C Summaries of data analyzed computationally can be effective in communicating insight and knowledge gained from digitally represented information. +- EK 3.1.3D Transforming information can be effective in communicating knowledge gained from data. +- EK 3.1.3E Interactivity with data is an aspect of communicating. + +### LO 3.2.1 Extract information from data to discover and explain connections or trends. +- EK 3.2.1A Large data sets provide opportunities and challenges for extracting information and knowledge. +- EK 3.2.1B Large data sets provide opportunities for identifying trends, making connections +in data, and solving problems. +- EK 3.2.1C Computing tools facilitate the discovery of connections in information within large data sets. +- EK 3.2.1D Search tools are essential for efficiently finding information. +- EK 3.2.1E Information filtering systems are important tools for finding information and recognizing patterns in the information. +- EK 3.2.1F Software tools, including spreadsheets and databases, help to efficiently organize and find trends in information. +{panel type="teacher-note" summary="Exclusion EK 3.2.1F"} +EXCLUSION STATEMENT (for EK 3.2.1F): Students are not expected to know specific formulas or options available in spreadsheet or database software packages. +{panel end} +- EK 3.2.1G Metadata is data about data. +- EK 3.2.1H Metadata can be descriptive data about an image, a Web page, or other complex objects. +- EK 3.2.1I Metadata can increase the effective use of data or data sets by providing additional information about various aspects of that data. + +### LO 3.2.2. Determine how large data sets impact the use of computational processes to discover information and knowledge. +- EK 3.2.2A Large data sets include data such as transactions, measurements, texts, sounds, images, and videos. +- EK 3.2.2B The storing, processing, and curating of large data sets is challenging. +- EK 3.2.2C Structuring large data sets for analysis can be challenging. +- EK 3.2.2D Maintaining privacy of large data sets containing personal information can be challenging. +- EK 3.2.2E Scalability of systems is an important consideration when data sets are large. +- EK 3.2.2F The size or scale of a system that stores data affects how that data set is used. +- EK 3.2.2G The effective use of large data sets requires computational solutions. +- EK 3.2.2H Analytical techniques to store, manage, transmit, and process data sets change as the size of data sets scale. + +### LO 3.3.1 Analyze how data representation, storage, security, and transmission of data involve computational manipulation of information. +- EK 3.3.1A Digital data representations involve trade-offs related to storage, security, and privacy concerns. +- EK 3.3.1B Security concerns engender trade-offs in storing and transmitting information. +- EK 3.3.1C There are trade-offs in using lossy and lossless compression techniques for storing and transmitting data. + +##Additions to FG? +- data patterns (sequence analysis / cryptography?) diff --git a/text/en/curriculum-guides/apcsp/guide-explore-performance-task.md b/text/en/curriculum-guides/apcsp/guide-explore-performance-task.md new file mode 100644 index 0000000000..ec7a25ba46 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-explore-performance-task.md @@ -0,0 +1 @@ +# Explore Performance Task diff --git a/text/en/curriculum-guides/apcsp/guide-global-impact.md b/text/en/curriculum-guides/apcsp/guide-global-impact.md new file mode 100644 index 0000000000..ee343e6545 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-global-impact.md @@ -0,0 +1,9 @@ +# Global Impact + +## Overview + +## Reading from the Computer Science Field Guide + +## Learning objectives + +##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-programming-introduction.md b/text/en/curriculum-guides/apcsp/guide-programming-introduction.md new file mode 100644 index 0000000000..404d869e8f --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-programming-introduction.md @@ -0,0 +1,115 @@ +# Programming + +## Overview + +- EU 5.1 Programs can be developed for creative expression, to satisfy personal curiosity, to create new knowledge, or to solve problems (to help people, organizations, or society). +- EU 5.2 People write programs to execute algorithms. +- EU 5.3 Programming is facilitated by appropriate abstractions. +- EU 5.4 Programs are developed, maintained, and used by people for different purposes. +- EU 5.5 Programming uses mathematical and logical concepts. + +## Reading from the Computer Science Field Guide +Start by reading through: + +- [Programming Languages](chapters/programming-languages.html) +- [Software Engineering](chapters/software-engineering.html) + +The AP CSP framework does not require a specific programming language but require students to learn programming. Choose one or more of the options from: + +- [Programming Introduction](chapters/introduction.html#programming) + +## Learning objectives +The above chapter readings include specific knowledge for - EK's marked in bold. + +### LO 5.1.1 Develop a program for creative expression, to satisfy personal curiosity, or to create new knowledge. +- EK 5.1.1A Programs are developed and used in a variety of ways by a wide range of people depending on the goals of the programmer. +- EK 5.1.1B Programs developed for creative expression, to satisfy personal curiosity, or to create new knowledge may have visual, audible, or tactile inputs and outputs. +- EK 5.1.1C Programs developed for creative expression, to satisfy personal curiosity, or to create new knowledge may be developed with different standards or methods than programs developed for widespread distribution. +- EK 5.1.1D Additional desired outcomes may be realized independently of the original purpose of the program. +- EK 5.1.1E A computer program or the results of running a program may be rapidly shared with a large number of users and can have widespread impact on individuals, organizations, and society. +- EK 5.1.1F Advances in computing have generated and increased creativity in other fields. + +### LO 5.1.2 Develop a correct program to solve problems. +- EK 5.1.2A An iterative process of program development helps in developing a correct program to solve problems. +- EK 5.1.2B Developing correct program components and then combining them helps in creating correct programs. +- EK 5.1.2C Incrementally adding tested program segments to correct working programs helps create large correct programs. +- EK 5.1.2D Program documentation helps programmers develop and maintain correct programs to efficiently solve problems. +- EK 5.1.2E Documentation about program components, such as blocks and procedures, helps in developing and maintaining programs. +- EK 5.1.2F Documentation helps in developing and maintaining programs when working individually or in collaborative programming environments. +- EK 5.1.2G Program development includes identifying programmer and user concerns that affect the solution to problems. +- EK 5.1.2H Consultation and communication with program users is an important aspect of program development to solve problems. +- EK 5.1.2I A programmer’s knowledge and skill affects how a program is developed and how it is used to solve a problem. +- EK 5.1.2J A programmer designs, implements, tests, debugs, and maintains programs when solving problems. + +### LO 5.1.3 Collaborate to develop a program. +- EK 5.1.3A Collaboration can decrease the size and complexity of tasks required of individual programmers. +- EK 5.1.3B Collaboration facilitates multiple perspectives in developing ideas for solving problems by programming. +- EK 5.1.3C Collaboration in the iterative development of a program requires different skills than developing a program alone. +- EK 5.1.3D Collaboration can make it easier to find and correct errors when developing programs. +- EK 5.1.3E Collaboration facilitates developing program components independently. +- EK 5.1.3F Effective communication between participants is required for successful collaboration when developing programs. + +### LO 5.2.1 Explain how programs implement algorithms. +- EK 5.2.1A Algorithms are implemented using program instructions that are processed during program execution. +- EK 5.2.1B Program instructions are executed sequentially. +- EK 5.2.1C Program instructions may involve variables that are initialized and updated, read, and written. +- EK 5.2.1D An understanding of instruction processing and program execution is useful for programming. +- EK 5.2.1E Program execution automates processes. +- EK 5.2.1F Processes use memory, a central processing unit (CPU), and input and output. +- EK 5.2.1G A process may execute by itself or with other processes. +- EK 5.2.1H A process may execute on one or several CPUs. +- EK 5.2.1I Executable programs increase the scale of problems that can be addressed. +- EK 5.2.1J Simple algorithms can solve a large set of problems when automated. +- EK 5.2.1K Improvements in algorithms, hardware, and software increase the kinds of problems and the size of problems solvable by programming. + +### LO 5.3.1 Use abstraction to manage complexity in programs. +- EK 5.3.1A Procedures are reusable programming abstractions. +- EK 5.3.1B A procedure is a named grouping of programming instructions. +- EK 5.3.1C Procedures reduce the complexity of writing and maintaining programs. +- EK 5.3.1D Procedures have names and may have parameters and return values. +- EK 5.3.1E Parameterization can generalize a specific solution. +- EK 5.3.1F Parameters generalize a solution by allowing a procedure to be used instead of duplicated code. +- EK 5.3.1G Parameters provide different values as input to procedures when they are called in a program. +- EK 5.3.1H Data abstraction provides a means of separating behavior from implementation. +- EK 5.3.1I Strings and string operations, including concatenation and some form of substring, are common in many programs. +- EK 5.3.1J Integers and floating-point numbers are used in programs without requiring understanding of how they are implemented. +- EK 5.3.1K Lists and list operations, such as add, remove, and search, are common in many programs. +- EK 5.3.1L Using lists and procedures as abstractions in programming can result in programs that are easier to develop and maintain. +- EK 5.3.1M Application program interfaces (APIs) and libraries simplify complex programming tasks. +- EK 5.3.1N Documentation for an API/library is an important aspect of programming. +- EK 5.3.1O APIs connect software components, allowing them to communicate. + +### LO 5.4.1 Evaluate the correctness of a program. +- EK 5.4.1A Program style can affect the determination of program correctness. +- EK 5.4.1B Duplicated code can make it harder to reason about a program. +- EK 5.4.1C Meaningful names for variables and procedures help people better understand programs. +- EK 5.4.1D Longer code blocks are harder to reason about than shorter code blocks in a program. +- EK 5.4.1E Locating and correcting errors in a program is called debugging the program. +- EK 5.4.1F Knowledge of what a program is supposed to do is required in order to find most program errors. +- EK 5.4.1G Examples of intended behavior on specific inputs help people understand what a program is supposed to do. +- EK 5.4.1H Visual displays (or different modalities) of program state can help in finding errors. +- EK 5.4.1I Programmers justify and explain a program’s correctness. +- EK 5.4.1J Justification can include a written explanation about how a program meets its specifications. +- EK 5.4.1K Correctness of a program depends on correctness of program components, including code blocks and procedures. +- EK 5.4.1L An explanation of a program helps people understand the functionality and purpose of it. +- EK 5.4.1M The functionality of a program is often described by how a user interacts with it. +- EK 5.4.1N The functionality of a program is best described at a high level by what the program does, not at the lower level of how the program statements work to accomplish this. + +### LO 5.5.1 Employ appropriate mathematical and logical concepts in programming. +- EK 5.5.1A Numbers and numerical concepts are fundamental to programming. +- EK 5.5.1B Integers may be constrained in the maximum and minimum values that can be represented in a program because of storage limitations. +{panel type="teacher-note" summary="Exclusion EK 5.5.1B"} +EXCLUSION STATEMENT (for - EK 5.5.1B): Specific range limitations of all programming languages are beyond the scope of this course and the AP Exam. +{panel end} +- EK 5.5.1C Real numbers are approximated by floating-point representations that do not necessarily have infinite precision. +{panel type="teacher-note" summary="Exclusion EK 5.5.1C"} +EXCLUSION STATEMENT (for - EK 5.5.1C): Specific sets of values that cannot be exactly represented by floating +point numbers are beyond the scope of this course and the AP Exam. +{panel end} +- EK 5.5.1D Mathematical expressions using arithmetic operators are part of most programming languages. +- EK 5.5.1E Logical concepts and Boolean algebra are fundamental to programming. +- EK 5.5.1F Compound expressions using and, or, and not are part of most programming languages. +- EK 5.5.1G Intuitive and formal reasoning about program components using Boolean concepts helps in developing correct programs. +- EK 5.5.1H Computational methods may use lists and collections to solve problems. + +##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md new file mode 100644 index 0000000000..4783807db9 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md @@ -0,0 +1,9 @@ +# The Internet + +## Overview + +## Reading from the Computer Science Field Guide + +## Learning objectives + +##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/index.md b/text/en/curriculum-guides/apcsp/index.md new file mode 100644 index 0000000000..42b9bf6ed1 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/index.md @@ -0,0 +1,79 @@ +# APCSP Curriculum Guides +These curriculum guides have been written to assist teachers for the Advanced Placement Computer Science Principles course. + +*Note: These guides are still a work in progress.* +*We recommend following one of the full course curriculum listed on the [APCSP](http://apcsp.org/) and using these guides to integrate CS field guide resources for specific units or lessons. Descriptions of the big ideas, learning objectives, and essential knowledge statements are directly from CC BY-SA 4.0 licensed APCSP resources* + +>The major areas of study in the course are organized around seven big ideas, which encompass ideas foundational to studying computer science. These big ideas connect students to a curriculum scope that includes the +art of programming but is not programming-centric. + +##Computational Thinking Practices +>The computational thinking practices help students coordinate and make sense of knowledge to accomplish a goal or task. They enable students to engage with the course content by developing computational artifacts and analyzing data, information, or knowledge represented for computational use. + +- Connecting Computing +- Creating Computational Artifacts +- Abstracting +- Analyzing Problems and Artifacts +- Communicating +- Collaborating + +##Concepts (Big Ideas in Computer Science) +Each concept embodies specific essential questions and enduring understandings. The AP CSP curriculum framework answers these questions and builds the enduring understandings by targeting specific learning objectives (Students will be able to ... ) and essential knowledge (Students will know that ... ). + +We have developed guides for teachers for each concept with content knowledge and suggested resources. + +###Creativity +>Computing fosters the creation of artifacts and creative expression. Programming is a creative process. + +- [Introduction](curriculum-guides/apcsp/guide-creativity-introduction.html) + +###Abstraction +>Multiple levels of abstraction are used in computation. Models and simulations use abstraction to raise and answer questions. + +- [Introduction](curriculum-guides/apcsp/guide-abstraction-introduction.html) + +###Data and Information +>Data and information facilitate the creation of knowledge. People use computer programs to process information to gain insight and knowledge. Computing facilitates exploration and the discovery of connections in information. Computational manipulation of information requires consideration of representation, storage, security and transmission. + +- [Introduction](curriculum-guides/apcsp/guide-data-and-information-introduction.html) + +###Algorithms +>An algorithm is a precise sequence of instructions for a process that can be executed by a computer. They are expressed using languages, and can solve many, but not all, problems. + +- [Introduction](curriculum-guides/apcsp/guide-algorithms-introduction.html) + +###Programming +>Programming is a creative process that enables problem solving, human expression and creation of knowledge. It uses mathematical and logical concepts and is facilitated by appropriate abstractions. Programs are developed and used by people, and they are written to execute algorithms. + +- [Introduction](curriculum-guides/apcsp/guide-programming-introduction.html) + +###The Internet +>The internet pervades modern computing. It is a network of autonomous systems. Characteristics of the Internet and the systems built on it influence their use. Cybersecurity is an important concern for the Internet and those systems. + +- [Introduction](curriculum-guides/apcsp/guide-the-internet-introduction.html) + +###Global Impact +>Computing affects communication, interaction and cognition. It enables innovation in nearly every field and has both beneficial and harmful effects. Computing is situated within economic, social and cultural contexts. + +- [Introduction](curriculum-guides/apcsp/guide-global-impact-introduction.html) + +##Project and Course Unit recommendations +The AP CSP curriculum framework allows flexibility for projects and course units to address multiple concepts in one unit. We provide a guide for some common combinations and recommendations for implementation to achieve multiple learning objectives with the required level of competency. + +- [App Development]() + +##Assessment +The learning objectives (including the essential knowledge statements and computational thinking practices) will be the targets of assessment for the AP Computer Science Principles course. This assessment comprises two parts: the through-course AP assessment and the end-of-course AP Exam. The through-course assessment involves completion of two performance tasks. + +###Explore Performance Task +>Students will select and investigate a computing innovation that has had, or has the potential to have, a significant impact, both beneficial and harmful, on society, economy, or culture. **8 classroom hours** + +- [Guide](curriculum-guides/apcsp/guide-explore-performance-task.html) + +###Create Performance Task +>Students will develop a program on a topic that interests them. **12 classroom hours** + +- [Guide](curriculum-guides/apcsp/guide-create-performance-task.html) + +###Exam +> The AP Computer Science Exam is 120 minutes long and includes 74 multiple-choice questions and is 60 percent of a student’s AP Computer Science Principles score. From c27b025ed796c122d5b71d64ddc11bb52ab52bf3 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Tue, 23 Feb 2016 22:22:16 +1300 Subject: [PATCH 02/63] Update skeleton structure with all 7 concepts --- guide-settings.conf | 2 +- .../apcsp/guide-abstraction-introduction.md | 20 ++-- .../apcsp/guide-creativity-introduction.md | 8 +- .../apcsp/guide-global-impact-introduction.md | 91 +++++++++++++++++++ .../apcsp/guide-global-impact.md | 9 -- .../apcsp/guide-programming-introduction.md | 6 +- .../apcsp/guide-the-internet-introduction.md | 77 ++++++++++++++++ 7 files changed, 187 insertions(+), 26 deletions(-) create mode 100644 text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md delete mode 100644 text/en/curriculum-guides/apcsp/guide-global-impact.md diff --git a/guide-settings.conf b/guide-settings.conf index b40e8006c0..bf20d8843b 100644 --- a/guide-settings.conf +++ b/guide-settings.conf @@ -47,7 +47,7 @@ curriculum-guides: apcsp/guide-abstraction-introduction apcsp/guide-creativity-introduction apcsp/guide-data-and-information-introduction - apcsp/guide-global-impact + apcsp/guide-global-impact-introduction apcsp/guide-programming-introduction apcsp/guide-the-internet-introduction apcsp/guide-create-performance-task diff --git a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md index 7ad1cc39c8..0aaa7e62a9 100644 --- a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md @@ -15,26 +15,26 @@ Start by reading through: The above chapter readings include specific knowledge for EK's marked in bold. ###LO 2.1.1 Describe the variety of abstractions used to represent data. -- **EK 2.1.1A Digital data is represented by abstractions at different levels. -- EK 2.1.1B At the lowest level, all digital data are represented by bits. -- EK 2.1.1C At a higher level, bits are grouped to represent abstractions, including but not limited to numbers, characters, and color. -- EK 2.1.1D Number bases, including binary, decimal, and hexadecimal, are used to represent and investigate digital data. -- EK 2.1.1E At one of the lowest levels of abstraction, digital data is represented in binary (base 2) using only combinations of the digits zero and one. +- **EK 2.1.1A Digital data is represented by abstractions at different levels.** +- **EK 2.1.1B At the lowest level, all digital data are represented by bits.** +- **EK 2.1.1C At a higher level, bits are grouped to represent abstractions, including but not limited to numbers, characters, and color.** +- **EK 2.1.1D Number bases, including binary, decimal, and hexadecimal, are used to represent and investigate digital data.** +- **EK 2.1.1E At one of the lowest levels of abstraction, digital data is represented in binary (base 2) using only combinations of the digits zero and one.** {panel type="teacher-note" summary="Exclusion EK 2.1.1E"} EXCLUSION STATEMENT (for - EK 2.1.1E): Two’s complement conversions are beyond the scope of this course and the AP Exam. {panel end} -- EK 2.1.1F Hexadecimal (base 16) is used to represent digital data because hexadecimal representation uses fewer digits than binary. -- EK 2.1.1G Numbers can be converted from any base to any other base.** +- **EK 2.1.1F Hexadecimal (base 16) is used to represent digital data because hexadecimal representation uses fewer digits than binary.** +- **EK 2.1.1G Numbers can be converted from any base to any other base.** ###LO 2.1.2 Explain how binary sequences are used to represent digital data. -- **EK 2.1.2A A finite representation is used to model the infinite mathematical concept of a number. +- **EK 2.1.2A A finite representation is used to model the infinite mathematical concept of a number.** {panel type="teacher-note" summary="Exclusion EK 2.1.2A"} EXCLUSION STATEMENT (for - EK 2.1.2A): Binary representations of scientific notation are beyond the scope of this course and the AP Exam. {panel end} -- EK 2.1.2B In many programming languages, the fixed number of bits used to represent characters or integers limits the range of integer values and mathematical operations; this limitation can result in over flow or other errors. +- **EK 2.1.2B In many programming languages, the fixed number of bits used to represent characters or integers limits the range of integer values and mathematical operations; this limitation can result in over flow or other errors.** {panel type="teacher-note" summary="Exclusion EK 2.1.2B"} EXCLUSION STATEMENT (for - EK 2.1.2B): Range limitations of any one language, compiler, or architecture are beyond the scope of this course and the AP Exam. -{panel end}** +{panel end} - EK 2.1.2C In many programming languages, the fixed number of bits used to represent real numbers (as floating-point numbers) limits the range of floating-point values and mathematical operations; this limitation can result in round off and other errors. - **EK 2.1.2D The interpretation of a binary sequence depends on how it is used.** - EK 2.1.2E A sequence of bits may represent instructions or data. diff --git a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md index f75f94df23..cebd290810 100644 --- a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md @@ -45,10 +45,10 @@ in developing computational artifacts. - EK 1.2.4F A collaboratively created computational artifact can reflect personal expressions of ideas. ###LO 1.2.5 Analyze the correctness, usability, functionality, and suitability of computational artifacts. -- **EK 1.2.5A The context in which an artifact is used determines the correctness, usability, functionality, and suitability of the artifact. -- EK 1.2.5B A computational artifact may have weaknesses, mistakes, or errors depending on the type of artifact. -- EK 1.2.5C The functionality of a computational artifact may be related to how it is used or perceived. -- EK 1.2.5D The suitability (or appropriateness) of a computational artifact may be related to how it is used or perceived.** +- **EK 1.2.5A The context in which an artifact is used determines the correctness, usability, functionality, and suitability of the artifact.** +- **EK 1.2.5B A computational artifact may have weaknesses, mistakes, or errors depending on the type of artifact.** +- **EK 1.2.5C The functionality of a computational artifact may be related to how it is used or perceived.** +- **EK 1.2.5D The suitability (or appropriateness) of a computational artifact may be related to how it is used or perceived.** ###LO 1.3.1 Use computing tools and techniques for creative expression. - EK 1.3.1A Creating digital effects, images, audio, video, and animations has transformed industries. diff --git a/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md b/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md new file mode 100644 index 0000000000..34642c38fd --- /dev/null +++ b/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md @@ -0,0 +1,91 @@ +# Global Impact + +## Overview +- EU 7.1 Computing enhances communication, interaction, and cognition. +- EU 7.2 Computing enables innovation in nearly every field. +- EU 7.3 Computing has a global affect — both beneficial and harmful — on people and society. +- EU 7.4 Computing innovations influence and are influenced by the economic, social, and cultural contexts in which they are designed and used. +- EU 7.5 An investigative process is aided by effective organization and selection of resources. Appropriate technologies and tools facilitate the accessing of information and enable the ability to evaluate the credibility of sources. + + +## Reading from the Computer Science Field Guide + +## Learning objectives +### LO 7.1.1 Explain how computing innovations affect communication, interaction, and cognition. +- EK 7.1.1A Email, SMS, and chat have fostered new ways to communicate and collaborate. +- EK 7.1.1B Video conferencing and video chat have fostered new ways to communicate and collaborate. +- EK 7.1.1C Social media continues to evolve and fosters new ways to communicate. +{panel type="teacher-note" summary="Exclusion - EK 7.1.1C"} +EXCLUSION STATEMENT (for - EK 7.1.1C): Detailed knowledge of any social media site is beyond the scope of this course and the AP Exam. +{panel end} +- EK 7.1.1D Cloud computing fosters new ways to communicate and collaborate. +- EK 7.1.1E Widespread access to information facilitates the identification of problems, development of solutions, and dissemination of results. +- EK 7.1.1F Public data provides widespread access and enables solutions to identified problems. +- EK 7.1.1G Search trends are predictors. +- EK 7.1.1H Social media, such as blogs and Twitter, have enhanced dissemination. +- EK 7.1.1I Global Positioning System (GPS) and related technologies have changed how humans travel, navigate, and find information related to geolocation. +- EK 7.1.1J Sensor networks facilitate new ways of interacting with the environment and with physical systems. +- EK 7.1.1K Smart grids, smart buildings, and smart transportation are changing and facilitating human capabilities. +- EK 7.1.1L Computing contributes to many assistive technologies that enhance human capabilities. +- EK 7.1.1M The Internet and the Web have enhanced methods of and opportunities for communication and collaboration. +- EK 7.1.1N The Internet and the Web have changed many areas, including e-commerce, health care, access to information and entertainment, and online learning. +- EK 7.1.1O The Internet and the Web have impacted productivity, positively and negatively, in many areas. + +### LO 7.1.2 Explain how people participate in a problem-solving process that scales. +- EK 7.1.2A Distributed solutions must scale to solve some problems. +- EK 7.1.2B Science has been impacted by using scale and “citizen science” to solve scienti c problems using home computers in scientific research. +- EK 7.1.2C Human computation harnesses contributions from many humans to solve problems related to digital data and the Web. +- EK 7.1.2D Human capabilities are enhanced by digitally enabled collaboration. +- EK 7.1.2E Some online services use the contributions of many people to bene t both individuals and society. +- EK 7.1.2F Crowdsourcing offers new models for collaboration, such as connecting people with jobs and businesses with funding. +- EK 7.1.2G The move from desktop computers to a proliferation of always-on mobile computers is leading to new applications. + +### LO 7.2.1 Explain how computing has impacted innovations in other fields. +- EK 7.2.1A Machine learning and data mining have enabled innovation in medicine, business, and science. +- EK 7.2.1B Scientific computing has enabled innovation in science and business. +- EK 7.2.1C Computing enables innovation by providing the ability to access and share information. +- EK 7.2.1D Open access and Creative Commons have enabled broad access to digital information. +- EK 7.2.1E Open and curated scientific databases have benefited scientific researchers. +- EK 7.2.1F Moore’s law has encouraged industries that use computers to effectively plan future research and development based on anticipated increases in computing power. +- EK 7.2.1G Advances in computing as an enabling technology have generated and increased the creativity in other fields. + +### LO 7.3.1 Analyze the beneficial and harmful effects of computing. +- EK 7.3.1A Innovations enabled by computing raise legal and ethical concerns. +- EK 7.3.1B Commercial access to music and movie downloads and streaming raises legal and ethical concerns. +- EK 7.3.1C Access to digital content via peer-to-peer networks raises legal and ethical concerns. +- EK 7.3.1D Both authenticated and anonymous access to digital information raise legal and ethical concerns. +- EK 7.3.1E Commercial and governmental censorship of digital information raise legal and ethical concerns. +- EK 7.3.1F Open source and licensing of software and content raise legal and ethical concerns. +- EK 7.3.1G Privacy and security concerns arise in the development and use of computational systems and artifacts. +- EK 7.3.1H Aggregation of information, such as geolocation, cookies, and browsing history, raises privacy and security concerns. +- EK 7.3.1I Anonymity in online interactions can be enabled through the use of online anonymity +software and proxy servers. +- EK 7.3.1J Technology enables the collection, use, and exploitation of information about, by, and for individuals, groups, and institutions. +- EK 7.3.1K People can have instant access to vast amounts of information online; accessing this information can enable the collection of both individual and aggregate data that can be used and collected. +- EK 7.3.1L Commercial and governmental curation of information may be exploited if privacy and other protections are ignored. +- EK 7.3.1M Targeted advertising is used to help individuals, but it can be misused at both individual +and aggregate levels. +- EK 7.3.1N Widespread access to digitized information raises questions about intellectual property. +- EK 7.3.1O Creation of digital audio, video, and textual content by combining existing content has been impacted by copyright concerns. +- EK 7.3.1P The Digital Millennium Copyright Act (DMCA) has been a benefit and a challenge in making copyrighted digital material widely available. +- EK 7.3.1Q Open source and free software have practical, business, and ethical impacts on widespread access to programs, libraries, and code. + +### LO 7.4.1 Explain the connections between computing and real-world contexts, including economic, social, and cultural contexts. +- EK 7.4.1A The innovation and impact of social media and online access varies in different countries and in different socioeconomic groups. +- EK 7.4.1B Mobile, wireless, and networked computing have an impact on innovation throughout the world. +- EK 7.4.1C The global distribution of computing resources raises issues of equity, access, and power. +- EK 7.4.1D Groups and individuals are affected by the “digital divide”—differing access to computing and the Internet based on socioeconomic or geographic characteristics. +- EK 7.4.1E Networks and infrastructure are supported by both commercial and governmental initiatives. + +### LO 7.5.1 Access, manage, and attribute information using effective strategies. +- EK 7.5.1A Online databases and libraries catalog and house secondary and some primary sources. +- EK 7.5.1B Advance search tools, Boolean logic, and key words can refine the search focus, and/or limit their searches based on a variety of factors (e.g., data, peer-review status, type of publication). +- EK 7.5.1C Plagiarism is a serious offense that occurs when a person present another’s ideas or words as his or her own. Plagiarism may be avoided by accurately acknowledging sources. + +### LO 7.5.2 Evaluate online and print sources for appropriateness and credibility. +- EK 7.5.2A Determining the credibility of a source requires considering and evaluating the reputation and credentials of the author(s), publisher(s), site owner(s), and/or sponsor(s). +- EK 7.5.2B Information from a source is considered relevant when it supports an appropriate +claim or the purpose of the investigation. + + +##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-global-impact.md b/text/en/curriculum-guides/apcsp/guide-global-impact.md deleted file mode 100644 index ee343e6545..0000000000 --- a/text/en/curriculum-guides/apcsp/guide-global-impact.md +++ /dev/null @@ -1,9 +0,0 @@ -# Global Impact - -## Overview - -## Reading from the Computer Science Field Guide - -## Learning objectives - -##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-programming-introduction.md b/text/en/curriculum-guides/apcsp/guide-programming-introduction.md index 404d869e8f..c270281c59 100644 --- a/text/en/curriculum-guides/apcsp/guide-programming-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-programming-introduction.md @@ -99,11 +99,11 @@ The above chapter readings include specific knowledge for - EK's marked in bold. - EK 5.5.1A Numbers and numerical concepts are fundamental to programming. - EK 5.5.1B Integers may be constrained in the maximum and minimum values that can be represented in a program because of storage limitations. {panel type="teacher-note" summary="Exclusion EK 5.5.1B"} -EXCLUSION STATEMENT (for - EK 5.5.1B): Specific range limitations of all programming languages are beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 5.5.1B): Specific range limitations of all programming languages are beyond the scope of this course and the AP Exam. {panel end} - EK 5.5.1C Real numbers are approximated by floating-point representations that do not necessarily have infinite precision. {panel type="teacher-note" summary="Exclusion EK 5.5.1C"} -EXCLUSION STATEMENT (for - EK 5.5.1C): Specific sets of values that cannot be exactly represented by floating +EXCLUSION STATEMENT (for EK 5.5.1C): Specific sets of values that cannot be exactly represented by floating point numbers are beyond the scope of this course and the AP Exam. {panel end} - EK 5.5.1D Mathematical expressions using arithmetic operators are part of most programming languages. @@ -111,5 +111,7 @@ point numbers are beyond the scope of this course and the AP Exam. - EK 5.5.1F Compound expressions using and, or, and not are part of most programming languages. - EK 5.5.1G Intuitive and formal reasoning about program components using Boolean concepts helps in developing correct programs. - EK 5.5.1H Computational methods may use lists and collections to solve problems. +- EK 5.5.1I Lists and other collections can be treated as abstract data types (ADTs) in developing programs. +- EK 5.5.1J Basic operations on collections include adding elements, removing elements, iterating over all elements, and determining whether an element is in a collection. ##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md index 4783807db9..89564883bb 100644 --- a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md @@ -1,9 +1,86 @@ # The Internet ## Overview +EU 6.1 The Internet is a network of autonomous systems. +EU 6.2 Characteristics of the Internet influence the systems built on it. +EU 6.3 Cybersecurity is an important concern for the Internet and the systems built on it. ## Reading from the Computer Science Field Guide ## Learning objectives +###LO 6.1.1 Explain the abstractions in the Internet and how the Internet functions. +{panel type="teacher-note" summary="Exclusion LO 6.1.1"} +EXCLUSION STATEMENT (for LO 6.1.1): Specific devices used to implement the abstractions in the Internet are beyond the scope of this course and the AP Exam. +{panel end} + +EK 6.1.1A The Internet connects devices and networks all over the world. +EK 6.1.1B An end-to-end architecture facilitates connecting new devices and networks on the Internet. +EK 6.1.1C Devices and networks that make up the Internet are connected and communicate using addresses and protocols. +EK 6.1.1D The Internet and the systems built on it facilitate collaboration. +EK 6.1.1E Connecting new devices to the Internet is enabled by assignment of an Internet protocol (IP) address. +EK 6.1.1F The Internet is built on evolving standards, including those for addresses and names. +{panel type="teacher-note" summary="Exclusion EK 6.1.1F"} +EXCLUSION STATEMENT (for EK 6.1.1F): Specific details of any particular standard for addresses are beyond the scope of this course and the AP Exam. +{panel end} +EK 6.1.1G The domain name system (DNS) translates names to IP addresses. +EK 6.1.1H The number of devices that could use an IP address has grown so fast that a new protocol (IPv6) has been established to handle routing of many more devices. +EK 6.1.1I Standards such as hypertext transfer protocol (HTTP), IP, and simple mail transfer protocol (SMTP) are developed and overseen by the Internet EngineeringTask Force (IETF). + +###LO 6.2.1 Explain characteristics of the Internet and the systems built on it. + +EK 6.2.1A The Internet and the systems built on it are hierarchical and redundant. +EK 6.2.1B The domain name syntax is hierarchical. +EK 6.2.1C IP addresses are hierarchical. +EK 6.2.1D Routing on the Internet is fault tolerant and redundant. + +###LO 6.2.2 Explain how the characteristics of the Internet influence the systems built on it. +EK 6.2.2A Hierarchy and redundancy help systems scale. +EK 6.2.2B The redundancy of routing (i.e., more than one way to route data) between two points on the Internet increases the reliability of the Internet and helps it scale to more devices and more people. +EK 6.2.2C Hierarchy in the DNS helps that system scale. +EK 6.2.2D Interfaces and protocols enable widespread use of the Internet. +EK 6.2.2E Open standards fuel the growth of the Internet. +EK 6.2.2F The Internet is a packet-switched system through which digital data is sent by breaking the data into blocks of bits called packets, which contain both the data being transmitted and control information for routing the data. +{panel type="teacher-note" summary="Exclusion EK 6.2.2F"} +EXCLUSION STATEMENT (for EK 6.2.2F): Specific details of any particular packet-switching system are beyond the scope of this course and the AP Exam. +{panel end} +EK 6.2.2G Standards for packets and routing include transmission control protocol/Internet protocol (TCP/IP). +{panel type="teacher-note" summary="Exclusion EK 6.2.2G"} +EXCLUSION STATEMENT (for EK 6.2.2G): Specific technical details of howTCP/IP works are beyond the scope of this course and the AP Exam. +{panel end} +EK 6.2.2H Standards for sharing information and communicating between browsers and servers on the Web include HTTP and secure sockets layer/transport layer security (SSL/TLS). +{panel type="teacher-note" summary="Exclusion EK 6.2.2H"} +EXCLUSION STATEMENT (for EK 6.2.2H): Understanding the technical aspects of how SSL/TLS works is beyond the scope of this course and the AP Exam. +{panel end} +EK 6.2.2I The size and speed of systems affect their use. +EK 6.2.2J The bandwidth of a system is a measure of bit rate—the amount of data (measured in bits) that can be sent in a fixed amount of time. +EK 6.2.2K The latency of a system is the time elapsed between the transmission and the receipt of a request. + +###LO 6.3.1 Identify existing cybersecurity concerns and potential options to address these issues with the Internet and the systems built on it. +EK 6.3.1A The trust model of the Internet involves trade-offs. +EK 6.3.1B The DNS was not designed to be completely secure. +EK 6.3.1C Implementing cybersecurity has software, hardware, and human components. +EK 6.3.1D Cyber warfare and cyber crime have widespread and potentially devastating effects. +EK 6.3.1E Distributed denial-of-service attacks (DDoS) compromise a target by flooding it with requests from multiple systems. +EK 6.3.1F Phishing, viruses, and other attacks have human and software components. +EK 6.3.1G Antivirus software and firewalls can help prevent unauthorized access to private data. +EK 6.3.1H Cryptography is essential to many models of cybersecurity. +EK 6.3.1I Cryptography has a mathematical foundation. +{panel type="teacher-note" summary="Exclusion EK 6.3.1I"} +EXCLUSION STATEMENT (for EK 6.3.1I): Specific mathematical functions used in cryptography are beyond the scope of this course and the AP Exam. +{panel end} +EK 6.3.1J Open standards help ensure cryptography is secure. +EK 6.3.1K Symmetric encryption is a method of encryption involving one key for encryption and decryption. +{panel type="teacher-note" summary="Exclusion EK 6.3.1K"} +EXCLUSION STATEMENT (for EK 6.3.1K):The methods used in encryption are beyond the scope of this course and the AP Exam. +{panel end} +EK 6.3.1L Public key encryption, which is not symmetric, is an encryption method that is widely used because of the functionality it provides. +{panel type="teacher-note" summary="Exclusion EK 6.3.1L"} +EXCLUSION STATEMENT (for EK 6.3.1L):The mathematical methods used in public key cryptography are beyond the scope of this course and the AP Exam. +{panel end} +EK 6.3.1M Certificate authorities (CAs) issue digital certificates that validate the ownership of encrypted keys used in secured communications and are based on a trust model. +{panel type="teacher-note" summary="Exclusion EK 6.3.1M"} +EXCLUSION STATEMENT (for EK 6.3.1M):The technical details of the process CAs follow are beyond the scope of this course and the AP Exam. +{panel end} + ##Additions to FG? From f52d5c6bbf509e3378c345a5ddb1f9c96134a83a Mon Sep 17 00:00:00 2001 From: James Atlas Date: Tue, 1 Mar 2016 14:36:32 +1300 Subject: [PATCH 03/63] Updates for todo list and suggestions for additions/modifications for field guide coverage of APCSP --- guide-settings.conf | 1 + .../apcsp/guide-abstraction-introduction.md | 29 +++-- .../apcsp/guide-algorithms-introduction.md | 14 +-- .../apcsp/guide-creativity-introduction.md | 9 +- ...guide-data-and-information-introduction.md | 14 +-- .../apcsp/guide-global-impact-introduction.md | 9 +- .../apcsp/guide-programming-introduction.md | 39 ++++--- .../apcsp/guide-the-internet-introduction.md | 87 +++++++------- text/en/curriculum-guides/apcsp/index.md | 4 + text/en/curriculum-guides/apcsp/todo.md | 106 ++++++++++++++++++ 10 files changed, 203 insertions(+), 109 deletions(-) create mode 100644 text/en/curriculum-guides/apcsp/todo.md diff --git a/guide-settings.conf b/guide-settings.conf index bf20d8843b..8f11473a06 100644 --- a/guide-settings.conf +++ b/guide-settings.conf @@ -43,6 +43,7 @@ curriculum-guides: ncea/assessment-guide-level-3-complexity-tractability-TSP ncea/assessment-guide-level-3-formal-languages-FSA-RE apcsp/index + apcsp/todo apcsp/guide-algorithms-introduction apcsp/guide-abstraction-introduction apcsp/guide-creativity-introduction diff --git a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md index 0aaa7e62a9..97103af295 100644 --- a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md @@ -10,9 +10,10 @@ Start by reading through: - [Data Representation](chapters/data-representation.html) - [Software Engineering - Layers of Abstraction](chapters/software-engineering.html#design-how-do-we-build-it) +- [Programming Languages](chapters/programming-languages.html) ## Learning objectives -The above chapter readings include specific knowledge for EK's marked in bold. +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. ###LO 2.1.1 Describe the variety of abstractions used to represent data. - **EK 2.1.1A Digital data is represented by abstractions at different levels.** @@ -21,7 +22,7 @@ The above chapter readings include specific knowledge for EK's marked in bold. - **EK 2.1.1D Number bases, including binary, decimal, and hexadecimal, are used to represent and investigate digital data.** - **EK 2.1.1E At one of the lowest levels of abstraction, digital data is represented in binary (base 2) using only combinations of the digits zero and one.** {panel type="teacher-note" summary="Exclusion EK 2.1.1E"} -EXCLUSION STATEMENT (for - EK 2.1.1E): Two’s complement conversions are beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 2.1.1E): Two’s complement conversions are beyond the scope of this course and the AP Exam. {panel end} - **EK 2.1.1F Hexadecimal (base 16) is used to represent digital data because hexadecimal representation uses fewer digits than binary.** - **EK 2.1.1G Numbers can be converted from any base to any other base.** @@ -29,23 +30,23 @@ EXCLUSION STATEMENT (for - EK 2.1.1E): Two’s complement conversions are beyond ###LO 2.1.2 Explain how binary sequences are used to represent digital data. - **EK 2.1.2A A finite representation is used to model the infinite mathematical concept of a number.** {panel type="teacher-note" summary="Exclusion EK 2.1.2A"} -EXCLUSION STATEMENT (for - EK 2.1.2A): Binary representations of scientific notation are beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 2.1.2A): Binary representations of scientific notation are beyond the scope of this course and the AP Exam. {panel end} - **EK 2.1.2B In many programming languages, the fixed number of bits used to represent characters or integers limits the range of integer values and mathematical operations; this limitation can result in over flow or other errors.** {panel type="teacher-note" summary="Exclusion EK 2.1.2B"} -EXCLUSION STATEMENT (for - EK 2.1.2B): Range limitations of any one language, compiler, or architecture are beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 2.1.2B): Range limitations of any one language, compiler, or architecture are beyond the scope of this course and the AP Exam. {panel end} - EK 2.1.2C In many programming languages, the fixed number of bits used to represent real numbers (as floating-point numbers) limits the range of floating-point values and mathematical operations; this limitation can result in round off and other errors. - **EK 2.1.2D The interpretation of a binary sequence depends on how it is used.** - EK 2.1.2E A sequence of bits may represent instructions or data. -- EK 2.1.2F A sequence of bits may represent different types of data in different contexts. +- **EK 2.1.2F A sequence of bits may represent different types of data in different contexts.** ###LO 2.2.1 Develop an abstraction when writing a program or creating other computational artifacts. - EK 2.2.1A The process of developing an abstraction involves removing detail and generalizing functionality. - EK 2.2.1B An abstraction extracts common features from specific examples in order to generalize concepts. - EK 2.2.1C An abstraction generalizes functionality with input parameters that allow software reuse. {panel type="teacher-note" summary="Exclusion EK 2.2.1C"} -EXCLUSION STATEMENT (for - EK 2.2.1C): An understanding of the difference between value and reference parameters is beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 2.2.1C): An understanding of the difference between value and reference parameters is beyond the scope of this course and the AP Exam. {panel end} ###LO 2.2.2 Use multiple levels of abstraction to write programs. @@ -53,17 +54,17 @@ EXCLUSION STATEMENT (for - EK 2.2.1C): An understanding of the difference betwee - EK 2.2.2B Being aware of and using multiple levels of abstraction in developing programs helps to more effectively apply available resources and tools to solve problems. ###LO 2.2.3 Identify multiple levels of abstractions that are used when writing programs. -- EK 2.2.3A Different programming languages offer different levels of abstraction. +- **EK 2.2.3A Different programming languages offer different levels of abstraction.** {panel type="teacher-note" summary="Exclusion EK 2.2.3A"} -EXCLUSION STATEMENT (for - EK 2.2.3A): Knowledge of the abstraction capabilities of all programming languages is beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 2.2.3A): Knowledge of the abstraction capabilities of all programming languages is beyond the scope of this course and the AP Exam. {panel end} -- EK 2.2.3B High-level programming languages provide more abstractions for the programmer and make it easier for people to read and write a program. -- EK 2.2.3C Code in a programming language is often translated into code in another (lower level) language to be executed on a computer. -- EK 2.2.3D In an abstraction hierarchy, higher levels of abstraction (the most general concepts) would be placed toward the top and lower level abstractions (the more specific concepts) toward the bottom. +- **EK 2.2.3B High-level programming languages provide more abstractions for the programmer and make it easier for people to read and write a program.** +- **EK 2.2.3C Code in a programming language is often translated into code in another (lower level) language to be executed on a computer.** +- **EK 2.2.3D In an abstraction hierarchy, higher levels of abstraction (the most general concepts) would be placed toward the top and lower level abstractions (the more specific concepts) toward the bottom.** - EK 2.2.3E Binary data is processed by physical layers of computing hardware, including gates, chips, and components. - EK 2.2.3F A logic gate is a hardware abstraction that is modeled by a Boolean function. {panel type="teacher-note" summary="Exclusion EK 2.2.3F"} -EXCLUSION STATEMENT (for - EK 2.2.3F): Memorization of specific gate visual representations is beyond +EXCLUSION STATEMENT (for EK 2.2.3F): Memorization of specific gate visual representations is beyond the scope of this course and the AP Exam. {panel end} - EK 2.2.3G A chip is an abstraction composed of low-level components and circuits that perform a specific function. @@ -87,7 +88,3 @@ the scope of this course and the AP Exam. - EK 2.3.2F Simulations can facilitate extensive and rapid testing of models. - EK 2.3.2G The time required for simulations is impacted by the level of detail and quality of the models and the software and hardware used for the simulation. - EK 2.3.2H Rapid and extensive testing allows models to be changed to accurately reflect the objects or phenomena being modeled. - -##Additions to FG? -- re-work a unit / activity on hardware and software abstraction layers below high level language (from the software engineering one) -- models and simulations (there are some CS unplugged ones) diff --git a/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md b/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md index a93c9b1f56..4de4570683 100644 --- a/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-algorithms-introduction.md @@ -10,14 +10,14 @@ Start by reading through: - [Complexity and Tractability](chapters/complexity-tractability.html) ## Learning objectives -The above chapter readings include specific knowledge for EK's marked in bold. +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. ### LO 4.1.1 Develop an algorithm for implementation in a program - EK 4.1.1A Sequencing, selection, and iteration are building blocks of algorithms. - EK 4.1.1B Sequencing is the application of each step of an algorithm in the order in which the statements are given. - EK 4.1.1C Selection uses a Boolean condition to determine which of two parts of an algorithm is used. -- EK 4.1.1D Iteration is the repetition of part of an algorithm until a condition is met or for a specifed number of times. +- EK 4.1.1D Iteration is the repetition of part of an algorithm until a condition is met or for a specified number of times. - EK 4.1.1E Algorithms can be combined to make new algorithms. - EK 4.1.1F Using existing correct algorithms as building blocks for constructing a new algorithm helps ensure the new algorithm is correct. - **EK 4.1.1G Knowledge of standard algorithms can help in constructing new algorithms.** @@ -73,7 +73,7 @@ EXCLUSION STATEMENT (for EK 4.2.3C): Determining whether a given problem is unde {panel type="teacher-note" summary="Exclusion EK 4.2.4C"} EXCLUSION STATEMENT (for EK 4.2.4C): Formally proving program correctness is beyond the scope of this course and the AP Exam. {panel end} -- -EK 4.2.4D Different correct algorithms for the same problem can have different efficiencies.** +- **EK 4.2.4D Different correct algorithms for the same problem can have different efficiencies.** - **EK 4.2.4E Sometimes, more efficient algorithms are more complex.** - **EK 4.2.4F Finding an efficient algorithm for a problem can help solve larger instances of the problem.** - EK 4.2.4G Efficiency includes both execution time and memory usage. @@ -81,11 +81,3 @@ EXCLUSION STATEMENT (for EK 4.2.4C): Formally proving program correctness is bey EXCLUSION STATEMENT (for EK 4.2.4G): Formal analysis of algorithms (Big-O) and formal reasoning using mathematical formulas are beyond the scope of this course and the AP Exam. {panel end} - **EK 4.2.4H Linear search can be used when searching for an item in any list; binary search can be used only when the list is sorted.** - -##Additions to FG? -- sequencing, selection, iteration as building blocks for algorithms -- algorithm correctness -- combining algorithms -- language choice for algorithms -- theoretical vs empirical analysis -- efficiency of memory usage diff --git a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md index cebd290810..1a05e1ba73 100644 --- a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md @@ -12,7 +12,7 @@ Start by reading through: - [Interface Usability](chapters/human-computer-interaction.html#interface-usability) ## Learning objectives -The above chapter readings include specific knowledge for EK's marked in bold. +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. ###LO 1.1.1 Apply a creative development process when creating computational artifacts. - EK 1.1.1A A creative process in the development of a computational artifact can include, but is not limited to, employing nontraditional, nonprescribed techniques; the use of novel combinations of artifacts, tools, and techniques; and the exploration of personal curiosities. @@ -32,7 +32,7 @@ or interests. ###LO 1.2.3 Create a new computational artifact by combining or modifying existing artifacts. - EK 1.2.3A Creating computational artifacts can be done by combining and modifying existing artifacts or by creating new artifacts. -- EK 1.2.3B Computation facilitates the creation and modi cation of computational artifacts with enhanced detail and precision. +- EK 1.2.3B Computation facilitates the creation and modification of computational artifacts with enhanced detail and precision. - EK 1.2.3C Combining or modifying existing artifacts can show personal expression of ideas. ###LO 1.2.4 Collaborate in the creation of computational artifacts. @@ -56,8 +56,3 @@ in developing computational artifacts. - EK 1.3.1C Digital images can be created by generating pixel patterns, manipulating existing digital images, or combining images. - EK 1.3.1D Digital effects and animations can be created by using existing software or modified software that includes functionality to implement the effects and animations. - EK 1.3.1E Computing enables creative exploration of both real and virtual phenomena. - -##Additions to FG? -- computational tools such as photoshop, virtual synthesizers, etc -- collaborative tools (open source, github/google doc) -- computational artifacts are more than programs diff --git a/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md b/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md index cf66732f37..fd7796cf7e 100644 --- a/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-data-and-information-introduction.md @@ -10,10 +10,13 @@ Start by reading through: - [Data Representation](chapters/data-representation.html) - [Coding](chapters/coding-introduction.html) +- [Compression](chapters/coding-compression.html) +- [Encryption](chapters/coding-encryption.html) +- [Error Control](chapters/coding-error-control.html) - [Human Computer Interaction](chapters/human-computer-interaction.html) ## Learning objectives -The above chapter readings include specific knowledge for EK's marked in bold. +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. ### LO 3.1.1 Find patterns and test hypotheses about digitally processed information to gain insight and knowledge. - EK 3.1.1A Computers are used in an iterative and interactive way when processing digital information to gain insight and knowledge. @@ -65,9 +68,6 @@ EXCLUSION STATEMENT (for EK 3.2.1F): Students are not expected to know specific - EK 3.2.2H Analytical techniques to store, manage, transmit, and process data sets change as the size of data sets scale. ### LO 3.3.1 Analyze how data representation, storage, security, and transmission of data involve computational manipulation of information. -- EK 3.3.1A Digital data representations involve trade-offs related to storage, security, and privacy concerns. -- EK 3.3.1B Security concerns engender trade-offs in storing and transmitting information. -- EK 3.3.1C There are trade-offs in using lossy and lossless compression techniques for storing and transmitting data. - -##Additions to FG? -- data patterns (sequence analysis / cryptography?) +- **EK 3.3.1A Digital data representations involve trade-offs related to storage, security, and privacy concerns.** +- **EK 3.3.1B Security concerns engender trade-offs in storing and transmitting information.** +- **EK 3.3.1C There are trade-offs in using lossy and lossless compression techniques for storing and transmitting data.** diff --git a/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md b/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md index 34642c38fd..cefb0308f3 100644 --- a/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-global-impact-introduction.md @@ -11,12 +11,14 @@ ## Reading from the Computer Science Field Guide ## Learning objectives +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. + ### LO 7.1.1 Explain how computing innovations affect communication, interaction, and cognition. - EK 7.1.1A Email, SMS, and chat have fostered new ways to communicate and collaborate. - EK 7.1.1B Video conferencing and video chat have fostered new ways to communicate and collaborate. - EK 7.1.1C Social media continues to evolve and fosters new ways to communicate. -{panel type="teacher-note" summary="Exclusion - EK 7.1.1C"} -EXCLUSION STATEMENT (for - EK 7.1.1C): Detailed knowledge of any social media site is beyond the scope of this course and the AP Exam. +{panel type="teacher-note" summary="Exclusion EK 7.1.1C"} +EXCLUSION STATEMENT (for EK 7.1.1C): Detailed knowledge of any social media site is beyond the scope of this course and the AP Exam. {panel end} - EK 7.1.1D Cloud computing fosters new ways to communicate and collaborate. - EK 7.1.1E Widespread access to information facilitates the identification of problems, development of solutions, and dissemination of results. @@ -86,6 +88,3 @@ and aggregate levels. - EK 7.5.2A Determining the credibility of a source requires considering and evaluating the reputation and credentials of the author(s), publisher(s), site owner(s), and/or sponsor(s). - EK 7.5.2B Information from a source is considered relevant when it supports an appropriate claim or the purpose of the investigation. - - -##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-programming-introduction.md b/text/en/curriculum-guides/apcsp/guide-programming-introduction.md index c270281c59..f4f25d96a6 100644 --- a/text/en/curriculum-guides/apcsp/guide-programming-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-programming-introduction.md @@ -13,33 +13,34 @@ Start by reading through: - [Programming Languages](chapters/programming-languages.html) - [Software Engineering](chapters/software-engineering.html) +- [Human Computer Interaction](chapters/human-computer-interaction.html) The AP CSP framework does not require a specific programming language but require students to learn programming. Choose one or more of the options from: - [Programming Introduction](chapters/introduction.html#programming) ## Learning objectives -The above chapter readings include specific knowledge for - EK's marked in bold. +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. ### LO 5.1.1 Develop a program for creative expression, to satisfy personal curiosity, or to create new knowledge. -- EK 5.1.1A Programs are developed and used in a variety of ways by a wide range of people depending on the goals of the programmer. -- EK 5.1.1B Programs developed for creative expression, to satisfy personal curiosity, or to create new knowledge may have visual, audible, or tactile inputs and outputs. -- EK 5.1.1C Programs developed for creative expression, to satisfy personal curiosity, or to create new knowledge may be developed with different standards or methods than programs developed for widespread distribution. -- EK 5.1.1D Additional desired outcomes may be realized independently of the original purpose of the program. -- EK 5.1.1E A computer program or the results of running a program may be rapidly shared with a large number of users and can have widespread impact on individuals, organizations, and society. -- EK 5.1.1F Advances in computing have generated and increased creativity in other fields. +- **EK 5.1.1A Programs are developed and used in a variety of ways by a wide range of people depending on the goals of the programmer.** +- **EK 5.1.1B Programs developed for creative expression, to satisfy personal curiosity, or to create new knowledge may have visual, audible, or tactile inputs and outputs.** +- **EK 5.1.1C Programs developed for creative expression, to satisfy personal curiosity, or to create new knowledge may be developed with different standards or methods than programs developed for widespread distribution.** +- **EK 5.1.1D Additional desired outcomes may be realized independently of the original purpose of the program.** +- **EK 5.1.1E A computer program or the results of running a program may be rapidly shared with a large number of users and can have widespread impact on individuals, organizations, and society.** +- **EK 5.1.1F Advances in computing have generated and increased creativity in other fields.** ### LO 5.1.2 Develop a correct program to solve problems. -- EK 5.1.2A An iterative process of program development helps in developing a correct program to solve problems. +- **EK 5.1.2A An iterative process of program development helps in developing a correct program to solve problems.** - EK 5.1.2B Developing correct program components and then combining them helps in creating correct programs. - EK 5.1.2C Incrementally adding tested program segments to correct working programs helps create large correct programs. -- EK 5.1.2D Program documentation helps programmers develop and maintain correct programs to efficiently solve problems. -- EK 5.1.2E Documentation about program components, such as blocks and procedures, helps in developing and maintaining programs. +- **EK 5.1.2D Program documentation helps programmers develop and maintain correct programs to efficiently solve problems.** +- **EK 5.1.2E Documentation about program components, such as blocks and procedures, helps in developing and maintaining programs.** - EK 5.1.2F Documentation helps in developing and maintaining programs when working individually or in collaborative programming environments. -- EK 5.1.2G Program development includes identifying programmer and user concerns that affect the solution to problems. -- EK 5.1.2H Consultation and communication with program users is an important aspect of program development to solve problems. -- EK 5.1.2I A programmer’s knowledge and skill affects how a program is developed and how it is used to solve a problem. -- EK 5.1.2J A programmer designs, implements, tests, debugs, and maintains programs when solving problems. +- **EK 5.1.2G Program development includes identifying programmer and user concerns that affect the solution to problems.** +- **EK 5.1.2H Consultation and communication with program users is an important aspect of program development to solve problems.** +- **EK 5.1.2I A programmer’s knowledge and skill affects how a program is developed and how it is used to solve a problem.** +- **EK 5.1.2J A programmer designs, implements, tests, debugs, and maintains programs when solving problems.** ### LO 5.1.3 Collaborate to develop a program. - EK 5.1.3A Collaboration can decrease the size and complexity of tasks required of individual programmers. @@ -50,7 +51,7 @@ The above chapter readings include specific knowledge for - EK's marked in bold. - EK 5.1.3F Effective communication between participants is required for successful collaboration when developing programs. ### LO 5.2.1 Explain how programs implement algorithms. -- EK 5.2.1A Algorithms are implemented using program instructions that are processed during program execution. +- **EK 5.2.1A Algorithms are implemented using program instructions that are processed during program execution.** - EK 5.2.1B Program instructions are executed sequentially. - EK 5.2.1C Program instructions may involve variables that are initialized and updated, read, and written. - EK 5.2.1D An understanding of instruction processing and program execution is useful for programming. @@ -96,12 +97,12 @@ The above chapter readings include specific knowledge for - EK's marked in bold. - EK 5.4.1N The functionality of a program is best described at a high level by what the program does, not at the lower level of how the program statements work to accomplish this. ### LO 5.5.1 Employ appropriate mathematical and logical concepts in programming. -- EK 5.5.1A Numbers and numerical concepts are fundamental to programming. -- EK 5.5.1B Integers may be constrained in the maximum and minimum values that can be represented in a program because of storage limitations. +- **EK 5.5.1A Numbers and numerical concepts are fundamental to programming.** +- **EK 5.5.1B Integers may be constrained in the maximum and minimum values that can be represented in a program because of storage limitations.** {panel type="teacher-note" summary="Exclusion EK 5.5.1B"} EXCLUSION STATEMENT (for EK 5.5.1B): Specific range limitations of all programming languages are beyond the scope of this course and the AP Exam. {panel end} -- EK 5.5.1C Real numbers are approximated by floating-point representations that do not necessarily have infinite precision. +- **EK 5.5.1C Real numbers are approximated by floating-point representations that do not necessarily have infinite precision.** {panel type="teacher-note" summary="Exclusion EK 5.5.1C"} EXCLUSION STATEMENT (for EK 5.5.1C): Specific sets of values that cannot be exactly represented by floating point numbers are beyond the scope of this course and the AP Exam. @@ -113,5 +114,3 @@ point numbers are beyond the scope of this course and the AP Exam. - EK 5.5.1H Computational methods may use lists and collections to solve problems. - EK 5.5.1I Lists and other collections can be treated as abstract data types (ADTs) in developing programs. - EK 5.5.1J Basic operations on collections include adding elements, removing elements, iterating over all elements, and determining whether an element is in a collection. - -##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md index 89564883bb..dbf76e2210 100644 --- a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md @@ -1,86 +1,87 @@ # The Internet ## Overview -EU 6.1 The Internet is a network of autonomous systems. -EU 6.2 Characteristics of the Internet influence the systems built on it. -EU 6.3 Cybersecurity is an important concern for the Internet and the systems built on it. +- EU 6.1 The Internet is a network of autonomous systems. +- EU 6.2 Characteristics of the Internet influence the systems built on it. +- EU 6.3 Cybersecurity is an important concern for the Internet and the systems built on it. ## Reading from the Computer Science Field Guide +- [Network Communication Protocols](chapters/network-communication-protocols.html) +- [Coding - Encryption](chapters/coding-encryption.html) ## Learning objectives +The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. ###LO 6.1.1 Explain the abstractions in the Internet and how the Internet functions. {panel type="teacher-note" summary="Exclusion LO 6.1.1"} EXCLUSION STATEMENT (for LO 6.1.1): Specific devices used to implement the abstractions in the Internet are beyond the scope of this course and the AP Exam. {panel end} -EK 6.1.1A The Internet connects devices and networks all over the world. -EK 6.1.1B An end-to-end architecture facilitates connecting new devices and networks on the Internet. -EK 6.1.1C Devices and networks that make up the Internet are connected and communicate using addresses and protocols. -EK 6.1.1D The Internet and the systems built on it facilitate collaboration. -EK 6.1.1E Connecting new devices to the Internet is enabled by assignment of an Internet protocol (IP) address. -EK 6.1.1F The Internet is built on evolving standards, including those for addresses and names. +- EK 6.1.1A The Internet connects devices and networks all over the world. +- EK 6.1.1B An end-to-end architecture facilitates connecting new devices and networks on the Internet. +- **EK 6.1.1C Devices and networks that make up the Internet are connected and communicate using addresses and protocols.** +- EK 6.1.1D The Internet and the systems built on it facilitate collaboration. +- EK 6.1.1E Connecting new devices to the Internet is enabled by assignment of an Internet protocol (IP) address. +- EK 6.1.1F The Internet is built on evolving standards, including those for addresses and names. {panel type="teacher-note" summary="Exclusion EK 6.1.1F"} EXCLUSION STATEMENT (for EK 6.1.1F): Specific details of any particular standard for addresses are beyond the scope of this course and the AP Exam. {panel end} -EK 6.1.1G The domain name system (DNS) translates names to IP addresses. -EK 6.1.1H The number of devices that could use an IP address has grown so fast that a new protocol (IPv6) has been established to handle routing of many more devices. -EK 6.1.1I Standards such as hypertext transfer protocol (HTTP), IP, and simple mail transfer protocol (SMTP) are developed and overseen by the Internet EngineeringTask Force (IETF). +- EK 6.1.1G The domain name system (DNS) translates names to IP addresses. +- EK 6.1.1H The number of devices that could use an IP address has grown so fast that a new protocol (IPv6) has been established to handle routing of many more devices. +- EK 6.1.1I Standards such as hypertext transfer protocol (HTTP), IP, and simple mail transfer protocol (SMTP) are developed and overseen by the Internet Engineering Task Force (IETF). ###LO 6.2.1 Explain characteristics of the Internet and the systems built on it. -EK 6.2.1A The Internet and the systems built on it are hierarchical and redundant. -EK 6.2.1B The domain name syntax is hierarchical. -EK 6.2.1C IP addresses are hierarchical. -EK 6.2.1D Routing on the Internet is fault tolerant and redundant. +- EK 6.2.1A The Internet and the systems built on it are hierarchical and redundant. +- EK 6.2.1B The domain name syntax is hierarchical. +- EK 6.2.1C IP addresses are hierarchical. +- EK 6.2.1D Routing on the Internet is fault tolerant and redundant. ###LO 6.2.2 Explain how the characteristics of the Internet influence the systems built on it. -EK 6.2.2A Hierarchy and redundancy help systems scale. -EK 6.2.2B The redundancy of routing (i.e., more than one way to route data) between two points on the Internet increases the reliability of the Internet and helps it scale to more devices and more people. -EK 6.2.2C Hierarchy in the DNS helps that system scale. -EK 6.2.2D Interfaces and protocols enable widespread use of the Internet. -EK 6.2.2E Open standards fuel the growth of the Internet. -EK 6.2.2F The Internet is a packet-switched system through which digital data is sent by breaking the data into blocks of bits called packets, which contain both the data being transmitted and control information for routing the data. +- EK 6.2.2A Hierarchy and redundancy help systems scale. +- EK 6.2.2B The redundancy of routing (i.e., more than one way to route data) between two points on the Internet increases the reliability of the Internet and helps it scale to more devices and more people. +- EK 6.2.2C Hierarchy in the DNS helps that system scale. +- **EK 6.2.2D Interfaces and protocols enable widespread use of the Internet.** +- EK 6.2.2E Open standards fuel the growth of the Internet. +- **EK 6.2.2F The Internet is a packet-switched system through which digital data is sent by breaking the data into blocks of bits called packets, which contain both the data being transmitted and control information for routing the data.** {panel type="teacher-note" summary="Exclusion EK 6.2.2F"} EXCLUSION STATEMENT (for EK 6.2.2F): Specific details of any particular packet-switching system are beyond the scope of this course and the AP Exam. {panel end} -EK 6.2.2G Standards for packets and routing include transmission control protocol/Internet protocol (TCP/IP). +- **EK 6.2.2G Standards for packets and routing include transmission control protocol/Internet protocol (TCP/IP).** {panel type="teacher-note" summary="Exclusion EK 6.2.2G"} -EXCLUSION STATEMENT (for EK 6.2.2G): Specific technical details of howTCP/IP works are beyond the scope of this course and the AP Exam. +EXCLUSION STATEMENT (for EK 6.2.2G): Specific technical details of how TCP/IP works are beyond the scope of this course and the AP Exam. {panel end} -EK 6.2.2H Standards for sharing information and communicating between browsers and servers on the Web include HTTP and secure sockets layer/transport layer security (SSL/TLS). +- **EK 6.2.2H Standards for sharing information and communicating between browsers and servers on the Web include HTTP and secure sockets layer/transport layer security (SSL/TLS).** {panel type="teacher-note" summary="Exclusion EK 6.2.2H"} EXCLUSION STATEMENT (for EK 6.2.2H): Understanding the technical aspects of how SSL/TLS works is beyond the scope of this course and the AP Exam. {panel end} -EK 6.2.2I The size and speed of systems affect their use. -EK 6.2.2J The bandwidth of a system is a measure of bit rate—the amount of data (measured in bits) that can be sent in a fixed amount of time. -EK 6.2.2K The latency of a system is the time elapsed between the transmission and the receipt of a request. +- EK 6.2.2I The size and speed of systems affect their use. +- EK 6.2.2J The bandwidth of a system is a measure of bit rate—the amount of data (measured in bits) that can be sent in a fixed amount of time. +- EK 6.2.2K The latency of a system is the time elapsed between the transmission and the receipt of a request. ###LO 6.3.1 Identify existing cybersecurity concerns and potential options to address these issues with the Internet and the systems built on it. -EK 6.3.1A The trust model of the Internet involves trade-offs. -EK 6.3.1B The DNS was not designed to be completely secure. -EK 6.3.1C Implementing cybersecurity has software, hardware, and human components. -EK 6.3.1D Cyber warfare and cyber crime have widespread and potentially devastating effects. -EK 6.3.1E Distributed denial-of-service attacks (DDoS) compromise a target by flooding it with requests from multiple systems. -EK 6.3.1F Phishing, viruses, and other attacks have human and software components. -EK 6.3.1G Antivirus software and firewalls can help prevent unauthorized access to private data. -EK 6.3.1H Cryptography is essential to many models of cybersecurity. -EK 6.3.1I Cryptography has a mathematical foundation. +- EK 6.3.1A The trust model of the Internet involves trade-offs. +- EK 6.3.1B The DNS was not designed to be completely secure. +- EK 6.3.1C Implementing cybersecurity has software, hardware, and human components. +- EK 6.3.1D Cyber warfare and cyber crime have widespread and potentially devastating effects. +- EK 6.3.1E Distributed denial-of-service attacks (DDoS) compromise a target by flooding it with requests from multiple systems. +- EK 6.3.1F Phishing, viruses, and other attacks have human and software components. +- EK 6.3.1G Antivirus software and firewalls can help prevent unauthorized access to private data. +- **EK 6.3.1H Cryptography is essential to many models of cybersecurity.** +- **EK 6.3.1I Cryptography has a mathematical foundation.** {panel type="teacher-note" summary="Exclusion EK 6.3.1I"} EXCLUSION STATEMENT (for EK 6.3.1I): Specific mathematical functions used in cryptography are beyond the scope of this course and the AP Exam. {panel end} -EK 6.3.1J Open standards help ensure cryptography is secure. -EK 6.3.1K Symmetric encryption is a method of encryption involving one key for encryption and decryption. +- EK 6.3.1J Open standards help ensure cryptography is secure. +- **EK 6.3.1K Symmetric encryption is a method of encryption involving one key for encryption and decryption.** {panel type="teacher-note" summary="Exclusion EK 6.3.1K"} EXCLUSION STATEMENT (for EK 6.3.1K):The methods used in encryption are beyond the scope of this course and the AP Exam. {panel end} -EK 6.3.1L Public key encryption, which is not symmetric, is an encryption method that is widely used because of the functionality it provides. +- **EK 6.3.1L Public key encryption, which is not symmetric, is an encryption method that is widely used because of the functionality it provides.** {panel type="teacher-note" summary="Exclusion EK 6.3.1L"} EXCLUSION STATEMENT (for EK 6.3.1L):The mathematical methods used in public key cryptography are beyond the scope of this course and the AP Exam. {panel end} -EK 6.3.1M Certificate authorities (CAs) issue digital certificates that validate the ownership of encrypted keys used in secured communications and are based on a trust model. +- EK 6.3.1M Certificate authorities (CAs) issue digital certificates that validate the ownership of encrypted keys used in secured communications and are based on a trust model. {panel type="teacher-note" summary="Exclusion EK 6.3.1M"} EXCLUSION STATEMENT (for EK 6.3.1M):The technical details of the process CAs follow are beyond the scope of this course and the AP Exam. {panel end} - -##Additions to FG? diff --git a/text/en/curriculum-guides/apcsp/index.md b/text/en/curriculum-guides/apcsp/index.md index 42b9bf6ed1..b86ab7597f 100644 --- a/text/en/curriculum-guides/apcsp/index.md +++ b/text/en/curriculum-guides/apcsp/index.md @@ -2,6 +2,10 @@ These curriculum guides have been written to assist teachers for the Advanced Placement Computer Science Principles course. *Note: These guides are still a work in progress.* +{version-specific-content version="teacher"} +Check out the [To Do List](curriculum-guides/apcsp/todo.html) +{version-specific-content end} + *We recommend following one of the full course curriculum listed on the [APCSP](http://apcsp.org/) and using these guides to integrate CS field guide resources for specific units or lessons. Descriptions of the big ideas, learning objectives, and essential knowledge statements are directly from CC BY-SA 4.0 licensed APCSP resources* >The major areas of study in the course are organized around seven big ideas, which encompass ideas foundational to studying computer science. These big ideas connect students to a curriculum scope that includes the diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md new file mode 100644 index 0000000000..9f5646a1b3 --- /dev/null +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -0,0 +1,106 @@ +#To Do +{version-specific-content version="teacher"} +Several learning objectives are not currently covered by the CS Field Guide. +This "to-do" list includes general computer science topics and suggestions for how we can update the field guide to cover the learning objectives. Different levels of changes are suggested: + +- new chapter: some topics are best put into stand-alone new field guide chapters + - Hardware Abstractions + - Software Abstractions + - Models and Simulation + - Network Systems + - Logic +- new section: add a new X.Y major section to chapter X +- new sub-section: add a new X.Y.Z minor section to section Y of chapter X +- edits to existing text content to use specific terminology + +##Abstraction +- floating point representation + - **new section in data-representation** +- bit representation of program instructions (not just data) + - **new section in programming-languages OR part of new chapter on hardware abstractions** +- abstraction process: removing irrelevant details, extracting common features + - **part of new chapter on hardware abstractions** +- explicit section on functions/functional abstraction + - **new section in programming-languages OR part of new chapter on software abstractions** +- re-work a unit / activity on hardware and software abstraction layers below high level language (from the software engineering one) + - **new chapter on hardware OR software abstractions** +- equate level of language with concept of abstraction + - **additional wording in end of 3.1 intro to programming-languages** +- models and simulations (there are some CS unplugged ones) + - **new chapter on models-simulations** + +##Algorithms +- sequencing, selection, iteration as building blocks for algorithms + - **new sub-section with specific terms in section 2.4** +- algorithm correctness + - **new sub-section in 2.1** +- decidability + - **new sub-section in 2.4** +- combining algorithms + - **add terms to 2.1** +- language choice for algorithms + - **better description at end of section 2.1.1** +- theoretical vs empirical analysis + - **additional paragraph in 2.1.2** +- efficiency of memory usage + - **additional paragraph in 2.1.2** + +##Creativity +- collaborative tools (open source, github/google doc) + - **new chapter on data analysis, visualization, processing, etc.** +- computational artifacts as more than programs + - **new chapter on data analysis, visualization, processing, etc.** +- computational tools to transform digital media industries such as photoshop, virtual synthesizers, etc + - **new chapter on data analysis, visualization, processing, etc.** + +##Data +- large data sets (databases), queries, filtering + - **new chapter on data analysis, visualization, processing, etc.** +- data patterns (sequence analysis / cryptography?) + - **new chapter on data analysis, visualization, processing, etc.** +- collaboration over data (forms, spreadsheets, online multi-edit) + - **new chapter on data analysis, visualization, processing, etc.** +- data visualization (tables, diagrams) + - **new chapter on data analysis, visualization, processing, etc.** +- metadata + - **new chapter on data analysis, visualization, processing, etc.** + +##Impact +**Most AP curriculum include specific lesson plans to cover these topic by requiring +the students to research online after/during reading of the Blown to Bits book (freely available online). A teaching guide on how to use Blown to Bits in the classroom along with discussion questions and essay/project ideas should be sufficient. No new CS Field Guide content is suggested for these.** +- computer ethics +- social computing + +##Programming +- program components (modularity) + - **additional sub-section in software-engineering** +- program documentation + - **re-wording or new sub-section in software-engineering; include self-documenting approaches** +- collaboration and communication within programming teams + - **add sub-section on Scrum, issue tracking and/or other communication mechanisms to 16.6** +- program execution / implementation of algorithm + - **new chapter on software/hardware abstraction** +- solving larger classes of problems with hardware and algorithm improvements over time + - **add sub-section to 11.2 about some simple algorithms that now scale to millions of CPU cores that are solving real problems - possibly genomics, image processing for medical purposes, etc.** +- procedures, functions, strings, lists, common programming library functions, APIs + - **new chapter on software abstraction** +- software quality, code metrics + - **new section in software-engineering** +- debugging + - **new chapter on software abstraction** +- functionality vs unit testing, program correctness, justification + - **new subsection in software-engineering 16.4** +- operators + - **new chapter on software abstraction** +- boolean logic, algebra + - **new chapter on logic** + +##Internet +**New chapter on Network Systems with sections for the below** +- internet system model: hierarchy, redundancy, fault tolerance (addresses, protocols, services) +- bandwidth, latency +- cybersecurity (DDoS, phishing, viruses, firewalls) +- trust model, DNS, CAs +- open standards for routing, cryptography, protocols + +{version-specific-content end} From bf64a7e402e6036eefe5257572ab12fcbe109518 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Fri, 18 Mar 2016 15:12:09 +1300 Subject: [PATCH 04/63] Phases added to ToDo list. Added first draft for smaller phase 1 content edits. Added new sub-section to algorithms for sequencing, selection, iteration. --- text/en/chapters/algorithms.md | 52 ++++++++++++++++++++++- text/en/chapters/programming-languages.md | 2 + text/en/curriculum-guides/apcsp/todo.md | 28 ++++++------ 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index 3d3addbc36..9c471aefb6 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -107,7 +107,8 @@ But here's another program that implements exactly the same algorithm, this time {image filename="highscore-in-scratch.png" alt="High score program in Scratch"} -Both of the above programs are the same algorithm. +Both of the above programs are the same algorithm. Programming languages are often created or adapted to better suit a specific problem domain. For example, it is easier to express mathematical algorithms in Python than Scratch. Similarly, data flow algorithms are easier to express in visual programming languages like LabVIEW than Python. + In this chapter we'll look in more detail about what an algorithm is, and why they are such a fundamental idea in computer science. Because algorithms exist even if they aren't turned in to programs, we won't need to look at programs at all for this topic, unless you particularly want to. @@ -352,6 +353,55 @@ There are dozens of sorting algorithms that have been invented; most of the ones {video url="http://www.youtube.com/watch?v=kPRA0W1kECg"} +## What makes an algorithm? +We've looked at algorithms that solved well known computational problems of sorting and searching data. When a computer scientist approaches a new computational problem that does not already have a well known solution they must create an algorithm. + +There are three building blocks to develop a new algorithm: sequencing, selection, and iteration. One interesting early result in computer science is that combined, these three building blocks are actually sufficient to represent any algorithm that solves a computational problem. + +### Sequencing +Sequencing is the technique of deciding the order instructions are executed to produce the correct result. Imagine that we have the following instructions (A, B, C) to make a loaf of bread: + +- **A** llow to sit at room temperature for 1 hour +- **B** ake for 30 minutes +- **C** ombine ingredients + +C->A->B is a standard algorithm for a yeast bread. A different sequence, for example C->B->A, might produce a result that is edible but not high quality. Even worse, a sequence of B->C->A would not even produce something edible. + +### Selection +Selection is the technique of allowing the algorithm to select which instructions to execute depending on criteria. Using our previous bread baking example, our algorithm C->A->B works if the ingredients include yeast, but C->B would be faster if the ingredients do not include yeast (for example, the recipe might include baking powder as the rising agent). Selection allows us to create one algorithm to solve both cases: + +1. Combine ingredients +2. **If ingredients contain yeast,** allow to sit at room temperature for 1 hour +3. Bake for 30 minutes + +### Iteration +Iteration allows an algorithm to repeat instructions. In its simplest form we might specify the exact number of times. For example, here is an algorithm to bake 2 loaves of bread: + +1. **Repeat 2 times:** + 1. Combine ingredients + 2. If ingredients contain yeast, allow to sit at room temperature for 1 hour + 3. Bake for 30 minutes + +This algorithm clearly works but it would take at least 3 hours to complete! If we had to make 20 loaves we would probably want to design a better algorithm. We could measure the size of the mixing bowl, how many loaves fit on the table to rise, and how many loaves we could bake at the same time in the oven. Our algorithm might then look like: + +1. **Repeat 10 times**: + 1. Combine ingredients **for 2 loaves** + 2. **Split dough into 2 bread pans** + 3. If ingredients contain yeast, allow to sit at room temperature for 1 hour + 4. Bake bread pans in the same oven for 30 minutes + +But what if we upgraded to a larger kitchen? Most algorithms are written to combine iteration with selection to handle arbitrarily large amounts of data (i.e. an unknown number of loaves of bread). We might create a general purpose bread baking algorithm: + +1. **While we have enough ingredients for at least one loaf:** + 1. Combine ingredients **for up to X loaves** (where X is the maximum number of loaves that can fit in the mixing bowl or rising table) + 2. Split dough into X bread pans + 3. If ingredients contain yeast, allow to sit at room temperature for 1 hour + 4. **While there are still bread pans on the rising table:** + 1. Move **up to Y loaves** from the rising table to the oven (where Y is the maximum number of loaves that can fit in the oven) + 2. Bake bread pans in the same oven for 30 minutes + +*Astute observers will note that this algorithm is still inefficient because the rising table and oven are not used at the same time. Designing algorithms that take advantage of parallelism is an important advanced topic in computer science.* + ## The whole story! We've only really scratched the surface of algorithms in this chapter, as there are millions of different algorithms for millions of different problems! Algorithms are used in maths, route planning, network planning and operation, problem solving, artificial intelligence, genetic programming, computer vision, the list goes on and on! But by going through this chapter you should have gained an understanding of the key concepts of algorithms and will be well prepared to tackle more complicated ones in the future. diff --git a/text/en/chapters/programming-languages.md b/text/en/chapters/programming-languages.md index ab4606a407..fad2c21557 100644 --- a/text/en/chapters/programming-languages.md +++ b/text/en/chapters/programming-languages.md @@ -158,6 +158,8 @@ So instead of building computers that can understand these high level instructio The conversion from a high level to a low level language can involve *compiling*, which replaces the high level instructions with machine code instructions that can then be run, or it can be done by *interpreting*, where each instruction is converted and followed one by one, as the program is run. In reality, a lot of languages use a mixture of these, sometimes compiling a program to an intermediate language, then interpreting it (Java does this). The language we looked at earlier, Python, is an interpreted language. Other languages such as C++ are compiled. We will talk more about compiling and interpreting later. +Different levels of programming languages are an abstraction that allows programmers to concern themselves with only the necessary details of a single level. High level programmers can produce sophisticated programs in Python without expert knowledge of low level languages such as MIPS, x86, or ARM. Low level programmers can produce embedded programs in ARM without expert knowledge of electronic circuitry. + We will start with looking at low level languages and how computers actually carry out the instructions in them, then we will look at some other programming languages that programmers use to give instructions to computers, and then finally we will talk about how we convert programs that were written by humans in a high level language into a low level language that the computer can carry out. ## Machine Code (Low level languages) diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md index 9f5646a1b3..363c6d6bc8 100644 --- a/text/en/curriculum-guides/apcsp/todo.md +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -5,8 +5,8 @@ This "to-do" list includes general computer science topics and suggestions for h - new chapter: some topics are best put into stand-alone new field guide chapters - Hardware Abstractions - - Software Abstractions - - Models and Simulation + - Software Abstractions [Phase4] + - Models and Simulation [Phase3] - Network Systems - Logic - new section: add a new X.Y major section to chapter X @@ -17,7 +17,7 @@ This "to-do" list includes general computer science topics and suggestions for h - floating point representation - **new section in data-representation** - bit representation of program instructions (not just data) - - **new section in programming-languages OR part of new chapter on hardware abstractions** + - **new section in programming-languages OR part of new chapter on hardware abstractions** [Phase2] - abstraction process: removing irrelevant details, extracting common features - **part of new chapter on hardware abstractions** - explicit section on functions/functional abstraction @@ -25,25 +25,25 @@ This "to-do" list includes general computer science topics and suggestions for h - re-work a unit / activity on hardware and software abstraction layers below high level language (from the software engineering one) - **new chapter on hardware OR software abstractions** - equate level of language with concept of abstraction - - **additional wording in end of 3.1 intro to programming-languages** + - **additional wording in end of 3.1 intro to programming-languages** [Phase1] - models and simulations (there are some CS unplugged ones) - **new chapter on models-simulations** ##Algorithms - sequencing, selection, iteration as building blocks for algorithms - - **new sub-section with specific terms in section 2.4** + - **new sub-section with specific terms in section 2.4** [Phase1] - algorithm correctness - - **new sub-section in 2.1** + - **new sub-section in 2.1** [Phase1] - decidability - - **new sub-section in 2.4** + - **new section in 11.?** [Phase2] - combining algorithms - - **add terms to 2.1** + - **add terms to 2.1** [Phase1] - language choice for algorithms - - **better description at end of section 2.1.1** + - **better description at end of section 2.1.1** [Phase1] - theoretical vs empirical analysis - - **additional paragraph in 2.1.2** + - **additional paragraph in 2.1.2** [Phase2] - efficiency of memory usage - - **additional paragraph in 2.1.2** + - **additional paragraph in 2.1.2** [Phase2] ##Creativity - collaborative tools (open source, github/google doc) @@ -77,11 +77,11 @@ the students to research online after/during reading of the Blown to Bits book ( - program documentation - **re-wording or new sub-section in software-engineering; include self-documenting approaches** - collaboration and communication within programming teams - - **add sub-section on Scrum, issue tracking and/or other communication mechanisms to 16.6** + - **add sub-section on Scrum, issue tracking and/or other communication mechanisms to 16.6** [Phase2] - program execution / implementation of algorithm - **new chapter on software/hardware abstraction** - solving larger classes of problems with hardware and algorithm improvements over time - - **add sub-section to 11.2 about some simple algorithms that now scale to millions of CPU cores that are solving real problems - possibly genomics, image processing for medical purposes, etc.** + - **add sub-section to 11.2 about some simple algorithms that now scale to millions of CPU cores that are solving real problems - possibly genomics, image processing for medical purposes, etc.** [Phase2] - procedures, functions, strings, lists, common programming library functions, APIs - **new chapter on software abstraction** - software quality, code metrics @@ -89,7 +89,7 @@ the students to research online after/during reading of the Blown to Bits book ( - debugging - **new chapter on software abstraction** - functionality vs unit testing, program correctness, justification - - **new subsection in software-engineering 16.4** + - **new subsection in software-engineering 16.4** [Phase2] - operators - **new chapter on software abstraction** - boolean logic, algebra From 94eea9c199536c292c5b1ce33fe1239294ae37b2 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Thu, 24 Mar 2016 09:51:07 +1300 Subject: [PATCH 05/63] Phase 1 draft additions --- text/en/chapters/algorithms.md | 29 +++++++++++++++++++++++-- text/en/curriculum-guides/apcsp/todo.md | 10 ++++----- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index 9c471aefb6..02720626c9 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -107,7 +107,7 @@ But here's another program that implements exactly the same algorithm, this time {image filename="highscore-in-scratch.png" alt="High score program in Scratch"} -Both of the above programs are the same algorithm. Programming languages are often created or adapted to better suit a specific problem domain. For example, it is easier to express mathematical algorithms in Python than Scratch. Similarly, data flow algorithms are easier to express in visual programming languages like LabVIEW than Python. +Both of the above programs are the same algorithm. Programming languages are often created or adapted to express algorithms clearly for a specific problem domain. For example, it is easier to read mathematical algorithms in Python than Scratch. Similarly, data flow algorithms are clearer in visual programming languages like LabVIEW than Python. In this chapter we'll look in more detail about what an algorithm is, and why they are such a fundamental idea in computer science. Because algorithms exist even if they aren't turned in to programs, we won't need to look at programs at all for this topic, unless you particularly want to. @@ -140,6 +140,18 @@ The amount of time a program which performs the algorithm takes to complete may The number of operations (such as comparisons of data items) that an algorithm makes however will not change depending on the speed of a computer, or the programming language the program using the algorithm is written in. Some algorithms will always make the same number of comparisons for a certain input size, while others might vary. +### Algorithm Correctness +If we develop or are given an algorithm to solve a problem, how do we know that it works? Sometimes we test the algorithm on specific cases for input. While this is a useful practice and can help verify that we are on the right track, it is not enough to show that our algorithm is correct. The old adage "even a broken watch is correct twice a day" is a good analogy. Even an algorithm that is correct for two inputs might be incorrect for every other input. A computer scientist must reason formally or mathematically about an algorithm to show its correctness. Typically this is done by classifying ranges of input values and showing that algorithm produces expected results for boundary values of the range and all values in between. + +Correctness is particularly important when comparing two algorithms that solve the same problem. If one algorithm is very fast to complete but produces incorrect results some of the time it may be far less useful than a correct algorithm that is slower. Correctness is also important when using an algorithm as the building block for another algorithm. Here is a greedy algorithm for roommate assignment: + +1. Search for the remaining student with the highest GPA +2. Assign the highest GPA student their highest preference roommate from the remaining students +3. Repeat 1-2 until no students remain + +This algorithm relies on a correct search algorithm in the first step. If the search algorithm incorrectly chose a random student, the greedy algorithm for roommate assignment would also be incorrect. + +As you will see in this chapter with searching and sorting there exist multiple correct algorithms for the same problem. Often there are good reasons to know multiple correct algorithms because there are tradeoffs in simplicity, algorithm cost, and assumptions about inputs. ### Searching and Sorting @@ -402,6 +414,19 @@ But what if we upgraded to a larger kitchen? Most algorithms are written to comb *Astute observers will note that this algorithm is still inefficient because the rising table and oven are not used at the same time. Designing algorithms that take advantage of parallelism is an important advanced topic in computer science.* +### Combining Algorithms +One of the advantages of the building blocks perspective is that completed algorithms themselves can now be seen as new blocks we can build with. We can connect complete algorithms or we can interleave parts of algorithms to create new algorithms. + +For example, a recipe for croutons might be: + +1. Cut a loaf of bread into 2cm cubes +2. Brush cubes lightly with olive oil and season with salt, pepper, and herbs +3. Bake on large tray, flipping the cubes halfway through + +We can connect the algorithm for baking bread in the previous section to this algorithm to create a new algorithm that makes croutons from scratch. If we required other ingredients for our recipe, we could connect multiple algorithms to build very complex algorithms. + +Often when we have multiple algorithms that solve a problem there are advantages of each algorithm for specific cases. Hybrid algorithms take parts of multiple algorithms and combine them to gain the advantages of both original algorithms. For example, Timsort is one of the fastest known sorting algorithms in practice and it uses parts of insertion sort and merge sort. Insertion sort is used on very small sequences to take advantage of its speed for already or partially ordered sequences. Merge sort is used to merge these small sequences into larger ones to take advantage of the better upper bound on algorithm cost for large data sets. + ## The whole story! We've only really scratched the surface of algorithms in this chapter, as there are millions of different algorithms for millions of different problems! Algorithms are used in maths, route planning, network planning and operation, problem solving, artificial intelligence, genetic programming, computer vision, the list goes on and on! But by going through this chapter you should have gained an understanding of the key concepts of algorithms and will be well prepared to tackle more complicated ones in the future. @@ -434,7 +459,7 @@ To make things even more complicated, in practice algorithms are running on comp - [CS Unplugged Searching algorithms](http://csunplugged.org/searching-algorithms) - CS Unplugged [Sorting algorithms](http://csunplugged.org/sorting-algorithms) - [Searching algorithm game, may not be suitable](http://csunplugged.org/divideAndConquer) -- Wikipedia has more details on [Linear Search](http://en.wikipedia.org/wiki/Linear_search), [Binary Search](http://en.wikipedia.org/wiki/Binary_search), [Selection sort](http://en.wikipedia.org/wiki/Selection_sort), [Insertion sort](http://en.wikipedia.org/wiki/Insertion_sort) and [Quicksort](http://en.wikipedia.org/wiki/Quicksort). +- Wikipedia has more details on [Linear Search](http://en.wikipedia.org/wiki/Linear_search), [Binary Search](http://en.wikipedia.org/wiki/Binary_search), [Selection sort](http://en.wikipedia.org/wiki/Selection_sort), [Insertion sort](http://en.wikipedia.org/wiki/Insertion_sort), [Quicksort](http://en.wikipedia.org/wiki/Quicksort), and [Timsort](http://en.wikipedia.org/wiki/Timsort). - The [Sorting Bricks game](http://mathsite.math.berkeley.edu/sorting/brick.html) is a great way to learn about several sorting algorithms (requires Java). - [Sorting Algorithms Visualisations](http://www.sorting-algorithms.com/) shows several different sorting algorithms racing and contains information and pseudocode for each. - [Beginner's Guide to Big O Notation](http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/) diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md index 363c6d6bc8..8f3d986e6b 100644 --- a/text/en/curriculum-guides/apcsp/todo.md +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -25,21 +25,21 @@ This "to-do" list includes general computer science topics and suggestions for h - re-work a unit / activity on hardware and software abstraction layers below high level language (from the software engineering one) - **new chapter on hardware OR software abstractions** - equate level of language with concept of abstraction - - **additional wording in end of 3.1 intro to programming-languages** [Phase1] + - **additional wording in end of 3.1 intro to programming-languages** [Phase1][draft] - models and simulations (there are some CS unplugged ones) - **new chapter on models-simulations** ##Algorithms - sequencing, selection, iteration as building blocks for algorithms - - **new sub-section with specific terms in section 2.4** [Phase1] + - **new sub-section with specific terms in section 2.4** [Phase1][draft] - algorithm correctness - - **new sub-section in 2.1** [Phase1] + - **new sub-section in 2.1** [Phase1][draft] - decidability - **new section in 11.?** [Phase2] - combining algorithms - - **add terms to 2.1** [Phase1] + - **add terms to 2.1** [Phase1][draft] - language choice for algorithms - - **better description at end of section 2.1.1** [Phase1] + - **better description at end of section 2.1.1** [Phase1][draft] - theoretical vs empirical analysis - **additional paragraph in 2.1.2** [Phase2] - efficiency of memory usage From 5adb85e95c62b68c4b9698edacca3008c12f4594 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Thu, 24 Mar 2016 10:03:37 +1300 Subject: [PATCH 06/63] Wording edit for new algorithms subsections --- text/en/chapters/algorithms.md | 4 ++-- text/en/chapters/models-simulation.md | 8 ++++++++ text/en/curriculum-guides/apcsp/todo.md | 6 +++--- 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 text/en/chapters/models-simulation.md diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index 02720626c9..a27bcb2774 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -141,7 +141,7 @@ The amount of time a program which performs the algorithm takes to complete may The number of operations (such as comparisons of data items) that an algorithm makes however will not change depending on the speed of a computer, or the programming language the program using the algorithm is written in. Some algorithms will always make the same number of comparisons for a certain input size, while others might vary. ### Algorithm Correctness -If we develop or are given an algorithm to solve a problem, how do we know that it works? Sometimes we test the algorithm on specific cases for input. While this is a useful practice and can help verify that we are on the right track, it is not enough to show that our algorithm is correct. The old adage "even a broken watch is correct twice a day" is a good analogy. Even an algorithm that is correct for two inputs might be incorrect for every other input. A computer scientist must reason formally or mathematically about an algorithm to show its correctness. Typically this is done by classifying ranges of input values and showing that algorithm produces expected results for boundary values of the range and all values in between. +If we develop or are given an algorithm to solve a problem, how do we know that it works? Sometimes we create test cases to verify the algorithm produces correct output for specific input values. While this is a useful practice and can help verify that we are on the right track, it is not enough to show that our algorithm is correct. The old adage "even a broken watch is correct twice a day" is a good analogy. Even an algorithm that is correct for two test cases might be incorrect for every other input. A computer scientist must reason formally or mathematically about an algorithm to show its correctness. Typically this is done by classifying ranges of input values and showing that algorithm produces expected results for boundary values of the range and all values in between. Correctness is particularly important when comparing two algorithms that solve the same problem. If one algorithm is very fast to complete but produces incorrect results some of the time it may be far less useful than a correct algorithm that is slower. Correctness is also important when using an algorithm as the building block for another algorithm. Here is a greedy algorithm for roommate assignment: @@ -368,7 +368,7 @@ There are dozens of sorting algorithms that have been invented; most of the ones ## What makes an algorithm? We've looked at algorithms that solved well known computational problems of sorting and searching data. When a computer scientist approaches a new computational problem that does not already have a well known solution they must create an algorithm. -There are three building blocks to develop a new algorithm: sequencing, selection, and iteration. One interesting early result in computer science is that combined, these three building blocks are actually sufficient to represent any algorithm that solves a computational problem. +There are three building blocks to develop a new algorithm: sequencing, selection, and iteration. One interesting early result in computer science is that combined, these three building blocks are sufficient to represent any algorithm that solves a computational problem! ### Sequencing Sequencing is the technique of deciding the order instructions are executed to produce the correct result. Imagine that we have the following instructions (A, B, C) to make a loaf of bread: diff --git a/text/en/chapters/models-simulation.md b/text/en/chapters/models-simulation.md new file mode 100644 index 0000000000..ae5a83164e --- /dev/null +++ b/text/en/chapters/models-simulation.md @@ -0,0 +1,8 @@ +# Models and Simulation +## What's the big picture? +## Models +## Simulation +## The whole story! +## Further reading +### Other topics in models and simulation +### Useful Links diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md index 8f3d986e6b..82afe2eafb 100644 --- a/text/en/curriculum-guides/apcsp/todo.md +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -4,11 +4,11 @@ Several learning objectives are not currently covered by the CS Field Guide. This "to-do" list includes general computer science topics and suggestions for how we can update the field guide to cover the learning objectives. Different levels of changes are suggested: - new chapter: some topics are best put into stand-alone new field guide chapters - - Hardware Abstractions + - Hardware Abstractions [?] - Software Abstractions [Phase4] - Models and Simulation [Phase3] - - Network Systems - - Logic + - Network Systems [?] + - Logic [?] - new section: add a new X.Y major section to chapter X - new sub-section: add a new X.Y.Z minor section to section Y of chapter X - edits to existing text content to use specific terminology From eebbb48a9db140a6d15b121e87a350573812f8d6 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Thu, 24 Mar 2016 10:20:16 +1300 Subject: [PATCH 07/63] Updated phase tagging --- text/en/curriculum-guides/apcsp/todo.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md index 82afe2eafb..3de119f178 100644 --- a/text/en/curriculum-guides/apcsp/todo.md +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -4,18 +4,18 @@ Several learning objectives are not currently covered by the CS Field Guide. This "to-do" list includes general computer science topics and suggestions for how we can update the field guide to cover the learning objectives. Different levels of changes are suggested: - new chapter: some topics are best put into stand-alone new field guide chapters - - Hardware Abstractions [?] + - Hardware Abstractions [Phase+] - Software Abstractions [Phase4] - Models and Simulation [Phase3] - - Network Systems [?] - - Logic [?] + - Network Systems [Phase+] + - Logic [Phase+] - new section: add a new X.Y major section to chapter X - new sub-section: add a new X.Y.Z minor section to section Y of chapter X - edits to existing text content to use specific terminology ##Abstraction - floating point representation - - **new section in data-representation** + - **new section in data-representation** [Phase+] - bit representation of program instructions (not just data) - **new section in programming-languages OR part of new chapter on hardware abstractions** [Phase2] - abstraction process: removing irrelevant details, extracting common features @@ -73,9 +73,9 @@ the students to research online after/during reading of the Blown to Bits book ( ##Programming - program components (modularity) - - **additional sub-section in software-engineering** + - **additional sub-section in software-engineering** [Phase2] - program documentation - - **re-wording or new sub-section in software-engineering; include self-documenting approaches** + - **re-wording or new sub-section in software-engineering; include self-documenting approaches** [Phase2] - collaboration and communication within programming teams - **add sub-section on Scrum, issue tracking and/or other communication mechanisms to 16.6** [Phase2] - program execution / implementation of algorithm From b45b6cbd6db67a64c70bbce8c55519f727321e0b Mon Sep 17 00:00:00 2001 From: James Atlas Date: Thu, 24 Mar 2016 12:12:18 +1300 Subject: [PATCH 08/63] Changed to line break per full stop --- text/en/chapters/algorithms.md | 71 +++++++++++++++++------ text/en/chapters/programming-languages.md | 4 +- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index a27bcb2774..de418d7c2d 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -107,7 +107,10 @@ But here's another program that implements exactly the same algorithm, this time {image filename="highscore-in-scratch.png" alt="High score program in Scratch"} -Both of the above programs are the same algorithm. Programming languages are often created or adapted to express algorithms clearly for a specific problem domain. For example, it is easier to read mathematical algorithms in Python than Scratch. Similarly, data flow algorithms are clearer in visual programming languages like LabVIEW than Python. +Both of the above programs are the same algorithm. +Programming languages are often created or adapted to express algorithms clearly for a specific problem domain. +For example, it is easier to read mathematical algorithms in Python than Scratch. +Similarly, data flow algorithms are clearer in visual programming languages like LabVIEW than Python. In this chapter we'll look in more detail about what an algorithm is, and why they are such a fundamental idea in computer science. Because algorithms exist even if they aren't turned in to programs, we won't need to look at programs at all for this topic, unless you particularly want to. @@ -141,17 +144,28 @@ The amount of time a program which performs the algorithm takes to complete may The number of operations (such as comparisons of data items) that an algorithm makes however will not change depending on the speed of a computer, or the programming language the program using the algorithm is written in. Some algorithms will always make the same number of comparisons for a certain input size, while others might vary. ### Algorithm Correctness -If we develop or are given an algorithm to solve a problem, how do we know that it works? Sometimes we create test cases to verify the algorithm produces correct output for specific input values. While this is a useful practice and can help verify that we are on the right track, it is not enough to show that our algorithm is correct. The old adage "even a broken watch is correct twice a day" is a good analogy. Even an algorithm that is correct for two test cases might be incorrect for every other input. A computer scientist must reason formally or mathematically about an algorithm to show its correctness. Typically this is done by classifying ranges of input values and showing that algorithm produces expected results for boundary values of the range and all values in between. - -Correctness is particularly important when comparing two algorithms that solve the same problem. If one algorithm is very fast to complete but produces incorrect results some of the time it may be far less useful than a correct algorithm that is slower. Correctness is also important when using an algorithm as the building block for another algorithm. Here is a greedy algorithm for roommate assignment: +If we develop or are given an algorithm to solve a problem, how do we know that it works? +Sometimes we create test cases to verify the algorithm produces correct output for specific input values. +While this is a useful practice and can help verify that we are on the right track, it is not enough to show that our algorithm is correct. +The old adage "even a broken watch is correct twice a day" is a good analogy. +Even an algorithm that is correct for two test cases might be incorrect for every other input. +A computer scientist must reason formally or mathematically about an algorithm to show its correctness. +Typically this is done by classifying ranges of input values and showing that algorithm produces expected results for boundary values of the range and all values in between. + +Correctness is particularly important when comparing two algorithms that solve the same problem. +If one algorithm is very fast to complete but produces incorrect results some of the time it may be far less useful than a correct algorithm that is slower. +Correctness is also important when using an algorithm as the building block for another algorithm. +Here is a greedy algorithm for roommate assignment: 1. Search for the remaining student with the highest GPA 2. Assign the highest GPA student their highest preference roommate from the remaining students 3. Repeat 1-2 until no students remain -This algorithm relies on a correct search algorithm in the first step. If the search algorithm incorrectly chose a random student, the greedy algorithm for roommate assignment would also be incorrect. +This algorithm relies on a correct search algorithm in the first step. +If the search algorithm incorrectly chose a random student, the greedy algorithm for roommate assignment would also be incorrect. -As you will see in this chapter with searching and sorting there exist multiple correct algorithms for the same problem. Often there are good reasons to know multiple correct algorithms because there are tradeoffs in simplicity, algorithm cost, and assumptions about inputs. +As you will see in this chapter with searching and sorting there exist multiple correct algorithms for the same problem. +Often there are good reasons to know multiple correct algorithms because there are tradeoffs in simplicity, algorithm cost, and assumptions about inputs. ### Searching and Sorting @@ -366,35 +380,47 @@ There are dozens of sorting algorithms that have been invented; most of the ones {video url="http://www.youtube.com/watch?v=kPRA0W1kECg"} ## What makes an algorithm? -We've looked at algorithms that solved well known computational problems of sorting and searching data. When a computer scientist approaches a new computational problem that does not already have a well known solution they must create an algorithm. +We've looked at algorithms that solved well known computational problems of sorting and searching data. +When a computer scientist approaches a new computational problem that does not already have a well known solution they must create an algorithm. -There are three building blocks to develop a new algorithm: sequencing, selection, and iteration. One interesting early result in computer science is that combined, these three building blocks are sufficient to represent any algorithm that solves a computational problem! +There are three building blocks to develop a new algorithm: sequencing, selection, and iteration. +One interesting early result in computer science is that combined, these three building blocks are sufficient to represent any algorithm that solves a computational problem! ### Sequencing -Sequencing is the technique of deciding the order instructions are executed to produce the correct result. Imagine that we have the following instructions (A, B, C) to make a loaf of bread: +Sequencing is the technique of deciding the order instructions are executed to produce the correct result. +Imagine that we have the following instructions (A, B, C) to make a loaf of bread: - **A** llow to sit at room temperature for 1 hour - **B** ake for 30 minutes - **C** ombine ingredients -C->A->B is a standard algorithm for a yeast bread. A different sequence, for example C->B->A, might produce a result that is edible but not high quality. Even worse, a sequence of B->C->A would not even produce something edible. +C->A->B is a standard algorithm for a yeast bread. +A different sequence, for example C->B->A, might produce a result that is edible but not high quality. +Even worse, a sequence of B->C->A would not even produce something edible. ### Selection -Selection is the technique of allowing the algorithm to select which instructions to execute depending on criteria. Using our previous bread baking example, our algorithm C->A->B works if the ingredients include yeast, but C->B would be faster if the ingredients do not include yeast (for example, the recipe might include baking powder as the rising agent). Selection allows us to create one algorithm to solve both cases: +Selection is the technique of allowing the algorithm to select which instructions to execute depending on criteria. +Using our previous bread baking example, our algorithm C->A->B works if the ingredients include yeast, but C->B would be faster if the ingredients do not include yeast (for example, the recipe might include baking powder as the rising agent). +Selection allows us to create one algorithm to solve both cases: 1. Combine ingredients 2. **If ingredients contain yeast,** allow to sit at room temperature for 1 hour 3. Bake for 30 minutes ### Iteration -Iteration allows an algorithm to repeat instructions. In its simplest form we might specify the exact number of times. For example, here is an algorithm to bake 2 loaves of bread: +Iteration allows an algorithm to repeat instructions. +In its simplest form we might specify the exact number of times. +For example, here is an algorithm to bake 2 loaves of bread: 1. **Repeat 2 times:** 1. Combine ingredients 2. If ingredients contain yeast, allow to sit at room temperature for 1 hour 3. Bake for 30 minutes -This algorithm clearly works but it would take at least 3 hours to complete! If we had to make 20 loaves we would probably want to design a better algorithm. We could measure the size of the mixing bowl, how many loaves fit on the table to rise, and how many loaves we could bake at the same time in the oven. Our algorithm might then look like: +This algorithm clearly works but it would take at least 3 hours to complete! +If we had to make 20 loaves we would probably want to design a better algorithm. +We could measure the size of the mixing bowl, how many loaves fit on the table to rise, and how many loaves we could bake at the same time in the oven. +Our algorithm might then look like: 1. **Repeat 10 times**: 1. Combine ingredients **for 2 loaves** @@ -402,7 +428,9 @@ This algorithm clearly works but it would take at least 3 hours to complete! If 3. If ingredients contain yeast, allow to sit at room temperature for 1 hour 4. Bake bread pans in the same oven for 30 minutes -But what if we upgraded to a larger kitchen? Most algorithms are written to combine iteration with selection to handle arbitrarily large amounts of data (i.e. an unknown number of loaves of bread). We might create a general purpose bread baking algorithm: +But what if we upgraded to a larger kitchen? +Most algorithms are written to combine iteration with selection to handle arbitrarily large amounts of data (i.e. an unknown number of loaves of bread). +We might create a general purpose bread baking algorithm: 1. **While we have enough ingredients for at least one loaf:** 1. Combine ingredients **for up to X loaves** (where X is the maximum number of loaves that can fit in the mixing bowl or rising table) @@ -412,10 +440,12 @@ But what if we upgraded to a larger kitchen? Most algorithms are written to comb 1. Move **up to Y loaves** from the rising table to the oven (where Y is the maximum number of loaves that can fit in the oven) 2. Bake bread pans in the same oven for 30 minutes -*Astute observers will note that this algorithm is still inefficient because the rising table and oven are not used at the same time. Designing algorithms that take advantage of parallelism is an important advanced topic in computer science.* +*Astute observers will note that this algorithm is still inefficient because the rising table and oven are not used at the same time. +Designing algorithms that take advantage of parallelism is an important advanced topic in computer science.* ### Combining Algorithms -One of the advantages of the building blocks perspective is that completed algorithms themselves can now be seen as new blocks we can build with. We can connect complete algorithms or we can interleave parts of algorithms to create new algorithms. +One of the advantages of the building blocks perspective is that completed algorithms themselves can now be seen as new blocks we can build with. +We can connect complete algorithms or we can interleave parts of algorithms to create new algorithms. For example, a recipe for croutons might be: @@ -423,9 +453,14 @@ For example, a recipe for croutons might be: 2. Brush cubes lightly with olive oil and season with salt, pepper, and herbs 3. Bake on large tray, flipping the cubes halfway through -We can connect the algorithm for baking bread in the previous section to this algorithm to create a new algorithm that makes croutons from scratch. If we required other ingredients for our recipe, we could connect multiple algorithms to build very complex algorithms. +We can connect the algorithm for baking bread in the previous section to this algorithm to create a new algorithm that makes croutons from scratch. +If we required other ingredients for our recipe, we could connect multiple algorithms to build very complex algorithms. -Often when we have multiple algorithms that solve a problem there are advantages of each algorithm for specific cases. Hybrid algorithms take parts of multiple algorithms and combine them to gain the advantages of both original algorithms. For example, Timsort is one of the fastest known sorting algorithms in practice and it uses parts of insertion sort and merge sort. Insertion sort is used on very small sequences to take advantage of its speed for already or partially ordered sequences. Merge sort is used to merge these small sequences into larger ones to take advantage of the better upper bound on algorithm cost for large data sets. +Often when we have multiple algorithms that solve a problem there are advantages of each algorithm for specific cases. +Hybrid algorithms take parts of multiple algorithms and combine them to gain the advantages of both original algorithms. +For example, Timsort is one of the fastest known sorting algorithms in practice and it uses parts of insertion sort and merge sort. +Insertion sort is used on very small sequences to take advantage of its speed for already or partially ordered sequences. +Merge sort is used to merge these small sequences into larger ones to take advantage of the better upper bound on algorithm cost for large data sets. ## The whole story! diff --git a/text/en/chapters/programming-languages.md b/text/en/chapters/programming-languages.md index fad2c21557..a096f511c7 100644 --- a/text/en/chapters/programming-languages.md +++ b/text/en/chapters/programming-languages.md @@ -158,7 +158,9 @@ So instead of building computers that can understand these high level instructio The conversion from a high level to a low level language can involve *compiling*, which replaces the high level instructions with machine code instructions that can then be run, or it can be done by *interpreting*, where each instruction is converted and followed one by one, as the program is run. In reality, a lot of languages use a mixture of these, sometimes compiling a program to an intermediate language, then interpreting it (Java does this). The language we looked at earlier, Python, is an interpreted language. Other languages such as C++ are compiled. We will talk more about compiling and interpreting later. -Different levels of programming languages are an abstraction that allows programmers to concern themselves with only the necessary details of a single level. High level programmers can produce sophisticated programs in Python without expert knowledge of low level languages such as MIPS, x86, or ARM. Low level programmers can produce embedded programs in ARM without expert knowledge of electronic circuitry. +Different levels of programming languages are an abstraction that allows programmers to concern themselves with only the necessary details of a single level. +High level programmers can produce sophisticated programs in Python without expert knowledge of low level languages such as MIPS, x86, or ARM. +Low level programmers can produce embedded programs in ARM without expert knowledge of electronic circuitry. We will start with looking at low level languages and how computers actually carry out the instructions in them, then we will look at some other programming languages that programmers use to give instructions to computers, and then finally we will talk about how we convert programs that were written by humans in a high level language into a low level language that the computer can carry out. From bf9e9523b3ef042cedd6f9cdc5672260d74e18c2 Mon Sep 17 00:00:00 2001 From: James Atlas Date: Wed, 13 Apr 2016 17:03:35 +1200 Subject: [PATCH 09/63] Added some phase 2 work on program instruction representation and algorithm analysis/decidability. --- text/en/chapters/algorithms.md | 14 +++++++-- text/en/chapters/complexity-tractability.md | 3 +- text/en/chapters/data-representation.md | 32 +++++++++++++++++++++ text/en/curriculum-guides/apcsp/todo.md | 8 +++--- 4 files changed, 50 insertions(+), 7 deletions(-) diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index de418d7c2d..11fcecb47f 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -468,7 +468,14 @@ We've only really scratched the surface of algorithms in this chapter, as there The algorithms introduced in this chapter aren't even necessarily the best for any situation; there are several other common ways of searching (e.g. hashing and search trees) and sorting (e.g. mergesort), and a computer scientist needs to know them, and be able to apply and fine tune the right one to a given situation. -In this chapter we have only talked about the number of comparisons an algorithm makes, and the amount of time a program takes to complete as 'costs' of algorithms. There are actually many other ways of measuring the cost of an algorithm. These include the amount of memory the algorithm uses and its computational complexity. Computer Scientists use 'Big O notation' to more accurately describe the performance or complexity of an algorithm, and you are likely to come across this notation very quickly when investigating the performance of algorithms. It characterises the resources needed by an algorithm and is usually applied to the execution time required, or sometimes the space used by the algorithm. +In this chapter we have only talked about the number of comparisons an algorithm makes, and the amount of time a program takes to complete as 'costs' of algorithms. There are actually many other ways of measuring the cost of an algorithm. These include the amount of memory the algorithm uses and its computational complexity. + +An algorithm often uses computer memory to store temporary data such as a partial sum of a list of numbers or a list of products that match some search criteria. +With the large size of modern computer memory this may seem to not be as important as the number of steps an algorithm takes, but a poorly performing algorithm in terms of computer memory may be limited in its ability to work with the large data sets common in many industry applications. +For example, a query algorithm that stored even a single bit for each record it searched could quickly overwhelm a web server's memory if it was searching a large data set such as Netflix's current movie offerings. +Minimizing memory usage while also minimizing the number of steps an algorithm takes is not always possible; there is often a tradeoff between computation and memory usage. + +Computer Scientists use 'Big O notation' to more accurately describe the performance or complexity of an algorithm, and you are likely to come across this notation very quickly when investigating the performance of algorithms. It characterises the resources needed by an algorithm and is usually applied to the execution time required, or sometimes the space used by the algorithm. {panel type="extra-for-experts" summary="Examples of Big O notation"} Here are some Big O examples: @@ -480,7 +487,10 @@ Here are some Big O examples: Big O Notation however requires some advanced mathematics to explore thoroughly so has been intentionally left out of this main chapter, but if you want to learn more check out the Useful Links section. These topics are looked at in more depth in the Complexity and Tractability chapter. -To make things even more complicated, in practice algorithms are running on computers that have cached memory and virtual memory, where the time to access a particular value can be particularly short, or particularly long. There is a whole range of algorithms that are used for this situation to make sure that the algorithm still runs efficiently in such environments. Such algorithms are still based on the ideas we've looked at in this chapter, but require some clever adjustments to ensure that they work well. +To make things even more complicated, theoretical analysis techniques such as Big O Notation are extremely useful when designing and predicting performance but empirical analysis such as stopwatch timing shows that in practice algorithm performance can vary greatly due to hardware and operating system design. +Most computers have cached memory and virtual memory, where the time to access a particular value can be particularly short, or particularly long. +There is a whole range of algorithms that are used for this situation to make sure that the algorithm still runs efficiently in such environments. +Such algorithms are still based on the ideas we've looked at in this chapter, but require some clever adjustments to ensure that they work well. ## Further reading diff --git a/text/en/chapters/complexity-tractability.md b/text/en/chapters/complexity-tractability.md index 22a119ca05..a211417ac6 100644 --- a/text/en/chapters/complexity-tractability.md +++ b/text/en/chapters/complexity-tractability.md @@ -562,7 +562,8 @@ The question is often referred to as whether or not P equals NP. Actually, things get worse. So far we've talked about intractable problems --- ones that can be solved, but might need billions of years on a computer. If you think it's bad that some problems take that long to solve, that's nothing! -There are some well known problems that we know can *never* be solved on a computer. +These problems are at least decidable --- if given enough time there exists an algorithm that will always lead to a correct answer. +There are some well known problems that are undecidable -- we know we can *never* write a correct algorithm to solve the problem on a computer. For example, writing a program that reliably tells you if another program will finish or not is impossible! There are other examples of such problems here: diff --git a/text/en/chapters/data-representation.md b/text/en/chapters/data-representation.md index 6d3de3cfae..1d532cc554 100644 --- a/text/en/chapters/data-representation.md +++ b/text/en/chapters/data-representation.md @@ -682,6 +682,38 @@ The following interactive can be used to upload your own image, and experiment w {comment end} +## Representing program instructions with bits +In a similar fashion to representing text or numbers using binary, we can represent an entire actual program using binary. +Since a program is just a sequence of instructions, we need to decide how many bits will be used to represent a single instruction and then how we are going to interpret those bits. +Machine code instructions typically have a combination of two pieces: operation and operand. + +``` +li $t0, 10 #Load the value 10 into register $t0 +li $t1, 20 #Load the value 20 into register $t1 +#Add the values in $t0 and $t1, put the result in register $a0 +add $a0, $t0, $t1 +``` + +In the above machine code program li and add are considered to be operations to "load an integer" and "add two integers" respectively. +$t0, $t1, and $a0 are register operands and represent a place to store values inside of the machine. +10 and 20 are literal operands and allow instructions to represent the exact integer values 10 and 20. +If we were using a 32-bit operating system we might encode the above instructions with each instruction broken into 4 8-bit pieces as follows: + +| Operation | Op1 | Op2 | Op3 | +|-----------|----------|----------|----------| +| 00001000 | 00000000 | 00000000 | 00001010 | +| 00001000 | 00000001 | 00000000 | 00010100 | +| 00001010 | 10000000 | 00000000 | 00000001 | + +Our operation will always be determined by the bits in the first 8-bits of the 32-bit instruction. +In this example machine code, 00001000 means li and 00001010 means add. +For the li operation, the bits in Op1 are interpreted to be a storage place, allowing 00000000 to represent $t0. +Similarly the bits in Op1 for the add instruction represent $a0. +Can you figure out what the bits in Op3 for each instruction represent? + +Using bits to represent both the program instructions and data forms such as text, numbers, and images allows entire computer programs to be represented in the same binary format. +This allows programs to be stored on disks, in memory, and transferred over the internet as easily as data. + ## General representations of text In the introduction we looked at 8-bit ASCII representations of text (which really use 7 bits, allowing for 128 different symbols). diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md index 3de119f178..4a73df7fb2 100644 --- a/text/en/curriculum-guides/apcsp/todo.md +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -17,7 +17,7 @@ This "to-do" list includes general computer science topics and suggestions for h - floating point representation - **new section in data-representation** [Phase+] - bit representation of program instructions (not just data) - - **new section in programming-languages OR part of new chapter on hardware abstractions** [Phase2] + - **new section in data-representation OR part of new chapter on hardware abstractions** [Phase2][draft] - abstraction process: removing irrelevant details, extracting common features - **part of new chapter on hardware abstractions** - explicit section on functions/functional abstraction @@ -35,15 +35,15 @@ This "to-do" list includes general computer science topics and suggestions for h - algorithm correctness - **new sub-section in 2.1** [Phase1][draft] - decidability - - **new section in 11.?** [Phase2] + - **new section in 11.?** [Phase2][draft] - combining algorithms - **add terms to 2.1** [Phase1][draft] - language choice for algorithms - **better description at end of section 2.1.1** [Phase1][draft] - theoretical vs empirical analysis - - **additional paragraph in 2.1.2** [Phase2] + - **additional paragraph in 2.1.2** [Phase2][draft] - efficiency of memory usage - - **additional paragraph in 2.1.2** [Phase2] + - **additional paragraph in 2.1.2** [Phase2][draft] ##Creativity - collaborative tools (open source, github/google doc) From a96dd3c4dc682c47f7dc5e59fa007d44b6e020c6 Mon Sep 17 00:00:00 2001 From: Victor Chang Date: Tue, 19 Jul 2016 23:27:52 +1200 Subject: [PATCH 10/63] fixed firefox compatibility and added cursor change on mouseover --- interactives/high-score-boxes/css/style.css | 1 + interactives/high-score-boxes/index.html | 2 +- interactives/high-score-boxes/js/findHighScore.js | 7 ++++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/interactives/high-score-boxes/css/style.css b/interactives/high-score-boxes/css/style.css index eaa71529e8..b81bc3cf48 100644 --- a/interactives/high-score-boxes/css/style.css +++ b/interactives/high-score-boxes/css/style.css @@ -10,6 +10,7 @@ div.box { background-color: white; z-index: 3; background-size: contain; + cursor: pointer; } diff --git a/interactives/high-score-boxes/index.html b/interactives/high-score-boxes/index.html index 4a994155c5..51febab696 100644 --- a/interactives/high-score-boxes/index.html +++ b/interactives/high-score-boxes/index.html @@ -15,7 +15,7 @@
-
+

High Score Boxes

diff --git a/interactives/high-score-boxes/js/findHighScore.js b/interactives/high-score-boxes/js/findHighScore.js index 04e421cd31..f7ba44b36a 100644 --- a/interactives/high-score-boxes/js/findHighScore.js +++ b/interactives/high-score-boxes/js/findHighScore.js @@ -33,7 +33,7 @@ $(document).ready(function(){ }) }) -$(document).on('click','.box', function() { +$(document).on('click','.box', function (event) { $(".box").stop(true, true); $(".box").show(); for (var i = 0; i < (boxes.length); i++) { @@ -75,6 +75,7 @@ function createBoxElements() { //"container" div var iContainer = document.createElement('div'); + iContainer.draggable = false; iContainer.id = ('boxContainer' + i); iContainer.className = 'boxContainer'; document.getElementById('box_holder_div').appendChild(iContainer); @@ -95,6 +96,8 @@ function createBoxElements() { //"box (covering the div holding number" var boxDiv = document.createElement('div'); + boxDiv.draggable = false; + boxDiv.id = ('box' + i); boxDiv.className = 'box'; boxDiv.setAttribute("width", "100"); @@ -108,6 +111,8 @@ function createBoxElements() { //divs that hold the numbers var intHoldingDiv = document.createElement('div'); + intHoldingDiv.draggable = false; + intHoldingDiv.id = ('intHoldingDiv' + i); intHoldingDiv.className = 'intHoldingDiv'; intHoldingDiv.innerHTML = currentBox.boxInt; From dbf665b32aedb4835c0cdcfd1d49b9d4443b9090 Mon Sep 17 00:00:00 2001 From: Victor Chang Date: Sat, 23 Jul 2016 01:13:57 +1200 Subject: [PATCH 11/63] fixed issues from EDEM --- interactives/high-score-boxes/css/style.css | 7 ++++ .../high-score-boxes/js/findHighScore.js | 35 ++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/interactives/high-score-boxes/css/style.css b/interactives/high-score-boxes/css/style.css index b81bc3cf48..bb17be6907 100644 --- a/interactives/high-score-boxes/css/style.css +++ b/interactives/high-score-boxes/css/style.css @@ -30,6 +30,13 @@ div.intHoldingDiv { font-size: 1.5rem; font-weight: bold; + /*disabling dragging/selecting*/ + -WEBKIT-USER-SELECT: NONE; /* SAFARI, CHROME */ + -KHTML-USER-SELECT: NONE; /* KONQUEROR */ + -MOZ-USER-SELECT: NONE; /* FIREFOX */ + -MS-USER-SELECT: NONE; /* IE */ + USER-SELECT: NONE; /* CSS3 */ + } div.boxContainer { diff --git a/interactives/high-score-boxes/js/findHighScore.js b/interactives/high-score-boxes/js/findHighScore.js index f7ba44b36a..db2b453b71 100644 --- a/interactives/high-score-boxes/js/findHighScore.js +++ b/interactives/high-score-boxes/js/findHighScore.js @@ -1,7 +1,7 @@ //onload make array of 5 random ints this.randomInts = []; this.largest = 0; -this.numberOfBoxes = 15 +this.numberOfBoxes = 3 this.boxes = [] this.gameStarted = false; this.secondsTaken = 0; @@ -39,7 +39,7 @@ $(document).on('click','.box', function (event) { for (var i = 0; i < (boxes.length); i++) { if (document.getElementById('box' + i) == event.target) { $(this).fadeOut(1000); - $(this).fadeIn(1000); + $(this).fadeTo(1000, 0.5); boxes[i].revealed_times += 1; } } @@ -61,10 +61,23 @@ function myTimer() { } function generateRandomNumbers() { - for (var i = 0; i < (numberOfBoxes); i++) { - var currentInt = getRandomInt(300, 800); + var intervals = [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000] + shuffle(intervals); + + var twoIntervals = intervals.slice(0, 2); + twoIntervals.sort(); + + for (var i = 0; i < (numberOfBoxes); i++) { + + var currentInt = getRandomInt(twoIntervals[0], twoIntervals[1]); + while (randomInts.indexOf(currentInt) != -1) { + var currentInt = getRandomInt(twoIntervals[0], twoIntervals[1]); + } + randomInts[i] = currentInt; } + console.log(twoIntervals[0] +" " + twoIntervals[1]) + largest = Math.max.apply(Math, randomInts); } @@ -139,6 +152,20 @@ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; } +/** + * Shuffles array in place. + * @param {Array} a items The array containing the items. + */ +function shuffle(a) { + var j, x, i; + for (i = a.length; i; i--) { + j = Math.floor(Math.random() * i); + x = a[i - 1]; + a[i - 1] = a[j]; + a[j] = x; + } +} + //form validation function validateForm() { var x = document.forms["myForm"]["submittedInt"].value; From cc1fc0ffdbc3c8d69a0ddfd1bfc356926f00a865 Mon Sep 17 00:00:00 2001 From: Victor Chang Date: Fri, 29 Jul 2016 00:54:41 +1200 Subject: [PATCH 12/63] high-score-boxes more fixes after EDEM session reworked "question", made it clear which boxes have been clicked. --- interactives/high-score-boxes/css/style.css | 5 +++++ interactives/high-score-boxes/index.html | 2 +- interactives/high-score-boxes/js/findHighScore.js | 7 +++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/interactives/high-score-boxes/css/style.css b/interactives/high-score-boxes/css/style.css index bb17be6907..c3876f480d 100644 --- a/interactives/high-score-boxes/css/style.css +++ b/interactives/high-score-boxes/css/style.css @@ -15,6 +15,11 @@ div.box { } +.clicked { + -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */ + filter: grayscale(100%); +} + div.intHoldingDiv { width: 100px; height: 100px; diff --git a/interactives/high-score-boxes/index.html b/interactives/high-score-boxes/index.html index 51febab696..a740f5a59b 100644 --- a/interactives/high-score-boxes/index.html +++ b/interactives/high-score-boxes/index.html @@ -19,7 +19,7 @@

High Score Boxes

-

What is the largest number in the boxes?

+

Clicking a box will reveal its number; your task is to find the highest number.

diff --git a/interactives/high-score-boxes/js/findHighScore.js b/interactives/high-score-boxes/js/findHighScore.js index db2b453b71..660050b89e 100644 --- a/interactives/high-score-boxes/js/findHighScore.js +++ b/interactives/high-score-boxes/js/findHighScore.js @@ -1,7 +1,7 @@ //onload make array of 5 random ints this.randomInts = []; this.largest = 0; -this.numberOfBoxes = 3 +this.numberOfBoxes = 15 this.boxes = [] this.gameStarted = false; this.secondsTaken = 0; @@ -34,12 +34,15 @@ $(document).ready(function(){ }) $(document).on('click','.box', function (event) { + var filterVal = 'grayscale(100)'; + $(".box").stop(true, true); $(".box").show(); for (var i = 0; i < (boxes.length); i++) { if (document.getElementById('box' + i) == event.target) { $(this).fadeOut(1000); - $(this).fadeTo(1000, 0.5); + $(this).fadeIn(1000); + $(this).addClass( "clicked" ); boxes[i].revealed_times += 1; } } From d78702a4469bda2f1a4467a708b7a7d1bb8ed448 Mon Sep 17 00:00:00 2001 From: Victor Chang Date: Mon, 1 Aug 2016 20:48:44 +1200 Subject: [PATCH 13/63] text fix --- interactives/high-score-boxes/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interactives/high-score-boxes/index.html b/interactives/high-score-boxes/index.html index a740f5a59b..de16f4881f 100644 --- a/interactives/high-score-boxes/index.html +++ b/interactives/high-score-boxes/index.html @@ -19,7 +19,7 @@

High Score Boxes

-

Clicking a box will reveal its number; your task is to find the highest number.

+

Clicking a box will reveal its number; your task is to find the highest number and enter it below.

From ce0dfce76f0c8b720ab9e26a4fb1c384bd2f95c3 Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:32:13 +0100 Subject: [PATCH 14/63] Change "two" technical terms to "four" As there are four detailed following that sentence. --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index 3eac9ccfdb..9fa0cab36e 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -253,7 +253,7 @@ The general rule is that the input must have an odd number of "a"s in it; the nu {button link="http://www.csfieldguide.org.nz/releases/1.9.9/_static/widgets/fsa-2state-v3.html?map=two" text="View state interactive (2)"} {glossary-definition term="Alphabet" definition="In formal languages, a list of characters that may occur in a language, or more generally, a list of all possible inputs that might happen."} -To keep things precise, we'll define two further technical terms. +To keep things precise, we'll define four further technical terms. One is the {glossary-link term="alphabet" reference-text="Formal languages"}alphabet{glossary-link end}, which is just a list of all possible inputs that might happen. From 540bf288da3d3711d73cd65fe0c607726d7e4ae7 Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:32:44 +0100 Subject: [PATCH 15/63] Add quotes around "a" and "b" for clarity Helps the inputs stand out from text, and in keeping with the rest of the surrounding text. --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index 9fa0cab36e..35e3d2de58 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -551,7 +551,7 @@ Using Exorciser or JFLAP, construct an FSA that takes inputs made of the letters - strings that have an even number of the letter "a" (e.g. "aa", "abaaa", "bbbb"; and don’t forget the empty string {math}\epsilon{math end}). - strings that have an odd number of the letter "a" (e.g. "a", "baaa", "bbbab", but not {math}\epsilon{math end}). - strings where the number of "a"s in the input is a multiple of three (e.g. "aabaaaa", "bababab"). -- strings where every time an a appears in the input, it is followed by a b (e.g. "abb", "bbababbbabab", "bbb"). +- strings where every time an "a" appears in the input, it is followed by a "b" (e.g. "abb", "bbababbbabab", "bbb"). - strings that end with "ab" - strings that start with "ab" and end with "ba", and only have "b" in the middle (e.g. "abba", "abbbbba") From 43b3e03a36255a011566d6f08bf4f22650ef9cce Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:33:18 +0100 Subject: [PATCH 16/63] Add missing "is" from sentence --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index 35e3d2de58..ca34d20fe5 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -940,7 +940,7 @@ In the above example, the FSA is a really easy way to check for the regular expr Fortunately, *every* regular expression can be converted to an FSA. We won't look at the process here, but both Exorciser and JFLAP can do it for you anyway (see the activities below). -Converting a regex to an FSA also built into most programming languages. +Converting a regex to an FSA is also built into most programming languages. Programmers usually use regular expressions by calling functions or methods that are passed the regex and the string to be searched. Behind the scenes, the regular expression is converted to a finite state automaton, and then the job of checking your regular expression is very easy. From 949ee155a8a199b35ead589388046f3c1e28c0c8 Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:33:38 +0100 Subject: [PATCH 17/63] Add missing "the" from sentence --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index ca34d20fe5..c3d91d7bd3 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -1126,7 +1126,7 @@ it can do, and write regular expressions for finding words such as: - Explore regular expressions in spreadsheets. The Google docs spreadsheet has a function called RegExMatch, RegExExtract and RegExReplace. In Excel they are available via Visual Basic. -- Knitting patterns are a form of regular expression. If you're interested in knitting, you could look into how they are related through the [article about knitting and regular expressions at CS4FN site](http://www.cs4fn.org/regularexpressions/knitters.php). +- Knitting patterns are a form of regular expression. If you're interested in knitting, you could look into how they are related through the [article about knitting and regular expressions at the CS4FN site](http://www.cs4fn.org/regularexpressions/knitters.php). - The "grep" command is available in many command line systems, and matches a regular expression in the command with lines in an input file. (the name comes from "Global Regular Expression Parser"). Demonstrate the grep command for various regular expressions. From 2416eeeff27419e63ae820a968b5c35b829e8faa Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:33:57 +0100 Subject: [PATCH 18/63] Capitalise Turing --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index c3d91d7bd3..9506e6795c 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -1318,7 +1318,7 @@ Believe it or not, all these variations are essentially equivalent, and you can However, there are also more complex models of computation such as the push-down automaton (PDA) which is able to follow the rules of context-free grammars, and the most general model of computation which is called a Turing machine. These models are increasingly complicated and abstract, and structures like the Turing machine aren't used as physical devices (except for fun), but instead as a tool for reasoning about the limits on what can be computed. -In fact, in principle every digital computer is a kind of limited turing machine, so whatever limits we find for a Turing machine gives us limits for everyday computation. +In fact, in principle every digital computer is a kind of limited Turing machine, so whatever limits we find for a Turing machine gives us limits for everyday computation. {comment} .. TCB if we decide to cover non deterministic automata - could use a humorous approach - e.g. train route is semi-random, or several passengers try out all routes? From 68f37d6fe4af7e4813f5b4dbb97660d703f41116 Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:34:10 +0100 Subject: [PATCH 19/63] Fix spelling of "analysis" --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index 9506e6795c..4ebb2e5520 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -1348,7 +1348,7 @@ There is a direct correspondence between the "machines" (such as the FSA) and la For example, an FSA can be used to determine if the input matches a given Regular Expression, but a PDA is needed to match a string to a CFG. The study of formal languages looks at these relationships, and comes up with ways to create the appropriate machines for a given language and vice versa. -There are many tools available that will read in the specification for a language and produce another program to parse the language; some common ones are called "Lex" and "Flex" (both perform lexical anaylsis of regular expressions), "Yacc" ("yet another compiler compiler") and "Bison" (an improved version of Yacc). +There are many tools available that will read in the specification for a language and produce another program to parse the language; some common ones are called "Lex" and "Flex" (both perform lexical analysis of regular expressions), "Yacc" ("yet another compiler compiler") and "Bison" (an improved version of Yacc). These systems make it relatively easy to make up your own programming language and construct a compiler for it, although they do demand quite a range of skills to get the whole thing working! {comment} From 0f8f71ed0bfd96ea45b492f7b90413890592b153 Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:34:40 +0100 Subject: [PATCH 20/63] Correct an accepted input in example If "a" must be followed by "b", then "bbb" would not be accepted, whereas "abb" (already listed) and "bab" would be accepted. So, changed "bbb" to "bab". --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index 4ebb2e5520..53d6e96de5 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -551,7 +551,7 @@ Using Exorciser or JFLAP, construct an FSA that takes inputs made of the letters - strings that have an even number of the letter "a" (e.g. "aa", "abaaa", "bbbb"; and don’t forget the empty string {math}\epsilon{math end}). - strings that have an odd number of the letter "a" (e.g. "a", "baaa", "bbbab", but not {math}\epsilon{math end}). - strings where the number of "a"s in the input is a multiple of three (e.g. "aabaaaa", "bababab"). -- strings where every time an "a" appears in the input, it is followed by a "b" (e.g. "abb", "bbababbbabab", "bbb"). +- strings where every time an "a" appears in the input, it is followed by a "b" (e.g. "abb", "bbababbbabab", "bab"). - strings that end with "ab" - strings that start with "ab" and end with "ba", and only have "b" in the middle (e.g. "abba", "abbbbba") From 482030d8d70224a06379be74ba27f287d2fc8465 Mon Sep 17 00:00:00 2001 From: Steven Maude Date: Wed, 7 Sep 2016 12:42:18 +0100 Subject: [PATCH 21/63] Switch double quotes to single in FSA definition The double quotes inside the text end up ending the definition early, truncating the output. This might not be an ideal fix, but at least makes the text display for now. --- text/en/chapters/formal-languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/chapters/formal-languages.md b/text/en/chapters/formal-languages.md index 53d6e96de5..60e91717a7 100644 --- a/text/en/chapters/formal-languages.md +++ b/text/en/chapters/formal-languages.md @@ -169,7 +169,7 @@ Being comfortable with such structures is a useful skill for computer scientists {panel type="jargon-buster" summary="Finite State Automaton"} -{glossary-definition term="Finite State Automaton" definition="In formal languages, a simple "machine" that has states, and transitions from one state to another based on strings of input symbols."} +{glossary-definition term="Finite State Automaton" definition="In formal languages, a simple 'machine' that has states, and transitions from one state to another based on strings of input symbols."} The name {glossary-link term="finite state automaton" reference-text="Formal languages"}finite state automaton{glossary-link end} (FSA) might seem strange, but each word is quite simple. "Finite" just means that there is a limited number of states (such as train stations) in the map. The "state" is just as another name for the train stations we were using. "Automaton" is an old word meaning a machine that acts on its own, following simple rules (such as the cuckoo in a cuckoo clock). From 8f1589ca657889f3ef10b9b8a6ff134e12c79f78 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Mon, 26 Sep 2016 13:41:35 +1300 Subject: [PATCH 22/63] Add logos for UCCSERG and Microsoft Philanthropies --- images/microsoft-philanthropies-logo.png | Bin 0 -> 67213 bytes images/uc-computer-science-education-logo.png | Bin 0 -> 28996 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/microsoft-philanthropies-logo.png create mode 100644 images/uc-computer-science-education-logo.png diff --git a/images/microsoft-philanthropies-logo.png b/images/microsoft-philanthropies-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..67a9b77151cdfd2500a2141ea898a33f034c0409 GIT binary patch literal 67213 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%0AI;Q?< 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%0AY9!H#>aYi(do5lPN&y7|T}9L;sH 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 b={Md%i=3)n>4*G> Date: Mon, 26 Sep 2016 13:42:43 +1300 Subject: [PATCH 23/63] Add UCCSERG and Microsoft Philanthropies logos to footer --- generator/generator-settings.conf | 2 ++ generator/html-templates.conf | 2 ++ generator/scss/website.scss | 6 +++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/generator/generator-settings.conf b/generator/generator-settings.conf index ba31a64fdc..0463cedf1d 100644 --- a/generator/generator-settings.conf +++ b/generator/generator-settings.conf @@ -80,6 +80,8 @@ Image: guide-favicon.png google-logo-colour.png internet-new-zealand-logo-colour.png + uc-computer-science-education-logo.png + microsoft-philanthropies-logo.png [PDF] Output File: Computer Science Field Guide - {} Version.pdf diff --git a/generator/html-templates.conf b/generator/html-templates.conf index 69adf7143c..9b510b4ff6 100644 --- a/generator/html-templates.conf +++ b/generator/html-templates.conf @@ -259,7 +259,9 @@ MathJax.Hub.Config({

{{ translations.footer_sponsors_heading }}

{{ translations.footer_sponsors_text }}

diff --git a/generator/scss/website.scss b/generator/scss/website.scss index 9389e1fe83..5542e31015 100644 --- a/generator/scss/website.scss +++ b/generator/scss/website.scss @@ -365,12 +365,12 @@ footer { .sponsor-logos { display: flex; flex-wrap: wrap; + align-items: center; a { flex: 0 1 auto; - margin: 0 3rem 3rem 0; - width: 10rem; + margin: 0 3rem 2rem 0; img { - width: 100%; + height: 3em; } } } From e9fa4cd358943abdf94359401d565bebdeb22789 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 28 Sep 2016 10:05:40 +1300 Subject: [PATCH 24/63] Removed empty AP CSP curriculum guides from generated output --- text/en/settings.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/text/en/settings.yaml b/text/en/settings.yaml index 0e57636285..c64cf022d1 100644 --- a/text/en/settings.yaml +++ b/text/en/settings.yaml @@ -58,8 +58,6 @@ structure: - curriculum-guides/apcsp/guide-global-impact-introduction.md - curriculum-guides/apcsp/guide-programming-introduction.md - curriculum-guides/apcsp/guide-the-internet-introduction.md - - curriculum-guides/apcsp/guide-create-performance-task.md - - curriculum-guides/apcsp/guide-explore-performance-task.md - further-information: numbered: no listed: yes From 69a51756fb3df36eef25a3bb052797740087803e Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 28 Sep 2016 10:11:47 +1300 Subject: [PATCH 25/63] Remove link on AP CSP index to TODO file This is still accessible when viewing folder structure, but the TODO file isn't outputted on generation. --- text/en/curriculum-guides/apcsp/index.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/text/en/curriculum-guides/apcsp/index.md b/text/en/curriculum-guides/apcsp/index.md index b86ab7597f..2f4a9ae18a 100644 --- a/text/en/curriculum-guides/apcsp/index.md +++ b/text/en/curriculum-guides/apcsp/index.md @@ -2,9 +2,6 @@ These curriculum guides have been written to assist teachers for the Advanced Placement Computer Science Principles course. *Note: These guides are still a work in progress.* -{version-specific-content version="teacher"} -Check out the [To Do List](curriculum-guides/apcsp/todo.html) -{version-specific-content end} *We recommend following one of the full course curriculum listed on the [APCSP](http://apcsp.org/) and using these guides to integrate CS field guide resources for specific units or lessons. Descriptions of the big ideas, learning objectives, and essential knowledge statements are directly from CC BY-SA 4.0 licensed APCSP resources* From a817a27361f579fb23a2db811cb4f449467564ae Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 28 Sep 2016 10:24:40 +1300 Subject: [PATCH 26/63] Fix reference of AP CSP page for correct generation --- text/en/settings.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/en/settings.yaml b/text/en/settings.yaml index c64cf022d1..0ad049280a 100644 --- a/text/en/settings.yaml +++ b/text/en/settings.yaml @@ -81,7 +81,7 @@ structure: - chapters/index.md - curriculum-guides/index.md - curriculum-guides/ncea/index.md - - curriculum-guides/apscp/index.md + - curriculum-guides/apcsp/index.md - further-information/index.md text_values: project_title: "Computer Science Field Guide" From 87187a811ac6a3627cebc066528b27bcd9ae3fd4 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 28 Sep 2016 10:44:49 +1300 Subject: [PATCH 27/63] Fix links to empty AP CSP guides Text now states the guides are coming soon. --- text/en/curriculum-guides/apcsp/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/text/en/curriculum-guides/apcsp/index.md b/text/en/curriculum-guides/apcsp/index.md index 2f4a9ae18a..50d2f0663c 100644 --- a/text/en/curriculum-guides/apcsp/index.md +++ b/text/en/curriculum-guides/apcsp/index.md @@ -69,12 +69,12 @@ The learning objectives (including the essential knowledge statements and comput ###Explore Performance Task >Students will select and investigate a computing innovation that has had, or has the potential to have, a significant impact, both beneficial and harmful, on society, economy, or culture. **8 classroom hours** -- [Guide](curriculum-guides/apcsp/guide-explore-performance-task.html) +- Guide coming soon ###Create Performance Task >Students will develop a program on a topic that interests them. **12 classroom hours** -- [Guide](curriculum-guides/apcsp/guide-create-performance-task.html) +- Guide coming soon ###Exam > The AP Computer Science Exam is 120 minutes long and includes 74 multiple-choice questions and is 60 percent of a student’s AP Computer Science Principles score. From 061fe6b10335bba7e06ba965bd4540713b5ded82 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 28 Sep 2016 11:03:57 +1300 Subject: [PATCH 28/63] Add space after #s before heading title for consistency --- .../apcsp/guide-abstraction-introduction.md | 14 +++++----- .../apcsp/guide-creativity-introduction.md | 14 +++++----- .../apcsp/guide-the-internet-introduction.md | 8 +++--- text/en/curriculum-guides/apcsp/index.md | 28 +++++++++---------- text/en/curriculum-guides/apcsp/todo.md | 16 +++++------ 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md index 97103af295..2b5d6731a1 100644 --- a/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-abstraction-introduction.md @@ -15,7 +15,7 @@ Start by reading through: ## Learning objectives The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. -###LO 2.1.1 Describe the variety of abstractions used to represent data. +### LO 2.1.1 Describe the variety of abstractions used to represent data. - **EK 2.1.1A Digital data is represented by abstractions at different levels.** - **EK 2.1.1B At the lowest level, all digital data are represented by bits.** - **EK 2.1.1C At a higher level, bits are grouped to represent abstractions, including but not limited to numbers, characters, and color.** @@ -27,7 +27,7 @@ EXCLUSION STATEMENT (for EK 2.1.1E): Two’s complement conversions are beyond t - **EK 2.1.1F Hexadecimal (base 16) is used to represent digital data because hexadecimal representation uses fewer digits than binary.** - **EK 2.1.1G Numbers can be converted from any base to any other base.** -###LO 2.1.2 Explain how binary sequences are used to represent digital data. +### LO 2.1.2 Explain how binary sequences are used to represent digital data. - **EK 2.1.2A A finite representation is used to model the infinite mathematical concept of a number.** {panel type="teacher-note" summary="Exclusion EK 2.1.2A"} EXCLUSION STATEMENT (for EK 2.1.2A): Binary representations of scientific notation are beyond the scope of this course and the AP Exam. @@ -41,7 +41,7 @@ EXCLUSION STATEMENT (for EK 2.1.2B): Range limitations of any one language, comp - EK 2.1.2E A sequence of bits may represent instructions or data. - **EK 2.1.2F A sequence of bits may represent different types of data in different contexts.** -###LO 2.2.1 Develop an abstraction when writing a program or creating other computational artifacts. +### LO 2.2.1 Develop an abstraction when writing a program or creating other computational artifacts. - EK 2.2.1A The process of developing an abstraction involves removing detail and generalizing functionality. - EK 2.2.1B An abstraction extracts common features from specific examples in order to generalize concepts. - EK 2.2.1C An abstraction generalizes functionality with input parameters that allow software reuse. @@ -49,11 +49,11 @@ EXCLUSION STATEMENT (for EK 2.1.2B): Range limitations of any one language, comp EXCLUSION STATEMENT (for EK 2.2.1C): An understanding of the difference between value and reference parameters is beyond the scope of this course and the AP Exam. {panel end} -###LO 2.2.2 Use multiple levels of abstraction to write programs. +### LO 2.2.2 Use multiple levels of abstraction to write programs. - EK 2.2.2A Software is developed using multiple levels of abstractions, such as constants, expressions, statements, procedures, and libraries. - EK 2.2.2B Being aware of and using multiple levels of abstraction in developing programs helps to more effectively apply available resources and tools to solve problems. -###LO 2.2.3 Identify multiple levels of abstractions that are used when writing programs. +### LO 2.2.3 Identify multiple levels of abstractions that are used when writing programs. - **EK 2.2.3A Different programming languages offer different levels of abstraction.** {panel type="teacher-note" summary="Exclusion EK 2.2.3A"} EXCLUSION STATEMENT (for EK 2.2.3A): Knowledge of the abstraction capabilities of all programming languages is beyond the scope of this course and the AP Exam. @@ -73,13 +73,13 @@ the scope of this course and the AP Exam. - EK 2.2.3J Applications and systems are designed, developed, and analyzed using levels of hardware, software, and conceptual abstractions. - EK 2.2.3K Lower level abstractions can be combined to make higher level abstractions, such as short message services (SMS) or email messages, images, audio files, and videos. -###LO 2.3.1 Use models and simulations to represent phenomena. +### LO 2.3.1 Use models and simulations to represent phenomena. - EK 2.3.1A Models and simulations are simplified representations of more complex objects or phenomena. - EK 2.3.1B Models may use different abstractions or levels of abstraction depending on the objects or phenomena being posed. - EK 2.3.1C Models often omit unnecessary features of the objects or phenomena that are being modeled. - EK 2.3.1D Simulations mimic real-world events without the cost or danger of building and testing the phenomena in the real world. -###LO 2.3.2 Use models and simulations to formulate, refine, and test hypotheses. +### LO 2.3.2 Use models and simulations to formulate, refine, and test hypotheses. - EK 2.3.2A Models and simulations facilitate the formulation and refinement of hypotheses related to the objects or phenomena under consideration. - EK 2.3.2B Hypotheses are formulated to explain the objects or phenomena being modeled. - EK 2.3.2C Hypotheses are re ned by examining the insights that models and simulations provide into the objects or phenomena. diff --git a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md index 1a05e1ba73..fa809de115 100644 --- a/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-creativity-introduction.md @@ -14,11 +14,11 @@ Start by reading through: ## Learning objectives The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. -###LO 1.1.1 Apply a creative development process when creating computational artifacts. +### LO 1.1.1 Apply a creative development process when creating computational artifacts. - EK 1.1.1A A creative process in the development of a computational artifact can include, but is not limited to, employing nontraditional, nonprescribed techniques; the use of novel combinations of artifacts, tools, and techniques; and the exploration of personal curiosities. - EK 1.1.1B Creating computational artifacts employs an iterative and often exploratory process to translate ideas into tangible form. -###LO 1.2.1 Create a computational artifact for creative expression. +### LO 1.2.1 Create a computational artifact for creative expression. - EK 1.2.1A A computational artifact is something created by a human using a computer and can be, but is not limited to, a program, an image, audio, video, a presentation, or a Web page file. - EK 1.2.1B Creating computational artifacts requires understanding of and use of software tools and services. - EK 1.2.1C Computing tools and techniques are used to create computational artifacts and can include, but are not limited to, programming integrated development environments (IDEs), spreadsheets, 3D printers, or text editors. @@ -26,16 +26,16 @@ The above chapter readings include specific knowledge for EK's marked in bold. W - EK 1.2.1E Creative expressions in a computational artifact can reflect personal expressions of ideas or interests. -###LO 1.2.2 Create a computational artifact using computing tools and techniques to solve a problem. +### LO 1.2.2 Create a computational artifact using computing tools and techniques to solve a problem. - EK 1.2.2A Computing tools and techniques can enhance the process of finding a solution to a problem. - EK 1.2.2B A creative development process for creating computational artifacts can be used to solve problems when traditional or prescribed computing techniques are not effective. -###LO 1.2.3 Create a new computational artifact by combining or modifying existing artifacts. +### LO 1.2.3 Create a new computational artifact by combining or modifying existing artifacts. - EK 1.2.3A Creating computational artifacts can be done by combining and modifying existing artifacts or by creating new artifacts. - EK 1.2.3B Computation facilitates the creation and modification of computational artifacts with enhanced detail and precision. - EK 1.2.3C Combining or modifying existing artifacts can show personal expression of ideas. -###LO 1.2.4 Collaborate in the creation of computational artifacts. +### LO 1.2.4 Collaborate in the creation of computational artifacts. - EK 1.2.4A A collaboratively created computational artifact reflects effort by more than one person. - EK 1.2.4B Effective collaborative teams consider the use of online collaborative tools. - EK 1.2.4C Effective collaborative teams practice interpersonal communication, consensus building, conflict resolution, and negotiation. @@ -44,13 +44,13 @@ or interests. in developing computational artifacts. - EK 1.2.4F A collaboratively created computational artifact can reflect personal expressions of ideas. -###LO 1.2.5 Analyze the correctness, usability, functionality, and suitability of computational artifacts. +### LO 1.2.5 Analyze the correctness, usability, functionality, and suitability of computational artifacts. - **EK 1.2.5A The context in which an artifact is used determines the correctness, usability, functionality, and suitability of the artifact.** - **EK 1.2.5B A computational artifact may have weaknesses, mistakes, or errors depending on the type of artifact.** - **EK 1.2.5C The functionality of a computational artifact may be related to how it is used or perceived.** - **EK 1.2.5D The suitability (or appropriateness) of a computational artifact may be related to how it is used or perceived.** -###LO 1.3.1 Use computing tools and techniques for creative expression. +### LO 1.3.1 Use computing tools and techniques for creative expression. - EK 1.3.1A Creating digital effects, images, audio, video, and animations has transformed industries. - EK 1.3.1B Digital audio and music can be created by synthesizing sounds, sampling existing audio and music, and recording and manipulating sounds, including layering and looping. - EK 1.3.1C Digital images can be created by generating pixel patterns, manipulating existing digital images, or combining images. diff --git a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md index dbf76e2210..4d127e20f9 100644 --- a/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md +++ b/text/en/curriculum-guides/apcsp/guide-the-internet-introduction.md @@ -12,7 +12,7 @@ ## Learning objectives The above chapter readings include specific knowledge for EK's marked in bold. Work to include unmarked learning objectives in the CS Field Guide is currently in progress. -###LO 6.1.1 Explain the abstractions in the Internet and how the Internet functions. +### LO 6.1.1 Explain the abstractions in the Internet and how the Internet functions. {panel type="teacher-note" summary="Exclusion LO 6.1.1"} EXCLUSION STATEMENT (for LO 6.1.1): Specific devices used to implement the abstractions in the Internet are beyond the scope of this course and the AP Exam. {panel end} @@ -30,14 +30,14 @@ EXCLUSION STATEMENT (for EK 6.1.1F): Specific details of any particular standard - EK 6.1.1H The number of devices that could use an IP address has grown so fast that a new protocol (IPv6) has been established to handle routing of many more devices. - EK 6.1.1I Standards such as hypertext transfer protocol (HTTP), IP, and simple mail transfer protocol (SMTP) are developed and overseen by the Internet Engineering Task Force (IETF). -###LO 6.2.1 Explain characteristics of the Internet and the systems built on it. +### LO 6.2.1 Explain characteristics of the Internet and the systems built on it. - EK 6.2.1A The Internet and the systems built on it are hierarchical and redundant. - EK 6.2.1B The domain name syntax is hierarchical. - EK 6.2.1C IP addresses are hierarchical. - EK 6.2.1D Routing on the Internet is fault tolerant and redundant. -###LO 6.2.2 Explain how the characteristics of the Internet influence the systems built on it. +### LO 6.2.2 Explain how the characteristics of the Internet influence the systems built on it. - EK 6.2.2A Hierarchy and redundancy help systems scale. - EK 6.2.2B The redundancy of routing (i.e., more than one way to route data) between two points on the Internet increases the reliability of the Internet and helps it scale to more devices and more people. - EK 6.2.2C Hierarchy in the DNS helps that system scale. @@ -59,7 +59,7 @@ EXCLUSION STATEMENT (for EK 6.2.2H): Understanding the technical aspects of how - EK 6.2.2J The bandwidth of a system is a measure of bit rate—the amount of data (measured in bits) that can be sent in a fixed amount of time. - EK 6.2.2K The latency of a system is the time elapsed between the transmission and the receipt of a request. -###LO 6.3.1 Identify existing cybersecurity concerns and potential options to address these issues with the Internet and the systems built on it. +### LO 6.3.1 Identify existing cybersecurity concerns and potential options to address these issues with the Internet and the systems built on it. - EK 6.3.1A The trust model of the Internet involves trade-offs. - EK 6.3.1B The DNS was not designed to be completely secure. - EK 6.3.1C Implementing cybersecurity has software, hardware, and human components. diff --git a/text/en/curriculum-guides/apcsp/index.md b/text/en/curriculum-guides/apcsp/index.md index 50d2f0663c..2cc4ee6ed5 100644 --- a/text/en/curriculum-guides/apcsp/index.md +++ b/text/en/curriculum-guides/apcsp/index.md @@ -8,7 +8,7 @@ These curriculum guides have been written to assist teachers for the Advanced Pl >The major areas of study in the course are organized around seven big ideas, which encompass ideas foundational to studying computer science. These big ideas connect students to a curriculum scope that includes the art of programming but is not programming-centric. -##Computational Thinking Practices +## Computational Thinking Practices >The computational thinking practices help students coordinate and make sense of knowledge to accomplish a goal or task. They enable students to engage with the course content by developing computational artifacts and analyzing data, information, or knowledge represented for computational use. - Connecting Computing @@ -18,63 +18,63 @@ art of programming but is not programming-centric. - Communicating - Collaborating -##Concepts (Big Ideas in Computer Science) +## Concepts (Big Ideas in Computer Science) Each concept embodies specific essential questions and enduring understandings. The AP CSP curriculum framework answers these questions and builds the enduring understandings by targeting specific learning objectives (Students will be able to ... ) and essential knowledge (Students will know that ... ). We have developed guides for teachers for each concept with content knowledge and suggested resources. -###Creativity +### Creativity >Computing fosters the creation of artifacts and creative expression. Programming is a creative process. - [Introduction](curriculum-guides/apcsp/guide-creativity-introduction.html) -###Abstraction +### Abstraction >Multiple levels of abstraction are used in computation. Models and simulations use abstraction to raise and answer questions. - [Introduction](curriculum-guides/apcsp/guide-abstraction-introduction.html) -###Data and Information +### Data and Information >Data and information facilitate the creation of knowledge. People use computer programs to process information to gain insight and knowledge. Computing facilitates exploration and the discovery of connections in information. Computational manipulation of information requires consideration of representation, storage, security and transmission. - [Introduction](curriculum-guides/apcsp/guide-data-and-information-introduction.html) -###Algorithms +### Algorithms >An algorithm is a precise sequence of instructions for a process that can be executed by a computer. They are expressed using languages, and can solve many, but not all, problems. - [Introduction](curriculum-guides/apcsp/guide-algorithms-introduction.html) -###Programming +### Programming >Programming is a creative process that enables problem solving, human expression and creation of knowledge. It uses mathematical and logical concepts and is facilitated by appropriate abstractions. Programs are developed and used by people, and they are written to execute algorithms. - [Introduction](curriculum-guides/apcsp/guide-programming-introduction.html) -###The Internet +### The Internet >The internet pervades modern computing. It is a network of autonomous systems. Characteristics of the Internet and the systems built on it influence their use. Cybersecurity is an important concern for the Internet and those systems. - [Introduction](curriculum-guides/apcsp/guide-the-internet-introduction.html) -###Global Impact +### Global Impact >Computing affects communication, interaction and cognition. It enables innovation in nearly every field and has both beneficial and harmful effects. Computing is situated within economic, social and cultural contexts. - [Introduction](curriculum-guides/apcsp/guide-global-impact-introduction.html) -##Project and Course Unit recommendations +## Project and Course Unit recommendations The AP CSP curriculum framework allows flexibility for projects and course units to address multiple concepts in one unit. We provide a guide for some common combinations and recommendations for implementation to achieve multiple learning objectives with the required level of competency. - [App Development]() -##Assessment +## Assessment The learning objectives (including the essential knowledge statements and computational thinking practices) will be the targets of assessment for the AP Computer Science Principles course. This assessment comprises two parts: the through-course AP assessment and the end-of-course AP Exam. The through-course assessment involves completion of two performance tasks. -###Explore Performance Task +### Explore Performance Task >Students will select and investigate a computing innovation that has had, or has the potential to have, a significant impact, both beneficial and harmful, on society, economy, or culture. **8 classroom hours** - Guide coming soon -###Create Performance Task +### Create Performance Task >Students will develop a program on a topic that interests them. **12 classroom hours** - Guide coming soon -###Exam +### Exam > The AP Computer Science Exam is 120 minutes long and includes 74 multiple-choice questions and is 60 percent of a student’s AP Computer Science Principles score. diff --git a/text/en/curriculum-guides/apcsp/todo.md b/text/en/curriculum-guides/apcsp/todo.md index 5ca5a42888..9ed323e9a9 100644 --- a/text/en/curriculum-guides/apcsp/todo.md +++ b/text/en/curriculum-guides/apcsp/todo.md @@ -1,4 +1,4 @@ -#To Do +# To Do Several learning objectives are not currently covered by the CS Field Guide. This "to-do" list includes general computer science topics and suggestions for how we can update the field guide to cover the learning objectives. Different levels of changes are suggested: @@ -13,7 +13,7 @@ This "to-do" list includes general computer science topics and suggestions for h - new sub-section: add a new X.Y.Z minor section to section Y of chapter X - edits to existing text content to use specific terminology -##Abstraction +## Abstraction - floating point representation - **new section in data-representation** [Phase+] - bit representation of program instructions (not just data) @@ -29,7 +29,7 @@ This "to-do" list includes general computer science topics and suggestions for h - models and simulations (there are some CS unplugged ones) - **new chapter on models-simulations** -##Algorithms +## Algorithms - sequencing, selection, iteration as building blocks for algorithms - **new sub-section with specific terms in section 2.4** [Phase1][draft] - algorithm correctness @@ -45,7 +45,7 @@ This "to-do" list includes general computer science topics and suggestions for h - efficiency of memory usage - **additional paragraph in 2.1.2** [Phase2][draft] -##Creativity +## Creativity - collaborative tools (open source, github/google doc) - **new chapter on data analysis, visualization, processing, etc.** - computational artifacts as more than programs @@ -53,7 +53,7 @@ This "to-do" list includes general computer science topics and suggestions for h - computational tools to transform digital media industries such as photoshop, virtual synthesizers, etc - **new chapter on data analysis, visualization, processing, etc.** -##Data +## Data - large data sets (databases), queries, filtering - **new chapter on data analysis, visualization, processing, etc.** - data patterns (sequence analysis / cryptography?) @@ -65,13 +65,13 @@ This "to-do" list includes general computer science topics and suggestions for h - metadata - **new chapter on data analysis, visualization, processing, etc.** -##Impact +## Impact **Most AP curriculum include specific lesson plans to cover these topic by requiring the students to research online after/during reading of the Blown to Bits book (freely available online). A teaching guide on how to use Blown to Bits in the classroom along with discussion questions and essay/project ideas should be sufficient. No new CS Field Guide content is suggested for these.** - computer ethics - social computing -##Programming +## Programming - program components (modularity) - **additional sub-section in software-engineering** [Phase2] - program documentation @@ -95,7 +95,7 @@ the students to research online after/during reading of the Blown to Bits book ( - boolean logic, algebra - **new chapter on logic** -##Internet +## Internet **New chapter on Network Systems with sections for the below** - internet system model: hierarchy, redundancy, fault tolerance (addresses, protocols, services) - bandwidth, latency From 56e976495582438b3bbc4c4f65d55513ae56ae40 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 28 Sep 2016 11:39:37 +1300 Subject: [PATCH 29/63] Alter algorithm correctness example to be independent of culture The previous example used concepts and terms often found in USA, but not in other countries like NZ, Australia, etc. --- text/en/chapters/algorithms.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index c4666c988f..02965b3533 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -138,14 +138,14 @@ Typically this is done by classifying ranges of input values and showing that al Correctness is particularly important when comparing two algorithms that solve the same problem. If one algorithm is very fast to complete but produces incorrect results some of the time it may be far less useful than a correct algorithm that is slower. Correctness is also important when using an algorithm as the building block for another algorithm. -Here is a greedy algorithm for assigning students a partner for an assignment: +Here is an algorithm for assigning animals as pets to people on a waitlist: -1. Search for the remaining student with the highest GPA -2. Assign the highest GPA student their highest preference roommate from the remaining students -3. Repeat 1-2 until no students remain +1. Search for the person who is earliest on the the waitlist +2. Assign the person who is earliest on the waitlist with their preferred animal as a pet +3. Repeat 1-2 until no people remain on the waitlist This algorithm relies on a correct search algorithm in the first step. -If the search algorithm incorrectly chose a random student, the greedy algorithm for roommate assignment would also be incorrect. +If the search algorithm incorrectly chose a random person, the algorithm for assigning animals as pets would also be incorrect. As you will see in this chapter with searching and sorting there exist multiple correct algorithms for the same problem. Often there are good reasons to know multiple correct algorithms because there are tradeoffs in simplicity, algorithm cost, and assumptions about inputs. From 768792638a3a552ae4578122977acd4d48f23035 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Fri, 30 Sep 2016 16:31:51 +1300 Subject: [PATCH 30/63] Position sidebar with sticky-kit.js (fixes #387) The sidebar is now positioned by floating within the parent element, so the JS library can detect when the element reaches the bottom of the element. --- generator/generator-settings.conf | 1 + generator/html-templates.conf | 45 +++++++++---------- .../js/third-party/jquery.sticky-kit.min.js | 9 ++++ generator/js/website.js | 1 + generator/scss/website.scss | 7 ++- 5 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 generator/js/third-party/jquery.sticky-kit.min.js diff --git a/generator/generator-settings.conf b/generator/generator-settings.conf index 0463cedf1d..6942a0b902 100644 --- a/generator/generator-settings.conf +++ b/generator/generator-settings.conf @@ -51,6 +51,7 @@ JS: third-party/modernizr.js website.js third-party/iframeResizer.min.js + third-party/jquery.sticky-kit.min.js Interactive: base-files Font: diff --git a/generator/html-templates.conf b/generator/html-templates.conf index 9b510b4ff6..88f079afb6 100644 --- a/generator/html-templates.conf +++ b/generator/html-templates.conf @@ -367,34 +367,28 @@ MathJax.Hub.Config({ {{ page_heading }}
- {%- if file.settings.table_of_contents_sidebar %} -
+
{{ body_html }}
-
- - {% else %} -
- {{ body_html }} + {%- endif %} + + {%- endfor %} +
{% endif %}
@@ -417,6 +411,7 @@ MathJax.Hub.Config({ + {%- for script in page_scripts %} {{ script }} diff --git a/generator/js/third-party/jquery.sticky-kit.min.js b/generator/js/third-party/jquery.sticky-kit.min.js new file mode 100644 index 0000000000..e2a3c6de9e --- /dev/null +++ b/generator/js/third-party/jquery.sticky-kit.min.js @@ -0,0 +1,9 @@ +/* + Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net +*/ +(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k)); +if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("
"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q, +u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),eb&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}), +a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize", +y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n Date: Wed, 5 Oct 2016 13:28:25 +1300 Subject: [PATCH 31/63] Fix issue when main column is shrunk when no TOC is present To solve this issue I have added a conditional to only add the 3/4 column on large devices when a table of contents is present. --- generator/html-templates.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/html-templates.conf b/generator/html-templates.conf index 88f079afb6..2f5f7b0f84 100644 --- a/generator/html-templates.conf +++ b/generator/html-templates.conf @@ -367,7 +367,7 @@ MathJax.Hub.Config({ {{ page_heading }}
-
+
{{ body_html }}
{%- if file.settings.table_of_contents_sidebar %} From 1a72842bdcfef1c9cd456fcde6df30dcac34eba3 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 5 Oct 2016 14:00:39 +1300 Subject: [PATCH 32/63] Fix typos in Algorithms chapter --- text/en/chapters/algorithms.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/text/en/chapters/algorithms.md b/text/en/chapters/algorithms.md index 02965b3533..cd4a13b86f 100644 --- a/text/en/chapters/algorithms.md +++ b/text/en/chapters/algorithms.md @@ -446,7 +446,7 @@ Insertion sort is used on very small sequences to take advantage of its speed fo Merge sort is used to merge these small sequences into larger ones to take advantage of the better upper bound on algorithm cost for large data sets. {panel type="curiosity" summary="Why are there so many different programming languages?"} -So if we know how to define an algorithm, why are thereso many programming languages? +So if we know how to define an algorithm, why are there so many programming languages? Programming languages are often created or adapted to express algorithms clearly for a specific problem domain. For example, it is easier to read mathematical algorithms in Python than Scratch. Similarly, data flow algorithms are clearer in visual programming languages like LabVIEW than Python. @@ -463,7 +463,7 @@ In this chapter we have only talked about the number of comparisons an algorithm An algorithm often uses computer memory to store temporary data such as a partial sum of a list of numbers or a list of products that match some search criteria. With the large size of modern computer memory this may seem to not be as important as the number of steps an algorithm takes, but a poorly performing algorithm in terms of computer memory may be limited in its ability to work with the large data sets common in many industry applications. For example, a query algorithm that stored even a single bit for each record it searched could quickly overwhelm a web server's memory if it was searching a large data set such as Netflix's current movie offerings. -Minimizing memory usage while also minimizing the number of steps an algorithm takes is not always possible; there is often a tradeoff between computation and memory usage. +Minimising memory usage while also minimizing the number of steps an algorithm takes is not always possible; there is often a tradeoff between computation and memory usage. Computer Scientists use 'Big O notation' to more accurately describe the performance or complexity of an algorithm, and you are likely to come across this notation very quickly when investigating the performance of algorithms. It characterises the resources needed by an algorithm and is usually applied to the execution time required, or sometimes the space used by the algorithm. From 0c24209adb07cc5ad4a8017b3aae0974fb8ad70f Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 5 Oct 2016 14:01:08 +1300 Subject: [PATCH 33/63] Add warning to program instructions section of required prior knowledge --- generator/scss/website.scss | 3 ++- text/en/chapters/data-representation.md | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/generator/scss/website.scss b/generator/scss/website.scss index 5542e31015..4274fcc5f3 100644 --- a/generator/scss/website.scss +++ b/generator/scss/website.scss @@ -314,7 +314,8 @@ ul.panel { @include panel-color("panel-teacher-note", "red"); @include panel-color("panel-additional-information", "amber"); @include panel-color("panel-curiosity", "purple"); - @include panel-color("panel-challenge", "orange"); + @include panel-color("panel-challenge", "deep-orange"); + @include panel-color("panel-caution", "orange"); @include panel-color("panel-jargon-buster", "light-green"); @include panel-color("panel-spoiler", "blue-grey"); @include panel-color("panel-project", "blue"); diff --git a/text/en/chapters/data-representation.md b/text/en/chapters/data-representation.md index 4c54430538..fe33bb9762 100644 --- a/text/en/chapters/data-representation.md +++ b/text/en/chapters/data-representation.md @@ -1280,6 +1280,10 @@ Have a look at the Compression Chapter to find out more! ## Program Instructions +{panel type="caution" expanded="True"} +Before reading this section, you should have an understanding of low level languages (see the section on [Machine Code in the Programming Languages](chapters/programming-languages.html#machine-code-low-level-languages) chapter). +{panel end} + In a similar fashion to representing text or numbers using binary, we can represent an entire actual program using binary. Since a program is just a sequence of instructions, we need to decide how many bits will be used to represent a single instruction and then how we are going to interpret those bits. Machine code instructions typically have a combination of two pieces: operation and operand. From e8caf814f55648e33874d8f4866b780c29e689d2 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 5 Oct 2016 15:05:44 +1300 Subject: [PATCH 34/63] Add formatted warning that AP CSP curriculum guides are work in progress This fixes #386 --- text/en/curriculum-guides/apcsp/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/text/en/curriculum-guides/apcsp/index.md b/text/en/curriculum-guides/apcsp/index.md index 2cc4ee6ed5..05a870aa6e 100644 --- a/text/en/curriculum-guides/apcsp/index.md +++ b/text/en/curriculum-guides/apcsp/index.md @@ -1,7 +1,9 @@ # APCSP Curriculum Guides These curriculum guides have been written to assist teachers for the Advanced Placement Computer Science Principles course. -*Note: These guides are still a work in progress.* +{panel type="caution" expanded="True"} +These guides are still a work in progress! +{panel end} *We recommend following one of the full course curriculum listed on the [APCSP](http://apcsp.org/) and using these guides to integrate CS field guide resources for specific units or lessons. Descriptions of the big ideas, learning objectives, and essential knowledge statements are directly from CC BY-SA 4.0 licensed APCSP resources* From eca9bc3981baac1384f718de8d9ca87d6dcc8c44 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Wed, 5 Oct 2016 15:20:18 +1300 Subject: [PATCH 35/63] Replace broken link to Eliza chatterbot (fixes #384) --- images/eliza-chatbot-screenshot.png | Bin 81461 -> 4123 bytes text/en/chapters/artificial-intelligence.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/images/eliza-chatbot-screenshot.png b/images/eliza-chatbot-screenshot.png index 7620926e1bb8b1b90dc2b6b330fcc7c33766e030..ce92742633998a4419bf82d6633c24796dbd7a0a 100644 GIT binary patch literal 4123 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 SK}!~Y_bqNfAyuaCPyYpOYo;dv literal 81461 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�@b!)&?&c&0FEFRMoshYzOveCy5U;XV|& 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%0Dcx0tDadEe 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 diff --git a/text/en/chapters/artificial-intelligence.md b/text/en/chapters/artificial-intelligence.md index e7ef35bc8d..143c5a9b9d 100644 --- a/text/en/chapters/artificial-intelligence.md +++ b/text/en/chapters/artificial-intelligence.md @@ -36,9 +36,9 @@ Eliza is a system that was intended to get people thinking about AI, and you sho Go to the link just below and have a conversation with Eliza (keeping in mind that she is supposed to be a Rogerian Psychotherapist, so will respond like one). -[Click here for the Eliza chatterbot at nlp-addiction.com](http://nlp-addiction.com/eliza/) +[Click here to use the Eliza chatterbot](http://www.manifestation.com/neurotoys/eliza.php3) -{image filename="eliza-chatbot-screenshot.png" alt="The Eliza chatbot at nlp-addiction.com"} +{image filename="eliza-chatbot-screenshot.png" alt="A screenshot of an Eliza chatbot"} Do you think Eliza is as smart as a human? Would you believe she was a human if somebody told you she was? From d94f08ecfc39ed0296ac96ba844e4cb8c4c14bc5 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Thu, 6 Oct 2016 09:57:01 +1300 Subject: [PATCH 36/63] Tidy formatting of NCEA homepage --- text/en/curriculum-guides/ncea/index.md | 49 ++++++++++++++----------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/text/en/curriculum-guides/ncea/index.md b/text/en/curriculum-guides/ncea/index.md index b11a2a1b5b..439ae32120 100644 --- a/text/en/curriculum-guides/ncea/index.md +++ b/text/en/curriculum-guides/ncea/index.md @@ -6,13 +6,16 @@ for the following NCEA Achievement Standards: - AS91371 (2.44) - AS91636 (3.44) -The computer science externals can be particularly time consuming for Merit/ Excellence. +The computer science externals can be particularly time consuming for Merit and Excellence. For some students, it is better to just focus on doing the Achieved material well. For this reason, we provide separate guides for students aiming for subject endorsement and for students aiming to get the credits. -*Note: These guides are still a work in progress.* -*We recommend reading the guidance on this page very carefully to ensure students are working on the right material. -There is also a lot of material available online from NZQA, and good ideas shared on the [NZACDITT](http://nzacditt.org.nz/) mailing list.* +{panel type="caution" expanded="True"} +These guides are still a work in progress. + +We recommend reading the guidance on this page very carefully to ensure students are working on the right material. +There is also a lot of material available online from NZQA, and good ideas shared on the [NZACDITT](http://nzacditt.org.nz/) mailing list. +{panel end} ## AS91074 (1.44) @@ -26,24 +29,25 @@ There is also a lot of material available online from NZQA, and good ideas share The following guides are for students who are aiming for Merit or Excellence. -- [Algorithms - Searching (Merit/ Excellence)](curriculum-guides/ncea/assessment-guide-level-1-searching-algorithms.html) -- [Algorithms - Sorting (Merit/ Excellence)](curriculum-guides/ncea/assessment-guide-level-1-sorting-algorithms.html) +- [Algorithms - Searching (Merit/Excellence)](curriculum-guides/ncea/assessment-guide-level-1-searching-algorithms.html) +- [Algorithms - Sorting (Merit/Excellence)](curriculum-guides/ncea/assessment-guide-level-1-sorting-algorithms.html) ### Programming Languages -- [Programming Languages (Merit/ Excellence)](curriculum-guides/ncea/assessment-guide-level-1-programming-languages.html) +- [Programming Languages (Merit/Excellence)](curriculum-guides/ncea/assessment-guide-level-1-programming-languages.html) ### Human Computer Interaction -- [Human Computer Interaction (Merit/ Excellence)](curriculum-guides/ncea/assessment-guide-level-1-human-computer-interaction.html) +- [Human Computer Interaction (Merit/Excellence)](curriculum-guides/ncea/assessment-guide-level-1-human-computer-interaction.html) ## AS91371 (2.44) -[Level 2 Introduction](curriculum-guides/ncea/assessment-guide-level-2-introduction.html) +- [Level 2 Introduction](curriculum-guides/ncea/assessment-guide-level-2-introduction.html) For 2.44, students will need to do **one** project on data representation (each data representation guide contains two data types), **three** projects for encoding, and **one** project for human computer interaction. They must do one encoding project for each of the three encoding areas - compression, error control coding, and encryption. -The guides the student picks will depend on whether they are aiming for Merit/ Excellence, or on just getting the credits. Note that Merit/ Excellence for this standard requires time, commitment and a willingness to do additional reading. +The guides the student picks will depend on whether they are aiming for Merit/Excellence, or on just getting the credits. +Note that Merit/Excellence for this standard requires time, commitment and a willingness to do additional reading. ### Representing Data @@ -51,11 +55,11 @@ The guides the student picks will depend on whether they are aiming for Merit/ E For Achieved, students will only need to choose 1 guide. The guides cover 2 data representation topics, fully covering the requirements for data representation at Achieved. --[Representing Data - Representing numbers and text with bits (Achieved)](curriculum-guides/ncea/assessment-guide-level-2-achieved-representing-data.html) +- [Representing Data - Representing numbers and text with bits (Achieved)](curriculum-guides/ncea/assessment-guide-level-2-achieved-representing-data.html) -**Merit/ Excellence Guides** +**Merit/Excellence Guides** -For Merit/ Excellence, students will need to choose 2 guides. Each guide covers 1 different data representation topic. +For Merit/Excellence, students will need to choose 2 guides. Each guide covers 1 different data representation topic. - [Representing Text - Unicode (Merit/Excellence)](curriculum-guides/ncea/assessment-guide-level-2-excellence-data-representation-text.html) - [Representing Numbers - Two's Complement (Merit/Excellence)](curriculum-guides/ncea/assessment-guide-level-2-excellence-data-representation-numbers.html) @@ -65,9 +69,9 @@ For Merit/ Excellence, students will need to choose 2 guides. Each guide covers **For Achieved**, students need to pick **three Achieved projects** with one from each of the three encoding topics (giving a total of 3 encoding projects) -**For Merit/ Excellence**, students need to pick **one Excellence project** from one of the three encoding topics, and **two Achieved projects**; with one from each of the other two encoding topics (giving a total of 3 encoding projects). +**For Merit/Excellence**, students need to pick **one Excellence project** from one of the three encoding topics, and **two Achieved projects**; with one from each of the other two encoding topics (giving a total of 3 encoding projects). -Note that we are currently updating Merit/ Excellence guides to better match the expectations for students working at these levels. The updated guides will be released in check back in early 2016. +Note that we are currently updating Merit/Excellence guides to better match the expectations for students working at these levels. The updated guides will be released in check back in early 2016. #### Error Control coding @@ -76,7 +80,8 @@ Note that we are currently updating Merit/ Excellence guides to better match the - [Encoding - Error Control Coding with check sums (Achieved)](curriculum-guides/ncea/assessment-guide-level-2-achieved-error-control-check-sums.html) - [Encoding - Error Control Coding with parity (Achieved)](curriculum-guides/ncea/assessment-guide-level-2-achieved-error-control-parity.html) -**Merit/ Excellence Guides** +**Merit/Excellence Guides** + Not yet released - check back in early 2016. #### Compression @@ -85,7 +90,8 @@ Not yet released - check back in early 2016. - [Encoding - Compression with Run Length Encoding (Achieved) ](curriculum-guides/ncea/assessment-guide-level-2-achieved-compression-run-length-encoding.html) -**Merit/ Excellence Guides** +**Merit/Excellence Guides** + Not yet released - check back in early 2016. #### Encryption @@ -94,20 +100,21 @@ Not yet released - check back in early 2016. - [Encoding - Encryption with Caesar Cipher (Achieved)](curriculum-guides/ncea/assessment-guide-level-2-achieved-encryption-caesar-cipher.html) -**Merit/ Excellence Guides** +**Merit/Excellence Guides** + Not yet released - check back check back in early 2016. ### Human Computer Interaction -Students will need to pick **one** project from here. Which they pick will depend on whether they are aiming for Merit/ Excellence or Achieved. +Students will need to pick **one** project from here. Which they pick will depend on whether they are aiming for Merit/Excellence or Achieved. **Achieved Guides** - For Achieved: [Human Computer Interaction - identifying heuristic violations in every day life (Achieved)](curriculum-guides/ncea/assessment-guide-level-2-achieved-human-computer-interaction.html) -**Merit/ Excellence Guides** +**Merit/Excellence Guides** -- For Merit/ Excellence: [Human Computer Interaction - evaluating an interface with heuristics (Merit/ Excellence) ](curriculum-guides/ncea/assessment-guide-level-2-full-human-computer-interaction.html) +- For Merit/Excellence: [Human Computer Interaction - evaluating an interface with heuristics (Merit/Excellence) ](curriculum-guides/ncea/assessment-guide-level-2-full-human-computer-interaction.html) ## AS91636 (3.44) From 5f393928ea2e9810caa770535c557968361317e4 Mon Sep 17 00:00:00 2001 From: Jack Morgan Date: Thu, 6 Oct 2016 12:51:30 +1300 Subject: [PATCH 37/63] Hide table of contents on small screens --- generator/html-templates.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/html-templates.conf b/generator/html-templates.conf index 2f5f7b0f84..2c4f729633 100644 --- a/generator/html-templates.conf +++ b/generator/html-templates.conf @@ -371,7 +371,7 @@ MathJax.Hub.Config({ {{ body_html }}
{%- if file.settings.table_of_contents_sidebar %} -