Discussion:
Practice: Incremental Design
Kent Beck
2005-01-26 07:36:09 UTC
Permalink
Invest in the design of the system every day. Strive to make the design of
the system an excellent fit for the needs of the system that day. When your
understanding of the best possible design leaps forward, work gradually but
persistently to bring the design back into alignment with your
understanding.
I was taught exactly the opposite of this strategy in school: "Put in all
the design you can before you begin implementation because you'll never get
another chance." The intellectual justification for this strategy came from
a Barry Boehm study of 1960's defense contracts showing that the cost of
fixing defects rose exponentially over time. If the same data also hold for
adding features to today's software, then the cost of large-scale design
changes should rise dramatically over time. In that case, the most
economical design strategy is to make big design decisions early and defer
all small-scale decisions until later.
For an assumption that shaped software development orthodoxy for decades,
the increasing cost of change over time received little scrutiny. This
assumption may no longer be valid. Do changes also increase in cost, the
same way defects do? Even assuming changes do increase in cost sometimes,
are there conditions under which the cost of changes does not increase? If
changes do not grow increasingly expensive, what does that imply about the
best way to develop software?
XP teams work hard to create conditions under which the cost of changing
the software doesn't rise catastrophically. The automated tests, the
continual practice of improving the design, and the explicit social process
all contribute to keep the cost of changes low.
XP teams are confident in their ability to adapt the design to future
requirements. Because of this, XP teams can meet their human need for
immediate and frequent success as well as their economic need to defer
investment to the last responsible moment. Some of the teams who read and
applied the first edition of this book didn't get the part of the message
about the last responsible moment. They piled story on story as quickly as
possible with the least possible investment in design. Without daily
attention to design, the cost of changes does skyrocket. The dire
predictions of the critics comes true: poorly designed, brittle,
hard-to-change systems.
The advice to XP teams is not to minimize design investment over the short
run, but to keep the design investment in proportion to the needs of the
system so far. The question is not whether or not to design, the question is
when to design. Incremental design suggests that the most effective time to
design is in the light of experience.
If "small, safe steps" is how to design, the next question is where to
design. The simple heuristic I have found helpful is to eliminate
duplication. If I have the same logic in two places, I work with the design
to understand how I can have only one copy. Designs without duplication tend
to be easy to change. You don't find yourself in the situation where you
have to change the code in several places to add one feature.
As a direction for improvement, incremental design doesn't say that
designing in advance of experience is horrible. It says that design done
close to when it is used is more efficient. As your expertise grows in
making changes to a running system in small, safe steps, you can afford to
defer more and more of the design investment. As you do so, the system will
get simpler, progress will start sooner, tests will be easier to write, and
because the system is smaller there will be less to communicate with the
team.
As more teams invest in daily design, they notice that the changes they
are making are similar regardless of the purpose of the system. Refactoring
is a discipline of design that codifies these recurring patterns of changes.
These refactorings can occur at any level of scale. Few design decisions are
difficult to change once made. The result is systems that can start small
and grow as needed without exorbitant cost.
Brad Appleton
2005-01-27 05:34:20 UTC
Permalink
Post by Kent Beck
Invest in the design of the system every day. Strive to make the design of
the system an excellent fit for the needs of the system that day. When your
understanding of the best possible design leaps forward, work gradually but
persistently to bring the design back into alignment with your
understanding.
I was taught exactly the opposite of this strategy in school: "Put in all
the design you can before you begin implementation because you'll never get
another chance."
I was taught (or perhaps I should say I learned) it a little different.
I took a course in school that as one of its goals) tried to teach us
firsthand about the "second systems effect." Up until that time, almost
all courses had individual assignments.

In this course, the first assignment was individual, and while the
assignment itself was simple, the instructor made sure we experienced
(read "suffered") all sorts of outraheous and unreasonable things like
changing requirements, changing priorities, changing dates, and changing
interfaces. I think everybody had a miserable time of it. ALL felt they
were forced to do suboptimal work (because they were :-) and that they
would have done a lot of things different "if only they'd known then
what they knew now".

