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 just getting a passing grade. I mean really learning the material, 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. Below is some sage advice that you will do well to follow. This is pretty long, because I keep adding things as I see students make dumb mistakes. Trust me: It's worth your time to read this entirely so you won't make the same mistakes.

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 be able to 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 the day they are due. And then they are surprised when they miss the deadline. Don't be that student!

There will be weeks during the semester where you have an weekly homework due and also an exam or project. That's just the way it is. You know from the first day of class when your tests fall, and you'll have around two weeks for each project. So plan ahead! If you wait until the last day to study or work on a project, it's not really our fault.

A common pattern is that the TAs office hours are really busy on the day any assignment is due. Students often sit in the waiting room for long periods and sometimes can't get in at all. The underlying cause is that folks are scrambling to get the assignment done before the deadline. If you wait until the last day to start, you may find yourself in that situation. Start early!

Another pattern is that I'll receive a message from a student saying: "Can I have an extension on the project due tomorrow, because it's a holiday in my religious tradition." And I'll say with a sigh, "OK. But didn't you realize that anytime over the three weeks since this project was assigned." If there's some obvious conflict, start earlier! Extensions don't really work to your advantage because that just means that you have that much less time before the next deadline.

But Don't Get Too Far Ahead Either.

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. We don't cover try-except exception handling at all. If you read ahead or have previous programming experience, you might be tempted to use lists on some of the earlier assignments, or exception handling at any time. 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 will 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 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 the content 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.

By the way, sometimes the issue will be with language I use in the videos. These videos were recorded recently to replace some I made in Fall 2020 with help from videographers with the College of Natural Sciences. The current set is not very polished, but I thought it more important to update them than to have high production values. If there's language in there you don't understand, ask and I'll explain. Also, I may have added clarification to the slides; check there.

One of the best ways to get help is to post a message on Ed. That way, not only will the TAs see it, other students will as well. Someone is likely to respond quickly. But a message like "My program isn't working; what's wrong?" just doesn't give enough information for anyone to provide help. Tell us precisely how your program is behaving, possibly including a snippet of code that seems to be the problem.

But, on the other hand, don't give away too much in your message. If you're posting large portions of code, make the message private. That way it will only be seen by you and the TAs. It's probably not a good idea to make the message visible only to you and your specific TA or the instructor; include all of the instructors. Any of the TAs may be able to help. If you have some personal matter to discuss, send an email. But don't forget that we can't discuss grades over email unless you explicitly say that you're OK with doing that.

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 horrible 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 affect 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. (I work with an automated reasoning system called ACL2. The source code is hundreds of thousands of lines of code; embedded comments are more than half of that.) 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. But remember: don't use constructs we haven't covered in assignments you're turning in. If you're not sure, ask.

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 frequently offer you some additional practice problems 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.

Think of computing as an experimental science. Python makes it particularly easy to try things out. Rather than ask "what would happen if I did X," just try it.

Read/Work Carefully.

Many points are lost on homeworks and tests because the student answered the question they were expecting, and not the one actually asked. Read the questions carefully. Then, if you don't understand the question, ask for an explanation! (Even during a quiz, if you don't understand the question, ask on Ed; but don't send an email during a quiz because we probably won't see it in time to give you a timely answer.)

Read assignments carefully. The TAs and I get pretty tired of answering questions that are clearly answered in the assignment write-up. After you've read the assignment carefully, if you still don't understand, then ask. Some of the assignments are several pages long. I know! But if your reason for missing points is TL;DR, my response will be RTDA (read the damn assignment).

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 Ed a message like: "I know my program is correct; the interpreter/autograder/operating system/universe must be defective." Check it again; it's almost certainly your program that's wrong, even if you don't see why it is.

Don't Do Dumb Stuff.

Students often tend to lose points (or worse) just because they're careless. For example, all of the following have happened in recent semesters:
  1. You don't read the instructions for the exam or assignment carefully. If the instructions are long, that's because there's a lot to tell you; it's on you if you don't read them.
  2. You get the assignment done in plenty of time, but forget to turn it in.
  3. You get the assignment done, but turn in the wrong file.
  4. You don't check your messages from Ed or Canvas or the class webpage, and don't realize that there's an assignment or exam approaching.
  5. You entirely skip an exam or assignment and don't contact us to explain why.
  6. You stop participating because you plan to drop, but then find out a month later that you can't because you're on academic probation, are an international student, your scholarship/major doesn't allow it, or you'd fall below full time status.
  7. You think you dropped the class but for some reason it didn't take.
  8. You ignore email messages from the instructor or TAs. BTW: Nothing infuriates me more! Yes, I know, students don't do email anymore! Grin and bear it. I'm not going to IM you.
