CIT 594 Previous Announcements
Spring 2010, David Matuszek

Date Announcements
April 14, 2010 The due date for the Shortest Path assignment is hereby extended by one day, to Friday midnight.
April 29, 2010 In case anyone is still working on the Automata assignment (or is just interested), I have written up a set of PowerPoint slides on Concurrency. Mostly this was just for my own benefit, but some concurrency questions may occur on the final exam.
April 22, 2010

My proposed Programming Paradigms course has been unanimously approved smiley face by the faculty, and even "upgraded" from a CIT course to a CIS course, so that it is available to MSE majors. Here's a writeup.

The course is currently listed on the Registrar's page as CIS 700-002 (that's just a placeholder--the actual number will change). It will be MW 10:30-12:00 (the time will not change).

April 22, 2010

Would you like to help grade your Interpreter assignment?

Here's the deal. Kompally will be using this test1.logo program to test your interpreter. It should produce the picture shown on the right. (The five linked boxes test the various commands, while the green dots test procedure calls, parameters, and local/global variables.) If your program doesn't work at all, he will try to fix it so that it does. However, if your program just crashes, or says there's a syntax error but doesn't say where (I think my program is syntactically correct), he may not be able to make it work. If he can't make your interpreter work, you will get a bad grade.


If your interpreter doesn't work with my test program, you can find and fix the errors, and send the corrections to Kompally (not the entire program, just the parts that need to be changed). That way he can get the program to work more easily, it's less work for him, and almost certainly a better grade for you.

If your original program is broken to the extent that Kompally cannot fix it, and you have to resubmit, this will cost at least 20 points (out of the 150 total).

April 19, 2010

No class Tuesday, April 20. Please attend the Saul Gorn lecture (3:00, Wu & Chen).

April 14, 2010
Midterm 2 grades Average (mean): 75.7

Standard deviation: 15.2

Great job, everybody!

Pizza party!

Thursday, April 15, 6 p.m.
Levine 307

Who is invited: All current and former MCIT students and faculty, and students taking MCIT classes.

Please email to let her know if you are likely to attend, so that we can order enough pizza! (OK to bring a guest, just let us know.)

April 7, 2010 There is a good explanation of Dijkstra's shortest path algorithm in your textbook.
March 24, 2010

My office hours this week:
Wednesday 11:00-12:00 and 1:30-3:00.
Thursday 3:00-4:00
Friday 11:00-12:00

March 23, 2010

As you probably know, Diana will be leaving us next year.

