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 and Tue 11:30-12:30, Wed and Fri 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
In class, you are required to use our lab computers.
However, when working on your projects outside of class, you have a choice.
If you'd like to continue using our labs, feel free! We have four
spaces that you can use:
- Olin 107, where we have class
- ISEC 070
- ISEC 051 (Pasta lab)
- Steinmetz 209A (CS Resource room, just down the hall from my office)
All of these labs are available to you 24/7 using your ID card, except when classes
are being held in them. If you'd rather work on your own computer outside of class, that's
ok too, but you'll need to install some software:
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 16th.
Exams are cumulative, closed book, and limited notes. You may bring
one single-sided page of notes to the midterm and two single-sided
pages (or one double-sided page) of notes to the final.
If you cannot be at an exam for a good reason (illness, for
example)
then please let me know so we can make other arrangements.
The final will be cumulative.
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.
All projects will be using
Gradescope for testing. This
website will automatically run tests I've set up to make sure your
code is behaving appropriately. Points related to output will be
based in whole or in part on how many tests you pass. Feel free to
submit your code to Gradescope as often as you like before the due date.
Go to Gradescope and
sign up using the code that is in the Projects tab on our Nexus site.
Each project you turn in will be uploaded to
Nexus as a zip (compressed) file.
This file will contain a folder that has all your project code (the .py files)
along with a single pdf file with all of
your code. I'll show you how to easily make the pdf version
in class. 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: 40%
- Midterm: 25%
- Final exam: 25%
- 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.
-
Do not let AI write the code for you. This course is where you learn the fundamentals of
real programming, which means you need to write it, not the machine.
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 friend or CS helpdesk) 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
Show up
You are expected to be present for every class. However, I realize that
sometimes other things come up (interview, illness, etc.) so
just please let me know in advance by phone/email if you're going to
be absent. Unexcused absences are NOT allowed and will
affect your grade. If you miss class, get notes from someone
and do the readings before coming to see me. I'm happy to
explain things, but I won't repeat lectures for you.
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.
Stay focused
Class time will be a "hands-on" computing environment. There will
be lots of time to practice with various demos that I'll provide.
But class time is for class work. Using the computers for other things like
other classes' work, checking social media, reading email, or just web surfing
is not permitted. This policy extends to cell & smart phones too.
Phones should be in silent mode and out of sight (mine and yours).
Class goes by quick. Stay focused.
If you're done with a demo, don't allow yourself to get bored. Extend the exercise. Or help out your neighbor.
You get the most out of your education when you decide to put the most into it.
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 Student Accessibility Services located in Schaffer Library, room 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.