Keep Learning đź“– and Growing đźŚ±

The adventure doesn’t stop here!

Check out the additional VVA courses you can take below.

10152 / 6640 Introduction to Computer Science Full Year, Fall Block, Spring Block 1
10152 Introduction to Game Design & Development Full Year, Fall Block, Spring Block 1
10157 AP Computer Science A Full Year, Fall Block, Spring Block
1

Have an idea for a VVA Computer Science and Programming course that doesn’t exist? Post your ideas below.

But wait; there’s more (free) courses!

Understanding Technology

This is a great starting place for learning the basics of technology. Understanding Technology is created by Harvard and covers six topics: Hardware, Internet, Multimedia, Security, Web Development, and Programming. Taking this course will be a good baseline for you to determine which field of CS to focus on next and which course to take next.

C and Python

Want to learn C and Python? Check out my all time favorite online course CS50x (or the slightly modified version CS50 AP which is an implementation of AP CSP that is endorsed by College Board).

Python

Want to learn the fundamentals of CS while also learning the language of Python? Go here for my absolute favorite Python course (split into 4 parts).

Artificial Intelligence (A.I.)

Interested in A.I. and learning Python? Here’s a new course from Harvard

Java

Purdue has released my favorite free AP CS A course via EdX. This will also prepare you really well for success in your AP CSA course should you take it via Virtual VA.

  1. AP Computer Science A: Java Programming
  2. AP Computer Science A: Java Programming Loops and Data Structures
  3. AP Computer Science A: Java Programming Classes and Objects
  4. AP Computer Science A: Java Programming Polymorphism and Advanced Data Structures

Runestone Academy has released another one of my favorite implementations of AP CSA called CS Awesome.

UPDATE: 12/15/2021: I just discovered that Georgia Tech has released their own Computer Science and Programming in Java course.

  1. Introduction to Object-Oriented Programming with Java I: Foundations and Syntax Basics
  2. Introduction to Object-Oriented Programming with Java II: Object-Oriented Programming and Algorithms
  3. Introduction to Object-Oriented Programming with Java III: Exceptions, Data Structures, Recursion, and GUIs

JavaScript

Want to learn JavaScript? Check out this excellent resource.

Many Languages

Also, SoloLearn is great for learning the basics of a number of programming languages.

Creatives: Art, Music, App/Game/Web Development and Design

Processing and P5.js (Used to Create Art, Graphics, Games, Music)

CodingTrain teaches Processing and P5.js.

EarSketch Music Production

Create music in a custom DAW using Python or JavaScript with EarSketch.

Sonic Pi Music Production

Want a different approach to music production with a bit more of a challenge and in the Ruby programming language? Check out Sonic Pi.

Mobile App Design and Development

CS50’s Mobile App Development with React Native is another great resource for after you’ve completed Harvard’s CS50x or CS50 AP.

Learn about mobile app development with React Native, a popular framework maintained by Facebook that enables cross-platform native apps using JavaScript without Java or Swift.

Game Design and Development

Learn about the GameMaker Scripting Language (GML) as you create 2D games with GameMaker Studio. Mr. Janetka has a wonderful free course online with all the assets and everything you need to get started. You may use the free/lite edition of the older GameMaker 8.1 Lite or GameMaker Studio 1.2. Other versions of GameMaker do cost money though.

CS50’s Introduction to Game Development is another great option if you’ve completed the CS50x or CS50 AP course.

Web Design and Development

CS50’s Web Programming with Python and JavaScript This course picks up where CS50x or CS50 AP leaves off, diving more deeply into the design and implementation of web apps with Python, JavaScript, and SQL using frameworks like Django, React, and Bootstrap.

Fundamentals of Web Programming via Runestone Academy.

Classes and Objects and Instances, Oh My!

Adapted from this source.

In a Computer Science class the topic of Object Oriented Programming (OOP) is one of the common programming paradigms that is taught. Within OOP there are terms like “Class”, “Object”, and “Instance”. The challenge is that, while distinct, they are all related which may make them difficult to distinguish.

