Tips for succeeding in CS 307
What does it mean to succeed in CS 307? Obviously, that varies from person to person. Most students define success in this course as getting an A or maybe a B. I would define success in this course as mastering the concepts and skills, especially the skills, listed on the topic list. If you master these things then it will normally follow that you will get an A or a B.
How do you master all that stuff? Students always want to know what is the thing I have to do to get a good grade in the course. It seems people are always looking for the easy way to do things, the simple answer. You could call this the "one switch syndrome." We like to simplify things because the world is so incredibly complex. There is a story in a book about Bill James, a baseball sabermatician, how his son had a music box. It had two switches. One was an on - off switch. The other was a knob that had to be turned to wind up the box. At 2 years old his son didn't understand you had to wind up the box and turn on the on switch. He just focused on the on-off switch and when the spring wound down and the music box would play when the on switch was on, the boy pronounced the box broken. My point is, there isn't one thing you can do to guarantee success in CS307, and I suspect this is true of most university level classes. There isn't one switch. There isn't one thing you have to do. Instead you have to do a lot of things.
Your final grade in CS 307 is based on 2 things.
Performance on attendance, programming assignments and quizzes. Usually 35% of final grade
Performance on tests. Usually 65% of final grade.
Your final average will be calculated using your grades on assignments and tests. Tests may be curved. (See the syllabus for details.) but final averages will not.
If you do not have experience with the topics of CS 307 such as recursion, data structures, and algorithm analysis, that is okay! I teach the class assuming you don't have experience in those topics. I teach the class under the assumption that all the students just meet the prerequisites of one prior programming class and pre-calculus. Some students mistakenly believe they cannot succeed in the class because there are so many other students in the class who have more prior programming experience or more computer experience and they will get all the good grades. This is absolutely false. There are usually a handful of people in each class who have had prior programming experience and worked with data structures but this is not a necessary or sufficient condition for success in the class. To succeed in the class focus on what you can do now and not worry about the level of other students in the class.
Here are some of the things you can do to improve your chances of success. It is the students who do the following that do the best in the class, not the ones with the most programming or computer experience.
Attend lecture.
Take notes in lecture. Instead of sitting and passively listening or simply looking at slides force yourself to be active in lecture. Take notes. It will help you remember and learn the information presented in lecture. I think it is best if you print out the slides and bring them to class and annotate them. There are many things said in class that are not on the slides!
Ask questions in lecture. If you do not understand some concept or would like to see a different example then ask the question! Do not be afraid to ask questions in class! Do not be cowed by other students into keeping silent if you want to ask me something in class concerning the material in the course.
Know how to help yourself. When you get stuck when you are programming learn to look at other coding samples and to search the web for what syntax and runtime errors mean.
Answer questions in class. I often ask questions in class. If you have an idea as to the answer, then offer it. Even if you are wrong you will learn something and I certainly will not denigrate an incorrect answer.
Do the reading from the schedule before lecture.
Print out the slides from the web and bring them to class. Add notes to them because I often add information in lecture that is not on the slides.
Attend and participate in small group discussion sections.
Do the assignments. Even though the assignments are only worth about 20% of your grade that is where 80% of your learning will take place. Performance on the exam correlates very closely with performance on assignments.
Start assignments early. Assignments generally go out on Wednesdays. Work on them over the weekend. If you finish, great. If not you will have put in some work and will be ready to seek help on Monday. I have also found that if you get stuck on a problem it is very useful to step away from the problem for a day. Your mind tends to work on the problem self consciously and when you come back to the problem you often have a fresh perspective. You will only have the chance to step away from a problem if you start early. If an assignment is due Thursday and you start Wednesday night, that doesn't give you much to to step away if need be.
Make sure the work on your assignments is your own. You could certainly go on an Easter egg hunt and search the web for code that can be used on assignments and I might not detect it, but that is going to do a very poor job of preparing you for the exams which are worth about 70% of your final grade. Further, most of the points on the exams are tied to programming and problem solving questions. If you have not done much programming or problem solving you will not do well on the exams.
Follow the general assignment guidelines. It is very easy for the graders to take off points for style errors. They are easy to spot, so follow the coding standards.
Do not sit down at the computer to start and assignment. Do not simply sit down and start coding an assignment. Work it out on paper first. Have a plan. Have a design. Think about your problem and a solution before you ever touch the computer.
Work with a partner on pair programming assignments.. You do not have to do all the programs alone. Work with a partner and by that I mean actual sit down together and do the program together. You might write up parts separately, but sit down together at one computer to enter and test the code. Keep a log and make it clear who completed what parts of the program.
Study for exams. Most of my old exams are posted to the web so there are plenty of study materials. Work the old exams on your own and meet with a study group to review solutions and answers. Do not simply look at suggested solutions. Work out the problems on your own! This and doing the assignments probably has more impact than anything else on how you do on exams.
Seek help whenever you have a question. Being willing to seek help early has a big impact on your performance in the class. There are vast number of resources to help answer your questions in this class including:
your programming partner
your Teaching Assistant, via email, in section, or during their office hours
the instructor's lab hours. Do not be afraid to come to me for help
the web page. Almost any handout you need can be had via the web page
the class listserv. Again, set aside your fears and post questions you have to the listserv, read the listserv, and provide answers to other people's questions
tutoring via the ACM and the UT learning center
Be organized. Maintain copies of slides, assignments, your code, old tests, the schedule, the syllabus, the class coding standards, in a binder.
Work extra examples. Do the Section Handout Problems which are available on the schedule. Do these problems and as many others that you can find time for.
Do these things now! The time to do something about your grade is now, during the semester. At the end of the term there is nothing that can done to change your grade, other than the correction of administrative errors.