Overview

This course will be using skills based grading, meaning that a student’s grade will be solely based on their ability to prove competency of the core skills covered throughout the course. Some key components of this grading framework are:

Assignment Types

Homework And Classwork

The purpose of these assignments is for students to practice, discover and try things out. These assignments are vital elements of a student’s path to skill mastery. These are not included in a students grade because they are not designed to assess skills but rather to hone them. Student’s grades should not be affected by how long or quickly it takes to complete. Students should also not be discouraged from trying out something different, exploring new possibilities or even failure to complete these assignments, as all of those activities are integral to learning and eventually mastering skills.

These assignments will also provide the teacher with important information about the current abilities of each student and the class as a whole. These assignments will not be graded, but they will be used in class, solutions may be provided, and feedback will be given as often as needed and possible.

Assessments

All assessments are designed to assess a students skill competency. It will be clear which skills are to be assessed for a given assessment. Instead of a single grade for an assignment (i.e. 92/100, 41/50, 3.5/4), students will be given a single grade for each skill assessed on a 0 - 4 scale as follows:

Exams & Quizzes

Exams and quizzes will be in class assessments taking the course of a period (or part of a period for quizzes). Students are not to work collaboratively or share information about the exam/quiz to any other student.

Lab Assignments

Lab assignments will be programming tasks that may include both in and out of class time to complete. Students must submit their own work, though they may use class-approved resources (including notes, classmates, CS Dojo) to complete the assignments. Rubrics detailing what skills will be assessed and what constitutes a particular grade for each skill will be provided for each lab.

Projects

Projects will be larger-scale assignments. Students will be given more time to complete the work than labs, and specific time will be set aside for planning and design, in addition to the project itself. Rubrics detailing what skills will be assessed and what constitutes a particular grade for each skill will be provided for each project.

Final Project and/or Exam

The course will culminate in a final assessment that will take the form of an exam, project, or both. The final(s) will assess all the skills for the course.

Late Assessment Submissions

Retakes/Retests/Redos

All students will be given multiple attempts to demonstrate competency of each skill. This can take many different forms, including(but not limited to) the following:

Final Grade Calculation

A student’s final grade should reflect their demonstrated skill competency level from throughout the semester, including how well they’ve maintained those skills through to the end. A student’s skill grade will consist of their skill level demonstrated over the course of the semester and their skill level demonstrated on the final assessment(s):

Final grades will take the average of all of a student’s individual skill grades and map that to a 100 point grading scale as follows:

Skills for Foundations of Computer Science

N.B. This list may change slightly over the course of the semester. Any changes will be made clearly during class and updated here as well.

Below is the list of skills that are the key components of this course. Mastery level must also include demonstration of Competency level as well.

Skill Minimal Competency Developing Competency Competency Mastery Current Max Score
3. Writing functions/procedures. Can write the contract for a function. Can write simple functions given a contract. Can write complex functions given a contract and can write contracts for functions given a specified task. Can write contracts for complex functions, implement those functions and create effective test cases for them. ng
4. Understanding Algorithms Can follow an algorithm to produce a desired outcome. Can break down a simple problem into basic steps that will result in a desired outcome. Can break down a problem into basic steps and implement those steps in code. Can analyze the differences between 2 or more algorithms that produce the same desired outcome. ng
5. Working with Boolean Values Understands the purpose of boolean values. Demonstrates the appropriate use of comparison operators. Demonstrates the appropriate use of comparison and boolean operators. Writes functions that take in boolean values and/or return boolean values. 4
6. Using Conditional Statements Can trace the result of a single conditional statement. Can write conditional statements with one or two results. Can write nested conditional statements. Can use at least two different kinds of conditional statements, and understand the benefits of each. 4
7. Using Variables Recognizes the difference between variables and literals Demonstrates ability to understand code which uses variables Correctly uses variables in programming Correctly uses the appropriate types of variables for different programming algorithms 2
9. Data Types Demonstrates an understanding of numeric data types. Demonstrates an understanding of numeric and text based data types. Writes programs that work with both numeric and text based data types. Can explain data types that are references to other data. 3
10. Data Structures Understands the difference between single values and data structures. Can describe how one data structure stores data. Can use a data structure to store multiple values in a program. Can use language provided features to effectively create and access data in a data structure. ng
11. Recursion Can describe what a recursive function is. Can accurately trace a recursive function. Can write and trace a recursive function. Can develop a recursive solution to a problem and correctly implement it. ng
12. Iteration Can describe iteration. Can use one built in language structure or feature to write an iterative process. Can use multiple built in language structures/features to write an iterative process. Can control iterative processes using counters and non-counter based boolean conditions. 3
16. Operating Systems and File Systems Can describe the purpose of an operating system and name multiple examples. Can describe the purpose of a file system. Can explain how a hierarchical file system stores data, locate files based on a path and provide a path to a given file. Can explain the relationships between operating systems, programs and the file system. ng
23. Perspicuousness Writes understandable code using descriptive identifiers. Correctly uses language features (functions, loops, etc.) to avoid repeated code. Writes code which is clear, using whitespace to increase readability, and uses function appropriately. Writes code which is clear and easy to develop and maintain, including useful comments. ng
24. Meeting requirements Completes the task. Completes the task using the required method. Completes the task using all the requirements listed. Completes the task following all requirements, including deadlines. 4
25. Using The Command Line Interface Understands the purpose of the command line and can identify information present in the default bash prompt. Can navigate the file hierarchy using cd, ls and pwd. Can view and modify files using cp, mv, cat, and less. Can effectively use the command line to navigate the file system, including using command line and keyboard shortcuts. 4
26. Using a Web Server Can use public_html to serve a single web page. Can use public_html to serve multiple web pages. Can use public_html to serve multiple connected pages with media resources using relative paths. Can write python programs that dynamically generate web pages via public_html 3
27. Writing web pages with HTML Can write HTML element tags for at least 2 different elements. Can use the required html tags to make a minimally valid HTML document. Can create HTML pages that contain the required tags, hyperlinks and multiple other HTML elements and use attributes correctly. Can create HTML pages that use elements like div and span to organize content and provide links to CSS styling files. 4
28. Styling web pages with CSS Can use CSS to modify a single element using in-line styling. Can use CSS in the head of a webpage to modify multiple elements. Can use CSS in an external file to provide multiple style options for multiple elements. Can use CSS to modify the layout of a webpage. 4
29. Strings Can create string literals in code, and combine strings using +. Can use [] to access individual characters of strings. Can build new strings over time using a combination of variables and literals. Can use the unicode values of characters to transform strings. ng
30. Lists Can use [] to access elements in a list. Can iterate over the elements of a list. Can create lists pragmatically using list methods and +. Can create and work with lists that contain sublists. ng
31. Dictionaries Can access elements in a dictionary using []. Can iterate over a dictionary in order to retrieve values. Can iterate over a dictionary in order to retrieve values and programmatically build dictionaries. Can build and work with dictionaries containing complex values (i.e. other dictionaries or lists) ng
32. Working with Data Can open a file in a python program and load its data into a string. Can organize data from a file into data structures in a python program. Can manipulate file based data programmatically to analyze and create new information. Can build complex models (i.e. dictionaries) based on data files. ng