Georgia Tech’s New Java Programming Courses on EdX

I just discovered that Georgia Tech has released their own Computer Science and Programming in Java course which is split into three parts. 

  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

I’m currently evaluating it to see whether it’s a good resource for homeschool and high school students who are looking for a way to prepare for the AP Computer Science A exam. So far, it’s really good. I haven’t seen it claim to align with the AP CSA exam and I’ve already noticed it covers more topics than the AP exam would cover, however, it has been really good so far!

Check it out and let me know what you think.

Also, for those interested, I’m developing my very own course: AP Computer Science A: Homeschool Edition. Stay tuned for more information :).

[ Mr. Tower ]

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.

What’s the Diff Between AP CSA and AP CSP?

Source: College Board, Accessed Monday, July 20, 2020

What’s the difference between AP Computer Science Principles and AP Computer Science A?

The AP Computer Science A (AP CSA) course and exam focus on computing skills related to programming in Java. Students cultivate their understanding of coding through analyzing, writing, and testing code as they explore concepts like modularity, variables, and control structures.

The AP Computer Science Principles (AP CSP) course complements AP Computer Science A and focuses on the broader aspects of computing. Students learn to design and evaluate solutions and to apply computer science to solve problems through the development of algorithms and programs. They incorporate abstraction into programs and use data to discover new knowledge. Students also explain how computing innovations and computing systems including the internet work, explore the potential impacts of these innovations, and contribute to a computing culture that is collaborative and ethical.

Students in AP CSP may learn one programming language or use a variety of programming languages. The course is therefore language agnostic from the perspective of College Board although a teacher will make a decision with regard to which language(s) will be used.

Additionally, the AP Exams for the two courses have different formats. AP Computer Science A has one end-of-course exam with multiple-choice and free-response questions. AP Computer Science Principles includes the Create performance task, which is completed during the course, and an end-of-course multiple-choice exam.

If Computer Science Principles was Hispanic Studies, then Computer Science A would be like studying the Spanish language [Source].

 

Which Should I Take?

It depends. They are both worthwhile courses. I would recommend that you take both before you graduate high school. So if you’re a freshman, sophomore, or junior, I recommend you first take AP CSP. If it’s your senior year, then sign up for both.

Even though both courses serve as an introductory course, the AP CSA course is more rigorous whereas the AP CSP course was created to be a more accessible introduction to computer science.

While CSA is undoubtedly a more narrowly focused course, it is still useful for students pursuing careers in areas like aerospace and chemical engineering, database administration, forensic science, pharmacy, software development, meteorology, architecture, computer graphics, design and visual communication, linguistics, statistics, web-design, graphic design, exercise science, and even botany. Whereas CSP is likely to prove useful for students interested in working in civil and nuclear engineering, computer graphics, data-science, neuroscience, financial analysis, accountancy, technical writing, biomedicine, clinical technology, research, marketing, flight, mathematics, or applied physics. As well as many others. [Source]

Despite all the different factors to consider, the smart decision for many students comes down to how they answer the following questions: ‘Do you have a passion for programming or experience in programming already?’ and ‘Are you interested in majoring in computer science or following a CS career?’. If the answer to either of those questions is ‘yes’, then that student should probably study CSA, if the answer is ‘no’, then CSP may be a better option. Rest assured that both programs will provide great educational benefits. [Source]

 

What about AP Computer Science AB?

Source: Wikipedia

This course has been deprecated.

AP Computer Science AB included all the topics of AP Computer Science A, as well as a more formal and a more in-depth study of algorithms, data structures, and data abstraction. For example, binary trees were studied in AP Computer Science AB but not in AP Computer Science A. The use of recursive data structures and dynamically allocated structures were fundamental to AP Computer Science AB. AP Computer Science AB was equivalent to a full-year college course. Due to low numbers of students taking the exam, AP Computer Science AB was discontinued following the May 2009 exam administration.

Here’s a link to the Quick Reference for AP CS AB

10 Tips For Your First Year Teaching CS

