Contact
① We are using Piazza for our course Q & A and discussions. This is the place to go for all questions that are course related (but not personal in nature).
② My email address is mjadud at allegheny.edu. This is a good way to reach me with more personal questions. (But not really personal questions.)
③ You can call me from your web browser. Really.
I have already set this up so that if it is "too late" to call me, you'll be routed to voice mail. This way, you never have to worry about waking me up. And, because the voice mail is routed to my email, it is possible I'll be up and get your message anyway. Ah, technology.
Sakai
Our Sakai site is now active. This is where you can drop files for submission.
Office Hours
You can book office hours online through this Google form.
Basics
We meet Tuesdays from 13:30 until 16:20. That is a 3 hour block of time.
We meet Thursdays from 13:30 through 14:45. That is a 75 minute block of time.
We will discuss office hours and TA availability. We will attempt to add an additional required 3-hour block to this course.
Attendance
➙ One unexcused Tuesday will drop your grade by a full letter. Missing two will result in failure of this course.
➙ Missing two Thursdays will drop your grade by a full letter. Missing three will result in failure of this course.
Exceptions will be nearly as rare as the equatorial midnight sun. If you are ill, you had best ① have cleared an absence with me, in person (from a distance), or ② have a release from the Health Center. (Image CC pellaea.)
Learning Outcomes
The learning outcomes for this course were discussed on Thursday, September 1st in a Google Docs presentation.
The course has four learning outcomes:
1. Master tree-based recursion in Scheme
2. Master analyzing programming language design issues related to data types, expressions and control structures.
3. Be familiar with implementation techniques for single-pass, recursive interpreters.
4. Explore tactile computing through the creative application of new/novel programming language technologies.
Texts
We will be using a variety of resources this semester.
How to Design Programs
We'll be starting with an introduction to Scheme, using the text How to Design Programs. It is freely available on the WWW, or you can order a physical copy. We'll be using DrRacket for our programming environment through this section of the course (although, you may find that WeScheme works for quick explorations as well).
Interpreters in Scheme
The second half of the course will follow parts of the text Programming Languages: Application and Interpretation by Shriram Krishnamurthi. It is recommended that you make use of the DrRacket programming environment, and install the PLAI language level as described here.
Parallel programming in occam-π
As we move into parallel programming and the Arduino, we'll be using a combination of out-of-print materials that I will provide you with, as well as Plumbing for the Arduino, a wholly amazing book rivaled only by The Hitchhiker's Guide to the Galaxy in greatness. I'm a co-author, so obviously it is amazing.
Evaluation
We will be engaged in active learning throughout the term. By this, I mean that we will be spending large amounts of time during class doing rather than listening. The Flash widget at Iowa State University's Center for Excellence in Teaching and Learning helps explain what I mean. Specifically, when I lecture, you are primarily engaged in remembering factual information. However, when we are implementing and designing programming languages, we are analyzing, evaluating, and creating in the conceptual, procedural, and metacognitive domains. Hence why we will be engaging in fundamentally interactive and discursive modes of learning throughout the term.
Put another way: I can't teach you programming language implementation and design, but I can give you the opportunity to learn it. And, then, I can attempt to determine if you are learning more than facts.
To assess whether you are learning, a variety of exams, quizzes, assignments, and lab reports will be assigned and collected. I do not yet have the breakdown of how points will be distributed throughout the semester. When I have a sense for how this semester "works," this section will be updated.
Collaboration and the Honor Code
Note: Pair programming did not work well in the Spring of 2011. This will be discussed, and possibly discontinued, during the Fall of 2011. This section (like the entire syllabus) is subject to revision pending discussion as a class.
semester we will do some work with others, and other work individually. You are never discouraged from discussing challenges with other classmates. Likewise, I am always available as a resource. As many of you have engaged in pair programming in previous courses, you know that you are responsible for your own learning. If you are found to be cheating (copying code, etc.), the pain will be immense. Failure is, at that point, only one of the options you'll be facing.
When you are programming as a pair, please consider the following:
Each of you are responsible for every line of code submitted. You earn and lose points as a team, regardless of whether it is for correctness or quality. Keep in mind, this also applies to academic integrity---if your teammate is found to be violating the honor code, you have violated the honor code.
You must both master the course material. In a code walk, you might be asked questions. If you can't demonstrate competency, it may effect your partner. The point of working in a pair is to give you the opportunity to work closely with another computer scientist on interesting problems, and develop a deep understanding of the material covered in this course.
You are discouraged from discussing assignments (in detail) with other pairs. Make an appointment to see me if your pair is stuck.

