Course Design

Why the material is designed the way it is


Structure of the course

 

You will notice that:

 

Why do we have the structure of text, followed by exercise, with some (often obscure) audio?

 
So, what are the audios/videos for?

Why the unusual format for the hints?

 

It's difficult for an experienced instructor to know when and how students get stuck. So, to get a better feel for this:

  • We hired students to do the course as we developed the material.
  • The idea was, a group of students would get stuck in different ways and on different problems, and we'd use this to craft the hints.
  • This turned out to be highly effective in uncovering the exact nature of hints needed.
  • Along the way, we realized that it was more interesting to have students record the hints themselves, along with their own informal, casual banter as part of our effort to make the hint less direct.
  • Later in other units, we have explored ways in which student comedy groups can "perform" the hints to make them more interesting. Clearly, not every attempt at humor is going to work so we hope you will be patient and use what you can from the hints while occasionally getting a break from the very technical details of programming.

Other aspects of course design

 

Typing up your own code:

  • You've noticed that we try as much as possible to avoid cut-and-paste: you need to type up the whole program.
  • This is deliberate because research has shown that personal note-taking improves learning.
  • We could have done this differently by giving you a whole bunch of code where you fill in a small part. But the typing up of the whole program helps build in your mind an image of the full program, and even though it's a bit tedious (like note-taking in a history class), it makes a significant difference in helping you read and understand programs.
  • Important: Please type up the full program where possible. It is critical to improving your reading and comprehension.
 

Why not use a sophisticated coding environment like Eclipse? Why pico?

  • This too is a deliberate choice.
  • Our experience is that tools like Eclipse impede learning because they do too much on your behalf and hide some important details.
  • Initially, we went with pico because it's extremely simple and widely available. Later, we encourage you to try out others such as: Emacs, Atom, Sublime, Notepad++.
 

Why the Terminal?

  • Tools like Eclipse also avoid the Terminal (or command-line, as it's sometimes called).
  • But understanding and being comfortable with the Terminal is a very useful long-term skill. And it's simple (if a bit crude) to use.
 

About problem-solving:

  • Problem-solving is the hardest part of learning programming. That is, going from a word-description of a problem into useful code that solves the problem.
  • You should not expect this to be easy nor should you expect something like "Oh, I'll eventually get this, after which no problem will be difficult". You are going to get better at it but through a slow learning process.
  • To help you through this, each assignment begins with a solved problem.
  • The wrong way to gain from the solved problem is to read through casually. Instead, work through the problem yourself in steps.

When and how to get help

 

The best way to help yourself without asking for help:

  • We've consistently observed that students do NOT use the most useful form of fixing problems: copious printing.
  • That is, use plenty of println's (that you later take out or comment out) to tell you what your program is doing.
  • Again, do not expect that adding a few println's will just make the problem clear. You also have to mentally execute the program while looking at what got printed. It's still a bit of a struggle, but the printing helps.
  • Important: You have get used to the idea that no program is going to be correct right off the bat. Debugging is part of programming. Believe it or not, it can even be enjoyable in a puzzle-solving detective kind of way.
 

Other forms of help:

  • We will announce office or tutoring hours.
  • It's best to bring all your questions in an organized way rather than bring vague, sweeping questions like "Can you help me understand arrays?"
 

Getting "too much help":

  • Important: Beware of getting too much help. If you are being helped by someone outside the course, you might not know that you are getting too much help. If you are, then you won't learn enough and you won't do well on the exam.
  • Please do not look at anyone else's code: a mere glimpse can be too much help. You really need to do this by yourself.



© 2017, Rahul Simha