All of these happen every semester. As they say in computer security: "You can't patch dumb!"

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 mean 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/I broke my arm/my computer crashed/I was depressed." Our response may be: "Didn't you have access to a phone or email or a friend who could let us know?" Take responsibility for your own success or failure. We can't fix everything in your life for you.

If Something is Wrong, Complain Promptly.

At the end of the semester, we often hear something like, "If I hadn't gotten half a point off of HW3 I'd have a B instead of a B-. Can't you regrade HW3?" The time to haggle over points on any given assignment or exam is immediately after you get the grade. At the end of the semester, we don't have time to re-grade a bunch of stuff that was probably graded appropriately the first time. If you don't agree with a grade, resolve your differences in a timely manner.

If It Becomes Hopeless

Most semesters, there were 600+ students in the class at the start of the semester and about 475 at the end. The TAs and I are here to help you succeed, and we'll do all that we can. But sometimes a student will discover that, despite their best efforts, they have no passion and/or no aptitude for programming. That's nothing to be ashamed of. It's very likely that I wouldn't be any good at your major. If you find that you're hopelessly behind or totally lost, you have several options:
  1. You can stick it out. Talk to me or to your TA about what you might do or do better to succeed. But don't wait until the end of the semester to do that. Get help sooner rather than later! But don't expect that we'll be able to give you extra credit to pull up your grade; see the following section.
  2. You can drop the class by the drop date. There's no shame in dropping a class; I dropped several classes as an undergrad. Better to drop early than waste the entire semester. There are some limitations if you have a scholarship, are an international student, or dropping would reduce your course load so that you are no longer a full-time student. Investigate those constraints if you're thinking about dropping. Some students have stopped engaging with the material thinking they were going to drop, but later found they couldn't. Whoops!
  3. You can drop late. You have something called the "one time exception" (OTE) that allows you to drop a class after the drop date. As the name suggests, you can only use this once, so it's better to save it. Prefer option 2, if possible. Also, you can only use OTE up to the last class day. If you miss that deadline, you're stuck.
Notice that taking an incomplete in the class generally will not be an option. Incompletes seldom turn out well. In one recent semester, I gave two incompletes; neither student finished the work. Incompletes turn into an F after a year. The next semester, you will have other classes to worry about and finishing this class won't be a priority. Your TA may have left; I'll have new classes to teach. Do the work during the semester it's assigned.

Occasionally students think they've dropped the course, only to get a very unpleasant shock at the end of the semester. If you do drop or withdraw, verify that your drop or withdrawal went through. It's a pain to try to fix things after the fact.

Another option to consider before dropping the course is to change it to pass/fail. The deadline for doing that is usually the same as for dropping the course. It can take a tremendous amount of stress off. You only need a D- to pass and, for a pass/fail course, D- is the same as an A, at least from the perspective of your transcript. However, notice that you can't count a pass/fail course toward the Elements Certificate, so don't do this lightly. Also, some of the same circumstances mentioned above that preclude dropping may prevent you from changing to pass/fail. Check with your advisor.

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 if so they'll be offered to everyone and offered during the semester. We can't give you special treatment. So please don't ask.

On the syllabus is listed a score 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 life earn it during the semester. At the end of the semester, it's too late.

We Can't Accommodate Everyone.

As it says in the "Keep in Touch" section above, we'll try to work with you if you have some special situation. Contact your TA. But there are limits.

No matter when a test, quiz, project deadline is scheduled, there will always be some of the hundreds of 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.

The exam dates are available from the first day of the semester; put them on your calendar and re-arrange your schedule if needed. Don't plan to leave town before the final and expect us to accommodate your plans. Taking exams is part of your responsibility as a student. For assignments, you'll always have a full week or longer to complete them. Schedule your time to get the assignment done by the due date. Your failure to schedule your time does not constitute an emergency for us.

