Study Advice#

Hello APCS coders!

I would like to offer some advice about how to use your time effectively to master the concepts we cover this year.

Mistakes#

Niels Bohr, a physicist, gave a definition of an expert:

An expert is a man who has made all the mistakes which can be made, in a narrow field.

Of course, we can do better - not every person is a man, and no person can make all the mistakes there are to make:

An expert is someone who has made more mistakes in a particular subject than anyone else.

You can interpret this in two ways:

  • In order to become an expert, you must make more mistakes than anyone else.

  • The only difference between you and an expert is that they have made more mistakes than you have. (So you shouldn’t be intimidated by an expert.)

Learning through play#

Babies (human or other animal) use play as a way of learning about the world. For example, when a baby first encounters a new object, what does she do? She pokes at it, prods it, turns it upside down, all to explore the properties of the new object.

This is a great way to explore a new coding concept. What happens if you change the value of this variable? What happens if you change the order of these statements? What happens if you omit a particular keyword? A lot of learning how your code relates to the behavior of your program is playing around, poking and prodding and changing things and observing the results.

Coding#

  • Coding is a skill. How fast your skills improve depends on how much time and effort you put into your practice. You won’t get better if you don’t practice. And here, practice means “writing and testing and debugging code”.

  • Learning to read and write code is like learning a foreign language. You must immerse yourself if possible. A little practice every day will give you better results than a long practice one day a week.

  • Give yourself space to make mistakes (and time to learn from them). Remember: in order to become an expert, you must make all the mistakes that everyone else has made, and more.

Weekly schedule#

Once we get into the semester, a typical week will look like:

  • 1st class: Code demo for new unit, discussion and work period

  • 2nd/3rd class: Work period (coding, quizzes)

This class#

  • Put time in your schedule to write code every day. You should aim for 7 hours/week. I will be giving you as much time as possible during class to write code, ~1-2 hours/week.

  • Your goal as you approach the week’s exercises is to be able to do each exercise without hesitation, within (roughly) 5 minutes. For some exercises, the first time you do it might take 20-30 minutes. Or you might get stuck and need to look at a solution or ask a friend about it. It is your responsibility revisit the exercise later to make sure you can solve it on your own without hesitation.

  • You should not need to “study” for the quizzes. The quizzes are meant to assess whether you have absorbed the new concepts and can solve new but similar problems. If you can do each homework exercise without hesitation, you will be able to handle the quiz problems.

  • There are no tests or midterm/final exam in this course, so no week will be any more difficult or stressful than any other. Instead, so you should be putting in a strong, sustained effort every week.

  • Use the in-class work periods effectively! It is easy to get stuck on a problem. The fastest way to get unstuck is to talk to your classmates (or me). After you’ve done the exercises, help your classmates! Talking about problems and explaining solutions is a great way to solidify your own knowledge. We’re all here to learn together.

Dr. Kessner