An object is a software bundle of related state and behavior.

A class is a blueprint or prototype from which objects are created.

An instance is a single and unique unit of a class.

For example, we have a blueprint (class) which represents a student (object) with fields such as name, age, course (class member). And we have 2 students here: Matthew and Mark. So, Matthew and Mark are 2 different instances of the class (Student class) that represent the object (Student people).

Let me go into details…

Object

Real world objects share two main characteristics, state and behavior.

Humans have state (i.e. name, age, height, weight, eye color, ethnicity, gender) and behavior (running, walking, standing, jumping, sleeping).

Cars have state (make, model, year, color, speed, gear) and behavior (applying brakes, changing gear).

Software objects are conceptually similar to real-world objects: they too consist of state and related behavior. An object stores its state in fields and exposes its behavior through methods.

Class

Class is a template or blueprint that is used to create objects.

Basically, a class will consist of fields, static fields, methods, static methods, and at least one constructor.

A field is used to hold the state of the class (i.e. name of Student object).

A method is used to represent the behavior of the class (i.e. how a Student object is going to stand-up).

A constructor is used to create a new Instance of the Class.

Instance

An instance is a unique copy of a Class that represents an Object. When a new instance of a class is created, the Java Virtual Machine (JVM) will allocate a room of memory for that class instance.

AP CS A – Exam Prep

Overview

Tuesday, May 15, 2018 at 12:00 pm – AP Computer Science A Exam

This is our final review and prep for the AP CS A Exam. The AP CS A exam is Tuesday, May 15, 2018. You’ll first take the Diagnostic Exam which will help predict how you’ll do on the AP. This will direct how you will review for the final weeks leading up to the exam. To best prepare for the AP exam you need to take this practice exam in similar circumstances as the actual exam. The entire AP exam is on paper, so also will the mock exam be.

You’ll be given a printed copy of the exam, grade sheet, and quick reference guide. You’ll have 75 minutes to answer the questions. You’ll then submit the answers to an online form and get feedback within a few days.

Finally, you’ll put together a study plan based on the results of the diagnostic exam. The questions are categorized by topic. So based on your scores, you can identify areas where you should focus. I suggest that you focus on areas where you received ~50% or the questions right. Remember, the AP exam is not graded like most school tests. A 50% would be terrible on a typical test in Algebra, for example, but it often matches to a student getting a 3 on the AP exam.

Resources

  1. HW – Videos – watch them for HW
  2. HW – Everything You Need to Know for the AP Exam – Packet, Key
  3. Diagnostic Exam Multiple Choice – Packet, Submit Your Answers, Key
  4. Diagnostic Exam Free Response Question – Packet
  5. 2017 Free Response Questions – Video Solutions
  6. 2016 Free Response Questions – Video Solutions
  7. 2015 Free Response Questions – Video Solutions
  8. AP Computer Science A in 60 Minutes – Video

301 Bubble Sort

Overview

We certainly like it when things are organized. Having data assembled in a particular order makes it substantially easier to glean information from that data; for example, having all the test scores for a classroom of students makes it easy to figure out where the median score lies if and only if those test scores are arranged in a sorted order. But data rarely arrives in a sorted order. In this module we consider a basic approach to sorting that narrows the scope of our problem to focusing on ordering just two elements at a time, instead of an entire array at a time. This approach is very straightforward, but possibly at the expense of making an inordinate number of swaps just to put one single element into position.

Videos

  1. David’s Lecture: Part 1 (Youtube) : 31:58 to 35:10
  2. David’s Lecture: Part 2 (Youtube) : 37:30 to 38:42
  3. Doug’s Section 1 (Youtube)
  4. Allison’s Section (Youtube) : 36:50 to 41:25
  5. Jackson’s Short (Youtube)
  6. Doug’s Section 2 (Youtube)
  7. Downloads

    1. David’s Lecture: Parts 1 & 2 (MP4 Download) : 31:58 to 35:10 and 37:30 to 38:42
    2. Doug’s Section 1 (MP4 Download)
    3. Allison’s Section (MP4 Download)
    4. Jackson’s Short (MP4 Download)
    5. Doug’s Section 2 (MP4 Download)

