CS 116 - Class and Lab Guidelines
The goal of this course is for you to learn how to think
algorithmically. A thought process can not be learned through memorization
or by listening to a lecture; it has to be obtained through your active work,
and often times through struggle, trial and testing. Rather than viewing me
as the provider of knowledge or a service, consider me your guide directing the
way and your personal trainer pushing you to achieve the goal of algorithmic
thinking.
"I'd compare college tuition to paying for a
personal trainer at an athletic club. We professors play the roles of
trainers, giving people access to the equipment (books, labs, our expertise)
and after that, it is our job to be demanding. We need to make sure that our
students are exerting themselves. We need to praise them when they deserve
it and to tell them honestly when they have it in them to work harder."
- Randy Pausch, "The Last Lecture".
The in-class activities and labs
will be the primary vehicle where the learning will take place
in this course, and these guidelines are designed to help you understand your
responsibilities in this learning process.
- Read through the appropriate chapters in the text
before class. Don't let down yourself and your partner by coming
to class
unprepared. Reading a computer science textbook (or any
textbook) requires an
active reading approach. As you read, don't worry about memorizing program
details such as where semicolons are placed and the like. This sort of
detail can always be looked up later. The text explains why the code
is written as it is and it is this algorithmic thinking process which is the
core of the chapter. Concentrate on
understanding the process of the example programs. Most of your
reading time should be spent on examining these examples and asking yourself
questions on why they are written as they are. After a reading you will probably only have a surface
understanding of the core concepts; a deeper understanding can only come
from trying to write code yourself. Check out the concepts summary at
the end of the chapter and go back and reread any sections if the summary is
unclear.
- When starting a new chapter, I will pose questions
to the class regarding the reading. Even though
your understanding from the reading will most likely be imperfect, I want
you to take an educated guess. You will submit your answers
anonymously using Socrative.com using the "room number" of 44772.
I will ask you to
discuss which answer you think is the best with your lab partner or other
classmates. When you come to a consensus you will vote on the answer. We will
use the vote as a springboard for a discussion of the chapter material.
This discussion will be a clarification and expansion of the reading and is
not designed to be a presentation that substitutes for the reading.
- I have designed class activities for most of the
chapters or sections of material. These are designed to move you from
more passive consumption of the information to actively engaging with the
concepts. These are activities are not graded and you have the freedom
to make all kinds of mistakes. Making mistakes is a great way to learn
as long as you reflect on what went wrong and why.
- An in-class lab that is done with a partner is the
next part of this active learning process. The lab contains assignments which are to be turned
in for a grade. The non-graded activity should provide a springboard
for the lab. You might want to look at code in the text or code
discussed in the activity, but when you start writing
your own code for the lab I recommend that you close your text and notes. Don't cut and
paste code from somewhere else! It is very
important that you attempt to write the code rather than blindly copying
some other code. This is a crucial step in incorporating
algorithmic thinking into your own thought processes! Again, don't worry if
you make mistakes at this stage. That is an important part of the
process as well.
I encourage you to use the Java documentation provided to look up details of class
methods. These details do not need to be memorized and this sort of
help is not equivalent to copying code.
If you get stuck, put away your code and go back to the examples from the
text and activities for further clues. Work through the problem with your
partner as much as you can. I'm available as a resource if the pair of
you feel you have reached a dead end. Remember that is is okay to have
to struggle a bit. This is all just part of the learning process.
- You do not have to write your entire assignment code
to completion before testing it. In fact, I advise against it.
Write a chunk of code and try it out. One of three things will happen.
- You will get a syntax error telling you that you
do not have a legal Java program.
- You will have no errors but the code does not
produce the correct result.
- The code works as desired.
Work with your small chunk of code fixing errors and
retesting until you get it working and then move on to the next small chunk
of code. This way you narrow down the code that you need to examine at
each stage.
- If you have a syntax error you will be given error
messages and possible locations in the code where the errors may be located.
Start by trying to decipher the error message and what it is trying to tell
you. This is not always easy but you will get better at it as time
goes by. I can help you if needed because these messages can often be
baffling. Sometimes the actual error can be located before the
position in the code where the error is marked. Use the clue of the
error message to correct the code but try not to make changes blindly
(although sometimes a bit of trial and error can help if it is done
purposely and methodically).
- If the code runs but does not give the correct
result, then the real work begins. You must carefully look at your
code with a critical eye. Try to determine why the code produced the
given result. Only by determining why it gives you the given result
can you figure out what changes need to be made to produce the desired
result. Do not just make changes blindly! Blind changes can very
well change code that is actually correct and make things worse. You
need to be a sleuth and find the error. Again, this is a skill that
gets better with experience and you may need my assistance at first.
The material in this course builds as the course
progresses. Understanding of the material in a chapter is predicated on a
complete understanding of material in previous chapters. If you are
struggling at any point, you may find that you need to go back and get a solid
foundation on earlier material. Don't delay as it is very easy to quickly
find yourself under water. Although the learning must ultimately come from
within yourself, I am here to help you and point the way when you need guidance.
Don't hesitate to use my assistance. I don't want to be lonely during my
office hours and you can drop in to see me whenever you see my office door open,
even if it isn't office hours.