Quizzes are typically offered at four different times throughout the day, often at 8am, noon, 4pm and 8pm. If you can't make any of those times, maybe you're just too busy. Students sometimes tell me they're taking 18 hours and working three jobs. You can't really do anything well if you're trying to do everything!

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 won't be given the chance to make it up, even if your excuse is a good one.

During Covid, some students did school remotely, sometimes even from India or China. That put them completely out of synch timewise with Austin. Since this class is asynchronous, theoretically you can take it from anywhere. But it's up to you to accommodate yourself to our schedule; we can't accommodate yours. The one aspect of this class that is not asynchronous is the exams; exams are taken on campus at regularly scheduled times. In general don't expect that you can take exams remotely.

There are some circumstances where you'll just have to let it go. If you're taking a quiz and your computer crashes or the fire alarm goes off or a meteor hits your house, there's just not a lot we can do about it. Your excuse for missing a quiz or not turning in your homework on time may be perfectly valid, but that doesn't mean you'll automatically get an extension or a makeup. Things happen that are outside our control and yours; we just can't fix everything for you.

Don't Be That Kid.

It seems that there are always a few students who always have an excuse why they didn't get the assignment done or couldn't take the test on time. They always seem to get sick or have to go see their ailing grandma or have to go out of town for a debate tournament whenever there's an exam or a project due. If you have a legitimate excuse for an absence, we'll try to find a work-around. But, just because your excuse is legitimate doesn't mean that we will accommodate you at all costs. We're not going to make up a special exam just because you missed the regular exam and the scheduled makeup. We're not going to give you an online exam when everyone else it taking an in-class exam just because you decided you'd take the class from Australia.

You'll know from the first day of the semester when exams fall; arrange your schedule so that you can be there. Don't plan anything that conflicts. If you have another class that conflicts with the midterm exam, talk to that professor about why you need to miss before coming to me. For the final exam, don't schedule your flight home until after the exam. Each exam counts 25% of your grade. Why would you think you can miss it?

For projects, you'll have two weeks or more to do them. If you need an extension, it's almost certainly because you put it off until the last minute. Don't be that student who always needs an extension or has to take a makeup. You're a college student now. Take responsibility for your own success!

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 for exams/assignments listed in the course syllabus. Given your scores, you should be able to estimate your current grade in the class. (Don't trust the running averages that Canvas is showing you; they don't include things we may decide to drop, extra credit, etc.)

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.

No guarantees, but I tend to round up at least a half point. So if the published cutoff for A is 93 and your average is 92.6, you'll probably get an A. But if the cutoff has already been curved to 92, I probably won't round any more. So a 91.6 won't get an A under those conditions.

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 and looking for a job or applying for grad school. Here's what I usually 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 the 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 acquire an interesting and knowledgeable friend.

Using ChatGPT or other Generative AI.

I'm sure you've heard about ChatGPT and the other AI platforms built on large language models. You may have played with them or even used them to help with some of your assignments in previous classes. ChatGPT, in particular, can write simple Python code. You may be tempted to use it to help you with your assignments. Don't do it. It is considered cheating in this class to turn in code that you didn't write. That includes code that someone else wrote for you, code you found on-line, or code that an AI system wrote. If you're caught cheating, you will fail the class and be reported to the Dean of Students' office.

If you do use ChatGPT or other AI to write code for you, it's very likely that you'll be caught. It's hard to get any of these systems to write code that satisfies the requirements of your assignments, e.g., only using constructs that we've covered to that point in the class. It's pretty easy for us to spot code that's just too polished to have been written by a beginning programmer.

Also, if you use an AI to write your code you won't learn how to program, which means that you won't do well on exams. Exams are in-person and count enough of the grade that you can't pass the class without passing the exams. So just do your own work and you'll be fine.

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. Don't look at anyone else's code or show your code to anyone else. On exams or quizzes, you should not be consulting anyone else. It is cheating to do so. Work by students in previous semesters, code that you find online, or code written by an AI 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 won't derail your entire academic career; cheating might.

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 tumbling over the edge. Suppose you find something up to and including a complete solution to the assignment that some idiot has posted on GitHub or Chegg.com; 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; despite what they say, those sites 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!