Held Friday, August 25, 2000
Summary
Today we begin CSC152 by considering the core subject matters of
the course: computer science, data structures, algorithms, and
object-oriented design.
Notes
- Assignments:
- Make sure to complete the introductory
survey for Monday's class (there are always a few students who forget,
and I really hate to embarass them in class).
- It helps me if you fill out the survey sooner rather than later. I'll
be reading about 50 surveys this weekend.
Overview
- Course overview
- Definition of computer science
- Introduction to data structures and algorithms
- Introduction to programming paradigms
- CS152 is primarily a course in Data Structures and
Algorithms. At some institutions, it has that name.
- A data structure is a formalism for organizing and managing
data. Often, the way you organize the information in your program
permits or inhibits particular operations. Different structures
may also lead to different costs (in time or space).
- An algorithm expresses the steps involved in completing
a task.
- CS152 is also a course in imperative and
object-oriented programming.
- Presumably, you've seen a little bit of each in CS151 (or whatever
course you've taken previously). We will certainly talk more about
both paradigms.
- We will be doing our programming in Java. In the
past, I've said that
the language we use is less important than the concepts we learn.
However, I must emphasize that you will not learn the concepts
unless you also learn Java.
- Like most computer science courses, CS152 will have both theoretical
and practical components. I hope you will enjoy relating the two.
- Before we delve too far into these issues, we should ground
ourselves somewhat by asking ourselves a few questions
(and I'll be asking these of the class).
- What is Computer Science?
- What is Computer Programming?
- How are they similar? How are they different?
- What is an algorithm?
- What is a computer program?
- We also want to ask ourselves some practical questions.
- What programming languages do we know?
- What CS or programming concepts are we least comfortable with?
- How comfortable are we with the workstations and Unix?
- Finally, I'd like you to reflect on the course (and you'll be doing
this again on the introductory survey).
- Why are you taking this course?
- What do you expect to get out of this class?
- Please refer to the course web site
for details.
- Teaching philosophy: I support your learning
- Policies
- Attendance: I expect you to attend every class. Let me know
when you'll miss class and why.
- Grading: I'm a hard grader. I don't grade everything.
- Course web
- Etc.
- The exams
- Three take-home exams during the semester. Plan to spend
ten hours on each one.
- An optional final to make up for a bad exam grade.
(Last semester, I didn't give a final and just dropped the lowest
exam. This semester, I'm much more likely to give the final.)
- The lab manual
- Available online (locally only)
- Using the online labs is okay.
- Yes, you must buy a copy.
- I will rarely collect labs. When I do, you can just summarize
your answers on a separate sheet of paper.
- No, I don't receive royalties.
- The book
- Small, but expensive (what do you expect for a CS book?)
- Written for a liberal arts audience
- Projects
- The tradition is to do a large project
- I'll list a few possibilities: Email client, Game, Image
processing package, Four years at a glance, PseudoVax
- Computer Scientists have developed a number of strategies for looking
at algorithm and data design, including
- procedural / imperative
- object-oriented
- functional
- logical
- declarative
- While individual definitions of each category may differ, most
definitions have some similarities.
- In CS151, you studied functional and imperative programming.
- In CS152, you will study object-oriented and imperative programming.
- This semester, we'll talk about data structures and
abstract data types. Many computer scientists treat
them as equivalent terms.
- An abstract data type (ADT) is a collection of values and
operations on those values. ADTs specify the what of data.
- A data structure is a structure designed to organize data.
- When we distinguish the two, we sometimes say that data structures
implement abstract data types.
- Those of you coming from the Scheme-based 151 may already be familiar
with two basic ADTs: the list and the vector.
- Both lists and vectors gather data into a sequence.
- More importantly, they provide facilities for manipulating the
sequence.
- You can extract an element from the sequence.
- You can change an element in the sequence.
- (Sometimes) you can insert or remove an element from the
sequence.
- Vectors and lists differ in the operations they provide and the
costs associated with each operation.
- In designing and building your own ADTs, you will be concerned with
- The specification -- the description of the data structure
and the operations it provides.
- The implementation -- how you actually provide those
operations (and how you store the data to provide those
operations).
- The algorithms used in the implementation.
- The efficiency of your implementation -- how much it costs
to provide those operations.
- The applications of the data structure.
- Note that we want a clear barrier between specification and implementation,
so that a client of one of your data structures need only know
what you do and not how you do it. We often call this separation
encapsulation or information hiding.
- This term, we will be looking at each of these aspects of a number of
the key data structures in CS.
Wednesday, 23 August 2000
- Created as a blank outline.
Thursday, 24 August 2000
- Slight reorganization to page design.
Sunday, 27 August 2000
- Added the section on data structures, covered informally in class,
but not in the outline. That section was taken from
outline 2 of
CS152 2000S.
On to Introduction to Java.