How to Succeed in CS 303E

Adapted from Professor Bill Young's Advice


Having taught introductory programming at UT Computer Science for 20+ years, and in other places before that, I believe 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, especially in the second half. We cover material quickly and the material builds on itself. This is compounded by the accelerated pace of a summer course.  If you don't master the material at the beginning it is very difficult to get caught up and understand the later material. The course teaches the skill of programming which requires large amounts of creativity and persistence. But it can also be quite an enjoyable class if you make it so. 

DON'T CHEAT.

Whatever else you do, make sure that you understand acceptable standards of behavior on assignments and exams 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, you shall not consult anyone else or any outside resources. 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 or a LLM such as chatGPT, 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. Ask, yourself, what kind of person do you want to be in life? Do you want to be a cheater or be someone with integrity? 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 is just not worth it! You're not as good at cheating as you think you are; and we are very good at catching cheating.

 

Don't post your work in any publicly available place, such as GitHub, Chegg.com, CourseHero, 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 CourseHero 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 be assigned an academic penalty of a zero on the assignment, at least one letter grade lower in the class, and the incident be reported to the Dean of Students' office. I realize that this may depress you, damage your reputation, disappoint 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. I stopped feeling sorry for cheaters before most of you were born.

 

You will find over the course of the semester that I 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!

Keep Up.

Even though this is a course for non Computer Science majors, it can be quite challenging.

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 will very likely not catch back up.

The course is taught assuming no prior programming experience. However, here will be some students in this course with prior programming background and they will likely have an easier time of it compared to a student with no prior experience. Realize, you have no control over other people's past experiences. Do not bemoan the fact that others have it easier due to prior experience. That cannot be changed. Instead, if you want to succeed, then you need to put in the time and effort to do so. You DO have control, almost complete control, over what you do now in the course to succeed.


No Shortcuts.

In programming, there are good ways to write code and lousy ways. We consistently get questions such as: "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 competently means 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.

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 as suggested on the schedule. 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 programming assignments and exams 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! Use the class discussion group!

Read assignments carefully. If you ask a question that is answered in the assignment write-up, the TAs and I will gently point you to the assignment handout itself. 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?" The course is compressed in the summer, really 8 weeks of time, so there are typically two assignments due each week. Again, the assignment build on each other. If you skip one and don't masters the skills necessary to complete that assignment, you will be hard pressed in completing the following assignments.

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. Add print statements to display the contents of the variables being used in your solution.


Don't Do Dumb Stuff.

Students often tend to lose points just because they're careless. For example:

You might get the assignment done in plenty of time, but forget to turn it in.

Get the assignment done, but turn in the wrong file.

Not check your messages from Piazza or Canvas or the class webpage, and not realize that there's an assignment or exam approaching.

Ignore messages (Piazza posts, Canvas messages) from the instructor or TAs.

All of these happen every semester. You are a responsible adult, or at least you should be if you are attending UT Austin, and I expect you to act as such.


Keep in Touch.

Because there are so many students in 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 Mike why you lost points on some homework assignment, I won't have a clue, because I didn't grade it. Go to your TA first.


If you Need a Certain Grade, Earn It.

At the end of each semester, there are always a few students (a handful, a tiny fraction of the number of actual students, but these handful of students make a big impression on instructors) who say one of the following:

The next question is always: "Can you give me some extra work to raise my grade?" It is illegal and unethical to offer an opportunity to one student not offered to everyone in the class. (Where do students learn this behavior? Really? Not a hypothetical question. If you have insight to this please talk to Mike.) We offer two extra credit opportunities (complete the background survey on Canvas and complete the course-instructor survey), but they are offered to everyone. We can't and won't give anyone special treatment. So please don't ask. 

We Can't Accommodate Everyone.

No matter when a assignment or exam deadline is scheduled, there will always be some of the 75+ 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 an 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 75+  other students have made arrangements.

For assignments, you'll typically have half a week, sometimes a week on later, more challenging assignments. Schedule your time to get the assignment done by the due date. Your failure to schedule your time does not constitute an emergency. And yes, the assignments start out relatively easy with explicit, connect the dots type instructions, but they will become more challenging, in just a few weeks,

 

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 points needed for grades are clearly detailed on the syllabus.

But there will always be some student with the lowest assigned an A- and some other student with the highest assigned an B+. If you are the second of those, this does not qualify as an 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 point threshold. If you earn the required points you will get an A-0 in the course.  If not, your strong desire or your perceived need for an A- (or some other letter grade) 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.