Courses tailored to specifications of Alberta Education.

We use the Khan Academy computer programming course's core curriculum.  Students learn the basics of programming in the JavaScript language, using the ProcessingJS library on top for drawing and animation.  Students learn the basic concepts in the language, but in a visual way. For example, when we talk about nested for loops, we demonstrate how we can make a grid of gems on our screen.

The Khan Academy curriculum is viewable here:  https://www.khanacademy.org/cs/programming.

Topics covered are:  Basic statement syntax, Variables, Math operators and assignment operators, Strings, Functions,  Logic and conditionals, Loops, Arrays, Objects, and  Object-oriented JS.

The curriculum currently (September 2014) consists of 40 videos (talk-throughs), 31 challenges, and 9 projects. On average, the talk-throughs are 6 minutes long, the challenges take 5 minutes each to complete, and projects are often completed in 10-40 minutes, depending on how far the student wants to take them. There is thus around 15 hours of curriculum.

We introduce the Java Computer Programming Language.

(1) We install and use Java and an Integrated Development Environment.

(2) We perform arithmetic. We do input and output from the command line.

(3) We use our own Java classes.

(4) We use the branching control statements 'if', 'if..else' and 'switch' to determine whether to optionally execute a block of code.

(5) We learn use the looping control statements 'while', 'do..while' and 'for' to repeatedly execute a block of code.

(6) We declare and use modules called methods to "divide and conquer" larger blocks of code. We randomly generate numbers and use them in games of chance.

(7) We use data structures called arrays that consist of related data items.

(8) We control access to a class with scope operators. We use class constructors to create objects. We control access to data of objects using setter and getter methods. We use sets of constants with enumeration data types.

(9) We reuse existing software with INHERITANCE of existing software. We compare the "is-a" (inheritance) and "has-a" (composition) relationships.

(10) We reuse code with POLYMORPHISM so different types of objects that share a superclass can be processed in a similar way.

(11) We handle errors with EXCEPTION HANDLING.

(12) We join, separate and compare characters in rudimentary ARTIFICIAL INTELLIGENCE.

Students learn to plan with tools and techniques appropriate to Object Oriented Programming (OOP).

In topic 12 students use the powerful, industry standard Unified Modelling Language (UML) to visually plan and document projects, but beginning with old fashioned "user stories" and other "use cases".

In topics 12 and 13, students tackle the "ATM Case Study" as they implement user stories, use case, use case diagrams, class diagrams, sequence diagrams and state diagrams.  Students also become acquainted with other power diagrams as well.

In topic 13 students learn to generate HTML web based "Javadoc" files to automate program design.

In topic 17 students learn to apply "persistent" technology to ensure data "permanence" as they become immersed in powerful applications of file handling, including both sequential access and direct (random) access file handling.

In topic 18 students tackle eloquent solutions to iteration using recursive algorithms where classical problems are tackled, including factorials, the Fibonacci sequence, the infamous Towers of Hanoi and the mysteries and art of factorials.

In this course students study the efficiency and power of algorithms and learn to leverage the work and legacy of those who came before.

In topic 19 students compare and contrast the code and patterns of searching and sorting algorithms.  The Binary and Sequential searches are compared.  Then a number of different sorting algorithms are compared for speed under different conditions; the Bubble Sort, Selection Sort, Insertion Sort, Quick Sort and Merge Sort give students the opportunities to understand how and why to compare relative measures of efficiency as "Big O", where efficiencies can differ by orders of magnitudes.

The holy industrial grail of Computer Science is the optimization of reuse of code; enter the application of generic collections (libraries), generic classes and methods and the customization of generic data structures.

In topics 20- 22 students begin to see how it possible to deal with incredible complexity and quantity of functionality.

The course ends with applications of organizational structures that manipulate huge quantities of records of information culminating in variations of linked lists and binary search trees; abstract data types (ADTs) that are defined by their structure but may have varying real world implementations:  stacks, queues, and maps.