How to succeed

In every college, there are students who do well and students who do poorly. I've made a careful study of their habits, trying to understand what the distinction is.

Surprisingly, the primary distinction isn't talent. Certainly doing well is easier for those with inate talent. But I've seen students who are slow and who really don't have much talent struggle through and end up learning a lot. And I've seen quicker students, who clearly have talent, squander a course.

The difference is one of attitude toward the laboratories. The poor students make their goal to complete the laboratories. After they have the laboratory working to their satisfaction, they immediately move on without a second thought.

The students who do well continue to do a little more work. They evaluate whether they're comfortable with their understanding of what they did. If they're uncomfortable with the depth of their understand, they continue to ask questions. Usually, this reflection process doesn't take more than a few minutes. But the good students are more concerned about learning than finishing.

It's not the sort of thing that will affect your laboratory grades. But it will certainly affect your success on tests, in later courses, and in your professional life.

So take this piece of advice: Your goal with these laboratory assignments should not be to complete them. Your goal is to learn - after all, that's the point of being at this college in the first place! You should understand the laboratories as only a helpful tool toward this end. Of course, you should want to complete them in order to make the most of the tool. But they're not an end in themselves.1

 

This sequence of laboratories will give you practice with the fundamentals of programming. That is, you should hardly be able to help learning how to understand how Java programs work.

Software development, however, is a much more complex process. The most important part is one that you won't get to practice in these laboratories: software design. A good program design will drastically simplify the entire piece of software, and a bad one is catastrophic.

Yet we're not going to study it in this course. Why not? It's simply impossible for you to design software until you know how to implement the design, and implementation is what this course is to teach. As a result, these laboratories will lay out the overall program design for you, usually quite explicitly.

But that doesn't mean you can't start to learn about design. After all, program design is something that you will learn primarily through experience, and these laboratory assignments (especially the later ones) are meant to illustrate well-designed software.

Don't settle for the small picture. As you read through the lab assignment and after you complete the lab, also comprehend the overall design of the program. It's not something you must do to complete the laboratory. But you should in order to succeed both in this course and in later courses.

 

Both of these points boil down to this: Keep your eye on the big picture. Your goal is to learn - not to pass the course (though that should naturally follow). In this particular course, your goal is to learn how to write software. Don't let the details obscure your understanding.


1 This point is analogous to Paul's point in his letter to the Romans.

For we hold that a man is justified by faith apart from works of law. Do we then overthrow the law by this faith? By no means! On the contrary, we uphold the law. (Rom 3:28,31)