extremeprogramming.html
来自「极限编程 Extream Programing」· HTML 代码 · 共 318 行 · 第 1/3 页
HTML
318 行
<p><hr>
<p>That <em>Computer Scientist hat</em> comment up there made me think. Software development is often a classic hill-climbing problem of the sort that computer scientists have been trying to find neat ways of solving since forever.
The <em>meta hill-climb</em> perhaps?
<p>My point is that many of the hill-climbing strategies developed require additional controls besides the local-improvement to reach solutions which are better than very sub-optimal (OK OK rather vague). <em>Isn't this true of software development too?</em> -- GarethSB
<p><hr>
<p>One thing I like about <a href="ExtremeProgramming.html">ExtremeProgramming</a> is that it captures so many of the things that I've been trying to teach my students about how to program: start
small and grow slowly, refactor often, how to really use a design pattern, and so on. But, clearly, <a href="ExtremeProgramming.html">ExtremeProgramming</a> is not the ordinary way in which students are taught to program in school.
<p>So: Do any of you have any advice on how to introduce the principles of XP into my class room? I'm not talking about a methodology course but rather a CS 101 or CS 102 course where kids first learn how to program. How can I help students to develop good programming habits? I'll go ahead and create a page for a discussion of <a href="http://c2.com/cgi/wiki?ExtremeProgrammingInTheClassroom">ExtremeProgrammingInTheClassroom</a>, just in case you all have plenty to say! -- <a href="http://c2.com/cgi/wiki?EugeneWallingford">EugeneWallingford</a>
<p><a href="http://c2.com/cgi/wiki?StartingWithExtremeProgramming">StartingWithExtremeProgramming</a>
<p><hr>
<p>For a critique of XP started by <a href="http://c2.com/cgi/wiki?StevenNewton">StevenNewton</a>, see <a href="XpIsaPseudoMethodology.html">XpIsaPseudoMethodology</a>.
<p><hr>
<p>I am trying to understand how to apply <a href="ExtremeProgramming.html">ExtremeProgramming</a>, particularly in a C++ context, and something I am curious about is the overall structure or architecture of <a href="http://c2.com/cgi/wiki?ExtremeSoftware">ExtremeSoftware</a>. Currently, when we design a system we break down the functionality of the system into subsystems and then break the subsystems down into service packages. Each service package is then implemented using one or more classes along with their unit tests.
<p>It is very important in our process to manage the dependencies between the subsystems and between the packages in order to end up with a layered structure. In general (and particularly for infrastructure packages) we will split a package into an interface package (which defines some abstract base classes) and an implementation package which provides a default implementation.
<p>I am interested in whether the concept of subsystems and service packages exists in the <a href="ExtremeProgramming.html">ExtremeProgramming</a> methodology and if so whether the structure is determined up front or evolves over time. Is there any concept of splitting functionality up into interface and implementation packages? Or does this go against <a href="DoTheSimplestThingThatCouldPossiblyWork.html">DoTheSimplestThingThatCouldPossiblyWork</a> and would only come about as a result of refactoring at the time it was actually needed?
<p>-- <a href="http://c2.com/cgi/wiki?JamesCrawford">JamesCrawford</a>
<p>Subsystems and service packages and their analogues in other languages are tools that you might apply. We would generally not spend much time up front on them <em>unless they were identified as a risk (see <a href="http://c2.com/cgi/wiki?WorstThingsFirst">WorstThingsFirst</a>)</em>. Since XP generally leads to a small system that grows to be what you want, the packaging generally only shows up later on in the project.
<p>We have not to date had a lot to say about deployment, stripping for release, etc. Some attention to packaging up front might be desirable, but I would hold it well below what most people would consider the minimum. The main reason for this is that I expect the product itself to evolve far from where it was originally envisioned. Most everything about the packaging decisions is likely to be wrong. --<a href="RonJeffries.html">RonJeffries</a>
<p>I don't really know enough of how Smalltalk works and maybe with the appropriate tools it isn't a problem, but where I work the package and subsystem structure is mapped into a directory structure that is then placed under source code control using CVS. With each class name being reflected in its file name and each package being a directory name, changing the names of classes, moving classes between packages, and renaming packages causes enough heartache with CVS that it would be a major impediment to refactoring. There must be a better way... -- <a href="http://c2.com/cgi/wiki?JamesCrawford">JamesCrawford</a>
<p>Further discussion moved to <a href="http://c2.com/cgi/wiki?RefactoringWithCvs">RefactoringWithCvs</a>.
<p><hr>
<p>See <a href="http://c2.com/cgi/wiki?ExtremeProgrammingInEnemyTerritory">ExtremeProgrammingInEnemyTerritory</a>
and <a href="http://c2.com/cgi/wiki?TeachingXp">TeachingXp</a>.
<p><a href="http://c2.com/cgi/wiki?KyleBrown">KyleBrown</a>
<p><hr>
<hr>
<p>C++ Report published
<a href="KentBeck.html">KentBeck</a>'s article
<DL><dt> <dd>"Extreme Programming: Flatten the change-cost curve by using XP in project planning and testing."
<p></DL>Robert Martin's editorial said of it...
<DL><dt> <dd><em>"I strongly urge you to read this article as it may represent one of the most unique contributions to software development since <strong>Design Patterns</strong>"</em> ...among other things.
<p></DL><hr>
<p>So, hacking finally gets respectable! Yeehaa! Ever since hacking as a
term was bent to mean only hacking into systems, the uber-geek has not
had a respectable, or marketable term for "what the heck it is they do
that no-one understands but they let them do it anyway cause it seems
to work most times". Extreme Programming it is then. Cool.
<p>Eric
<p><em>Whoah! Slow down for a spell. This ain't <a href="http://c2.com/cgi/wiki?CowboyCoding">CowboyCoding</a>!</em>
<p><em>Sure, if <a href="ExtremeProgramming.html">ExtremeProgramming</a> fits your picture of hacking ... call what you like to do <a href="ExtremeProgramming.html">ExtremeProgramming</a> ... but I bet you'll find that it's far more disciplined than it seems at first glance. It doesn't look like hacking to me anymore at all. First off, the idea is <strong>not</strong> that no-one understands what is being done. <a href="DoTheSimplestThingThatCouldPossiblyWork.html">DoTheSimplestThingThatCouldPossiblyWork</a>.</em>
<p><em>Also, try using the word "Cracking" when other people might use the word "hacking" ... maybe other people will start doing the same, and we can remove a little of the stigma from "hacking" .... which should still carry <strong>some</strong> stigma ... but not <strong>that</strong> stigma. --<a href="http://c2.com/cgi/wiki?EricHerman">EricHerman</a> (different Eric)</em>
<p><hr>
<p>"Young Obi-wan, do not delude yourself into thinking that features are stable. By the time you finish that first release of three months, the features that the customer did not select for that release may not be needed anymore; or may have changed form dramatically. Indeed, it is likely that even the features within the release will change significantly. You don't want to base your architecture on things that are likely to change do you? Wouldn't you rather base your architecture on the features that the customer thought most important?" --<a href="http://c2.com/cgi/wiki?RobertCecilMartin">RobertCecilMartin</a> (reposted w/o permission)
<p>"But, master, since the universe is illusion, to base a system on a feature is surely a mistake! The features the customer thought most important, by your own admission, are what thecustomerthought , not the Truth itself. Is it not better to base my architecture on the thing that the application is about? Observe the joy of those programs that fullfill their <a href="http://c2.com/cgi/wiki?OneTruePurpose">OneTruePurpose</a>!" --
<p>"Ah, but is it Truth who must be satisfied, or those who pay you? Do not lose sight of what is being attempted. We are merely trying to make something that will work, not creating art."
<hr>
<p>Why is there no <a href="http://c2.com/cgi/wiki?PairCoaching">PairCoaching</a> practice in XP? --<a href="http://c2.com/cgi/wiki?HaskoHeinecke">HaskoHeinecke</a>
<p><hr>
<p>In <a href="http://c2.com/cgi/wiki?TurnAllTheKnobsToSeven">TurnAllTheKnobsToSeven</a>, it's suggested that perhaps a good way of <a href="http://c2.com/cgi/wiki?ScalingExtremeProgramming">ScalingExtremeProgramming</a> would be to be more moderate in the practices. Perhaps this is thinking too much along a continuum. When I come across situations like these, I try to <a href="http://c2.com/cgi/wiki?ThinkSideways">ThinkSideways</a>. For example, perhaps <a href="http://c2.com/cgi/wiki?ScalingExtremeProgramming">ScalingExtremeProgramming</a> can be achieved with a <a href="http://c2.com/cgi/wiki?DivideAndConquer">DivideAndConquer</a> technique. A large project can be split into several smaller XP projects where the customers are played by feature leads. The feature leads in turn answer to the real customer. Subdividing until you get to reasonably sized XP projects seems feasible at least in theory. -- <a href="http://c2.com/cgi/wiki?RobHarwood">RobHarwood</a> <em>(<a href="http://c2.com/cgi/wiki?EditHint">EditHint</a>: Feel free to reword this, it's a bit of an embryonic idea.)</em>
<p><hr>
<p>Heard our new Director of Operations talking about <a href="http://c2.com/cgi/wiki?TheoryXxAndTheoryYy">TheoryXxAndTheoryYy</a> the other day. I guess <a href="ExtremeProgramming.html">ExtremeProgramming</a> takes the <a href="http://c2.com/cgi/wiki?TheoryYy">TheoryYy</a> approach. -- <a href="http://c2.com/cgi/wiki?RobHarwood">RobHarwood</a>
<p><hr>
<p>What about the rumors of the new <a href="http://c2.com/cgi/wiki?MicrosoftXp">MicrosoftXp</a> product line?
<p>Huh?<hr><a href="http://c2.com/cgi/wiki?edit=ExtremeProgramming">EditText</a> of this page (last edited March 8, 2001)<br><a href="http://c2.com/cgi/wiki?FindPage&value=ExtremeProgramming">FindPage</a> by browsing or searching<p><font color=gray size=-1>This page mirrored in <a href="index.html">ExtremeProgrammingRoadmap</a> as of March 31, 2001</font></body>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?