Then the next assignment was the chance to "do it right". The instructor
said the programs the 1st time around were all rushed/shoddy quality,
and this time we should "do it right" and show him we were better than
that. We also had to do it in teams of 2-3 people.

So, as expected, we all had grand-designs borne from the frustrations of
the first assignment. And each of us had to take our grand
overengineered visions and try and sell-it to our teammates. Some teams
meshed well, their visions "matched" and the produced a massively
overengineered product. Other teams stalled because of the team dynamic
issues and conflict resolution challenges. They produced results that
were still very overengineered, but not as badly as the ones that
"gelled" (and they were twice as miserable as they were after the first
program).

For assignment three, the instructor "let us in" on the little lesson in
reality he'd been giving us... told us about the second systems effect.
had us do some readings on Brooks, and Weinberg, Parnas and Dijsktra

And the biggest thing I learned from that was the importance of what I
imagine Christopher Alexander calls "negative space", only for software
architecture. I glibly summarized it as: "there is no _code_ that is
more flexible than _no_ code". The "secret" to good software design
wasnt knowing what to put in; it was in knowing what to leave OUT. It
was in recognizing where the hard-spots and soft-spots were, and knowing
where to leave space/room rather than trying to cram in more design.

Granted, it was still VERY much anticipatory in nature. But it was very
different than trying to cram in the design. Im not sure that others
took the same lesson out of that - but that was the lesson I took. The
discpline I learned wasnt quite YAGNI, it was more like how NOT to code
it now but in a way that could easily be added later with minimal impact.
--
Brad Appleton <brad-***@public.gmane.org> www.bradapp.net
Software CM Patterns (www.scmpatterns.com)
Effective Teamwork, Practical Integration
"And miles to go before I sleep" --Robert Frost
Jason Nocks
2005-01-27 17:50:50 UTC
Permalink
<snip>
Post by Brad Appleton
I was taught (or perhaps I should say I learned) it a little different.
I took a course in school that as one of its goals) tried to teach us
firsthand about the "second systems effect." Up until that time, almost
all courses had individual assignments.
In this course, the first assignment was individual, and while the
assignment itself was simple, the instructor made sure we experienced
(read "suffered") all sorts of outraheous and unreasonable things like
changing requirements, changing priorities, changing dates, and changing
interfaces. I think everybody had a miserable time of it. ALL felt they
were forced to do suboptimal work (because they were :-) and that they
would have done a lot of things different "if only they'd known then
what they knew now".
I'm surprised to hear about an academic program trying to teach this
lesson. Very pleasantly surprised.
Post by Brad Appleton
Then the next assignment was the chance to "do it right". The instructor
said the programs the 1st time around were all rushed/shoddy quality,
and this time we should "do it right" and show him we were better than
that. We also had to do it in teams of 2-3 people.
Interesting progression.
Post by Brad Appleton
So, as expected, we all had grand-designs borne from the frustrations of
the first assignment. And each of us had to take our grand
overengineered visions and try and sell-it to our teammates. Some teams
meshed well, their visions "matched" and the produced a massively
overengineered product. Other teams stalled because of the team dynamic
issues and conflict resolution challenges. They produced results that
were still very overengineered, but not as badly as the ones that
"gelled" (and they were twice as miserable as they were after the first
program).
For assignment three, the instructor "let us in" on the little lesson in
reality he'd been giving us... told us about the second systems effect.
had us do some readings on Brooks, and Weinberg, Parnas and Dijsktra
Any specific recommendations? It's probably been a long time since I read
any of these, if at all.
Post by Brad Appleton
And the biggest thing I learned from that was the importance of what I
imagine Christopher Alexander calls "negative space", only for software
architecture. I glibly summarized it as: "there is no _code_ that is
more flexible than _no_ code". The "secret" to good software design
wasnt knowing what to put in; it was in knowing what to leave OUT. It
was in recognizing where the hard-spots and soft-spots were, and knowing
where to leave space/room rather than trying to cram in more design.
Granted, it was still VERY much anticipatory in nature. But it was very
different than trying to cram in the design. Im not sure that others
took the same lesson out of that - but that was the lesson I took. The
discpline I learned wasnt quite YAGNI, it was more like how NOT to code
it now but in a way that could easily be added later with minimal impact.
So, would you be willing to share what school taught this class? Was this
for B.S., M.S., Doctorate, other?

