How to Succeed in CS 303E

Having taught in UT Computer Science for 20+ years, and in other places before that, I have some insight into how to succeed in a class such as this one. By "succeed" I mean more than getting a passing grade. I mean really learning the material and preparing yourself for CS313E and being able to write Python programs with some competence.

CS303E is a relatively challenging class. But it can also be quite an enjoyable class if you make it so.

Keep Up.

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

This course is about learning to program competently. The material of this course builds over the course of the semester. If you get too far behind you may not catch up.

Because the material is presented asynchronously (meaning that there is no regular class meeting time), some students will procrastinate and put off viewing the videos and starting the assignments. That's a bad idea. A significant percentage of students in this class don't start assignments until they day they are due. And then they are surprised when they miss the deadline. Don't be that student!

But Don't Get Too Far Ahead

You are certainly welcome to read ahead. But understand that the assignments are designed to build your skills methodically in the use of particular aspects of Python programming. Later in the semester you will learn Python features that would have made some of the earlier assignments quite a bit easier. Some of you have previous programming experience and may know about these features. But don't use constructs on assignments that we haven't covered in class yet.

For example, we don't cover Python lists until week 9. If you read ahead or have previous programming experience, you might be tempted to use lists on some of the earlier assignments. Don't do it! In general, only use features for any assignment that we have covered in class before or during the week that the assignment is due. You'll likely lose points if you use programming constructs that we haven't covered. It's not that those constructs aren't perfectly appropriate to use (later), it's just that doing so now may cause you to neglect some construct we want you to learn! If in doubt, ask whether a given construct is OK for a particular assignment.

Tell Us What You're Not Understanding

Sometimes your instructors forget what was hard for us back when we started programming. I may accidentally use some unfamiliar CS concept or jargon not realizing that everyone doesn't know that. If I use a term that you don't know or don't explain something adequately, please let me know, so I can make sure you're following and adjust my language. I really want you to succeed, but you can't if you don't know what I'm talking about. And I won't be able to correct things if I don't know that something's wrong.

No Shortcuts.

In programming, there are good ways to write code and lousy ways. We always get questions like: "Why do I have to break my code into functions? Why can't I just write everything at the top level? It works!" Yes, but it's bad programming practice. Programming is about more than coding some solution to a problem. It's about coding an elegant, understandable, maintainable solution that you can be proud of. We're trying to teach you good programming practice that will help you in every program you write in the future.

That includes commenting your code. Comments don't effect how your program runs and you may think commenting is just a waste of time. Trust me, learning to document (comment) your code is one of the most important parts of learning to be a good programmer. Years from now when you're trying to figure out why one of your programs works the way it does, you'll be glad you included those comments. So please don't ask: Do I have to include comments? Yes, you do! Exception: you don't have to comment your code on quizzes or exams.

Follow directions. Maybe you don't see why having that blank line in your output is important. But part of learning to program is learning to follow a specification precisely. If we say that you need some feature, don't push back; just do it.

As you learn new constructs, go back over your earlier programs and improve your code by using those simpler, more elegant techniques. If you do that, your programming skills will increase quickly.

Programming is not a spectator sport. The only way to learn to program is to program. Find projects of your own that you can program. Do extra exercises from the book. We'll try to offer you some additional practice problems at various points during the semester. Go over the programs in the lectures carefully until you understand them thoroughly, not only how they work but why they're coded that way. If you can find an alternative way to solve the problem, try it out.

Read/Work Carefully.

Many points are lost on homeworks and 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 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. Schedule your time accordingly. On every assignment, we 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 by 5 minutes, it's because you didn't start early enough. If it's late, it's late.

Often someone will post on Piazza a message like: "I know my program is correct; the interpreter/operating system/world must be defective." Check it again; your program is almost certainly wrong, even if you don't see why it is.

Don't Do Dumb Stuff.

Students often tend to lose points just because they're careless. For example:
  1. You might get the assignment done in plenty of time, but forget to turn it in.
  2. Get the assignment done, but turn in the wrong file.
  3. Not check your messages from Piazza or Canvas or the class webpage, and not realize that there's an assignment or exam approaching.
  4. Ignore messages from the instructor or TAs. Nothing infuriates your instructors more!
All of these happen every semester. As they say in computer security: "You can't patch stupid!"

Keep in Touch.

Because there are so many students in the various sections of this class, we're dividing you up into groups by last name. Your primary point of contact to ask questions about grading or to get help is the TA assigned to you. If you ask Dr. Young why you lost points on some homework assignment, he won't have a clue, because he didn't grade it. Go to your TA first.

Also, if you have some emergency or situation that negatively impacts your performance in the class, let your TA know right away. If personal circumstances makes it such that you need an extension on a deadline, inform your TA right away, but do it in advance. If the deadline has already passed, it's less likely that we'll give you an extension.

We've had students come to us 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." We're going to say: "You didn't have access to a phone or email or a friend who could let us know?" You have to take responsibility for your own success or failure.

If you Need a Certain Grade, Earn It.

At the end of each semester, there are always a few students who say one of the following: The next question is always: "Can you give me some extra work to raise my grade?" We would love to help, but it's illegal and unethical to offer an opportunity to one student not offered to everyone in the class. We may offer extra credit opportunities, but they'll be offered to everyone. We can't give you special treatment. So please don't ask.