Kelly Lougheed had a helpful post that I wanted to share portions of with you along with my own notes and modifications in italics.

  1. Don’t start from scratch.
    1. I cannot recommend this strongly enough: grab a Computer Science and Programming text book and read it each day, page by page, chapter by chapter. Answer the questions, try to solve at least a few of the programming problems per chapter.
    2. Computing in Python 1e by David Joyner is my favorite free eBook on the topic of Introduction to Computer Science (in Python). There’s an excellent four part EdX series with short videos, practice exercises, quizzes, coding problems, and tests.
      1. Computing in Python I: Fundamentals and Procedural Programming
      2. Computing in Python II: Control Structures
      3. Computing in Python III: Data Structures
      4. Computing in Python IV: Objects & Algorithms
    3. Eloquent JavaScript is my favorite online eBook covering JavaScript with plenty of great practice coding problems.
    4. EarSketch is a free cloud-based curriculum available to teachers and students who want to learn computer science and coding in the context of music. Students have the choice of coding in Python or JavaScript.
    5. CS50 AP (AP Computer Science Principles) is my favorite MOOC which covers a wide range of languages (C, Python, HTML, CSS, JavaScript).
    6. Code.org has free curriculum for a number of middle and high school courses.
    7. Edhesive’s AP Computer Science A (Java) is unbeatable in my opinion, but it isn’t free.
    8. Purdue has released my favorite free AP CS A course via EdX
      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
  2. Stay at least a step ahead of your students.
    1. Regardless of the curriculum you use, make sure you do it yourself to understand what your students will experience! Completing the exercises and labs will help you better assist students and anticipate mistakes.
  3. Create a classroom culture of inquiry and mistake-making.
    1. Encourage students to follow a personal empowerment protocol to figure things out when they have a question. Similar to “ask three, then me,” this protocol encourages students to…
      1. Ask a peer
      2. [Ask another pair]
      3. Google it
      4. Ask the teacher
    2. Consider starting an “Error Tally” in your classroom where you tally all the errors that occur and celebrate them as a representation of all the things the class has learned today.
  4. Establish clear expectations for computer use.
    1. Students generally will have difficulty listening to you if their computers are open, absorbing their attention. Have them … fully close their computers whenever you need their attention.
  5. Establish clear expectations for academic honesty.
    1. Harvard’s CS50 course has a great set of academic honesty guidelines that can be adapted to a high school setting. Consider putting some version of these guidelines in your syllabus.
    2. Discuss the guidelines on day one, and even give the students a few hypothetical situations [or theatrically act them out] that they can judge as violations of academic honesty or not!
  6. Use pair programming.
    1. Computers can isolate students, but they don’t have to if you use pair programming and have students complete certain labs and problems in pairs!
    2. Pair programming is a great intermediate step between learning a new concept and solving a problem individually. Make it a routine in your class, and then give students a chance to demonstrate mastery on their own.
  7. Have a lot of back-up activities.
    1. CodingBat for Java and Python
    2. Codecademy (basic courses are free)
    3. SoloLearn (best option for mobile device users in my opinion).
    4. Reward them with a prize (e.g. programming-related stickers or keychains) if they finish a whole track.
    5. You can also allow them to free create in whatever programming language you are currently using.
  8. Connect with other computer science teachers.
    1. Find 3 local teachers that you could meet face-to-face with as well as 3 distant teachers that you may just follow online. Stick it out with these teachers for at least the entire school year. Feel free to switch up your special 3 each year. Any more than 3 in-person and 3 virtually and you may feel overwhelmed by the number of people and/or resources to keep up with.
  9. Have a growth mindset.
    1. You get better at teaching through experience, which means that when you first start teaching a subject, you’re probably not amazing at it… yet. But will grow and become a fabulous computer science teacher through experience and professional development!
    2. Sometimes your intricately-planned lessons will flop. Whenever this happens, note it and write down the changes you’ll make next time you teach it. If you have time, you can even revamp your lesson plan and materials right then and there.
  10. Have a non-computing hobby.
    1. I recommend doing everything you can to ensure that you don’t have to take any work home. That’s right, I said it. I truly believe that if you’re putting in the work while at the building you can avoid bringing home work. It would be far better to get to work 30 – 60 minutes earlier and/or leave 30 – 60 minutes later than you “have to” in order to avoid bringing work home. Leave work at work.
    2. Then you’ll have time for any friends or hobbies you’d like to pursue.