My educational programming classes, over 10 years ago, matched much more
closely with what Kent was describing, "Put in all the design you can
before you begin implementation because you'll never get another chance."

I'm glad to hear when educational institutions break from this tradition
(for lack of a better word).
Post by Brad Appleton
Software CM Patterns (www.scmpatterns.com)
Effective Teamwork, Practical Integration
"And miles to go before I sleep" --Robert Frost
Regards,
Jason Nocks
Brad Appleton
2005-01-28 04:20:43 UTC
Permalink
Hi Jason! My responses embedded ...
Post by Jason Nocks
Post by Brad Appleton
I was taught (or perhaps I should say I learned) it a little different.
I took a course in school that as one of its goals) tried to teach us
firsthand about the "second systems effect." Up until that time, almost
all courses had individual assignments.
In this course, the first assignment was individual, and while the
assignment itself was simple, the instructor made sure we experienced
(read "suffered") all sorts of outraheous and unreasonable things like
changing requirements, changing priorities, changing dates, and changing
interfaces. I think everybody had a miserable time of it. ALL felt they
were forced to do suboptimal work (because they were :-) and that they
would have done a lot of things different "if only they'd known then
what they knew now".
I'm surprised to hear about an academic program trying to teach this
lesson. Very pleasantly surprised.
This was in the mid-eighties. One of my instructors/professors at
University of Michigan in Ann Arbor had a lot of industry experience (or
at least exposure). He also was very down to earth and had a very
humorous manner about him that kept his lectures "interesting" ...
Post by Jason Nocks
Post by Brad Appleton
Then the next assignment was the chance to "do it right". The instructor
said the programs the 1st time around were all rushed/shoddy quality,
and this time we should "do it right" and show him we were better than
that. We also had to do it in teams of 2-3 people.
Interesting progression.
The big "struggle" in assignment #2 was supposed to be working as a
team, with each of us having some very strong/passionate ideas aout what
we _know_ that _must_ be done.
Post by Jason Nocks
Post by Brad Appleton
For assignment three, the instructor "let us in" on the little lesson in
reality he'd been giving us... told us about the second systems effect.
had us do some readings on Brooks, and Weinberg, Parnas and Dijsktra
Any specific recommendations? It's probably been a long time since I read
any of these, if at all.
As I recall, the reading assignments were:

Fred Brooks:
- The Mythical Man Month
- No Silver Bullet: Incidents and Accidents in Software Development

Gerald Weinberg
- The Psychology of Computer Programming

Tom Demarco and Timothy Lister
- Papers that ended up getting published the following year in the
"PeopleWare" book

David Parnas
- On the Criteria to be used for Decomposing Systems into Modules
- On the Design and Development of Program Families
- Designing Software for ease of extension and contraction
- The Modular Structure of Complex Systems
- A Rational Design Process: How and Why to Fake it
[NOTE: as of a few years ago, a collection of Parnas' papers is
available in the book "Software Fundamentals"]

Edsger Dijkstra
- Excerpts from "The Humble Programmer"

