Introduction To CPSC 231
Notes for the required material
The main purpose of this section is to get students "up and
running" for this course. Consequently the course instructor should
provide information on all the details required to use the Computer Science
network computers (see "Teaching Tips" below). A
"hands-on" approach that actually allows students to complete useful
tasks (e.g., login in, viewing and printing files, etc) is often a good idea but this can be done in
the tutorials. The second part of this section, Introduction to Computer Science is
meant to provide a brief introduction into the different areas of Computer
Science. Lectures need not cover all the areas listed in the
notes. However it is highly recommended that they do be tailored to match
the areas of research in the department. The final part of this section is
a brief introduction into computers: the hardware behind the machine. Since this is
the first introductory course into Computer Science, it is only appropriate that
students get an idea what are the basic components of a computer as well as what
is going on inside of it.
Optional teaching material
- Unix: If there is sufficient time then the instructor may wish to expand
upon some of the Unix concepts taught by lab instructor. This
can include some of the less common (but still useful) utilities such as 'Grep' or
'Find'
- History of Computing: Again another important area but I due to time
constraints I have listed under the optional rather than the required
section. If the instructor has time to cover this material then I have
some slides that I used from CPSC 203 that may be used: [CPSC
203 history of computers]
- 2020, by Apple Inc. (~1992, distributed with the video set from the Apple
Developer's Conference). It exposes students some futuristic
technologies and can be useful for getting a class discussion going about
things that people have been envisioned but cannot be built yet.
- A
Halloween Pumpkin Phidget with Chester Fitchett, video by Saul
Greenberg. It's a fun video that shows how a student in the
department, Chester Fitchett, took some his research (dealing with
"Phidget's") during a department Halloween party. I
sometimes show this video as a lead-in when I talk about the different areas
of research in Computer Science. (While Computer Science is a lot of
work it can be fun too!) If there is time I may also show some
videos that show some
actual
undergraduate student projects built using Phidgets. Since the
purpose of these demonstrations is to expose new Computer Science students
to some of the neat projects that have actually been built it is important
that actual student projects be shown.
Background / Sources of additional information
Unlike the other sections for these course notes I don't have a
formal list of academic references because I built up much of the
material by teaching first year students over the years. However, I do
have a few sources that the instructor (or the keen student who is reading this) can go to for more
information:
- Computer Science Illuminated by Dale N. and Lewis J. (Jones and Bartlett
Computer Science). This book provides an excellent summarized
"bird's-eye" view of some of the topics that many undergraduate
Computer Science programs will cover.
- The research link for
the University of Calgary's Computer Science department. From here I
was able to follow the links to the different research labs in the
department to get a quick idea of the latest hot research that was going on.
- Some of the other resources that I drew as background for the different
research areas in Computer Science include:
- The course notes for CPSC 481(Human-Computer Interaction I): http://pages.cpsc.ucalgary.ca/~tamj/481/
- The course notes for CPSC 203 (Introduction to Computers - the non-majors
introductory course - an alternative way of presenting the introductory
concepts (http://pages.cpsc.ucalgary.ca/~tamj/2002/203)
- The web site for Isys Information Architects Inc
(http://www.iarchitect.com)
, which contains volumes of information on robust and usable computer
systems as well as many examples of good (in the HCI hall of fame http://www.iarchitect.com/mfame.htm)
and
bad designs (in the H.C.I. hall of shame
http://www.iarchitect.com/mshame.htm)
- Interactive Computer Graphics: A top-down approach with OpenGL by Angel E.
(Addison-Wesley). The Introductory chapters provides a good overview
of the area of Computer Graphics.
- Readings in Information Visualization: Using Vision to Think by Card S.K.,
MacKinlay J.D. and Shneiderman B. (Morgan Kaufmann Publishers).
Not only does this book discuss in-depth some of the interesting research
conducted in the area of Information Visualization, but it also provides many
references that the reader can go to for addition information.
- Artificial Intelligence A Modern Approach by Russell S. and Norvig P.
(Prentice Hall). Although much of this book covers material that goes
far beyond the scope of an introductory Computer Science class the beginning
chapters provide a good starting point for learning about the field of
Artificial Intelligence.
- Practical Computer Vision Using C by Parker J.R. (Wiley Professional
Computing). A good introductory book about Computer Vision.
- Computers in your future by Pfaffenberger B. (Prentice Hall).
Although this book is targeted more towards a non-major's introductory
Computer Science class, this book provides good explanations and
illustrations of the basic parts of a computer).
- How stuff works: www.howstuffworks.com.
A great site not only for simple explanations of not only computer-related
technology but most anything you can think of (from TV's to beer).
- The geekshelter: http://www.geekshelter.com
Another technology-oriented site.
- Tom's hardware: http://www.tomshardware.com Yet another good technology-oriented
site.
- Computing Fundamentals by Norton P. A good computer book that
describes the fundamentals to beginners.
- Computer Confluence: Exploring Tomorrow's Technology by Beekman G.
Another good book for beginners.
Teaching Tips
Note to the course instructor: This section is meant as a guide as to how to
approach each section rather than a definitive cannon for how first year
Computer Science courses should be taught. Thus it can be used both as a
starting point for new instructors and to provide a bit of insight for those
with more experience as to why I
arranged the notes the way that I did.
The introduction sets the stage for the rest of the course. I usually
begin by covering all of the administrative issues associated with the course
which typically include:
- Evaluation methods - how much weighting will be attached to each component
of the course (exams, assignments etc) as well as how to calculate the overall
final grade is calculated.
- Examinations - what type of exams will be held (multiple choice, code
writing, code tracing). For first year courses I usually have multiple
choice midterms and a combination of multiple choice, code traces and
writing of code for the final exam.
- Study tips - since many of the students in the class may be new to post
secondary and Computer Science classes in particular I provide some general
study approaches for this class. Basically it boils down to this,
Computer Science is very much a "hands-on" discipline. While
students will be exposed to many important concepts in lecture it is
difficult to truly understand the concepts without application, which means
that they should be writing code, preferably lots of it. This
may seem obvious and self-evident to the instructor but I have found some
students that thought they could get by the course by only reading the
textbook with only minimal time in front of the computer. Finally I
try to be upfront with students and indicate the high workload of the
typical undergraduate student during their studies here (but also how much
fun it can be too! See the section on Additional teaching materials
below).
- Miscellaneous organization issues - this includes information that second,
third and fourth year students may take for granted but is essential and used
on a daily basis. I make a checklist at the beginning of each term (and
bring it to class) to make sure that I don't miss anything important. A
typical list includes topics such as: where the computer
labs are located, which computers are available for their use, what are the
hours of operation of the lab, how are computer accounts set up and how do
students get new accounts, what printers can they use and where do they pick
up their print outs, where they can go for help with different issues
(course-related, tech-related, online etc), how they can work from home.
After this I then lay out the foundations for the remainder of the term by
briefly discussing what the area of Computer Science is all about and some of
the different areas of research. This is an important task because
it is not only essential that students who have completed their first year have
at least a rough idea of what Computer Science is about but also I have found
that it helps them understand why they have to learn about some of things that
they do during that initial year. Also I find that taking about some of the
nifty research that is conducted at my university gets students excited and
motivated about the area as well as educating them about the important work that
is done here. Finally a brief introduction about how and why things work
the way they do in a computer (hardware and software) is in order for the
introductory section.