Held Friday, December 10, 1999
Overview
Today, we conclude the course by continuing our consideration of the
history of computing and revisiting the question of ``what is
computer science?''
Notes
- I was disappointed to see so few of you in class yesterday. I hope
to see everyone here today.
- I expect every one of you to fill out the ``development survey''
distributed on Wednesday. If you don't have a copy, please let me know.
- I've left the notes on the history of computing in
yesterday's outline.
Contents
Summary
- Due today:
- Code for project (emailed)
- Group report (emailed and printed)
- Individual reports (emailed and printed)
- History of computing, continued
- An overview of CS
- Final wrapup
See yesterday's outline.
- At the beginning of the semester, I asked ``What is computer
science?''
- As we end the semester, I'd like to return to
that question, first to see what you remember (or have decided),
and second to give you additional perspectives.
- As a newer field, computer science takes many of its intellectual
underpinings from other fields.
- Traditionally, we think of computer science as having three
foundational fields:
- Engineering provides a foundation for the development of
``things'' (software, hardware, algorithms)
- Mathematics provides a foundation for formal analysis of those
``things''
- Science provides a foundation for the experimental analysis
of those ``things'' (sometimes to prepare for formal analysis,
sometimes in place of formal analysis)
- More recently, we've found that computer science also needs to draw
upon other fields, particularly the social sciences and psychology
- These fields typically provide a foundation for the consideration
of the interactions between computers and people
- Like many modern fields, computer science has segmented into a number
of subfields. There is some overlap between many of these subfields,
but there are also some clear divisions.
- Some of the divisions relate to the foundational divisions
- Some of the ones that come to mind are ...
- Computer organization and architecture -- the design,
analysis, and implementation of the
primary electronic components of computers. (Engineering)
- Programming languages -- the design, analysis, and
implementation of the languages we use to express computation.
(Engineering)
- Algorithms -- the formal design and analysis of procedures
for solving problems. (Mathematics)
- Computability theory -- the study of what can and cannot
be computed. (Yes, Virginia, their are problems which no computer
program can solve, even given a huge amount of time on an
unimaginably fast computer.) (Mathematics)
- Human-computer interaction -- the study of how computers can
be made easier to use and how computers affect human task-completion
activities. (Social Sciences)
- Information retrieval -- mechanisms for organizing data for
quick access; models and systems for access to data. (Everything)
- Operating systems -- how to provide a robust and reliable
computing system upon which other applications rely. Concerns itself
with processes (programs as they execute), memory, file systems, and
such. (Everything)
- Networking -- how computers can communicate with each other
reliably and quickly. (Primarily engineering)
- Parallel and distributed computing -- the use and coordination
of multiple computers (and computer components) acting together.
(Everything)
- Applications -- the things we can do with computers.
(???)
- Software engineering -- the formal discipline of writing
computer programs. (Engineering)
- Artificial intelligence -- the attempt to simulate human
thought processes on computers. (Cognitive science; Everything)
- Social issues -- the effects of computers on humans and society.
(Social sciences)
- Multimedia -- the electronic integration of text, audio, video,
graphics, animations, .... Often, the study of multimedia involves
studying another subfield in the context of multimedia. For example,
successful use of multimedia requires different networking starategies
then we've traditionally employed. (Everything)
- Computer Science Education -- (surprising isn't it? but many
computer scientists are arguing that this should be considered a subfield)
- ...
- We offer courses in many of these areas, and I encourage you to consider
them.
We've covered many topics in these fourteen weeks (and talked about them
on Wednesday). I thought it would be helpful to revisit them in print,
if not in class.
- We've covered a lot, and I commend you on your work.
- Exceptions and exception handling
- Pre- and postconditions
- Separation of interface and implementation
- Testing
- Documentation
- What is Object-oriented programming?
- How does it relate to procedural and functional programming?
- Inheritance; superclasses; subclasses
- Interfaces
- Polymorphism
- Exceptions (not really OOP, but close)
- Syntax
- Language basics: variables, references, primitive types,
control structures, objects, constructors, methods
- Classes vs. Objects
- Applets
- The AWT and GUIs
- Recursion
- Algorithm analysis
- Big-O notation
- Algorithm measurement
- Tail recursion
- Algorithm design techniques
- Divide and conquer
- Dynamic programming
- Greedy algorithms
- Sorting Algorithms
- Insertion sort
- Merge sort
- Quick sort
- Heap sort
- Bubble sort
- Graph algorithms (and their use in modeling)
- Shortest path
- Traveling salescritter
- Reachability
- Lists
- Simple vs. ordered
- Linked lists
- Doubly linked lists
- Implementation with arrays
- Linear structures
- Stacks
- Queues
- Priority queues (and their implementation in heaps)
- Trees
- Dictionaries (implemented as hash tables and assocation lists)
- Graphs
- Graphics in Java
- Automated puzzle solving
- A little theory (halting problem, TSP)
- My mother taught Psychology at Boston University for over thirty
years. (``Aha, maybe that explains SamR's warped personality''.)
She ended every class with a similar statement. I try to do the same,
although the statement is filtered through my sensibilities.
Most of us will take or teach other classes. However, this one is
unique; none will ever be quite like this it for a number of reasons.
The people in the class made it what it was. We should acknoledge
each other's contributions and commit ourselves to making similar
contributions in future classes. In paritcular, I thank all of you for your
contributions.
- Mom also makes a statement on the order of
While I enjoyed having you in my class, I'm also happy to have you
move on to other things. Like any parent or mentor, I've enjoyed seeing
you grow, but also want you to test your own wings.
- Mom also tells a story of an elementary school teacher she had worked
with who was leaving her job. Mom stopped by to give the teacher a
goodbye present. The teacher cried. Mom said ``I expect that you've
been crying all day as you said goodbye to your students'' The teacher
said ``No, I forgot to say goodbye''. Since then mom has always made it
a point to say goodbye to her classes. I encourage you to say goodbye
to your friends and colleagues who you may not see again.