Course information
Important links
- Miscellaneous resources
- Sample programs
- Office hours
- Using other people's code (general)
- Using other people's code (CS208-specific)
Book
The textbook for this class is Dive Into Systems, a freely available online textbook by Suzanne Matthews, Tia Newhall, and Kevin Webb. I'm trying this textbook for the first time for a few reasons: the previous textbook costs $170 new, and I suspect some of my previous CS208 students never bought it or read it; I'm familiar with the authors, who teach at schools similar to Carleton, and they know what they're doing; and the chapters I have read are good, and suitable for what we'll be doing this term.
You may also find this book helpful: The C Programming Language, 2nd edition by Brian Kernighan and Dennis Ritchie. This book, often known as "K & R" after its authors, has been the essential reference and tutorial for C since 1978, and remains one of the cleanest and best introductions to a programming language ever written. I'm not requiring it for the course, since there are many C resources online and I like to keep the cost of textbooks down, but still, this is a great book that would be worth your time to read.
Grading
Your grade in the course will be determined by your performance on homework and quizzes (50%) and two exams (25% for an in-class exam during week 4 or 5, 25% for a take-home final).
Homework
- Handing it in. You will submit your homework via Moodle. The specifics of what to hand in will be included with each assignment.
- Due date and time. Each assignment will have a due date specified on the course home page. Unless otherwise specified, the due time will be 11:59PM on the due date. If your assignment is late by a small amount (half an hour or less), I won’t count it as late.
- Extensions. You may use up to two free 48-hour extensions. To use one of your free extensions, just hand in the homework up to 48 hours late—no need to tell me ahead of time. You may only use one extension per assignment without prior permission.
Other late homework. Once you have used your two free extensions, work handed in after the due time but within 24 hours will be docked 50%. After that, you will receive no credit for the assignment.
The goals of this late-homework policy are: to give you a push to do the work in a timely way to support your learning, to provide a framework of fairness, to give you a little bit of breathing room on those occasions when your work gets too heavy, and to enable the graders to do their work reasonably efficiently.
If you have a special circumstance and check with me ahead of time, I may be willing to extend a due date beyond the two automatic extensions. And of course, emergencies of various sorts can also result in extensions. Just talk to me if you need help.
- Takehome exams. Takehome exams (if any) are due by the due date and time, and do not qualify for the free extensions mentioned above. Late submissions will receive no credit except in very unusual circumstances.
Communication
Outside class time, I will communicate with you via the course website and our Slack workspace. I will send you the Slack invitation before the start of the term. You should plan to check the Slack #announcements and #questions channels once per day to make sure you have the most timely information about the course.
Collaboration
Working with your classmates is almost always a great thing. Sharing insights is fun and can enhance everybody's learning.
The main danger of collaborating on course work is in allowing your collaborator to do all the work, and thus all the learning.
For homework assignments (unless otherwise directed), you may do your homework alone or with one classmate. If you work with a partner, you should submit one copy of your work with both names listed in your submission. If you would like me to assign you a partner for any given assignment, let me know via Slack direct message and I'll do my best to connect you with somebody.
For takehome exams, you must work alone, using only the resources I explicitly allow.
If you have any doubts about what constitutes acceptable collaboration, let me know.
Working with a partner? Here's a little advice.
- Show your partner respect. They deserve it, and so do you.
- Communicate early and often (which is part of showing respect). When your partner contacts you, respond promptly even if you can't meet right away. Silence is corrosive to partnerships.
- Be flexible. You're going to have to bend your schedule a little bit to work with somebody else.
Academic integrity and using other people's code
This is a big topic, so I have a generic page specifically about using other people's code in CS classes. Please read it.
With that in mind, here are a few specifics about my expectations when you're programming for CS208.
- Partners. If you're working with a partner, you and your partner are jointly responsible for understanding and standing by the integrity of all the code, data, and documentation in your project.
- Non-partner classmates. Except during exams, feel free to talk with classmates about your work. Talking about approaches to the problem is great for getting the benefits of collaboration while also learning the material yourself. For the most part, I discourage but don't prohibit looking at each other's code in person. But you should not accept code from a classmate, either digitally or on paper, nor should you hand over your own code to somebody else. You need to write your own code, and so do they.
- Lab assistants, friends, and other helpers. Lab assistants usually try to guide you to your own solutions, but sometimes they'll just show you how to do something for efficiency's sake. If they say something like "here, just let me do it", stop them. That's inhibiting your learning instead of helping. (I admit to being guilty of this myself occasionally, so feel free to stop me too.)
Cite your sources to abide by the rules; write your own code to get points. If you submit code copied or adapted from another source and you cite that source clearly enough, then I won't consider you in violation of academic integrity policies. That said, to get points for an assignment, you need to write most of the code yourself.
Some scenarios:
- In the extreme case, suppose you submitted somebody else's solution to a problem without writing any of it yourself. If you fully attributed the code, you would get a zero for the assignment, but you wouldn't be in violation of policies. But if you submitted the same code without attribution, I would give you a zero, report you to the Dean, and argue for substantial additional penalties.
- More typically, suppose you found a relevant chunk of code online, you used it in your homework, and you cited it properly. How would that affect your grade? This is going to be context-dependent and up to my subjective judgment, but the question hinges on how important and how large the borrowed code is. If the assignment is "implement five queue operations" and the borrowed code is three of them, then you would likely lose about 60% of the total points on the assignment. On the other hand, if the borrowed code is three lines showing how to properly declare a struct for a doubly-linked list? Maybe you wouldn't lose any points at all.
The moral of the story: be straight with me about where your code comes from, and do your best to minimize your reliance on external sources so you can maximize your opportunity for learning.
- Learning is the goal, so understand what you borrow. Don't just copy and paste. Figure out what that Stack Overflow code is doing before you build it into your project. Once you understand the code, you can refine it to be just what you need. Otherwise, you're just guessing and hoping.
Rough Schedule
- Weeks 1-2: the C programming language, C pointers, and data representation
- Weeks 3-6: assembly and machine languages, simple reverse engineering
- Week 7-8: buffer overflow, concurrency, including processes and threads in C
- Week 9: networking with sockets in C
- Week 10: catchup and wrap-up