Lecture 1 Notes

for "Software Engineering of Internet Applications" at MIT

Site Home : Teaching : 6.171 : One Item


Today we cover the following things:

Goals of the Course

Accreditation requires that someone with a bachelor's in engineering have done an open-ended project (at MIT, this used to be the S.B. thesis). Course and psets are great, but mostly you are doing what you're told, which is not engineering though it can be technical and painful.

Wikipedia: Engineering applies scientific and technical knowledge to solve human problems. Engineers use imagination, judgment, reasoning and experience to apply science, technology, mathematics, and practical experience. The result is the design, production, and operation of useful objects or processes.

If you can take a precisely specified problem, to which the answer is already known, and build a solution that meets the spec, you are... a straight A MIT student and a prime candidate for having your job outsourced to a distant country. The engineer has to take an ill-specified problem from society (one or more humans), decide whether or not it is worth solving, and come up with a solution that is reasonably cost-effective to build and operate.

Suppose that we define software engineering professionalism with the following objectives:

  1. a professional programmer picks a worthwhile problem to attack; we are engineers, not scientists, and therefore should attempt solutions that will solve real user problems.
  2. a professional programmer has a dedication to the end-user experience; most computer applications built these days are Internet applications built by small teams and hence it is now possible for an individual programmer to ensure that end users aren't confused or frustrated (in the case of a programmer working on a tool for other programmers, the goal is defined to be "dedication to ease of use by the recipient programmer").
  3. a professional programmer does high quality work; we preserve the dedication to good system design, maintainability, and documentation, that constituted pride of craftsmanship.
  4. a professional programmer innovates; information systems are not good enough, the users are entitled to better, and it is our job to build better systems.
  5. a professional programmer teaches by example; open-source is the one true path for a professional software engineer.
  6. a professional programmer teaches by documentation; writing is hard but the best software documentation has always been written by programmers who were willing to make an extra effort.
  7. a professional programmer teaches face-to-face; we've not found a substitute for face-to-face interaction so a software engineering professional should teach fellow workers via code review, teach short overview lectures to large audiences, and help teach multi-week courses.
A goal of this course is to bring you closer to some of these objectives. We will be working together on tech skills, writing skills, interviewing and listening skills, user testing skills.

Class meetings are devoted to team-team exchanges so that you can work on your ability to criticize and judge. If you sit through a meeting at a big company and never have anything to contribute, managers are going to say "Here's someone whose job could be offshored."

Enough of that soft stuff. We want to teach you about some important concepts and tools. In 6.170 you learned how to build a desktop app. Complex U.I. One user. Complex data structures in memory. No worries about concurrency. In 6.171 you will learn how to build Internet applications. These necessarily have thousands of potential simultaneous users. The U.I. must be simple. The data structures are stored persistently, almost always in a relational database management system.

Because there is no database management system course at MIT, this is where you will learn data modeling, the SQL language, and all about transactions and concurrency. At the end of the course, we want you to know as much as someone who took a database class, but without the tedium of building a small business accounting system.

Why we care about Online Communities

Required Elements of Sustainable Online Learning Community

  1. magnet content authored by experts (http://www.photo.net/portraits/intro)
  2. means of collaboration (a forum; one question)
  3. powerful facilities for browsing and searching both magnet content and contributed content
  4. means of delegation of moderation
  5. means of identifying members who are imposing an undue burden on the community and ways of changing their behavior and/or excluding them from the community without them realizing it
  6. means of software extension by community members themselves (every programmer a user)

The first large-scale online communities: USENET ("Google Groups")

Evaluating Client Project Proposals

In the mid-1990s there wasn't much to do or see on the Internet. If you built a server with all of the required elements, you'd probably be successful at attracting and keeping users. Today, however, people already are saturated with Web sites and are reluctant to visit new ones on a regular basis.

Some things that make an online community likely to take off...

Introduction to the RDBMS

Raise your hand if you've written a computer program in a declarative language.

A spreadsheet is useful, but can only be used by one person. What would it look like to make a multi-user spreadsheet? Put the spreadsheet in a closet. Users send slips of paper in under the door asking for rows to be inserted, cells to be modified, printouts of information from one or more tables.

http://philip.greenspun.com/sql/introduction gets into more detail.

Who got an A in 6.001?

Elements of Programming:

In SQL the means of abstraction is the View.
philg@mit.edu