CSc 103: Course Info

Text (optional): The Practice of Programming, by Kernighan and Pike.
Course Homepage: https://www-cs.ccny.cuny.edu/~wes/CSC103/
Time and Place: T,R 11:00-11:50AM Baskerville 210
Instructor: William E. Skeith (WES)
Office: Shepard 279

Overview/Summary

You will learn the basics of procedural computer programming (primarily in C++). This includes an understanding of datatypes and variables, branching and looping constructs, pointers and recursion. Additionally, we will introduce some standard tools for programming, and cover the basic operation of a computer. Lastly, we introduce elementary data structures and the C++ standard template library.

Prerequisites

Precalculus.

Lectures

You are strongly encouraged to attend lectures. Come to class prepared (do all the reading ahead of time) and please ask questions. Get the most out of those tuition dollars. More advice: I will generally give you a copy of all the things I write or type during lectures, so you probably don’t need to take notes. Spend all your energy listening and thinking. If I say something that doesn’t make sense, please ask!

Recitation

There is no attendance policy for recitation either, but most recitations will feature a quiz, and it will be hard to score well if you don’t show up to take them. Also, recitation will be used for group projects, so failing to attend will also be a disservice to your teammates.

What I Expect; How to Succeed (Important!)

I am committed to your success, and I will be generous with my time and energy. All I ask in return is that you:

  1. Be curious. If you have no desire to figure things out, you almost surely won’t, and this class will be a waste of time for both of us.
  2. Be focused and thoughtful during class. No phones! You can daydream, but it had better be about programming.1
  3. Give the class enough time. This means doing the reading,2 but most importantly, it means attempting all the TODO exercises from the lectures,3 and completing the projects.

More advice; an analogy

This might seem obvious, but I think it is worth saying nonetheless: the exercises and projects only have real benefit if you struggle through doing them yourself, with as little help as possible. In particular, try to resist the perhaps instinctive impulse to look up how to do things online. (I’m not denying that search engine-fu is a useful skill, but it’s not the skill we are trying to develop in this class.)

Think of it like strength training. There is an adaptation mechanism behind it: you subject your body to stress (lifting heavy weights), and it naturally adapts by getting stronger. Learning to program is much the same. You have to do the lifting in order to get stronger, and this means trying to solve these problems with as little help from anyone else as possible. When someone gives you the answer too soon (or you look it up online), you will be robbed of the opportunity to suffer, adapt, and grow stronger.

Of course that’s not to say that you should never ask for help, but you should only ask after you have been struggling for a while (after you’ve done some isometric exercise, haha).

The finger is only to point to the moon…

It should go without saying that you should NEVER memorize solutions. If you ever find yourself memorizing a sizable chunk of code, you are almost certainly doing something wrong. Don’t reduce yourself to a hard drive. You’re better than that!

How to Get Help

Please direct all questions to piazza (and please read the guidelines first).

Cheating

There will be a zero-tolerance policy regarding cheating. Given the severe consequences of this offense, let me be perfectly clear on its definition. There are of course the classic forms of cheating, which include copying the work of another student, either during an exam, or on the homework, but more generally, cheating includes turning in work that is not your own, regardless of the source, even if the source is well known (e.g., wikipedia). Anything you submit, you had better be very well prepared to explain to me. Trying an assignment and failing is OK! Sometimes the problems are difficult, and I don’t expect everyone to get everything right. What is not OK, is to submit work that is not your own.

Exams

There will be one midterm and a Final exam.
The midterm will (tentatively) be March 21st
The final exam will be TBA (usually from 10:30am – 12:45pm)

There will be no make-up exams.

Grading

The final grade will be based on the best of the following:

HW-10%, Quizzes-10%, MT-35%, Final-45%,
or
HW-10%, Quizzes-15%, Final-75%.

Computing Facilities

You are strongly recommended to use the virtual machine setup, although if you really want to work in your own environment, no one will stop you. A few things to consider:

Note: if you don’t have a computer available at all, the virtual machine is also set up in the Student Computer Labs.

Supplemental References

For a quick, online C++ reference, you may want to try this. For a more in-depth study of C, try this which has answers to many exercises here.

Lecture notes

Here are some excellent notes by one of my former professors, Charles Li. These make a nice complement to the textbook, as they are often much more detailed.

Vim references

If you are planning on trying Vim (highly recommended!) here are a few resources that might help you (there is a bit of a learning curve):

There is also a nice interactive tutor.4

Practice problems

I’ve borrowed some problems from another intro course. It would be good for you try most of them soon, but especially relevant are the following: Numbers 1, 2, 3, 5, 6, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, and 29 – 38, but with “array” replaced by “vector”.

Other Remarks

Your time is valuable; I want you to get as much as possible out of your time in the classroom with me. Please don’t hesitate to let me know how you feel about the pace, or just about how things are going in general.


Back to the 103 homepage


  1. Math-focused daydreams are also acceptable.↩︎

  2. The outline gives you some suggestions for how to prioritize the time you spend reading.↩︎

  3. Please read the workflow suggestions I left for you.↩︎

  4. Note: if you use this tutor in firefox, you will want to make sure the “search when I start typing” feature is disabled (see Edit->preferences->advanced->general).↩︎