Blog Archive January 2010

apache log file updated

You can now successfully download the Apache log file from the most recent homework page.

I will post a bit about the regexps that we looked at in class later today. Please remind me via mailbomb if I don't get something posted.

google docs

Any materials that I develop for class that are based on Google Docs will be available to you in the shared folder 

http://tinyurl.com/cmpsc220-gdocs

As usual, I'll probably link to it from here so you know about it. For example, like the slides for today's class.

two talks

a talk on game theory

This Wednesday the Econ department has a visitor giving a talk on game theoretic concepts. For those of you who just finished CMPSC 112, you've actually had the beginnings of exposure to this space from our brief exploration of Tic-Tac-Toe: trees and their evaluation for gameplay and decision making. The speaker is the maintainer of the the Gambit project, and I think it could be interesting to a number of you.

I'd appreciate if you could attend this talk. We'll make an exodus from Alden together at about 15:55 on Wednesday and see what our guest has to say. I'm hoping it will be interesting.

a talk on gender and sexuality

Tuesday is the opening of the show In Between in the Penelec-Bowman-Megahan gallery. The show has a very activist take on issues surrounding gender and sexuality. Having read many of the interviews associated with the show, and having met Zanele Muholi, our Diversity Scholar in Residence, I think that you should consider going to the opening at 7PM on Tuesday if you can. 

(I don't like to "require" things like this, but if you would prefer things in more absolute terms: the topical talk that is related to our discipline is required, and I think the gallery opening is just a neat opportunity that you can take part in.)

readings 20100124

Two readings for discussion on Friday:


The questions I want us to consider for Friday (and you might come up with other points for discussion and debate):

  • Why do we have so many programming lnaguages? Isn't one good enough?
  • Do we still need more programming languages? Why might that be the case? Why not?
  • Scratch claims to be for beginning programmers. Do icons really help?
  • Next year, we're replacing Java in our introductory course with Scratch. Is this a good move for the department, or bad? Why or why not?

I may revise these as I reflect on them further. Or, if you have any additional thoughts, go ahead and add them to the comments below.

awk: venerable swiss army knife

We will not be looking at awk this semester. In fact, we will not be looking at most programming languages this semester.

What is awk? From the start of a multipart tutorial on the language:

Awk is a programming language which allows easy manipulation of structured data and the generation of formatted reports. Awk stands for the names of its authors “Aho, Weinberger, and Kernighan”

Handy. (Also note... that's the same Kernighan I mentioned with respect to the C programming language...) Along with sed, it is the one-two punch of command-line text processing.

Now see Yet Another Sudoku Puzzle Solver Using Awk. It's a 67-line sudoku puzzle solver. (They also link to a Python sudoku puzzle generator.) I mention it because that is pretty concise, and awk itself is a useful tool for all kinds of text and data manipulation functions in the *NIX world.

Do I expect you to do anything (right now) with this information? No. However, I do expect, after taking this course, that you'll realize that for every problem you have in computing, there is probably a tool that is well suited to solving it. It's probably just the case that you don't know about that tool...

(Found via Make: Blog.)

about the long post...

The previous post was long. I'll talk about it briefly in class tomorrow.

Just as a heads up, I activated the Sakai site associated with this class. I'll probably use it for submissions, but not for announcements and the like. 

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.


First Post!

I'm setting up the course website, one of my last steps in being ready for the semester.

Administrivia

The course mailing list is pl@rockalypse.org. I manage it. If there are problems with it, let me know.

The "To Do" section of this site is not yet updated, but will be shortly. We'll start with systems scripting in Python, move into parallel programming in occam-π, and then the second half of the semester will be a compressed version of last year's PL course. So, you can use last year's website to get a flavor of what part of this semester will be like. 

Textbooks

You do not need to purchase any textbooks; everything we are using is available under a Creative Commons license. I will arrange for hard copy to be available through the Print Shop if you so desire, but that will be done as a group order in class.

Lab Fee

You will have one $30 lab fee. I am sorry I could not announce that sooner; I didn't know how much components and everything else would cost. We will be building Freeduinos as part of our module on parallel programming.


Ultimately, you'll be watching this playlist in preparation for building your tiny computer. That might help you better understand a bit of what you'll be doing for part of the semester.

Other questions?

If you have other questions, I probably don't have answers. And, the semester starts soon enough. If they're general questions, drop them to the mailing list, so everyone benefits from both the question and answer. If it's personal, drop me a note at mjadud at allegheny dot edu.

Great Awesome

I'm looking forward to the semester—it should be fun. I'll see you all... Wednesday of next week, if not sooner. We will have lab on Wednesday, FYI.


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