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. 

  1. 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.
     
  2. 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.
     
  3. 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. 

     
  4. 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.
     
  5. 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.
    1. You will get a syntax error telling you that you do not have a legal Java program.
    2. You will have no errors but the code does not produce the correct result.
    3. 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.
     

  6. 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).
     
  7. 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.