To be honest, although the reading list was GREAT, I simply was not able
to truly appreciate a lot of it as an undergrad with no real-world
experience (*particularly* the Demarco & Lister papers, The "A Rational
Design Process" paper, and portions of "Mythical Man Month").
Post by Jason Nocks
So, would you be willing to share what school taught this class? Was this
for B.S., M.S., Doctorate, other?
This was ca. 1986 as part of an undergrad degree in C.S.
Post by Jason Nocks
My educational programming classes, over 10 years ago, matched much more
closely with what Kent was describing, "Put in all the design you can
before you begin implementation because you'll never get another chance."
I'm glad to hear when educational institutions break from this tradition
(for lack of a better word).
Hmmn, since mine was prior to your expereince, I guess the didnt break
from it. Might have just been that instructor.

I did go for my M.S. in Software Engineering from 1995-2000 while
working full-time. At that time there were a number of different courses
that touched on some of these, and some had even incorporated "Patterns"
into their curriculum.

For the Software Project Management Course I took in '99, as a final
paper, we had to do a report on a book related to project management
that we felt would have dramatic impact on the industry within the next
ten years. And we had to keep it short and simple (6 pages, not counting
the title page). I chose a very thin book that was about to hit the
presses about half-way thru the course. I didnt actually have the book
yet, but I knew the material from my own "online research". Several
people on this list will probably be familiar with the book I chose :-)
The "book report/review" is at http://www.bradapp.net/xpx.doc

(re-reading it just now, Im struck by the fact that it uses the words
agile/agility and lean, since XP was still called a "lightweight" method
or "minimal methodology" at the time (SnowBird didnt happen until until
Post by Jason Nocks
1year later, where "agile" was decided on). I used to converse with
Mike Beedle a lot back then in the days B.C. (Before Children :-), and
"agile" and "lean" were buzwwords in the business literature at the
time, so I heard all about it from him :-)
--
Brad Appleton <brad-***@public.gmane.org> www.bradapp.net
Software CM Patterns (www.scmpatterns.com)
Effective Teamwork, Practical Integration
"And miles to go before I sleep" --Robert Frost
Russell Gold
2005-01-27 22:31:12 UTC
Permalink
Post by Brad Appleton
I was taught (or perhaps I should say I learned) it a little different.
I took a course in school that as one of its goals) tried to teach us
firsthand about the "second systems effect." Up until that time, almost
all courses had individual assignments.
I am so envious. In my senior year in college, my lab partner and I
observed the decided lack of comp-sci courses that dealt with
real-world development problems (such as maintenance) and tried to
propose a course specifically to address them. I think we discovered
that designing such a course was not easy, and finding a professor who
wanted to offer it was more difficult. But imagine interviewing a
recent graduate who already understood that real-world programming
wasn't just writing 10,000-line programs that nobody else would have
to look at!

So - how do we hire people who have been through this professor's classes :)
Steven Gordon
2005-01-27 18:12:27 UTC
Permalink
I believe Brad's experience is a rare one in the academic world. Not only are there very few professors who would feel this is what they are supposed to be teaching in Computer Science, but the teaching evaluations one would risk by this approach could be suicidal in many of the universities I am familiar with.

When I was a professor, I would take an approach that was less likely to annoy the students. I would make each programming assignment an extension of the previous assignment, with some small changes in the previous requirements that made sense in light of the extended functionality. This exposed the students to iterative development with adaptation to requirement changes and extensions without risking their wrath on the student evaluations.

Steven A. Gordon, Ph.D.
Manager, Software Factory
Arizona State University
PO Box 875506
Tempe, AZ 85287-9509
http://sf.asu.edu <http://sf.asu.edu/>
(480)-727-6271

