Massachusetts Institute of Technology
Department of Electrical Engineering and Computer Science

6.171 Teaching Assistant Position

Spring 2006

We are looking for a teaching assistant to supervise student projects in 6.171, Software Engineering for Internet Applications, for the spring semester 2006. If you want to get experience managing software development, this is an excellent opportunity.

How the Course Works

We find real clients who want Internet applications built. The customers might include groups within MIT, non-profit organizations, seed-stage startup companies, and groups within large companies. Examples of past clients include Hewlett-Packard, United Way International, the MIT Libraries, a triathlon team, and Creative Commons. The needs of the clients will differ but we only select clients whose application has at least the basic aspects of an online community: user registration, content management, discussion forum, search. Note that amazon.com and eBay would fit; the pure search portion of www.google.com would not.

Students, of whom typically 25-30 remain after the first problem set, divide up into teams of two or three, and the resultant approximately 10 teams are matched with 10 clients. As the semester proceeds, the teams meet with their clients to find out what needs to be built, write a spec, build a succession of prototypes, test those prototypes with the client and with users, and, in some cases, launch the completed system on the public Internet. Although a substantial amount of coding is done, an emphasis is placed on process, written plans, and documentation.

Class meeting times are not lectures in which you are going to be bored to death. Stuff that we want to tell the students, we put in the textbook. We want to help 6.171ers develop their presentation and constructive critiquing skills, and therefore class time is devoted to code review, team project presentations, and teams helping each other improve their designs.

The last two meetings of the course at devoted to final project presentations. We bring in managers from companies such as Microsoft and venture capitalists from larger Boston-area funds to critique the presentations.

The course follows the textbook, Software Engineering for Internet Applications, very closely. The full text of the book is available online at http://philip.greenspun.com/seia/.

Why this is good for your career

Quite a few 6.171 alumni are working at Google. One alum, during his interview, was told that his coding skills were not that valued. "We have an office in India," the interviewer explained. What Google needed most were people who could think clearly about a problem, write down a product spec including all the most necessary features, come up with a plan for building the product, and evaluate the results of coding efforts.

There are many more people who can build a working computer program than there are people who can manage a team of programmers to complete a project on time. Software development is famously disappointing to decision-makers within organizations. Projects tend to be overbudget, delayed by many months or years, and often fail to work as advertised.

If you can say "Oh yes, I've managed 10 software development projects and 10 different teams of programmers, all of whom successfully delivered their applications on time," that will distinguish you from most other folks with a C.S. degree. Even if you intend to stay in Academia, there are quite a few research projects whose success or failure depend on mundane software development management issues.

What the students need from you

Everyone in 6.171 knows how to write code and debug code, if for no other reason than that 6.170 is a prerequisite. Very few of the students, however, have SQL data modeling and programming experience. Nor is the typical student an experienced Web developer. The core engineering challenge in building an Internet application is coming up with a clean data model and as simple a page flow as possible. Students will need your help in reviewing their data models, showing how to cut out unnecessary tables and columns, and cleaning up their designs, reducing the number of clicks and pages to accomplish a task. Essentially you will be doing weekly design reviews, either via email or face-to-face with the teams.

You aren't a system administrator and you can't be expected to be an expert on every tool that students might choose to use. But, especially early in the semester, it would be awfully nice if you had some insight into why Oracle won't install on their Linux box or how to configure Microsoft .NET.

You'll need good written communications skills and the ability to critique student-authored plans and documentation.

What the 6.171 staff needs from you

We need you to build and maintain an online community for the course itself. At a minimum this provides a discussion forum for the students and staff and shows team assignments.

We need you to sort out student-team-client assignments.

We need you to lug a video projector and laptop computer to every meeting of the course.

Desired Experience

The ideal candidate for this position will have developed several database-backed Internet applications and will be experienced with SQL data modeling and programming. The ideal candidate will have excellent interpersonal skills and be enthusiastic about meeting with students. The ideal candidate will have written software development plans, documentation, and technical papers describing results.

Schedule

A principal reason for students dropping out of 6.171 is that they can't get the tools to work on their personal computers. We ask the students to start configuring their PCs with a relational database management system, Web server, and scripting langauge, at least three weeks before the start of the semester. We need to have the course online community available to them by January 15. This means that you need to start preparing for the TA job in early December. We would like to see you set up and build small database-backed applications using the following tool sets: Microsoft SQL Server and .NET; Linux, Oracle, Apache, and PHP; Linux, PostgreSQL, Apache, and Ruby on Rails; something with Java if you can figure out what the preferred libraries are (historically the students who decided to use Java have had to drop the course due to low productivity). These must be complete by January 15 so that you can provide some assistance to students who are attempting to set up some of these tools. The only constraint on students is that they use an ACID-compliant relational database management system. Nothing stops them from choosing a complex set of tools, e.g., those from IBM, with which none of us are familiar, but we don't guarantee to provide help with anything other than SQL data model, page flow, and documentation structure.

Summary

As with any lab, teaching 6.171 is a fair amount of work. We make it a little harder on ourselves by doing 10 open-ended projects loosely specified by clients. MIT makes it a lot harder on everyone by not having a room that we can commandeer for the semester and in which we would set up PCs and get everyone physically together for all the work. Nonetheless, the experience tends to be fun for the staff and very rewarding for the students who stick with it. For many of the students, this is the first time in their lives that they have done engineering, i.e., they start with an open-ended problem and build a solution.

How to Apply

Please send an email summarizing your relevant experience to philg@mit.edu. Your email can include an HTTP link to a resume on the Web. If your resume is not on the Web, but only available as an attached Word document, we may question your Web development skills!
philg@mit.edu