Welcome to Computer Programming 12
This fast paced course has been designed to build off of the structure introduced in Programming 11. We will revisit familiar units of study but with an entire new level of depth. For example, in Programming 11, we studied HTML and CSS; in Programming 12 we delve into JavaScript (the behaviour side of web development). Everything in this course is unique but relates to a larger whole. We endevour to keep the units covered in the course practical with the goal of giving you the skills to bring your own creative ideas to life. Practicing, building, reverse engineering, iterations and add on's are all strategies we deploy to help you innovate. Although there is some theory in this course, the guiding principles are practical and useful. I do hope that you enjoy this course and that you have a lot of fun along the way!
Computer Programming 12 - Course Syllabus 2025
Please submit course assignment 'one drive' links' into your spreadsheet in the correct 'drop box'
Drop Box - Programming 12 - Block 1 (spreadsheet only)
Drop Box - Programming 12 - Block 2 (spreadsheet only)
Create a one Drive share link - create an 'on line' spreadsheet for sharing course assignments
Create and Share links in ONE drive - A 'how to' guide
Example - T Linburg - (using Google Sheets - but you could use your Microsoft version of Excel)
T Linburg - grade and assessment link spreadsheet (adjust the share permissions to allow Mr. Linburg to edit)
Project sharing today - Tuesday June 3rd
Aysa / Muhammad / Ryan
Module # 6 - Learning Pathways - Choose a topic to work through which is either of interest to you or relevant to your future studies!
Option # 1 - Learn the Fundamentals of 'Machine Learning' by working through one or more of Google Learning Lab Foundational Courses (Oustanding resource)
Introduction to Machine Learning (ML) -Intro (for all pathways)
Once you have completed this introduction then you would move on to explore one or more of these course offerings. Some of the Machine Learning topics include:
Please choose one or more 'pathways' listed on this link. I would suggest trying to make it through a few of these courses. They are excellent and well written and offer a comprehensive look at all the key aspects of Machine Learning!
Machine Learning 'Crash Course' - by Google Labs
Topics include:
ML Models - Linear Regression / Logistic Regression / Classification
Data - Using ML Models with DATA sets - Numerical / Categorical Data / Datasets, Generalization and Overfitting
There are many more advanced and in-depth courses in areas of Neural Networks / Embeddings / and Large Language Models.
You could try to use this web based 'Teachable Machine' - although you would need an image library set or sounds or a phone or webcam
Other Resources
If you were so inclined you could even earn an 'on-line' diploma in one of these areas (Google Analyitics / IT support / cybersecurity (Many of these are 'free to join' - but sorry work ethic not included lol )
'Toward's Data Science' - A Great Publication that delves into 'cutting edge' topics in Machine Learning and Data Science
Option # 2 - Cybersecurity
In our second 'pathway' series, we will be learning about the different types of cybersecurity and ethical hacking. This is a topic of great interest to many budding computer scientists. How does one 'hack into systems'? What is the architecture of the Internet and how does this lead to certain 'vulnerbilities'? What can be done to stop these type of system intrusions. Take a look at the links below and try your hand at one of these course pathways.
Try 'Hacking Me' (You'll need to login and make an account - but there are a ton of 'free options' to choose from)
Description
Learn and practice through gamified lessons
Follow structured paths and reinforce your skills in a real-world environment by completing guided objective-based tasks and challenges.Learning cyber security on TryHackMe is fun and addictive.
Earn points by answering questions, taking on challenges and maintaining your hacking streak through short lessons.
PicoCTF - Created by Carnegie Mellon University - you'll need to sign up but it is free
Description
Participants learn to overcome sets of challenges from six domains of cybersecurity including general skills, cryptography, web exploitation, forensics, etc. The challenges are all set up with the intent of being hacked, making it an excellent, legal way to get hands-on experience.
CyberSecurity Training - many free options - but at some point there is a 'paywall'.
Description
Best for: Structured, beginner-friendly courses
Courses: “Intro to IT & Cybersecurity,” “SOC Analyst,” etc.
Cost: Free tier available, paid for premium access
Part II - Cybersecurity - try your hand at finding 'vulnerabilities' in these systems!
Once you have learned the basics, you can try your hand at finding (intentional) 'vulnerabilities to practice your skills!
Juice Shop is written in Node.js, Express and Angular. It was the first application written entirely in JavaScript listed in the OWASP VWA Directory.
The application contains a vast number of hacking challenges of varying difficulty where the user is supposed to exploit the underlying vulnerabilities. The hacking progress is tracked on a score board. Finding this score board is actually one of the (easy) challenges!
Apart from the hacker and awareness training use case, pentesting proxies or security scanners can use Juice Shop as a “guinea pig”-application to check how well their tools cope with JavaScript-heavy application frontends and REST APIs.
Option # 3 Learn the essentials of C++
Introduction to C++ The "original object orientated" language!
A great language to know for Engineering and related fields!
All we will have time for in this segment is a brief introduction to the coding fundamentals of C++. We will work off a browser based IDE and compiler for this introduction.
"This powerful language incorporates features of object-oriented paradigm mixed with the features of C programming language."
Here is a brief history of C++
Instructions
Please take some time to pick and choose some of the lessons from this on line resource. In the section below, I have made some specific suggestions about what you might practice, however I will leave this choice up to you. The problem, going forward, might not be that C++ is particularly hard but perhaps remembering WHICH naming conventions are used for which language!
Introduction to C ++ approach # 1
Here are the table of contents for C++ coding fundamentals
Here is the link for the start of the coding tutorials in C++ . Specifically you are asked to use the browser based terminal shell edit feature (see image below) to add code to the existing script(s).
My suggestion is to pick and choose a collection of lessons. You should know, for example, how a C++ program is set up, and what are the essential attributes of any C++ project. You also should be versed in functions, classes and variables. Hopefully you will start to see that C++ is just another coding language that has many things in common with other languages such as Java and Python.
The image below shows the format for entering code into the C++ coding terminal shell. Click on the icon on the far right of the screen.
Introduction - approach # 2
Here is another good resource link (code academy project link) to help you get started working your skills with this important programming language.
Part II - Coding project choices using C++
Choice A
Please use the following link as a project resource for this segment. You are to download a zip file to use for each of the projects you pursue. Some of the projects to choose from include:
A casino number game / hangman / snakes and ladders / tic tac toe / banking system project / supermarket billing project...
You can use Visual Studio (with extensions) for most of these C++ projects. Good luck and have fun!
Choice B
Game making using C++
Build an C++ app using Visual Studio (calculator)
Instructions
Please access the games and the related C++ code.
Reference guides for C++
On-line reference guide - number one (on-line) - click the category for more specific information
Reference guide to C++ - number two (PDF)
Option # 4 - Python - Working with Ren Py
Download and Install Ren Py (admin password required - please see Mr. L)
Ren PY is a platform for developing 'interactive stories' and game structures. Take a look at the links / install the software and follow one of the project guides! Have fun!
Part I - Create a 'Simple Game' using Ren PY
Open the Ren'Py Launcher
Please scroll down the page to find the 'Simple Game instruction set'
Open the Ren'Py Launcher
Create a New Project:
Click “+ Create New Project”
Give your project a name
Choose a template (Basic Template is fine for beginners)
Select your resolution (Default: 1280x720)
Choose Language & Theme:
Most use English and Light/Dark themes
Click "Create Project"
Ren'Py will make a folder with starter files:
script.rpy (where you write the game)
images/ (put your sprites and backgrounds here)
gui/ (for customizing the interface)
Option # 4 - Working With SQL - Database (still under construction)
Module # 5 - Working with Raspberry Pi - 'The intersection of software and hardware"...(you could make these with a partner if you'd like)
We are excited to have, in our possession a collection of new building kits using the powerful Raspberry Pi CPU 5's. We will have the opportunity to fully utilize our Java based (or Python) coding skills to create a collection of projects and output devices. For example, we can play music, make LED lights blink on and off and create a variety of sensors.
We have six kits to share so we won't be able to keep the projects assembled from class to class. In other words, you'll have to put all the components back in the box after the block is over!
We are currently waiting on getting some more micro SD to HDMI cables. There are, however, other ways to connect these devices for our uses. Please read this supporting document produced by Abtin.
Please try to complete several projects (if possible).
Module # 4 -Introduction to Object Oriented Java Book II
Block One - Java App - Presentation sign up (May 28 or May 29)
Block Two - Java App - Presentation sign up (May 28 or May 29)
Java Textbook # 2 - Please download
Object Oriented Java Textbook 2 - download the PDF off this link!
OOP's data files for exercises (please download this as well!)
In this final Java course segment, we will be learning about Object Oriented Java OOP's. This is what Java is known for.
Part I - Introduction (reading / note taking)
Please read through the following links to help you get started! You are asked to make a short summary of key concepts listed below (part A and part B)
(One page in total from the following links - 'mix and match' - You decide what is important)
Section A - OOP's - what is it?
Key OOP's concepts / Another good guide / Opps explained W3 schools
Here are two graphics that outline general Object Oriented Java principles within the context of a soccer game.
Section B - How is OOP's different
Why OOP's - how is it different or better than using traditional programming?
summary of some of the key concepts of OOP's (Object Oriented Programming)
OOPs with coding examples
Part II - OPP's Related practice lessons (see attachment section for data files and Java web sites)
Here is the link for the first collection of exercises - the first TWELVE out of FIFTEEN lessons can be found on this link!
Same lessons as the PDF textbook...perhaps this format is easier access (up to you). - the last FIVE exercises will require the textbook!
You will complete ONE through to 15 from this textbook!
Technical specifics of creating OOP's applications
1) We do NOT USE AN IDE like Netbeans for Object oriented lessons we use notepad and terminal shell.
The textbook suggests that they need to be all written in the terminal shell environment but I think an easier approach might be to write your apps in notepad and then just run them in the terminal shell environment.
First, ensure you have the JDK installed on your system. You can download it from the official Oracle website.
Make sure your environment variables are set correctly. For example, on Windows, you need to set the JAVA_HOME variable and update the PATH variable to include the JDK bin directory.
You can use Notepad to write object-oriented Java applications that utilize standard libraries. Here's a step-by-step guide to help you get started:
Open Notepad and write your Java code. For example, you can create a simple class that uses standard libraries:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
for (String item : list) {
System.out.println(item);
}
}
}
Save your file with a .java extension. For example, save it as Main.java.
Navigate to the directory where your Java file is saved. You can use the cd command to change directories. For example:
cd path/to/your/java/files
Use the javac command in windows powershell to compile your Java file. This will generate a .class file:
javac Main.java
Use the java command to run your compiled Java program:
java Main
Great reference guides
OOPs explained with great examples!
Part III - Make your own app (either OPP's based or based on other Java skills)
In the next segment you will harness your newfound skills with OOP's to either create an original application or complete a pre existing project (with your own modifications).
Create ONE app project - might be considered Proficient (high 'B' or low 'A' range) - however, that depends on the COMPLEXITY of the project. One sophisticated app with many features MIGHT be better than two mediocre quality apps...
sorry not an exact science :(
Generally creating TWO or more app projects - would likely be considered to be 'Extending' (high 'A')
Option # 1 - Create your own based on the lessons covered so far (concepts based on lessons 1-15)
In the first option, you could create a calculator that uses the square root function mentioned in one of the lessons. However, our skills are still fairly limited so you could also rewrite an EXISTING exercise with different functions from both book ONE and book TWO. I know this is rather general but it follows a similar theme of reinvention as described in other previous lessons.
Option # 2 - Make a game and / or a specific application using one of the links below as a guide
Here are some Java based programs that you can make with OOPs (and other Java based skills)
Create a billing system (with click interface!)
A snake game in Java / Alternate instruction set (the other one seems 'buggy')
A collection of interesting Java based coding projects
Make a Java based guessing game (sorry I know we've 'been there done that') but take a look! /
If these don't work then try these links
Option # 3 - Game of "Floppy Bird"
A fun game to make for your Java based skills! / Link to a student made game collection (examples - can't speak to ALL their quality however :) )
Option # 4 - (Advanced) Build a Game of Chess
(*) Note: requires new learning such as how to use "Java Swing - and create a GUI" interface
We are now coming to the of this unit. Below are a list of complex Java Projects. See if you can successfully use these 'source files' and figure out how to use the IDE to get two of these projects to successfully build. If you managed to do this then congrats you fully understand how to access Java source code files and know which ones to use to get the program to execute! If you accomplish this (pat yourself on the back).
Congrats! if you can build this - once done - try a few enhancements to earn your 'gold star'. :)
Resources
Module # 3 Java - Advancing your coding 'Superpowers'
We are moving back to Java to complete our important programming journey. The skills covered in the next TWO modules will give you a vast array of coding skills that are transferrable to any language. Why is Java such an important coding language to learn...please read on! Read this link for more info!
Click on this one drive link and download the textbook resource
How to use Visual studio for Java
Part I Write output programs in Visual Studio (second half of book one)
Or Apache Netbeans
Step by step intro for Apache Netbeans (refresher)
(*) Please complete ONE study drill at the end of each of these exercises.- only submit the exercise AFTER you have done the study drill (in other words the MODIFIED one) - add a developer comment to make sure I know WHICH study drill you completed.
# 25 Repeating yourself with the while loop
# 26 A number Guessing game
# 27 Infinite Loops
# 29 Do-While Loops (*) More challenging (More background info on Do-While loops - )
The Key difference between While Loops and Do...While loops is...
The do...while loop is similar to while loop. However, the body of do...while loop is executed once before the test expression is checked.
This is as opposed to the 'While loop" which...
Java while loop is used to run a specific code until a certain condition is met. The syntax of the while loop is:
# 30 Adding values one at a time
# 33 Calling a Function
# 34 Calling Functions to draw a flag (*) note - if you can, draw any flag you wish for this exercise
# 35 Displaying Dice with Functions
# 36 - Returning a value from a Function (*) More challenging
# 44 Counting with a For Loop
# 47 - Generating and Filtering Values
# 48 - Arrays - Many values in a single Variable
# 49 - Arrays continued
Part II - Create a 'novel' Java App - what can you make?
We will now pause and try to find practical uses and application for the Java related skills that we have learned so far. What sort of things can we make with our new found skill set. Take a look at some of these links. Hopefully you might find ONE project you have an interest in making. If not, then you could search for one to your liking. These links have a diverse range of options. Have fun and happy coding!
15 Top Java Projects to make (with source code)
(*) Some of the above links aren't tutorials per se but rather guides or examples of what your project might look like
Module # 2 - Using JavaScript to make your own games
Time for some gaming fun! In the next course segment, you will have a chance to remake some 'classic' games from the past and program them into something fresh, new and exciting. For the sake of simplicity you may use your CODEPEN account for the development aspect. You may, of course, also use platforms such a Visual Studio but that isn't required for these. Just be sure to save your changes as you proceed!
Software download link
VISUAL STUDIO COMMUNITY (you can see an outline here!)
Other JavaScript Development Links
How to use Visual Studio for JavaScript development work
JavaScript explained (a great feature summary!)
(Complete 3 out of 4) - Proficient (Complete 4 out of 4 Exceeding)
Part I
Game of 'Breakout' - Destroy the bricks
Take a look at this link! Please feel free to adopt it for your own purposes. You might want to build this game on Visual Studio (Community edition - free) download OR you may use CODEPEN and build it out that way.
Please be sure to improve the game in the following ways
Change the ball speed / size of paddle / number of bricks / game and brick colours
Part II
Make a guessing game based on the GitHub version
In this next segment you are tasked, as a developer of taking this tired gaming 'classic' and remaking it into something fresh, new and exciting. Your "NEW" game should still involve the same 'behaviour' which involves 'guessing at something but it might not be 'guessing a correct number' but might be guessing some other answer. For example, in the CODE PEN link below, you can find one such game that uses 'on event click buttons' to help find a lost cat. Each time you select a square it offers a clue, such as 'getting colder' or 'getting warmer'. I am not suggesting this is an outstanding game but it takes the guessing concept and uses it in a new and innovative way.
Good luck and happy guessing! :)
Make a guessing game using JavaScript Complete reimagination (similar 'behaviour' - different structure)
Original Guessing Game Examples!
Part III
Create a Puzzle Slider Game
In the third of our series of games in JavaScript you will be tasked with creating a 'Puzzle Slider Game'. You will grab the source code from this link and then paste it into CODE PEN. Once you have run the code you can then you may start on adding in the following improvements:
Add THREE (Proficient) of the following features to your Puzzle Slider Game. Good luck! (EXTENDING - add all of them)
Here is the 'secret' way to WIN at a slider puzzle!
Timer
Description Add a timer to track how long it takes to solve the puzzle.
Implementation: Use JavaScript's `setInterval()` function to update the timer every second.
Move Counter
Description: Keep track of the number of moves made by the player.
Implementation: Increment a counter variable each time a tile is moved and display the count on the screen.
Undo Button
Description: Allow the player to undo their last move.
Implementation: Maintain a history of moves and restore the previous state when the undo button is clicked.
Difficulty Levels
Description: Offer different difficulty levels (e.g., 3x3, 4x4, 5x5 grids).
Implementation: Adjust the grid size based on the selected difficulty level.
Winning Animation
Description: Display a congratulatory animation or message when the puzzle is solved correctly.
Implementation: Check if the tiles are in the correct order and trigger the animation.
High Scores
Description: Maintain a leaderboard with the best times and lowest move counts.
Implementation: Use `localStorage` to store and retrieve high scores.
Sound Effects and Music
-Description: Add sound effects for tile movements and background music for a more immersive experience.
Implementation: Use the HTML5 `<audio>` element and JavaScript to play sounds.
Hints
Description: Provide hints to help players who are stuck.
Implementation: Highlight the next possible move or show the correct position of a tile.
Customizable Themes
Description: Allow players to choose different themes or styles for the puzzle tiles.
Implementation: Use CSS classes to apply different styles and let players select their preferred theme.
Part IV - Minesweeper! (more difficult)
In this final JavaScript game activity you are tasked with creating and improving a classic game of MINESWEEPER. The basic game structure is written for you. Have fun and watch out for those mines!
Your Challenge (do as many as you have time for)
Improve this code further to:
Calculate and display a score in real time (number of cells that have been visited).
Allow the user to add a cross or flag to a cell (by right clicking?) to indicate the position of a mine.
Allow the user to choose a difficulty level or change some settings (e.g. Number of mines, size of the grid).
Add a timer to the game.
MODULE # 1 - Introduction to JavaScript
Part ONE and TWO
JavaScript - one of the world's most popular computer language
Unit Description
We will be starting this unit by completing some structured introductory tutorials to help you learn the language structures; then we will give you actual working JavaScript made by developers for you to break, modify and then improve.
Finally, we will invent our own apps based upon the skills of other developers.
History of JavaScript - an interesting read!
JavaScript intro 1 / JavaScript intro 2
Section # 1 - JavaScript 'sandbox'
# 1 - Spreadsheet Due:
W 3 Schools Introduction to Java script structures
In our very first introduction we will be using the W 3 for schools site to learn more about the history of JavaScript and to learn how its constructed. Please load the web site and do one or two 'try this' for each segment. Please try to 'break the code' and change it up anyway you see fit....and see what happens? Be sure to read through each of the segments but the threshold for completing exercises here is not very high. Think of this as an 'interactive' intro.
Please share your insights from THREE of the exercises (you should include some specific script reference). (half a page or more) (Please try to look through 12 sections)
Section # 2 JavaScript Practice - Code Academy
# 2 - Spreadsheet Due:
Sequential Code Academy lessons (free lesson segments - see below)
Introduction / conditionals / functions / arrays / loops / iterators / objects
Please complete this introductory work on JavaScript: Code Academy site. Please be sure you have completed the lessons as described above. PLEASE complete all the "free" segments. ITERATORS IS NO LONGER REQUIRED FOR CODE ACADEMY. You will submit a screen shot of your 'progress' and your account name put on a word document!
Section # 3 JavaScript "Reinvents" Utilize existing JavaScript projects to improve their function and design Due:
Use Code Pen for these project 'reinvents'. Be sure you sign up for an account so that you can save the changes you make!
Resource Guides
reference - W 3 JavaScript - reference guide to functionality and features.
(*) Note: please write a specific developer comment in the 'redo' explaining what you actually did to improve the function and design!
Project ONE - Reinvent -JavaScript Analogue Clock Due:
Analogue clock (# 3 Spreadsheet)
(*) Note: One option is to set up your own Code Pen Account and put your edited projects right on that hosted platform and then send me the link to your finished "reinvent". There are other methods we could discuss in class.
(*) Note: you may want to move your clock code over to either Visual Studio OR Code Pen if you have your own account. If you just A edit it off of the W3 school's site there is NO save as function!
Edit in W 3 Schools
A JavaScript clock - Please make all your changes right on the W 3 browser. Make a minimum of FIVE changes to its look / function / and design.
Take a look at these 'far out examples' - that you could use for your inspiration and edits! Go crazy and have fun (look below at the video for links to the ACTUAL coding samples!) - Have fun!
A step by step guide to building an analogue clock - coding 'blocks' explained
(NOTE: we might use a different platform for this project - stay tuned)
Additional activity resources
JavaScript clock construction / this one even has an alarm lol
Additional resource - (Re: smoother clock functioning blog discussion)
Project TWO -Reinvent a Digital Clock- Edit HTML / CSS / JavaScript together (# 4 - Spreadsheet) Due:
Use this dreadful looking clock and add TEN dynamic changes to the the clock's design, functionality and behaviour. This might include ONE HTML change / TWO CSS change / and SEVEN JavaScript modifications (i.e. modify a function or change an array)
Project THREE - Reinvent - Modify the Code Pen version of the game hangman - (# 5 - Spreadsheet)
Experiment and make min 10 changes (we are flexible on how many of each one
(Proficient) Example changes - to the canvas / colour scheme / 'look and feel'
(Proficient) Example changes to the way the game is played (behaviour Javascript) - ie when you button click with the correct letter another event is triggered (eg. fireworks goes off...)
(Extending) Example project 'innovations'- Can you make the classic word game 'Hangman' 'new in some way (eg. the letters are already in the blanks but in a scrambled sequence - maybe you have to move the letters around to make the correct answer
A JavaScript game of hangman - Experiment with this JavaScript version of Hangman. Use the reference guides provided. Try to read through the ENTIRE JavaScript, experimenting and changing it as you go. You are only using this for practice, so break it in all ways that you can think of. All your changes will show in the display at the bottom of the page.
Here is a useful 'textbook' help guide that helps walk you through the code for this game!