What Is 173?
173 and the CS Curriculum
CSC 173 is no longer in the pre-major sequence for the BS in Computer
Science degree. And there are no pre-major requirements for
the BA in CS, so a fortiori it isn't necessary for the BA
either. See
BS, BA, and Minor
Curricula Descriptions for full details.
CSC 173 is a core course for CS BS majors, and should be taken as
needed for either curiosity or to fulfill prerequisites for other CS
courses.
173 and the Classical Curriculum
In terms of the "classical" system
of education, or
trivium
,
it's mostly concerned with grammar and logic , with
a whiff of rhetoric.
The link above relates the trivium to childhood development
and early education, but it's a general concept. For 173, maybe we
can say:
- Grammar means learning the notation and rules of a formal system,
either abstract, like
lambda calculus, or more concrete, like a programming language.
- Logic means effectively using the formal system, typically to
produce
correct proofs
or working programs.
- Rhetoric means using the formal system in conjunction with other
things you know to draw broader scientific conclusions, make
critical arguments, syntheses, and in general new "intellectual
product". In 173, I'm thinking of the open-ended parts of programming exercises.
I see all my computer science courses as part of a
liberal education , in the sense
that it is the education a free person (as opposed to a slave) needs
to get the most out of life.
Here's the Op-Ed page of the
Wall Street Journal on the long-term economic and
quality-of-life
benefits of a liberal education.
Prerequisites
Prerequisites for enjoying 173 are curiosity, appreciation for
learning diverse
elegant things, and the lust for hard work.
Enjoyment may not be the word that comes to mind for you:
true, 173 is aimed at future needs rather
than current gratification. There are immediate benefits too:
you'll become competent, independent, invulnerable, and hence
fearless. Maybe not a bad investment of sweat equity.
There are three technical prerequisites for CSC 173:
- knowledge of at least one imperative programming language,
like Python, Java, C, or C++
- understanding of fundamental data structures (lists, stacks, queues,
trees, hash tables, "Big-Oh" complexity notions, ...).
- programming maturity (formalizing problems algorithmically, building programs
of moderate complexity).
All of these prerequisites would be met by taking, for example,
CSC 162 or 172: Data Structures or an equivalent course
somewhere else.
If you are unsure of your background, just look more deeply at
the course details and expectations,
and decide whether it's for you.
173 Content and Goals
Our goal is to get acquainted with several formal systems that have
been influential in computer science, and to investigate some of their
applications
(e.g. inspiring and providing the foundation for
a computer programming style, or providing
the basis for solving important practical problems like communications
protocols, compiling, system analysis, graphics ...)
In more detail, we shall study:
- Formal Languages and Automata Theory.
- Applications of FLAT: scanners and parsers. The C Language.
- Propositional and Predicate Logic.
- Applications of Logic: Prolog and Circuit Design.
- Lambda Calculus
- Applications of the Lambda Calculus: Scheme
- Matrices and Applications: Matlab, Linear Algebra, ODE Solution, Graphics.
"Textbook" and Readings
There is no single text: we shall use reserve materials from the
former
text for CSC173 as well as current texts for other CS courses and
other
materials, plus lots on on-line resources. The subject matter of this
course is well-understood and there are many resources...finding them
and using them wisely will mostly be the student's responsibility,
though we indicate required, suggested, and extra readings.
Check out the
"How To" page and the
Extra and Alternative Readings.
Syllabus, Grading, Exercises and Projects
Back to the course home page
Last Change: 6/27/11