keyboard Website
Succeeding in CS

Succeeding in Computer Science

Below you'll find advice and guidelines from the CS staff for students in the program.

Class Schedules

Although course prerequisites are listed in the course catalog, it is important to get an academic advisor to help plan your coursework each semester. Often the START Center provides academic advising; however, you should get a member of the computer science faculty to advise on courses within the computer science major. If you don't have an advisor contact the program chairperson Greg Gagne.

Getting Help and Using Your Instructor

You are encouraged to get help with assignments before they are due. Instructors have posted office hours that are listed on their doors, in the syllabus, and on their Canvas as well as personal web pages. If you find the posted office hours to be inconvenient for your schedule, you can also arrange a special appointment in advance by contacting your instructor. 

All lower division classes have teaching assistants available, in which case you may want to make an appointment with that person for help. In addition, the first-year sequence (CMPT 201 and CMPT 202) offers a supplemental instructor that holds additional office hours. The START Center provides tutoring for most classes as well.

Preparing for Classes

Read the material to be covered in advance - it will make a lot more sense in class if you have previewed the material to be covered. There is another reason - repetition reinforces learning. A good strategy is to preview the text and online notes - skimming for terminology and conceptual structure, attend the classes and take notes, and then return to the text and read for detail. Don't make the mistake of putting off reading the assigned material until just before the test.

Attendance is strongly advised, even if you read the text - the author may not emphasis the same points that the instructor will emphasis in class. Usually additional information is also provided in the classroom and good note taking will be essential.

Participate in class and ask questions. You may prepare a list of questions in advance based upon your preview or reading of the text. Besides - asking questions exercises your grasp of the material, and reinforces your learning.

Working With Others

Don't feel as if you necessarily must tackle this class on your own. Rather, work with your fellow classmates and all learn the material together. Some things you can do include:

  1. Get a study partner(s). Work with your partner to understand difficult material. Quite often, you will learn the material better when you have to explain it to someone else.
  2. Work in study groups. This is especially useful when preparing for exams. Think of possible questions you may be asked and quiz each other.

In addition, some programming assignments (especially in upper division courses) are assigned to a group of students rather than individually. This is typically how software is constructed in the "real world." Being able to build a program that is a collection of work contributed by several different people is an important skill you can take to the marketplace upon graduation.

Doing Well on Tests

There are two kinds of tests: in-class and take-home exams. The type of exam given is at the discretion of the instructor. Are take-home tests easier? No, take-home tests often ask more detailed questions or questions which require more thought. You may expect that the amount of time you set aside to review for an in-class test is about the same amount of time you will spend on a take-home test covering the same material.

Tips for Taking Exams

  1. If the question is somehow ambiguous, and you must make some assumptions, state what your assumptions are in your answer.
  2. Consider what the question is asking. A common mistake is to fully answer the wrong question.
  3. If you only know part of the answer, state what you do know. Partial credit is typically offered for partial answers and is better than no credit.
  4. Answer questions completely–write what you know, don't get lazy and quit half-way.
  5. Don't dance around the question–be direct. If you write fluff without really answering the question, the grader will probably see through this to your lack of understanding.
  6. If a numerical result is required, be sure to show how you arrived at the answer. Showing the approach you take will probably be worth more in proving your understanding than a simple result (especially if you make a simple arithmetic error).

In-class exams: Please write legibly. Granted you are probably under time pressure, but indecipherable handwriting may hurt your grade! Think before you write–compose your answer in your mind before you put pen or pencil to paper.

Take-home exams: Since you have more time to construct your answers, the expectations are higher. Don't forget good grammar, sentence structure, and logical exposition. As college students you are expected to be developing good writing skills–use them. You are also encouraged (and perhaps in some cases required) to type your answers. Program source code may also be required in some cases.

Writing Well-Constructed Programs

In course programming assignments and in real life, readable, well-formatted code is essential. If your instructor requires that you follow a set of coding standards be aware of what they are and follow them.

In brief you should at least adhere to the following guidelines:

  1. Use variable and method names that are descriptive. For example, if you have a variable that keeps track of the temperature, name the variable "temperature" rather than "t" or "temp".
  2. Provide descriptive comments when they will clarify the functioning of the code.
  3. Indent consistently.
  4. Follow a consistent naming and capitalization scheme for classes, methods, constants and variables.

Follow an "engineering" approach to solving problems:

  1. Before you begin writing code think carefully about the problem. If you are implementing an algorithm, trace its execution on paper until you are sure you understand the logical flow–don't code by trial and error, it only wastes time.
  2. Design the program! Write a brief description of the program inputs. Describe the range of data or conditions over which the program is expected to operate. Describe what the program is to do–what are the requirements? What is the expected output? Use a diagram if it helps.
  3. Think of some input data that will adequately test the program when you are done. Ask yourself what will happen if the program encounters inappropriate data; e.g., the user goofs and enters something invalid, or a zero result occurs leading to a subsequent divide-by-zero error?
  4. Do you have your design? OK–As you write the code, modularize your approach. This is implicit in an object oriented approach to design. In practice the implications reach further into your approach. Solve and test smaller sub-problems, then combine these into solutions to the larger problem.
  5. When you are done writing the code, or better yet– putting together program modules, test the final program thoroughly.
  6. One of the best approaches to eradicating bugs is to trace program execution with "watch" statements - or a debugger if available. Avoid the temptation to randomly change code in an attempt to fix a problem!

CAUTION: Programming can be mentally stimulating. You may experience being in the "zone" or losing track of time while designing and coding programs.