<?php require_once "fs_inner_context.inc"; ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">

<title><?php echo $HTML_TITLE; ?></title>

</head>

<?php echo html_bgcolor_body($BG_COLOR); ?>

<!-- Standard hierarchical header structure -->

<?php echo $CS_HEADER_HTML; ?>

<?php echo html_linked_text("<em>Courses</em>", $CS_COURSES_ROOT_URL); ?>

<?php echo $HTML_HEADER; ?>

<hr><hr>

<?php echo html_header($HTML_HEADER_LEVEL + 2, "Instructor's Description"); ?>

<p>We develop the same basic understanding and skill in computer
programming as CMSC 15100, working more rapidly. We invest the extra
time in advanced projects and topics. In particular, we investigate
the origins and design principles of the <em>LISP</em> programming
language and the <em>Scheme</em> variant, and the organizational
principles that make advanced software projects feasible.</p>

<?php echo html_header($HTML_HEADER_LEVEL + 2, "Prerequisites and Qualifications"); ?>

<p>You do not need previous programming experience to succeed in CMSC
16100. Instead, you need the ability to pick up new concepts in
programming from sketches (not detailed instructions) in the lectures,
and work out the details to apply these concepts from the terse
descriptions in programming language manuals and from effective
experimentation with software. And you must work out application
details very quickly. Generally intelligent people vary <em>very</em>
widely in the speed with which they can program---by at least a factor
of 10, and probably 100. The course does not deliberately emphasizes
time pressure, but it is impossible to complete the work
satisfactorily unless you work efficiently to identify technical
questions and resolve them through discussion and reading the
manuals.</p>

<p>The catalog lists placement in MATH 16100 (Honors Calculus) as a
prerequisite, and I have not had time to change the listing, but this
is not the right prerequisite. Mathematical <em>fluency</em> (which is
different from broad mathematical <em>knowledge</em>) correlates
fairly well with programming fluency, but there are many strong
mathematicians who cannot program effectively at all. You must
understand mathematical language very precisely, since the data
manipulated by computer programs and the operations performed on those
data are defined as mathematical objects. But the content of a
calculus course is not especially relevant. CMSC 16100 depends
primarily on the mathematical concepts and terms:</p>

<ul>

<li><em>Sets</em>, including the <em>empty set</em>, with the
<em>union</em>, <em>intersection</em>, <em>complement</em>,
<em>symmetric difference</em>, and <em>power set</em> operations, the
<em>equality</em> and <em>subset</em> relations.</li>

<li><em>Functions</em>, their <em>domains</em> and <em>ranges</em>,
with the <em>application</em> and <em>composition</em>
operations.</li>

<li><em>Boolean values</em> (<em>true</em> and <em>false</em> as
mathematical values), with the <em>and</em>, <em>or</em>,
<em>exclusive or</em>, <em>if</em> and <em>not</em> operations.</li>

<li><em>Sequences</em> of other values, including the <em>empty
sequence</em> (not the same thing as the empty set,) with the
<em>first element</em>, <em>tail</em> (result of removing the first
element), and <em>concatenation</em> operations, the
<em>equality</em>, <em>prefix</em>, <em>suffix</em>, and
<em>subsequence</em> relations.</li>

<li><em>Numbers</em>, including <em>real</em>, <em>rational</em>, and
<em>integer</em> numbers and <em>modular integers</em>, with the usual
operations and relations.</li>

</ul>

<p>Some of these concepts are covered in calculus courses, with a wide
variety of careful vs. tangential treatment. A course in set theory,
elementary logic, or discrete mathematics is usually a better
match. You do not need an advanced background in the theory of these
mathematical objects, but you must be able to understand and discuss
their basic arithmetical operations with absolute precision, and you
must be able to combine them freely. For a quick test---make sure you
understand what it means to have a set of sequences of sequences of
letters from the English alphabet. Figure out how a dictionary of
quotations can be understood as such a set of sequences of
sequences. Why not a set of sets of sets, or a sequence of sequences
of sequences? Figure out the difference between the empty set, the set
containing the empty sequence, and the set containing the sequence
containing the empty sequence.</p>


<p>Fluency in writing <em>precise descriptions</em> (not <em>artistic
literature</em>) in your native language also correlates fairly well
with programming fluency. You must also be free of any computerphobia,
and willing to spend a lot of time exploring the behavior of computer
programs.</p>

<p>The best test of your readiness to take CMSC 16100 is to try the
first three assignments. The first will be trivial, but the second and
third will start to have some content. If you find them interesting
and feasible, the course is for you. If not, you will still have time
to transfer into COMSC 15100.</p>

<?php echo html_footer("index", 0, 1); ?>
<!-- hhmts start -->
Last modified: Sun Sep 21 21:54:17 CDT 2003
<!-- hhmts end -->

</body>

</html>
