structure and expectations

This written reflection provides additional context for your studies this semester without taking up class time. If you learn better aurally, I can record it to MP3.

Currently, I'm part of a group helping interview candidates for a position in the Biology department. In talking with the candidate about the role of computing in Biology today, I got to thinking about the role of the languages we teach here in the CS department, and specifically about the role of modern scripting languages as they pertain to your personal computing toolkit.

This further got me thinking about how this semester is structured, and I wondered if you have the same image in your head as I have in mine. Most likely not. So, try this on for size:

creativity-trend

First, there is the large structure of the class: the system scripting, parallel programming, interpretation, and final project portions of the course. Just knowing these blocks does not, however, make clear my expectations for you as learners.

systems scripting

python-coverWhen I started grad school, Perl was all the rage for systems scripting and website work. (Perl had a place in systems work long before that, mind you—it's where it started.) By the time I left Indiana, Python was an language that was starting to gain traction for a variety of tasks, from systems work to web-based apps. By the time I had finished my PhD, large frameworks for developing web-based applications had come into existence (Django and the Google App Engine, to name just two). If you're interested in the history of Python, you can read more on the wiki page.

In ten years, Python went from being an little-used internal project to a very popular scripting language, used to power massive applications we use every day.  This forces me to ask the question: what language will be next? Perl 6? Lua? Scheme? (I can hope.) Really, I don't know. And neither do you.

For this reason, I want this first module to be less structured and more creative. I expect you to invest time in working with this language and learning it the same way you will learn the Next Popular Scripting Language of All Greatness. Specifically, you're going to learn it on-the-fly using resources you find online. You're going to apply what you know from your background with other languages to try and figure out how this new beast works. We will start this semester with low structure and high creativity.

parallel programming

20100122-concurrency-ccIn the second part of the course, we're transitioning into building our Freeduinos and programming in them in occam-π. The purpose of this portion of the course is to explore a sequence of parallel programming patterns in the language by implementing them in occam. 

It's a win to do this in an embedded system for a variety of reasons. Embedded systems traditionally need to interact with the world in real-time (or nearly so). For this reason, concurrency and parallelism play a critical role in embedded software development. Because the Freeduino is cheap and small, you can later use it in an awesome robotics/music/art/sensing project of your own design. And, of course, you can take it home and show your parents.

This section starts very structured, and becomes less so over the course of several weeks. This is because you will start with exercises that guide you through learning the basics of the language and a series of patterns common to parallel architectures in software. We start structured and uncreative. By the end of this section, though, I'll ask you to explore a bit: you'll have a little bit of knowledge, making you incredibly dangerous. So, I'll ask you to try something new, and see what you're capable of. We will strive to be more creative and less structured during our last week spent on parallel languages.

interpretation

plt-206-3For me, learning about the structure and semantics of languages through writing interpreters was transformational in my computing career. It profoundly shaped how I think about the design of software and systems.  And, it empowered me to study and understand new programming languages for the rest of my life. 

Hence, you will suffer as I did.

In truth, when I first saw Scheme, I thought it was ridiculous. I railed against it. I thought it was a pedagogic waste of time. Then, I someone taught me how to actually design software, and they did so in a systematic manner using Scheme as the vehicle. I went on to see how to implement interpreters that supported a wide variety of language features, and as a result of these and other experiences, I remain convinced that Scheme is one of the best languages for 1. introducing students to the craft of programming and 2. writing interpreters and compilers.

This section is structured throughout, as there are a series of concepts I want you to systematically explore. It is particularly uncreative at the start because you will be learning Scheme—this is not a creative task. From there, we'll move on to writing interpreters and discussing features of programming languages, but nothing terribly creative. Mind you, I'm not saying this won't be interesting, I'm just saying that we're not going to be experimenting much during this phase.

final project

Your final project is not going to be a massive thing. I expect students to undertake projects that can be completed, successfully, in the time allowed. So, you'll have roughly two weeks of work time at the end of the semester to do something interesting that builds on one of the previous portions of the course. Perhaps you'll push your Python further. Or, maybe you want to do something nifty with your Freeduino. Or perhaps you'd like to see what makes object-oriented languages tick by adding classes and objects to our interpreter. It might even be that you'd like to dive into something involving another language entirely. 

Regardless, we'll close the semester by being very creative and unstructured. Well, your project will have structure, but the point is that you're going to be asked to do something interesting. I expect it will be fun.

expectations

All along the way, I expect you to adopt an attitude of learning. This doesn't mean I want you to memorize everything that comes at you so you can repeat it back verbatim. It means I want you to engage this material with a desire to learn and try new things, with the goal being to gain a deep understanding of the material that we cover. It's challenging, but it's the only way (in my opinion) to approach any new subject of study.


Creative Commons License This work is licensed under a CC BY-SA 3.0 License.