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