Pair programming | Taking tests | Assignments | Research | Working smart | General remarks
Some students work hard, yet still don't do well in computer courses because they're not using their time well. Here are some proven strategies for success in this course.
A recent article in a leading journal of the programming profession* begins "Pair programming is a practice in which two programmers work side-by-side at one computer, continuously collaborating on the same design, algorithm, code, or test. This method has been demonstrated to improve productivity and the quality of software products. Moreover, a recent survey ... found that programmers were universally more confident in their solutions when programming in pairs as opposed to working alone. Likewise, 96% agreed they enjoy their jobs more when pair programming ..."
The person at the keyboard is the driver, and the other the navigator. The navigator may have a tendency to sit back and go along for the ride, but actually has the most intellectually challenging job: checking what has been typed for errors and thinking what to do next. The driver is most concerned with tactics, the navigator with strategy.
The driver and navigator can switch roles whenever they want, but at least every half hour, and usually more often.
It takes a little getting used to, but it's really worth it!
Pair programming is one of the rules of Extreem Programming (XP), a programming methodology that has recently proved to be extreemly effective and is all the rage in the programming industry. This course also introduces several other XP rules, such as simplicity, refactoring, and unit testing,
To insure that every student is exposed to all aspects of the programming process, in some assignments it will be specified that you are to work individually. Of course pair programming is not allowed in these assignments.
* Communications of the Association for Computing Machinery, May 2000, pp. 108-114.
Quizzes and the final are primarily designed to test your ability to program in Python. Thus there is not shortcut to preparing for them, other than learning how to program using all the features of Python covered so far in the course. All of the strategies discussed on this page and other resources of this course are designed to assist you in achieving that goal. There are no shortcuts that will allow you to do well in this course without learning its material.
You may feel you do well on the assignments, but that the quizzes are much harder. In fact, in most ways quizzes are significantly easier than assignments. However, on a quiz you do not have a computer to help you, and you may be relying far too much on the compiler to catch errors. Quizzes are designed so time pressure is not a major problem for most students, most of the time.
Store your work in the STC CFS (Common File System). Use a separate directory for each assignment. As always, save files at least every 10 minutes, so you will never loose much if the system crashes. Also, at the end of each session, store your files on floppy disk and always bring a floppy disk to lab. This is insurance against the CFS system being down when you need to work. Never rely on a single floppy disk copy as your only record of your work.
Write test code (or plan your testing methods if it is an applet that must be tested interactively) before writing the main part of your assignment. This requires a thorough understanding of the intended behavior of the program, which is very important before writing code. This is one of the software development methods popularized by the hot new Extreme Programming, or XP, methodology.
Develop your program in stages and always keep a version that compiles. That way you have something to submit without this penalty. It is better to turn in a program that does not compile than nothing at all. Whenever it is suggested you develop an assignment in stages (and even when it isn't suggested), get as many stages running properly as you can. Document at the beginning how many stages it does properly. Your program may also contain code, commented out if necessary, to document your efforts to complete the assignment.
Whenever possible, debug programs in your head, rather than at a computer. This will often save you lots of time. Debugging at a computer can be very time consuming. And you can't use a computer in exams and quizzes.
Have a strategy for solving programming problems. Write it down, as informally as you wish. For object-oriented programming it is often best to start with class diagrams or cards. (What classes do you need? What do they do? How do they relate to each other?) For any but very simple methods, write pseudo code. Do not start writing code unless you're sure you have a good picture of the whole program, which you can't do in your head for any but very tiny programs until you are experienced. Professional programmers use written design notes for all but very small programs.
A leading scientific study examined a great many factors to see what most contributed to student success in college. The three leading factors contributing to success were:
The most consistent result of research on learning is this: Learning happen when you are solving problems. Passive learning, such as listening to a lecture or reading a book with few thoughts of your own, is of little value other than as preparation for active learning. Your brain quickly flushes most information unless it is used right away to solve problems. Active learning means giving assignments and class exercises your best effort. It also means doing your text's (or another text's) self-review questions, exercises, and programming projects (or projects of your own if you prefer) until you can apply the material you have learned.
It's not just how hard your work, or how smart you are, it's how smart you work! Making the most of your mind is a skill, like any other, that you get better at by working at it. But most people almost never think about how they're thinking. What helps one person think their best may be very different from another. And what helps with one kind of thinking may not be of much help thinking about other kinds of things. You may well find that you're much better at solving programming problems and learning about computer science if you make some adjustments in how you think. So try meta-thinking, that is, try thinking about how you're thinking. Research has shown that developing this ability is one of the most valuable things you can learn in college.
You'll probably discover things like the following:
Doing assignments is no substitute for reading the text and studying lecture material. By doing lots of debugging and trying lots of possibilities you may eventually succeed in getting small programs to work with little attention to the book or class material. But you will not become a good programmer this way, or do well on quizzes and the final. To be a good programmers (or succeed as a computer science student) you must know the underlying structure of your language and the principles involved in its design. Otherwise, you will not know what the possibilities are for structuring programs unless you have already done a very similar program, you will make many more mistakes than necessary, and you will sometimes have very great difficulty debugging your code. Though you may eventually figure out some aspects of the underlying principles without studying them directly with the help of a book or class material, it is much easier and more reliable to study the principles directly with these aids.
When you hear a term you don't know, write it down. Look it up after class in the appendix of the text and/or another reference book. If you still don't understand, ask a friend a member of the course teaching team. .
Don't procrastinate. Yes, everyone does at times, and sometimes it seems to do no harm. But in this course there are two special reasons to avoid procrastination:
Learn to read computer science material like a scientist. It's tempting to read your text like a novel. You see some code or read some statement and think "I sort of see what is going on" or even "I expect this will be clear later" and continue. This is appropriate for a first reading to get an impression of the material, which is a good idea before the class in which it is discussed. But you must go back and reread it until you understand it like a scientist. Reread until you feel you understand why everything is the way it is. If you don't understand the why of it, you don't understand the underlying concept, and you won't be able to apply the knowledge when you are programming.
Seek help when you need it. It's important to try solving problems on your own first, but when you're really stuck, get help from the course teaching team, a friend, or a tutor. (Help with specific code in an assignment from any but the teaching team needs to be acknowledged conspicuously in the assignment and may result in loss of assignment credit.) You may also find services of the IU Student Academic Center very helpful in the development of general academic skills.
Review these strategies often. You may have to overcome deeply ingrained habits to use them.. This can be done, but requires repeated attention.