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