-----Original Message-----
From: Jason Nocks [mailto:nocksj-jpvGyGg0lz56rha/***@public.gmane.org]
Sent: Thursday, January 27, 2005 10:51 AM
To: xpbookdiscussiongroup-***@public.gmane.org
Subject: Re: [xpe2e] Practice: Incremental Design


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

<snip>
Post by Brad Appleton
I was taught (or perhaps I should say I learned) it a little different.
I took a course in school that as one of its goals) tried to teach us
firsthand about the "second systems effect." Up until that time, almost
all courses had individual assignments.
In this course, the first assignment was individual, and while the
assignment itself was simple, the instructor made sure we experienced
(read "suffered") all sorts of outraheous and unreasonable things like
changing requirements, changing priorities, changing dates, and changing
interfaces. I think everybody had a miserable time of it. ALL felt they
were forced to do suboptimal work (because they were :-) and that they
would have done a lot of things different "if only they'd known then
what they knew now".
I'm surprised to hear about an academic program trying to teach this
lesson. Very pleasantly surprised.
Post by Brad Appleton
Then the next assignment was the chance to "do it right". The instructor
said the programs the 1st time around were all rushed/shoddy quality,
and this time we should "do it right" and show him we were better than
that. We also had to do it in teams of 2-3 people.
Interesting progression.
Post by Brad Appleton
So, as expected, we all had grand-designs borne from the frustrations of
the first assignment. And each of us had to take our grand
overengineered visions and try and sell-it to our teammates. Some teams
meshed well, their visions "matched" and the produced a massively
overengineered product. Other teams stalled because of the team dynamic
issues and conflict resolution challenges. They produced results that
were still very overengineered, but not as badly as the ones that
"gelled" (and they were twice as miserable as they were after the first
program).
For assignment three, the instructor "let us in" on the little lesson in
reality he'd been giving us... told us about the second systems effect.
had us do some readings on Brooks, and Weinberg, Parnas and Dijsktra
Any specific recommendations? It's probably been a long time since I read
any of these, if at all.
Post by Brad Appleton
And the biggest thing I learned from that was the importance of what I
imagine Christopher Alexander calls "negative space", only for software
architecture. I glibly summarized it as: "there is no _code_ that is
more flexible than _no_ code". The "secret" to good software design
wasnt knowing what to put in; it was in knowing what to leave OUT. It
was in recognizing where the hard-spots and soft-spots were, and knowing
where to leave space/room rather than trying to cram in more design.
Granted, it was still VERY much anticipatory in nature. But it was very
different than trying to cram in the design. Im not sure that others
took the same lesson out of that - but that was the lesson I took. The
discpline I learned wasnt quite YAGNI, it was more like how NOT to code
it now but in a way that could easily be added later with minimal impact.
So, would you be willing to share what school taught this class? Was this
for B.S., M.S., Doctorate, other?

My educational programming classes, over 10 years ago, matched much more
closely with what Kent was describing, "Put in all the design you can
before you begin implementation because you'll never get another chance."

I'm glad to hear when educational institutions break from this tradition
(for lack of a better word).
Post by Brad Appleton
Software CM Patterns (www.scmpatterns.com)
Effective Teamwork, Practical Integration
"And miles to go before I sleep" --Robert Frost
Regards,
Jason Nocks
Brad Appleton
2005-01-28 04:42:02 UTC
Permalink
Hi Steven!
Post by Steven Gordon
I believe Brad's experience is a rare one in the academic world. Not
only are there very few professors who would feel this is what they are
supposed to be teaching in Computer Science, but the teaching
evaluations one would risk by this approach could be suicidal in many of
the universities I am familiar with.
It probably was rare. During the first program, we wanted his head on a
platter. Expecially when he changed one of the requirements on us, not
be announcing it, but by changing one of the inputs without any notice.
I remember it being well after midnights, and we were using time-shared
terminals at the time, and I thought I finally had everything working
and then *boom* - he changed the dang inputs on me. I wanted his hide in
a very serious way as I spent the next few hours (till 3am) fixing my
parsing algorithm that had assumed a "right-to-left" strategy (grrr! :-)

During the 2nd program, it wasnt the prof I wanted to scalp, it was the
other partners in my team who simply were too stubborn to acknowledge
the "obvious" fact that "I was right and they were wrong" ( :-). We were
actually pretty happy to get a chance to "do it right the second time",
not realizing what was in store for us as we struggled to work together
rather than individually.

But by the 3rd program when he let us in on the "secret", and that this
was a mere taste of what its like programming "in the real world", we
were all kind of grateful. Between that, and his very down-to-earth and
humorous style, his evaluations were typically very good at the end of
the course. (tho the folks the "dropped" the course half-way thru
probably has a different story to tell :-)

Funny thing, when I got my grade at the end of the semester, I was
utterly "shocked" to have received a "C-". I knew I was doing well going
into the final exam. And I could have sworn I aced the final - but
obviously I didnt. I asked my teaching assistant how I was doing before
the final, and she said in highB/lowA range, and she was pretty
surprised to hear of my final grade (the instructor graded the final exams).

So I made an appt to see the instructor. I wanted to go over a few
questions from the final, and "double check" my grade. I said I was
really surprised and a bit upset at what my course grade was. He looked
at his book and said "I dont see why your so upset - according to this
you got an A+ on the final and an A for the course. What did your
transcript say?" I replied "Umm, C-". To which he responded "oh, well I
can see why youre upset :-)" and he fixed the grade (apparently student
ID was only one off from one of the other classmates, and our grades got
swapped. I dont think he was very happy that I found the "bug")
Post by Steven Gordon
When I was a professor, I would take an approach that was less likely to
annoy the students. I would make each programming assignment an
extension of the previous assignment, with some small changes in the
previous requirements that made sense in light of the extended
functionality. This exposed the students to iterative development with
adaptation to requirement changes and extensions without risking their
wrath on the student evaluations.
My undergrad operating systems class was like that. We developed parts
of a small, multi-tasking OS kernel, incrementally with each assignment
building on the next one, possibly adding or refining requirements
(e.g., doing memory management, then virtual memory management, then
later making it re-entrant and adding swapping, then later adding to the
caching strategy and concurrency strategy, then adding
security/authentication, etc.).
Post by Steven Gordon
Steven A. Gordon, Ph.D.
Manager, Software Factory
Arizona State University
PO Box 875506
Tempe, AZ 85287-9509
http://sf.asu.edu <http://sf.asu.edu/>
(480)-727-6271
-----Original Message-----
*Sent:* Thursday, January 27, 2005 10:51 AM
*Subject:* Re: [xpe2e] Practice: Incremental Design
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
<snip>
Post by Brad Appleton
I was taught (or perhaps I should say I learned) it a little
different.
Post by Brad Appleton
I took a course in school that as one of its goals) tried to teach us
firsthand about the "second systems effect." Up until that time,
almost
Post by Brad Appleton
all courses had individual assignments.
In this course, the first assignment was individual, and while the
assignment itself was simple, the instructor made sure we experienced
(read "suffered") all sorts of outraheous and unreasonable things
like
Post by Brad Appleton
changing requirements, changing priorities, changing dates, and
changing
Post by Brad Appleton
interfaces. I think everybody had a miserable time of it. ALL
felt they
Post by Brad Appleton
were forced to do suboptimal work (because they were :-) and that
they
Post by Brad Appleton
would have done a lot of things different "if only they'd known then
what they knew now".
I'm surprised to hear about an academic program trying to teach this
lesson. Very pleasantly surprised.
Post by Brad Appleton
Then the next assignment was the chance to "do it right". The
instructor
Post by Brad Appleton
said the programs the 1st time around were all rushed/shoddy
quality,
Post by Brad Appleton
and this time we should "do it right" and show him we were better
than
Post by Brad Appleton
that. We also had to do it in teams of 2-3 people.
Interesting progression.
Post by Brad Appleton
So, as expected, we all had grand-designs borne from the
frustrations of
Post by Brad Appleton
the first assignment. And each of us had to take our grand
overengineered visions and try and sell-it to our teammates. Some
teams
Post by Brad Appleton
meshed well, their visions "matched" and the produced a massively
overengineered product. Other teams stalled because of the team
dynamic
Post by Brad Appleton
issues and conflict resolution challenges. They produced results that
were still very overengineered, but not as badly as the ones that
"gelled" (and they were twice as miserable as they were after the
first
Post by Brad Appleton
program).
For assignment three, the instructor "let us in" on the little
lesson in
Post by Brad Appleton
reality he'd been giving us... told us about the second systems
effect.
Post by Brad Appleton
had us do some readings on Brooks, and Weinberg, Parnas and Dijsktra
Any specific recommendations? It's probably been a long time since I read
any of these, if at all.
Post by Brad Appleton
And the biggest thing I learned from that was the importance of
what I
Post by Brad Appleton
imagine Christopher Alexander calls "negative space", only for
software
Post by Brad Appleton
architecture. I glibly summarized it as: "there is no _code_ that is
more flexible than _no_ code". The "secret" to good software design
wasnt knowing what to put in; it was in knowing what to leave OUT. It
was in recognizing where the hard-spots and soft-spots were, and
knowing
Post by Brad Appleton
where to leave space/room rather than trying to cram in more design.
Granted, it was still VERY much anticipatory in nature. But it
was very
Post by Brad Appleton
different than trying to cram in the design. Im not sure that others
took the same lesson out of that - but that was the lesson I
took. The
Post by Brad Appleton
discpline I learned wasnt quite YAGNI, it was more like how NOT
to code
Post by Brad Appleton
it now but in a way that could easily be added later with minimal
impact.
So, would you be willing to share what school taught this class? Was this
for B.S., M.S., Doctorate, other?
My educational programming classes, over 10 years ago, matched much more
closely with what Kent was describing, "Put in all the design you can
before you begin implementation because you'll never get another chance."
I'm glad to hear when educational institutions break from this tradition
(for lack of a better word).
Post by Brad Appleton
Software CM Patterns (www.scmpatterns.com)
Effective Teamwork, Practical Integration
"And miles to go before I sleep" --Robert Frost
Regards,
Jason Nocks
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFB+Sn63CryLfCgqRkRAurYAJ4wA6XemN3WQmDMs5Tw1bPHE9H3fACdEjHM
qmok9AYzFOnHhl66Ktc3juM=
=mfAG
-----END PGP SIGNATURE-----
------------------------------------------------------------------------
*Yahoo! Groups Links*
http://groups.yahoo.com/group/xpbookdiscussiongroup/
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service <http://docs.yahoo.com/info/terms/>.
--
Brad Appleton <brad-***@public.gmane.org> www.bradapp.net
Software CM Patterns (www.scmpatterns.com)
Effective Teamwork, Practical Integration
"And miles to go before I sleep" --Robert Frost
Logan, Patrick D
2005-01-27 19:17:51 UTC
Permalink
Post by Jason Nocks
So, would you be willing to share what school taught this class? Was
this
Post by Jason Nocks
for B.S., M.S., Doctorate, other?
A similar story... back in 1982 I took a graduate course at Ohio State
in systems programming. This was a summer quarter course with no class
time after the first day. We were encouraged not to take any other
courses. We were asked to deliver a virtual machine, assembler, linker,
and loader. We could also provide anything else, e.g. macros, higher
level macros (if, while, etc.).

We were advised to work in pairs and implement and test incrementally.

This was one of my two all-time favorite courses. I think a key to the
approach and the success was this course was taught by the director of
the computing center rather than an "academician". (No offense, I think
you can be both, and I think academics are fine too.) Based on real
experience, attempting to simulate real experience. The grade was based
on how well you satisfied the customer, i.e. the instructor. Seriously
cool class.

My other favorite course was similar with little class time, also a
graduate level course at OSU implementing pieces of an OS for networked
PDP-11's. We were encouraged to sit around the room of PDP-11's talking
to each other as we developed code. A bull pen.

-Patrick
Loading...