Resources

  1. slides 1, slides 2
  2. reference sheet
  3. Visualize Sorting Algorithms by VisualAlgo.net
  4. Visualizing Sorting by Toptal
  5. What sorting algorithms sound like – short reason, long reason.
  6. Side-by-side sorting algorithms
  7. lecture notes
  8. CS50 study page for BubbleSort

Demos

  1. Where’s the 37?
  2. Live-Action Sort while holding numbered pieces of paper. Then by height.

Thought Questions

  1. Why is sorting data useful?
  2. Why does it matter what method we use to sort our data?
  3. What makes bubble sort an effective sort? What makes it ineffective?
  4. Why might we, as Allison does, decide to keep track of how many swaps we have made on each pass through the array?

Learning Objectives

  • LO 4.2.4 : Evaluate algorithms analytically and empirically for efficiency, correctness, and clarity.

Enduring Understandings

  • EU 4.2 : Algorithms can solve many, but not all, computational problems.

Graphs of Trig Functions

Artifact Reflection – Standard 1 – Real World

Description: I developed a lesson to introduce the graphs of the basic trigonometric functions: sine and cosine. This lesson showed the relevancy of sine waves and how they are used in everyday life.

Analysis: I developed this lesson plan so that students would be introduced to graphs of sine and cosine in a meaningful way. The precalculus textbook has extremely outdated or uninteresting application problems. The most relevant real world application of trigonometry that the book offers is its use in surveying land. A few decades ago this was true, and perhaps interesting. I chose a different route. I brought in my acoustic guitar, MacBook, and a freeware program Audacity. I began with Audacity which is a program used to edit sound files and record music. It has a built-in “generate sine wave” feature. I generated a sine wave and then showed the students the output waveform. It didn’t look very interesting. I progressively zoomed in and with each click it became more clear that the graph of the sound was a perfect sound waveform. The students responded with talking about how the amplitude, period, frequency, and phase shift of the equation affected the sound wave. Students who are musically inclined and enrolled in various music courses began to discuss what it would mean to have a different note or octave and how the sine equation would be affected. After generating sine waves I plucked the A string on my acoustic guitar while recording and compared the waveform to the A note generated by Audacity. They were the same note but different octaves. We also contrasted the theoretical A note produced by Audacity with the real life A note produced by the vibrations of my guitar string. The graphs were similar but not identical since I’m not playing the guitar in a vacuum. Air pressure, temperature, and many of factors distort the shape and sound of my guitar. Lastly, I helped the students realize that all sound is a sine wave (molecules vibrating), our voices, instruments, mp3s, and anything else that has a sound. To show this I recorded my voice at different pitches and zoomed in on the waveform graph of my voice to show the students it’s another sine wave. I also opened an MP3 and allowed the students to listen to the track while zoomed in on the output waveform of the track to see that it is also a variety of different sine-waves layered into one track.

Reflection: This significantly peaked the students interest. They wanted to keep thinking about all different sine waves, and why certain sine waves sound good together (harmonies, notes within particular keys), while others sound bad. They formed an understanding of how the various constants in the sine equation affected the graph of the sine wave and consequentially the sound of the sine wave. They discovered that a higher frequency or shorter period would be a horizontal compression (graphically speaking) and a higher pitch and faster tempo sonically speaking. They discovered discovered that a lower frequency or longer period would be horizontal stretch graphically speaking and a lower pitch and slower tempo sonically speaking. They discovered that a vertical stretch or compression would affect the amplitude of the graph which would affect the loudness of the sound. Students discovered that a phase shift of the graph affected the timing of the sound.

Standard(s): 1.1, 1.2, 1.3, 1.6, 1.9, 1.10.

Geogebra – https://www.geogebra.org/material/show/id/YRcbnbYk