|
|
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
- required elements of an online learning community
- evaluating client project proposals
- introduction to the RDBMS
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:
- 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.
- 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").
- a professional programmer does high quality work; we
preserve the dedication to good system design, maintainability, and
documentation, that constituted pride of craftsmanship.
- 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.
- a professional programmer teaches by example; open-source
is the one true path for a professional software engineer.
- 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.
- 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
- online communities are at the heart of most successful applications
of the Internet: amazon.com, AOL, eBay
- the mournful history of applying technology to education:
amplifying existing teachers
- the beauty of online communities: expanding the number of teachers
- the six required elements for a successful online community
- the first large-scale online communities: USENET discussion forums
- scaling from 100 participants to 100,000: adapting ideas from the
sociology of physical communities
Required Elements of Sustainable Online Learning Community
- magnet content authored by experts (http://www.photo.net/portraits/intro)
- means of collaboration (a forum; one question)
- powerful facilities for browsing and searching both magnet content
and contributed content
- means of delegation of moderation
- 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
- 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...
- users are separated in space and time
- users have a real need to interact with each other and there is no
good alternative other than the proposed Web system
- there is some service or task that users will be able to accomplish
at this new site that is not doable any other way
- publisher has money to advertise and promote (Google ads are very
effective), pay authors and other content contributors
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:
- primitive expressions, which represent the simplest
entities the language is concerned with,
- means of combination, by which compound
elements are built from simpler ones, and
- means of abstraction, by
which compound elements can be named and manipulated as units.
In SQL the means of abstraction is the View.
philg@mit.edu