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 Hall 210
Instructor: William E. Skeith (WES)
Office: NAC 8/201 Email: weskeith@gmail.com

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. We will also cover pointers and recursion, a few elementary data structures, and basic use of the C++ standard template library.

Incidentally, we will also cover some standard tools for programming and basic concepts regarding the operation of a computer.

Prerequisites

Precalculus.

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!
  3. Give the class enough time. This means doing the reading,1 but most importantly, it means spending your time working on the practice problems and projects.

More advice; an analogy

This might seem obvious, but I think it is worth saying nonetheless: the exercises and projects I will give you 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.2

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, but we’re exercising your brain instead.3 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.

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

Corollary: no memorization!

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.

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. NOTE: 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, and if I say something that doesn’t make sense, please ask!

Recitation

Given how essential I feel the practice problems are to your success, I would like to use a large part of the recitation meetings as a time where you can just work on them independently. Your TA will be there to give individual guidance should you need it. Ideally, you just find this stuff interesting and practice on your own, no matter what, but you will be further incentivized by the grading scheme, which gives substantial weight to the practice problems.

NOTE OF CRUCIAL IMPORTANCE: it is NOT important (grade-wise) that your work on these practice problems is correct! You only need to convince the TA that you have been working sincerely on solving them. In fact, if you have correct answers to them which you cannot explain, you might not get credit at all. As such, it will be important to document your attempts, one way or another (could be in the form of non-working programs and/or notes of your thought process, what you tried, what you expected to happen, what actually happened, etc.).

Grading will be conducted by the TA. It will be something like a brief interview, roughly once every 2-3 weeks. The TA will just ask you to show some of your work (solutions or notes and attempts) and have you talk though it a bit. If you just spend some hours each week thinking about them, you ought to receive full credit every time.

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 Thursday, March 20th
The final exam will be TBD, but 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:

Practice Problems-20%, Projects-15%, Midterm-25%, Final-40%
or
Practice Problems-30%, Projects-20%, Final-50%.

Computing Facilities

If possible, you are strongly recommended to use the virtual machine setup. However, on newer mac computers (M1/M2/…anything non-x86_64), the virtual machine is awkward to get working. I will provide instructions for how to get a usable programming environment in this case (see piazza).

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

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. The outline gives you some suggestions for how to prioritize the time you spend reading.↩︎

  2. Search engine-fu is a useful skill, but it’s not the one we are trying to develop in this class.↩︎

  3. Interestingly, weightlifting does produce measurable adaptations in your nervous system. If curious, see for example this article.↩︎

  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).↩︎