A Guide to Being a Successful Mathematics Student at NCSSM

1. Introduction. It is a very safe bet that you will find the study of computer science at NCSSM quite different from anything which you encountered in other classes you have taken. You will be expected to be much more independent and to take greater responsibility for your own learning. You will be expected to show an active mastery of the material by applying it to solve problems or build applications. You will be faced with learning about unfamiliar classes or objects on your own from their documentation to handle the problem given you. It is not unusual for you to be asked to work with a group of people to do a project or produce a report. Your grade may in part or completely depend upon the effective functioning of your group.

RTFM Every computer scientist knows what this means: Read the fun manual! Your teacher will show you the documentation for the language(s) you are using. Become familiar with this documentation. Do some spelunking on your own; this can expand your knowledge in very useful ways.

Excellent documentation exists for all of the languages taught at NCSSM.

In computer science classes, you will spend very little time, if any at all, reciting or recalling specific facts. Rather, you will be asked to apply the knowledge you have gained in different contexts. You will get this knowledge from a variety of sources: your teacher, your textbook, your peers, and from class activities.

Further support is available from your teacher and from the departmental tutorials. The purpose of this part of the study guide is to help you marshal these resources so you can master the material and gain the knack of learning mathematics at NCSSM.

2. Good Study Habits. Computing is a subject in which you build skill incrementally over a long period of time. In many ways, learning the subject is akin to learning to play a musical instrument. With the instrument you might learn fingerings, riffs, or other techniques to strike the desired notes. These smaller techniques are applied to playing musical passages. Other concepts such as proper rhythm, phrasing, and melody must be integrated skillfully to play a musical piece with skill and style. By learning many pieces, you begin to master a genre of music such as Jazz, Rock or Baroque.

You see a theme here: small details are integrated into larger ones. The learning process is a cumulative one. In music, we master all of these details and orchestrate them into a coherent musical piece. The same sort of thing occurs in computting. We master small techniques such as how to get objects to do work for us, using conditional logic to make decisions, or using loops to achieve repetition. We often wind up wrapping these inside of methods or functions. These small tools are applied together to solve complex problems. An experienced musician never stops learning new riffs and new techniques. Likewise, in computing, we are always examining new concepts, mastering them, and then applying them to solving problems. As in music, we develop a repertoire of skills. These skills build and combine to give us new capabilities.

This special nature of computing makes frequent practice important. It is impossible to absorb a large number of concepts overnight; the difficulty of doing so is similar to that of a musician who tries to learn a piece five minutes before rehearsal.

You should systematically allocate time to review notes and attempt problems throughout the week. It is best to do this for each class on that class day while the new material is still fresh in your mind and before new material is introduced. Make a note of items that give you difficulty so you can approach your teacher or the people in the tutorial lab with specific questions or areas you wish to discuss. It is far easier to keep up with the material if you work on it often. If you fall behind in a computer science class, it can be quite difficult to catch up.

Cutting corners in class may initially appear to be a good way to budget time. This is a dangerous trap. While it may seem more time-consuming to do things "the right way," you will quickly find that doing things well the first time around will save you duplicated effort and frustration down the road. Often the careful and prudent way of doing things turns out to be the easiest!

3. Reading a CS Textbook. Virtually all of you reading this for the first time will be shocked to hear this: Critical reading skill is the most important determinant of success in a computer science class. This skill gives you access to the best tools and enables you to learn how to use them effectively. The textbooks for our web development, python, and Java were written here at NCSSM and they come right to the point. Many students at other institutaions have downloaded them and used them to successfully learn these languages independently.

When you are going to read your textbook, have the appropriate tools at hand. The most important thing to do is to have your language tools in easy reach. When you begin a new section, look at the introduction. Look for any new vocabulary that is to be developed; often these words will be shown in bold or italic font so they are easy to find on the page. Make a list of these words before you start the section. Then, before starting to read, see what you are trying to master by turning to the end of the section and reading the first few problems. This will help you to get the most out of the examples that are presented there.

Now you know the vocabulary you are to acquire and you know about the simplest problems you will need to be able to solve. Read the introductory paragraphs carefully; they will tell you what is going to happen in the section. The exposition in the chapter will make it possible for you to understand the examples; read it carefully! If you see code (you will see lots of it), break out your tools and do some experimentation. Often we teachers are asked, ``Can I do XYZ?'' If you have that question, open your tools and do XYZ and see what happens! Often, you can answer your own question.

Write small programs that use the new ideas in the chapter. Deliberately make errors and see the error messages. By getting familiar with error messages, you become a far better debugger and diagnoser of problems. This, incidentally is a six-figure skill. You want to have it. Everyone will want you on their team.

Avail yourself of resources! Your best friend in this class is The Google. Use it early and often. Another great friend is Stack Overflow. This is a great worldwide community for programmers. Join it. You can ask questions, search it, and answer questions for others. It does not hurt to have some serious Stack Overflow reputation points.

4. Problem Solving Technique. The key idea here is: you do not really understand what's going on with programming until you start solving problems with it. The other is: Create the right abstractions to isolate complexity from yourself. Remember, the human mind can only keep track of a few things at a time, so we use abstractions such as functions and classes to keep things manageable.

Here are some steps you can take to get over the hump.