CSc 150
Data Structures
Syllabus
Course Instructor: Prof. Chris Fernandes
Email: cfernand@union.edu
Office Hours: Mondays 10-11:30 and 1-2:30, Thursdays 10-11
or anytime my door's open!
Office: 229 Steinmetz Hall
Phone: 388-6401
Course Webpage: http://cs.union.edu/csc150
Text (1 required). Available at the Bookstore:
Thomas Standish,
Data Structures in Java. Addison-Wesley, 1998.
Course Summary
CSc 150 is the second introductory 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 if you take more advanced
CS courses too.
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: inheritance, polymorphism, interfaces
- 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). In addition, you need
to have already taken or be currently enrolled in MTH 197: Discrete
Math for Computer Scientists or an equivalent discrete math course.
See your instructor immediately if you do not meet these prerequisites.
Evaluation
- Exams. There is 1 midterm that will be on Wed,
October 15th.
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 assigned throughout
the trimester. 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.
You must turn in both a hard copy (on paper) and an electronic copy (on
BlackBoard) of each assignment.
Your instructor will show you how to use BlackBoard to turn in your
e-copies. 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
computer from home. The CS lab in Olin 102 will be accessible
to you 24/7 (except for scheduled classes) if you'd like to
work from there. Eclipse is already installed there.
That's also where you'll find the CS Help desk (hours TBA).
- Labs. There is a mandatory lab component
for this class on Thursday afternoons.
Lab will meet in the Pasta lab, NWSE 104.
Check out
our lab web page for details and policies.
Grading
- Written homework: 10%
- Programming projects: 30%
- Midterm Exam: 20%
- Final Exam: 20%
- Labs: 20%
Academic Dishonesty
Students often have some confusion about what might or might not be
considered "cheating" in a computer science
class. In general, you should take advantage of your instructors
and fellow students in working out
solutions to assignments. However, I also need to make sure that you are
actually learning, and not simply using all of
these resources as a crutch. As with writing a paper for an English
class,
there is a point at which working together
becomes plagiarism. As a rule of thumb, feel free to discuss
general solutions to problems, but the writing down of an
actual solution must be done solo by you. For example, talking about
how one should use a for loop to solve a particular problem is
fine. Looking at someone else's code and copying what's written there
is not. Two people should never write code together on a computer
or on paper. Similarly, looking at someone's code for "inspiration"
and then changing all of the variable names and comments is still
blatant plagiarism.
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 BlackBoard
- that I give you (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: if you find yourself turning in work
that looks substantially like the work of
someone else, you should seriously examine whether you have crossed
the line. If you have any doubts, talk to me
before turning in the assignment.
In all cases, you must give credit to any source
(like a written work or help from some individual) 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.
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.
All of the readings for the entire term can be found on the course
web page in the Full Schedule section.
Check the webpage
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. The URL
is at the top of this document.
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.
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.
Any student with a documented learning disorder is welcome to
come talk to me privately about options for completion of exams and
homework assignments.
CSc 150 homepage