CSC 120: Programming on Purpose
Syllabus
Instructor: Prof. Chris Fernandes
Email: fernandc@you.know.the.rest
When we meet: MWF 9:15-10:20 and Tues 9:00-10:45
Where we meet: Olin 107
Office Hours: Mon 2-4, Tue 2-4, Wed 1-3
or just drop on by!
Office: Steinmetz 219
Phone: 518-388-6401
Course Webpage: http://nexus.union.edu
Texts are free, online, and mainly for reference:
-
Allen B. Downey,
Think Python: How to Think Like a Computer Scientist, 2nd ed,
Green Tea Press.
|
HTML | PDF|
-
Allen B. Downey and Chris Mayfield,
Think Java: How to Think Like a Computer Scientist, ver 7.1.0,
Green Tea Press.
|
HTML | PDF|
Course Description
An introduction to software design principles aimed at making software more efficient, robust,
readable, maintainable, and reusable. An introduction to object-oriented programming and
design, including classes, objects, methods, and sub-typing.
Yeah, yeah, but what's it really about?
Basically, we're here to take what you learned in your Intro to CS course
and use it correctly. Novice programmers care about working code.
Veteran programmers care about well-written code. Our mantra is: "Just
because it works doesn't mean it's good." We'll learn about code design
principles, and in the process we'll also learn about the object-oriented
way of programming. Finally, you'll learn how to switch from one programming
language to another (Python to Java) so that if you need to learn a new language
on your own in the future, you'll know what to do.
By the end of the course, you should be
more knowledgable in the following:
- principles of good design
- how to make good design decisions to write clear,
well-structured, maintainable software
- the basics of object-oriented programming and design
We will cover the following topics (at minimum):
- iterative development
- refactoring
- helper functions
- top-down design
- information hiding
- magic numbers
- formal testing
- debugging techniques
- code efficiency
- recursive techniques
- OOP basics: classes, constructors, instance variables
Prerequisites
Introduction to Computer Science (CSC 10x or equivalent).
Talk to your instructor immediately if you do not meet this prerequisite.
Software
You'll need some software in order to do the labs and projects.
The software is free and has versions for Windows, Mac, and Linux.
Evaluation
- Exams There is 1 midterm and a final exam.
The midterm will be on Friday, Oct 10th.
Exams are cumulative, open book, and open notes (but nothing else).
No electronic devices of any kind (including calculators) may be
used during the exam, so you'll need to print things out if you
want to access them.
You will be responsible
for all material covered in the readings and in lectures.
- Programming projects Programming
projects will be assigned throughout the term to reinforce
the concepts discussed in class. Projects are due at the
start
of class on the day it is due.
No lates will be accepted.
You only need to turn in an electronic copy (on
Nexus) but it
must include a single pdf file with all of
your code. I'll show you how to easily make the pdf version
during the first week. Your assignment is not
turned in unless it includes the .py files and the pdf file.
- Labs We will have a small
programming exercise assigned each Tuesday. Read our
Lab Ground Rules page on Nexus for details.
Labs will always be due the next day (Wednesday) at 3:00pm.
Turn in labs the same way as you turn in projects -- a zipped-up
project folder with an included pdf file.
No lates will be accepted.
Remember: in computer science,
we start with simple things and build on them and combine them
into more and more complex ideas. It is important that you don't
fall behind. If you feel
at any point that something is not quite clear to you, it's your job
to email or talk with me so that we can
clarify that issue before we get to
something more complex that builds on it.
Grading
- Programming projects: 50%
- Midterm: 20%
- Final exam: 20%
- Labs: 10%
Note that you must get a C- or better in this course in order to
take any other course that requires CSC 120 as a prerequisite.
Academic Dishonesty
Struggling on your own to figure out what to type next is where a lot of the learning
happens in CS. Give yourself the opportunity to do this -- ALONE. Here are some specific things to avoid
(this is not a complete list):
-
Do not "work on the project together" with friends, especially if the group of you
are each at your own computers and are always in lock step trying to figure out the same
line or section of code at the same time.
-
Do not give your
code to another person or receive code from another person -- EVER.
You might think that it's just helping out a friend, but it's still
academic dishonesty.
-
Do not even look at someone else's code unless it is to
give that other person help. For example, if someone asks you
to look at their code in order to understand an error message, that's fine.
If you are looking because you yourself don't know how to write something and
you need "inspiration", that's NOT fine.
Ok, so what should you do? Here are some tips:
-
Once you've struggled with something on your own and you're still getting nowhere, ask for help!
Visit me, go to the CS helpdesk,
and ask your fellow students! They can't show
you code, but they can sure explain things and write out examples.
-
It's ok to write pseudocode together. Get the logic down in English. Then go off
by yourself and translate it to code.
-
It's ok to read and write code together that is not part of the assignment, especially when it
helps demonstrate the concept of what you're being
asked to do. Go through a class example together or maybe a demo. There's no better
way to understand something than trying to think up examples in order to teach it to someone else.
Try it!
You're going to write and see a lot of code in this class. A good
question is: what sources can you legally take code from for your
projects?
It is ok to reuse code...
- that is part of a demo that I leave on Nexus
- that I give you (or that you write) as part of a lab or past project
- that is in the textbook that we use for this course
It is NOT ok to reuse code...
- that is part of someone else's lab or project
- that is on the Web/Internet. This includes ChatGPT and similar systems.
- that is in other textbooks
Here's the bottom line: except for the above, you have to write all the
code yourself, from scratch.
In all cases, you must explicitly cite any source
(like a web page or a helpdesk person) that you use to help
complete an assignment. Again, this is similar to writing an English
paper;
if you use a quote or material from someone else,
you have to give credit where credit is due. Otherwise you are
inappropriately plagiarizing or borrowing ideas. You do not have
to cite help from me.
We have an honorcode and I'm trusting y'all to follow it.
Read up on it at
http://honorcode.union.edu. All suspected
violations will be reported to the Honor Council chair and Dean
of Studies.
What you need to do
Stay Engaged
Use office hours. Ask questions over email. And, of course, attend class.
You get the most out of your education when you decide to put the most into it.
If you can't be in class for a legitimate reason (interview, illness, etc.)
please email to let me know.
Read the text
There won't be a reading assignment every week since our textbook
is mainly for reference. However, when there is an assigned reading,
you should read it.
There will always be a time for questions about the readings or previous
lectures during class. Take advantage of it.
Check the webpage on Nexus
The reading assignments (and other announcements) will be
posted regularly on the course webpage. You are required
to check it at least once a week. I usually update it over the weekend.
Check your email twice a day
I know: it's old tech, but this school runs on email. I send out
a lot of tips, hints, announcements, error corrections, and
lecture addendums over email. Check it at least twice daily.
Make backups
I always have at least one student each term who loses all of
their work due to a computer glitch or hard drive crash.
Don't let it be you. Make backups
of everything either by saving it on a USB flash drive or
emailing it to yourself.
Practice, practice, practice!
This is first and foremost a programming course so you'll be
putting in a lot of time writing, testing, and rewriting code. There's
no other way of getting better at it than by putting in the effort.
Accommodations
Union College facilitates the implementation of reasonable accommodations, including
resources and services, for students with disabilities, chronic medical conditions and temporary
disabilities resulting in difficulties accessing learning opportunities. All students needing services must
first register with Accommodative Services located in Reamer 222. It is strongly recommended that
accommodations be requested within the first two weeks of the term. Last minute requests can be denied.
Any student with a documented learning disorder is welcome to
come talk to me privately about options for completion of exams and
homework assignments.
The Bottom Line
Ask questions and seek help. This is the most important
point of all. I live to answer questions. Don't be afraid to
come to my office every single day if you want. It's better
for everybody (you AND me) if you understand
things sooner rather than later. More often than not, there's
a line of people waiting to see me on the day before a project
is due. You'll get the help you need faster by starting on projects
sooner rather than waiting until the last minute.