How to Succeed in CS 429

Having taught CS429 for several semesters, I have some insights into who succeeds and who fails in this class. By "success" I mean more than getting a passing grade. I mean really learning the material that you'll need, immediately, to do well in CS439. But also what you'll need to be a competent computer scientist.

CS429 is a challenging class. But it can be an enjoyable class if you make it so.

Keep Up.

Many of you are very smart and coasted through high school and your first few semesters here without having to work very hard. This may just be the course where that strategy fails you.

The content of this course comes at you like a firehose. You have to work diligently to keep up. If you blow off a couple of weeks, you may never catch up.

Keep in Touch.

If you have some emergency or situation that negatively impacts your performance in the class, let me know right away. I've had students come to me during the final week of classes and say something like: "I haven't been to class for the past two months because my grandmother died." I'm going to say: "You didn't have access to a phone or email or a friend who could let me know?" You have to take responsibility for your own success or failure.

Come to Class.

I have noticed that there is a direct correlation between class attendance and success in the class. Since attendance is not required and the slides and textbook material are all available, some students find it tempting to try to get the material outside class. For some folks, that works. For most, it doesn't. Decide for yourself.

When You Come to Class, Pay Attention.

In class we'll be going over most of what you'll need to do well on tests and labs. If you spend the entire class playing games, surfing the web, or talking to your friend, you might as well stay home. Also, you're very likely distracting everyone around you, and me. So keep your phone and laptop closed during class.

Read/Work Carefully.

Many points are lost on tests because the student answered the question they was expecting, and not the one actually asked. Read the questions carefully. Then, if you don't understand the question, ask for an explanation!

Read assignments carefully. The TAs and I get really tired of answering questions on Piazza that are answered in the assignment write-up. After you've read the assignment carefully, if you still don't understand, then ask.

Read due dates carefully. If you wait until the last day to start an assignment, that's not our fault. You'll have some slip days, but after they are used up, they are gone and you won't get any more. Schedule your time accordingly.

Every semester, I get messages from students saying: "I turned it in 5 minutes after midnight. Can it be counted on time?" If you have two weeks for an assignment and still miss the deadline, it's almost certainly because you didn't start early enough. If it's late, it's late.

Checking on many of our assignments is automated. Often someone will post on Piazza a message like: "The checker says my program is wrong, but I'm certain it's right." Check it again; your program is almost certainly wrong, even if you don't think so!

If you Need a Certain Grade, Earn It.

At the end of each semester, I always have students come to me with one of the following pleas: The next question is always: Can you give me some extra work to raise my grade? I would love to help, but it's illegal and unethical for me to offer an opportunity to one student that I don't offer to everyone in the class. The TAs and I have plenty to do without making up an extra credit assignment. So please don't ask.

If you need to receive a certain grade in the class to preserve your standing in the department, in the university, or in your family earn it during the semester. At the end of the semester, it's too late.

By the way, if you're failing this class for the second time, consider whether you really have the interest, drive and competence to be a computer scientist. There are plenty of other majors out there that may be more satisfying and more suitable for you. If you're majoring in CS to please your parents or someone else, you're probably in the wrong major.

There's always a highest B.

I assign you a letter grade at the end of the semester based on a numerical average I computed from your work throughout the semester. To do that, I use the percentages listed in the course syllabus. The numerical average that divides an A from an A-, say, is also listed in the syllabus. I do reserve the right to be more generous in setting that boundary, based on the number of students in each range. For example, I may decide that there should be more A's and lower the threshold for obtaining an A from that in the syllabus. I will never raise the threshold. This means that you know at the beginning of the semester what average you need to guarantee yourself an A.

But there will always be some student with the lowest average assigned an A and some other student with the highest average assigned an A-. If you are the second of those, this does not qualify as unfair to you. So please don't ask me to raise your grade because you were only, say, 2 points away from an A. If you need an A, work hard during the semester to ensure that you're above the published threshold. If you are, you're guaranteed an A in the class. If not, your strong desire to get an A or your urgent need for an A won't be a factor.

Don't cheat.

Whatever else you do, make sure that you understand acceptable standards of behavior on labs, homeworks, tests, etc. and follow them. If you're caught cheating, you will certainly fail the class and be reported to the Dean's office. It is better, by far, for you to get a low grade on a test or assignment than to be caught cheating.

Don't imagine that you won't be caught. Every semester, students are shocked at how good we are at detecting cheating.

Don't publish your work in any publicly available place, including GitHub. If you do and someone copies it, you are both responsible. If you want to share your work with potential employers use BitBucket or other services that support private repositories. Those allow you to give access selectively.