Guidelines for Success in the CS Program
We have prepared the following "suggestions for success" for your edification. These apply specifically to courses in computer science but most if not all of the suggestions apply equally well to any course you might take. Think of these as mind-set issues regarding how you approach a course, and pragmatic techniques for how you progress through a course.
You can predict your level of success in a course based on your attitude and expectations at the start. To the extent that you are able to improve your mind-set going into the semester you will significantly enhance your outcome.
Look for the transformative
If this class is worth taking, it is because of the ways it will change you. Expect and anticipate change, keeping in mind that change is painful. The more you look for and are open to occasions for transformation, the more deeply those occasions will enrich your educational experience.
Cast out fear
"Fear is the mind killer." The only failure worth fearing is the failure to learn! Fortunately, you have control over what you learn from a given situation or experience. This applies far beyond college courses and the grades you get in them.
Plan to spend time
Make peace with the fact that CS classes are often challenging and will require significant amounts of your time. The "average" college course requires between two and three hours of outside study for each hour of class time. As an average, some courses will require less; some will require more. CS classes sometimes require more. Also as an average, some students will need less time and others more. It is your responsibility to assess the time you need for each class you take and then to allocate your time accordingly.
This simple advice will correct 70% of all problems students encounter.
Treat yourself well
Get plenty of rest. (Follow this instruction.) In addition to sleep, eat well and exercise. You might be surprised to find that your concentration and clarity will be markedly improved.
Possibly the most important skill you can acquire is that of formulating good questions. Good questions frame a problem such that sometimes the answer is obvious simply by asking the right question. Skillful question asking will, by repitition, reduce problems to manageable or trivial ones with straight-forward solutions.
Starting assignments early
Or generally, manage your time well. You will save yourself untold grief if you start assignments the same day they are announced. Starting early allows clarification questions to surface early and gives you a time buffer against the deadline when you encounter unexpected obstacles.
You should also budget your time and make adjustments if you find yourself spinning your wheels. By allocating a fixed amount of time for each of your classes, you can keep your academic program on a steady track. An added benefit of a time budget is that it helps inform you when you are spinning wheels -- getting nowhere. When you find this happening, you must try something different. A progression of tactics would include but not be limited to: formulate a question that when answered would get you unstuck, try a different approach to the problem, try a different problem altogether, or ask for help from a peer or professor.
Eliminate load/compile and runtime errors from your programs
Do not submit programs that will not compile or run. Generally, it is better to have a functional partial solution than a "complete" solution that is non-functional. If you have an error that you cannot correct by the submission deadline, comment out the offending portion of code (as minimally as possible) and include an explanatory note.
Given that much learning takes place socially, you should not be surprised that study groups can be a highly effective tool for learning. For a difficult concept, it only takes one member of the group who does understand it to benefit all of the group. Even if no one person fully understands the concept, it may be possible to assemble a complete picture from the partial understandings in the group.
Do consider working in a study group whether you feel comfortable with the material or think you are drowning. Even in the case where you understand a concept or reading adequately, encountering a different perspective or understanding can provide significant added depth to your own understanding. Also, it is well known that explaining something to someone else improves one's own understanding of the topic in question.
how to do it
Study groups work well in many disciplines, but the form they take will vary accordingly. In traditional seminar courses, students come together having read some material prepared with questions and reflections. In content memorization courses, students will sometimes quiz each other on facts and figures. In introductory computer science courses where programming is a primary focus, students might work individually on their assigments but do so together in the same space. When questions come up, someone probably knows the answer or can suggest a strategy for moving forward.
what to avoid
The danger in a skills-based course such as introductory computer science (but still relevant in other contexts as well) is that a student relies on a study group and avoids the work of actually learning. This could easily happen if several students sit down to work "together" on a problem.
Help sessions and office hours
From time to time, TAs or professors will facilitate help sessions; take advantage of these gatherings. Help sessions are like study groups with a bit more structure and a higher probability of having at least one person who can answer questions. But remember that like the well-functioning study group, help sessions provide a pool of knowledge that can be drawn upon -- not a public problem solving episode that can be observed and recorded.
Professors schedule regular office hours, which provide additional opportunities for you obtain assistance. However, for both office hours and help sessions, do not plan to have someone else do a problem for you. For example, it is unacceptable to say something like, "I don't know how to do number 5, can you help me?" Technically, "can you help me?" is a question, but it is not the best question. Our answer would be "yes." You would then need to formulate a more specific question describing what you do understand about the problem, the step you are stuck on, and a specification of what information would get you unstuck. That would represent a good question.
Did we mention that the ability to ask the right questions is possibly the most important skill you can acquire?