The first year teaching any subject is the hardest. But once you get to your second year, you’ll have so much more knowledge about how to teach computer science, and so many more lessons prepared that you’ll be able to reuse and build on!

10 Best Practices for Helping Students Debug their Code

Kelly Lougheed provided some helpful tips in her post. Below are some highlights.

  1. Anticipate common mistakes.
    1. Tailor your teaching to address common student errors.
  2. Make thinking visible.
    1. When you sit down to help students work through their bugs, illuminate misconceptions they might have about programming by asking them about certain parts of their code: “Walk me through this function” or “What is this line supposed to do?”
  3. Ask leading questions.
    1. “Do we know of any control structures that can repeat lines of code?”
    2. “Is there a way to pass that local variable into the function?”
    3. “Lines 20 and 21 look good, but something’s missing on line 22. What do the first two lines have that line 22 doesn’t have?”
  4. Normalize errors.
    1. … get excited when a student says they have 20 errors, or even better, a “fatal error”! Model being unfazed by errors and in fact seeing errors as an opportunity to learn new things. As a teacher, helping students debug IS an opportunity for you to learn more about how to be a better teacher and anticipate a wider range of student errors!
  5. Establish a Personal Empowerment Protocol.
    1. Establish procedures that help students solve their own bugs. Protocols such as … “Ask Three, Then Me” encourage students to use their resources… Students should 1) ask their partner, 2) ask another pair, and 3) Google it before they finally 4) ask the teacher.
  6. Enforce the Personal Empowerment Protocol.
    1. Ask a few questions before you offer help:
      1. “What’s going wrong?”
      2. “What’s the error message?”
      3. “What have you tried so far?”
      4. “Whom have you already asked for help? What did they say?”
  7. Squash every bug.
    1. When students say that they have followed the Personal Empowerment Protocol and they still can’t find the solution, step in with the strategies above and guide them through squashing their bug.
  8. Take a break.
    1. If students have been wrestling with a bug for a while, encourage them to take a brain break! They can stand up and stretch, have a dance break, or do a lap around the classroom, perhaps checking in on their classmates’ programs and offering help to anyone who needs it.
    2. I like this suggestion as it encourages students to be others’ focused and walk away from their bugs and errors and seek to assist others in identifying and correcting others’ bugs and errors.
  9. Lower the student-teacher ratio through strategic moves.
    1. [Ask] a colleague to help you out as an extra troubleshooter.
    2. If you have older students who need community service hours or are potentially interested in a career in education, look into a situation where they could serve as TA.
  10. Teach and practice debugging.
    1. Teach students first how to read errors. During codealongs, purposely generate errors and point out how the computer helpfully gives the programmer a clue about what the error is, and also the line number causing it. Point out that errors may be either on that line, or they may be caused by a line above it. Model Googling an error message for help.
    2. Model how to use print statements and IDE debuggers.
    3. [Make] debugging activities to help students develop debugging skills. Provide [plenty of] buggy programs that students need to fix. Students can journal about errors they found and how they solved them.
    4. You can also have your students generate debugging activities. Each student writes a buggy program (or throws a bug into an example program that you provide) and adds their code or program URL into a shared Google doc. Encourage students to make relatable errors that they themselves have made. Then everyone makes a copy of the Google doc and debugs each other’s programs! In the Google doc, students should provide the corrected code and an explanation of their fix.
    5. A spin-off of this can be a game called “Sabotage” where students make a copy of their working code, share their copy with another student, and ask that student to sabotage their code. The teacher should provide parameters such as, “you may only make X insertions or Y deletions.” The student then receives back their sabotaged code and need to debug the error(s).

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.

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