CSC 150
Data Structures
Syllabus
Instructor: Prof. Chris Fernandes, fernandc@union.edu
Lecture portion: MWF 10:30-11:35 in Wold 128
Lab portion: Thursday 1:55-3:40 in NWSE 104
Office Hours: Mon 12-2, Wed 2-5, Th 4-5
or anytime my door's open!
Office: 220 Steinmetz Hall
Phone: 388-6401
Course Webpage: http://nexus.union.edu
Text (1 required). Available at the Bookstore:
Michael Main,
Data Structures and Other Objects Using Java. 4th ed, Pearson, 2012.
Course Summary
CSC 150 is the second core course in the CS major curriculum.
Its purpose is to refine your programming and problem-solving skills to
gain a sense of "programming maturity". You've gained a lot of powerful
tools in your first programming course. Now we focus on using those
tools in a logical, efficient way so as to create modular, reusable
programs instead of cumbersome, haphazard ones.
We'll be using the Java programming language in this course, and
while we'll be learning many of the features of that language, the
concepts and skills taught are more important than the specific
programming language. Most of you used a different language in
your first programming course, so we'll spend some time in the beginning
learning how to transfer your skills from one language to another.
This skill of learning new languages is an important one, since
real-world programmers are asked to do this all the time, and
you'll be asked to do it on your own too if you take more advanced
CS courses.
By the end of the course, you should be
proficient in the following:
- top-down and object-oriented design
- development of modular, well-organized, reusable, understandable
programs
- a variety of debugging and testing techniques
- space/time tradeoffs; other tradeoffs between various approaches to
solving problems and storing data
- analysis of space/time complexity of an algorithm and its comparison
to other algorithms
- a variety of data structures
I hope to at least cover the following topics:
- Object-oriented programming basics: classes and objects
- Advanced Java: interfaces, generics
- Mathematical comparison of algorithms and implementations
- Data abstraction and information hiding
- Stacks, queues, linked lists, and variations
- Trees
- Hashing
Prerequisites
You should have already taken an introductory programming course
in some language (not necessarily Java). If you took that class
here at Union (CSC 10x), you need to have gotten a C- or better
to be eligible to take this course.
See your instructor immediately if you have not taken an introductory
programming course or don't meet the grade prerequisite.
Evaluation
-
Exams. There is 1 midterm that will be on Wed,
May 3rd.
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. On exams, you will be responsible
for all material covered in the readings and in lectures. Exams are
open book and open notes.
- Homework. Written homework will be
occasionally assigned. Homework is due
at the start of class on the day it is due.
No lates will be accepted.
- Programming projects. Several larger programming
projects will be assigned to reinforce the concepts discussed in class.
These projects are where you'll get the best chance to practice
good design principles. Programming projects are due at the
start
of class on the day it is due.
No lates will be accepted.
All projects will be turned in electronically on
Nexus. Each project
must include a single pdf file containing all of the code
you wrote for that project. You do not need to turn in a paper copy
unless the project description specifically asks you to do so.
You are expected to put in a good-faith effort on every
assignment. If you do not attempt a good-faith effort on at least
65% of the programming projects, you will automatically fail the course,
regardless of exam, homework, and lab scores.
You may use whatever Java integrated development environment (IDE)
you wish for doing projects. For labs and class demos, we'll be using an
IDE called Eclipse. It's robust and it's free.
Go to the Software section on our
course web page to download what you need to work on your
own computer. Our CS labs will be accessible
to you 24/7 (except for scheduled classes) if you'd like to
work from there. We have 3 spaces that you can work in:
- Olin 107
- Pasta lab (N104 in the Science & Engineering building)
- CS Resource room (Steinmetz Hall, 209A, down the hall from my office)
Eclipse is already installed in all of our labs.
-
Labs. There is a mandatory lab component
for this class.
Lab will meet in the Pasta lab, NWSE 104. Be sure to read the Lab Ground Rules on our Nexus site.
Grading
- Written homework: 10%
- Programming projects: 30%
- Midterm Exam: 20%
- Final Exam: 20%
- Labs: 20%
Note that you must get a C- or better in this course in order to
take any other course that requires Data Structures 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
plagiarism.
-
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 plagiarism.
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!
Email and visit me, go to the helpdesk, and, yes, ask your fellow students! They can't show
you code, but they can sure write down examples, show you demos, and explain things.
-
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 I hand out in class
- that is part of a demo that I leave on
Nexus
- that you are given (or that you write) as part of a lab
- 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
- that is in other textbooks
Here's the bottom line: except for the above, you have to write all the
code yourself, from scratch.
For everything you turn in, you must explicitly cite any source
(like a web page tutorial 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 don't have
to cite help from me, though.
We have an honor code now and I trust 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
To prepare for class, you are required to do the following:
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
Lectures will primarily follow the major topics covered by the text.
You should do the reading for that week before coming to class so
that questions you have about the material can be answered during
lecture.
There will always be a time for questions about the readings or previous
lectures at the beginning of 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
There's a lot to learn when it comes to program design, so your
job is to stay engaged. If you're using a laptop/tablet to take notes,
that's fine, but
class time is for class work. Using your computer for other things like
other classes' work, checking Facebook, reading email, or catching the latest ESPN
highlight video 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 an in-class exercise, don't allow yourself to get bored.
Extend the exercise. Or help out your neighbor.
Make backups
I always have at least one student each term who loses all of
his/her work due to a computer glitch or hard drive crash.
Don't let it be you. Make backups
of everything by
copying your work onto your orzo account.
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 303. 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.