This week we have two applicants coming in to interview for her position. I would really appreciate it if you could attend their talks and give me your opinions. (Sorry, no, this doesn't mean extra points in CIT594 ... but it does mean free food.)

Chris Murphy, Wednesday, March 24, 307 Levine--Italian dinner (for MCIT students and faculty) at 5:30, and talk at 6.

David Nellans, Thursday, March 25, talk at 1:30-3:00, Skirkanich Auditorium.
pizzaPizza party at 6:00.

March 15, 2010

I have posted

Some of you failed a large number of tests by only following the "happy path" and seldom or never checking for possible parse errors. This time, we have only taken off 5 points for failing to throw SyntaxExceptions, regardless of how many tests you failed. However, failing to check input for errors does not lead to very robust programs.

March 15, 2010

Another correction. My <procedure> example didn't follow the grammar. As usual, in case of a conflict, follow the grammar as given in the Recognizer.

There's someplace in provided code that I treat list as a NAME rather than a KEYWORD. It should be a KEYWORD. I'll try to fix it when I have a chance.

March 15, 2010

Back from my conference. Thankfully, only a few minor issues have arisen regarding the parser.

  • As noted in the Parser writeup, where there is a conflict, it is the grammar in the Recognizer writeup that you should use. There was a conflict in the rule for <procedure>. Fortunately, this does not affect the tree that should be constructed.
  • In the tree examples I used a to node as the root of a procedure, but in another place I used define for the same purpose. Please use "to".
  • Because x is a keyword and not a variable, I should have used a different name in the <set> and <procedure> examples; other places it is okay.
February 26, 2010

The code for and has now been posted.

I had to make a lot of corrections and updates that I didn't expect--that's why it took so long. I hope I got them all.

This is starter code, intended to help you get started. You may modify it in any way you please (including ignoring it altogether).

February 17, 2010 Hi,
All CIS/MSE, MCIT, CGGT, EMBS, & Robotics students and all faculty are invited to a lunch tomorrow, 2/18, 11:30-1:15, in Levine 307. Stop by for something to eat and a chat.
take care,
February 15, 2010 The next assignment (Recognizer) has been posted. You can get an early start on it if you like; I will discuss how to do it in class on Tuesday (assuming we have class on Tuesday).
February 15, 2010 TA office hours have been changed.
February 13, 2010

Special MCIT talk
  Coping with success in an Open Source World
Eric S. Raymond

Heilmeier Hall (Towne 100)
6:00-8:00pm, Wednesday, February 24

February 13, 2010

Pizza party!

Thursday, February 18, 6 p.m.
Levine 307

Who is invited: All current and former MCIT students and faculty, and students taking MCIT classes. OK to bring a guest.

February 9, 2010

Additions to Tree Generation assignment:

I've added a method to the Grammar class: public static boolean isTerminal(String token). This is a one-liner: A string is a token nonterminal if it begins with a '<', ends with a '>', and is at least 3 characters long. This could be done outside the Grammar class, but it really belongs in the Grammar class. (Thanks, Kapil.) Also, getDefinitions should return null if given a terminal instead of a nonterminal.

In you can, if you prefer, use the split method of String, instead of StringTokenizer (thanks, George). The form to use is line.trim().split("\\s+").

February 5, 2010 Minor correction to Tree Generation assignment:

Please make the read() method of the Grammar class static. There isn't any reason you should have to already have a Grammar object before you can read one in. If it's static, you can just say Grammar g =; (Thanks, John!)
February 4, 2010 In response to a number of questions:

You are not required to use the parse method I supplied. If you find it convenient, use it; if not, don't. (However, if it has syntax errors or raises exceptions when copied into your Tree class, there's probably something wrong with your code.)
February 2, 2010

Cracking the Technical Interview:
Advice for CS students on interviewing for software engineer positions

Gayle Laakmann
Thursday, February 4, 2010, 4:00pm (CIT 594 will not meet this day)
Wu & Chen Auditorium


CS interviews are a different breed from other interviews and, as such, require specialized  skills and techniques.  /Cracking the Technical Interview/ will teach you how to prepare for technical interviews, what top companies like Google and Microsoft really look for, and how to tackle the toughest programming and algorithm problems. This talk will include stories from the speaker's extensive interviewing experience as well as a live "demo" of how to tackle a technical problem

About the Speaker

Gayle Laakmann (Penn CS BSE & MSE '05) is the founder and CEO of and the author of "Cracking the Technical Interview" (  CareerCup is the leading source of technical interview preparation and provides a free forum with 3000+ technical interview questions, a book, a video, and mock interviews.  Gayle has worked for Google, Microsoft and Apple and has extensive interviewing experience on both sides of the table. She has interviewed and received offers from Google, Microsoft, Apple, Amazon, IBM, Goldman Sachs and a variety of other firms, and she has interviewed over 120 candidates at Google and served on its hiring committee.  She is now an MBA student at Wharton.

Personal Website:
Company Website:

February 1, 2010 Testing your Tree API involves constructing a lot of test trees. To make this easier for you, I am providing a parse method (along with a unit test method for it). The parse method is like your toString method in reverse; that is, it accepts the kind of strings that toString should produce, and constructs Tree<String> objects from them.
January 26, 2010 Added the assignment to Blackboard, so you should be able to submit now.