Background
Engineering is about:
Applying science
Building large, complex things
Software engineering is about:
Applying computer science
Building large, complex applications
Who Needs It?
Research
Equivalent of good laboratory technique
Your results are only as reliable as your software
The better you use tools, the more research you will be able to do
Industry
"On spec, on time, on budget"
This Course
You have to walk before you can run
So this course is about software carpentry
Building houses, not skyscrapers
"Tools and techniques appropriate for up to a dozen people working for up to a dozen months"
Goal is to make you a better computer scientist by showing you how theory and practice are related
Some Actual Zen
"You can't drink tea without a cup"
I.e., you can't explain abstract concepts without giving examples
But the examples are not the concepts
You will learn many new tools in this course
They will make you a better programmer
But the real point of the course is the ideas the tools embody
What Matters Most?
There are no silver bullets
No technological change in the last 20 years has had a significant impact on productivity
"Productivity" measured by error rates, ability to meet schedules, development costs, etc.
What matters is how you program
Technologies come and go, but good working practices last forever
The easiest mistakes to fix are the ones you don't make
Course Content
Topics
Version control
Build management
Parsing using finite state machines
Systematic testing and debugging
Scripting
Meta-topics
(More) object-oriented programming
Design patterns
Reflection
Development process
Assessment
Exercises
Four exercises worth 5% each
Four exercises worth 10% each
Two of these exercises will be done in pairs
Final Exam: 40%
Glass's Law
"Any new tool or working practice initially makes you less productive"
Always faster to solve the immediate problem the old way
Do not let that stop you from learning new tools and skills
In the real world, you will have to re-train every three years
Or be as obsolete as an old PC
Remember: "busy" is not the same as "productive"
$Id: intro.html,v 1.1.1.1 2004/01/04 05:02:31 reid Exp $