Programmers spend a lot of time understanding and improving
their tools: editors, profilers, debuggers, and so forth.
Technical magazines sometimes call to mind stores that sell
outdoor gear: It's a rough world out there, you need all the
equipment and gadgetry you can get. You, too, may have stared
in admiration and longing at a particularly powerful syntax
highlighter at some point in time.
Often lost in this analysis is a proper understanding of what
tools and technologies can have the greatest impact.
Irrespective of how you choose to write code and where you
might run it, perhaps the single most important technology is
the programming language itself. Languages both enable
solutions and inhibit them; they save time and waste it; and
most importantly, they either expand or contract our
imagination. Yet how much have you thought about this, and
how well do you understand the issues?
Whereas prior courses may have taught you how to
program, this course teaches you how to analyze
programming languages. What are the questions one
asks when confronting a new language? What intellectual tools
do we have for studying languages? What does a language
designer need to know? How can we implement new languages?
You should have much better answers to these questions when
we're done than I expect you have now.
This semester, the course will significantly change the
coverage of the core material on control. This material has
traditionally been presented in a very abstract manner, which
not only hurts bottom-up learners, but also fails to justify
why this actually matters. In fact, the Web is
teeming with all sorts of interesting forms of control. We'll
pick our way through this menagerie to suggest solutions to
practical and tangible problems.
Welcome to cs173. We hope you learn a lot in return for the
hard work you're going to invest.
Your Course Staff