On the syllabus is listed an average adequate to receive any specific grade. If you need to receive a certain grade in the class to preserve your standing in your department, in the university, or in your family earn it during the semester. At the end of the semester, it's too late.

We Can't Accommodate Everyone.

No matter when a test, quiz, project deadline is scheduled, there will always be some of the 500+ students in the class for whom that's not a perfect or even possible time. Your excuse may be perfectly reasonable. But we can't reschedule a major exam because you have to work, you have another test that day, or anything else. There likely will be a makeup opportunity, but it's up to you to work with us to make sure that things get done. It's a lot easier for you to change your work schedule than for us to rearrange a test time for which 500 other students have made arrangments.

For assignments, you'll typically have a full week or longer. Schedule your time to get the assignment done by the due date. Your failure to schedule your time does not constitute an emergency.

Quizzes are scheduled periodically throughout the semester. They don't count very much, so don't freak out if you miss one. The best way to think about quizzes is as if they were pop quizzes; if you missed a pop quiz because you didn't come to class that day, you wouldn't expect to be able to make it up. In our current asynchronous arrangement, we'll announce quizzes in advance. But if you can't take it for whatever reason, you typically won't be given the chance to make it up, even if your excuse is a good one.

There's always a highest B.

You're assigned a letter grade at the end of the semester based on a numerical average computed from your work throughout the semester. That's done using the percentages listed in the course syllabus. The numerical average that divides an A from an A-, say, is also listed in the syllabus. We reserve the right to be more generous in setting that boundary, based on the number of students in each range. For example, we may decide that there should be more A's and lower the threshold for obtaining an A from that in the syllabus. We 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 in the class.

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 unfairness to you. So please don't ask us to raise your grade because you were that close to getting 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 or your perceived need for an A won't be a factor.

A Generic Suggestion: Get to Know Your Professors

This one isn't really about this specific class, but classes in general. Get to know your professors, particularly the professors in your major. Many, many times students come to me asking for a recommendation letter, usually when they're getting ready to graduate or applying for grad school. Here's what I tell them: "I am willing to write your letter. But what can I say about you, other than the fact that you did well in my class or whatever I can glean from your resume or transcript? A weak letter may be worse than no letter at all."

During your time at UT, get to know your professors. Many of them will welcome any interest you show in them and their research. Visit during office hours; interact in class. Show them you're interested in what they can teach you. That way, when it's your time to ask for a letter, they'll have something helpful to say. And you may develop a meaningful relationship that will help you for the rest of your academic and professional career, and maybe even an interesting and knowledgeable friend.

DON'T CHEAT.

Whatever else you do, make sure that you understand acceptable standards of behavior on projects, homeworks, tests, etc. and follow them. That means you can't collaborate on tests or assignments with others even if those others are your good friends or relatives. All work must be the student's own effort. It's OK to get advice and help from other students, tutors, friends, relatives, etc. on assignments but don't let anyone write your code for you. On exams or quizzes, you should not be consulting anyone else. It is cheating to do so. Work by students in previous semesters or code that you find online is not your own effort. Don't even think about turning in such work as your own, or even using it as a basis for your work. We have very sophisticated tools to find such cheating and we use them routinely. It's far better to get a zero on an assignment than to cheat. A zero on an assignment may lower your grade in this class; it probably won't endanger your academic career.

Many students begin every assignment by immediately going to Google, trying to find something that might keep them from having to solve the problem for themself. That is an incredibly stupid thing to do. You won't learn the material, which you'll need on exams. But more importantly, you're starting down a slippery slope that's liable to send you over the edge. Suppose you find something up to and including a complete solution to the assignment that some idiot has posted on GitHub; ask yourself if you will have the self-discipline not to use it. You may naively believe that changing variable names and reordering code will keep you from being caught. But with very high likelihood, that's not true. Every semester, students learn this the hard way. It's just not worth it! You're not as good at cheating as you think you are; and we're very good at catching cheating.

Don't post your work in any publicly available place, such as GitHub, Chegg.com, Course Hero, etc. That is a violation of academic integrity and it will be punished as cheating. 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. Also, don't consult sites like Course Hero or Chegg.com; many of them are designed explicitly to facilitate cheating. If you look there, you're already starting down a slippery moral slope. If you choose to look there despite my best advice and find course material online, don't use it. It's almost guaranteed that someone else will find it as well. You'll be turning in identical assignments, and you'll both be caught and punished. You can't say you weren't warned!

If you're caught cheating, you will fail the class and be reported to the Dean of Students' office. I realize that this may: depress you, damage your reputation, piss off your family, endanger your scholarship, ruin your GPA, cause you to be deported, or cause other drastic consequences that will ruin your life. However, I won't take any of those things into consideration as I'm filling out the form to the Dean. You will find over the course of the semester that I am a very empathetic person and will do my best to help you succeed in this class. However, cheating on your part violates my trust and removes any reason for me to give you the benefit of the doubt. It is better, by far, for you to get a low grade on a test or assignment than to be caught cheating. Don't do it!