<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.developerdotstar.com/community" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>developer.* Blogs - Open Comments Thread for &amp;quot;Code As Design: Three Essays by Jack W. Reeves&amp;quot; - Comments</title>
 <link>http://www.developerdotstar.com/community/node/135</link>
 <description>Comments for &quot;Open Comments Thread for &quot;Code As Design: Three Essays by Jack W. Reeves&quot;&quot;</description>
 <language>en</language>
<item>
 <title>Higher or lower</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-1928</link>
 <description>&lt;p&gt;As computer power increases, level of abstraction is raised, allowing the programmer to &quot;design&quot; at a different level, while the design decisions that used to have to be made at a lower level.&lt;/p&gt;
</description>
 <pubDate>Wed, 06 Dec 2006 23:36:03 -0800</pubDate>
 <dc:creator>paper shredders</dc:creator>
 <guid isPermaLink="false">comment 1928 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>One of &#039;THE&#039; best article</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-685</link>
 <description>&lt;p&gt;One of &#039;THE&#039; best article about software design. For a person who wants to be a good programmer, he should be able to read others WELL written programs.&lt;/p&gt;
&lt;p&gt;Which is the good code base that you guys can think of (ofcourse, open source), please share your thoughts.&lt;/p&gt;
</description>
 <pubDate>Mon, 12 Dec 2005 11:41:29 -0800</pubDate>
 <dc:creator>Krishna</dc:creator>
 <guid isPermaLink="false">comment 685 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Design</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-487</link>
 <description>&lt;p&gt;IMO,the development process goes through follwoing phases.&lt;/p&gt;
&lt;p&gt;            &lt;strong&gt;  problem specification&lt;/strong&gt;&lt;br /&gt;
             [there may be many ways to solve a problem ]&lt;br /&gt;
                             |&lt;br /&gt;
                             ^&lt;br /&gt;
  &lt;strong&gt;     we select one way to solve the problem&lt;/strong&gt;&lt;br /&gt;
            [generally accepted as the top level design.&lt;br /&gt;
             but the top level needs refinements..for example&lt;br /&gt;
             at algorithmic level]&lt;br /&gt;
                             |&lt;br /&gt;
                             ^&lt;br /&gt;
     &lt;strong&gt; We accept ceratin solutions and stick to them&lt;/strong&gt;&lt;br /&gt;
             [generally accepted as the detailed design.From this&lt;br /&gt;
             point or roughly at this point we will be&lt;br /&gt;
             concerned about the implementation&lt;br /&gt;
             (analogous to which materials to use&lt;br /&gt;
             in construction), we might choose some&lt;br /&gt;
             technology, language ,platform or what&lt;br /&gt;
             ever which is feasible and acceptable.]&lt;/p&gt;
&lt;p&gt;                            |&lt;br /&gt;
                            ^&lt;br /&gt;
   &lt;strong&gt;    we implement the detailed design.some&lt;br /&gt;
           refinemnts  may be made here as well(some thing&lt;br /&gt;
           specific to the technology used).&lt;/strong&gt;&lt;br /&gt;
           [please note that from the top level we may have&lt;br /&gt;
            a handful of solutions for the detailed design,&lt;br /&gt;
            or from the detailed design a few other ways&lt;br /&gt;
          to implement the design available but as we get&lt;br /&gt;
          more and more specific we get a ready to build stuff]&lt;br /&gt;
                           |&lt;br /&gt;
                           ^&lt;br /&gt;
            &lt;strong&gt; Just produce the output! &lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;*) Now its up to us to pick what is the design. I would say the detailed design docs are the actual design statements.From this point onwards we worried only about a specific product [ie, we have already  made the choice for the materials that we are going to use in the construction process]. &lt;/p&gt;
&lt;p&gt;*) I can point to the implementation output[the code] and say that this is the design for this particular build.Thats it.&lt;/p&gt;
&lt;p&gt;*) the implementation is no mean job, sheer choices and complexity associated with this in itself is &#039;the&#039; challenge. &lt;/p&gt;
&lt;p&gt;*) this is pretty anaogous to a motor car design.Whats the design here. Is it the final spec that says -&lt;br /&gt;
a)use 20mm nuts here,use aluminium alloy to coat the surface at .2 mm thickness?&lt;br /&gt;
OR&lt;br /&gt;
b) say the detailed design saying the nut size can be 2mm-4mm[essentilly use 2.5% of the length of the bolt]&lt;/p&gt;
&lt;p&gt;I would say option b is simple and every body understands.we maintain sufficient abstraction but we have a certain level of specification as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
#1)Jack is right if we say that this is the design for version 2.1.1 of SOFTWARE.&lt;/p&gt;
&lt;p&gt;#2)I am right if we say this is the design for 2.1.X of SOFTWARE.&lt;/p&gt;
&lt;p&gt;#3)The conventional architects are right if we say this this the design doc for 2.X.X of SOFTWARE.&lt;/p&gt;
&lt;p&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;i&gt;&lt;br /&gt;
Its a matter of choice.who ever we are either belonging to group1,2or group 3 our aim, as well as the end users aim, is to make say release 10.0.0 a complete one.&lt;br /&gt;
&lt;/strong&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;many thanks,&lt;br /&gt;
+ashly&lt;/p&gt;
</description>
 <pubDate>Sat, 20 Aug 2005 02:48:31 -0700</pubDate>
 <dc:creator>Ashly Varghese</dc:creator>
 <guid isPermaLink="false">comment 487 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>A Foundation For Everything that is Software Engineering</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-448</link>
 <description>&lt;p&gt;Brilliant...yet it&#039;s so simple I find it difficult to understand how there has been so much opposition to the concept. It is fundamentally in line with concepts developed and used in all other engineering disciplines.&lt;br /&gt;
As Software Engineers we have a distinct advantage and distinct disadvantage over our engineering counterparts. The distinct advantage is that the computers we use are powerful enough to &quot;build&quot; our product very quickly and cheaply. This makes concepts such as TDD (Test Driven Development...which should be more appropriately known as Test Driven Design) so powerful because we can immediately see the impact and validity of our design. The distinct disadvantage we have is that we have to make our design readable to a machine...and currently that machine has a limited vocabulary and cannot make decisions on there own. We have to fill in most of the blanks. Imagine the size of construction design documents if it was necessary to tell the manufacturers how the wood was to be made...or the steel.&lt;/p&gt;
</description>
 <pubDate>Tue, 12 Jul 2005 14:31:44 -0700</pubDate>
 <dc:creator>Ryan</dc:creator>
 <guid isPermaLink="false">comment 448 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>RE: What is design?</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-434</link>
 <description>&lt;p&gt;I think you missed the analogy the author was giving.  If you compare source code as the instructions to the compiler the same way engineering design specs are instructions to the non-engineer manufacturers on the shop floor, then a typo is very similar to a mistake in the engineering design spec.  In this case, a source code typo is part of the design; the design just has a flaw.&lt;/p&gt;
</description>
 <pubDate>Fri, 01 Jul 2005 12:53:27 -0700</pubDate>
 <dc:creator>Kevin</dc:creator>
 <guid isPermaLink="false">comment 434 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>What is design?</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-343</link>
 <description>&lt;p&gt;In the following code fragment, what is the design?&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;
&lt;pre&gt;int multiply(int a, int b)&lt;br /&gt;{&lt;br /&gt;  /* Returns the product of a and b */&lt;br /&gt;  return a + b;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Surely a typo does not count as a design, as much as a missed brush stroke by a master painter. Source code is the outcome of the design phase of a project, plus errors, omissions, and workarounds. As computer power increases, level of abstraction is raised, allowing the programmer to &quot;design&quot; at a different level, while the design decisions that used to have to be made at a lower level are done with prebuilt software libraries or optimized by specialized software such as compilers, runtime optimizers and query plans.&lt;/p&gt;
</description>
 <pubDate>Mon, 25 Apr 2005 04:47:03 -0700</pubDate>
 <dc:creator>Chui Tey</dc:creator>
 <guid isPermaLink="false">comment 343 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Source Code Stretch</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-296</link>
 <description>&lt;p&gt;I&#039;m not sure I agree that the definition of source code needs to be overly stretched to incoroprate the artifacts you mention. I&#039;m not 100% sure that I understand what it is that you&#039;re talking about re: &quot;the world of domain-specific languages and transformations&quot;, but I believe that the definition of source code should be basically anything that is used to build your final product. This obviously includes such things as configuration files and build scripts. And I think it should also include any documents or artifacts that are used to generate other source code. &lt;/p&gt;
&lt;p&gt;For example, if you create UML diagrams and then use these to generate basic source code files and subsequently modify the UML and regen the code, then your UML and your generated code are both source code. Further, the argument could be made that if you simply compile and use the generated source code files as-is, without modifying them, then the only source code is the UML. The generated &quot;code&quot; files are more along the lines of compiled class files--the results of your source code, and not the code itself.&lt;/p&gt;
&lt;p&gt;However, if you simply create UML diagrams to guide you in the design and writing of your code (in other words, nothing automatic happens) then your UML diagrams are documentation and not source code.&lt;/p&gt;
&lt;p&gt;This may sound like so much semantic tap dancing, but I think there&#039;s an important distinction to be made. The term &quot;source code&quot; should not be limited to simply programming language code. A broader understanding of what source code is helpful in understanding the ideas behind agile programming and xp.&lt;/p&gt;
</description>
 <pubDate>Tue, 29 Mar 2005 14:45:25 -0800</pubDate>
 <dc:creator>Rob MacGrogan</dc:creator>
 <guid isPermaLink="false">comment 296 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>&#039;Source Code Listings&#039; are a narrow world view</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-290</link>
 <description>&lt;p&gt;I&#039;ll buck the trend here. Most of both (very nicely written) articles are based on a basic assumption: source code listings (in your choice of programming language) are the only things that can be debugged, hence the only things we can have confidence in.&lt;/p&gt;
&lt;p&gt;The world of domain-specific languages and transformations allows us to express (solutions to) problems as models (text or graphical, but not what you would normally consider a &#039;source code listing&#039;) expressed in the language of the problem domain, and to test and debug at that level. &lt;/p&gt;
&lt;p&gt;Somewhat separately we describe the mappings to other (implementation) languages. These mappings can also be more incomplete, customizable, or requiring explicit guidance than the command-line switches of your typical programming language compiler. And they can cover much more than c++ to machine code: they can target languages for include platform configuration, deployment, security, and more.&lt;/p&gt;
&lt;p&gt;All creative parts of &quot;design&quot; are then located either in the choice and design of the languages themselves, in the models that describe the (solutions to) problems, and in the mappings to other languages.&lt;/p&gt;
&lt;p&gt;I think the &#039;Source Code Listing&#039; view will need to be stretched quite a bit to accomodate this.&lt;/p&gt;
</description>
 <pubDate>Wed, 23 Mar 2005 09:07:07 -0800</pubDate>
 <dc:creator>Guest</dc:creator>
 <guid isPermaLink="false">comment 290 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>C++ vs Smalltalk</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-278</link>
 <description>&lt;p&gt;The article says how C++ is a very expressive design language.  That may be true, but I don&#039;t understand why the world doesn&#039;t give Smalltalk the recognition it deserves.  There is no more expressive and source-code-as-documentation language in existence that surpasses Smalltalk.  It&#039;s object-oriented and has been around since the 70s, so C++ is not exactly a breakthrough in comparison.  Not to mention it&#039;s infinitely easier to read and debug and making something useful out of it can be done very quickly.  Many claim that Smalltalk just isn&#039;t fast enough to compete with C++, but there have been virtual machines made for Smalltalk that make it just as fast, suitable for embedded systems.  But somehow this beautiful language never really caught on, and that is real shame, because this language can really fulfil the criteria for advances to which Mr. Reeves refers.&lt;/p&gt;
</description>
 <pubDate>Tue, 15 Mar 2005 07:59:22 -0800</pubDate>
 <dc:creator>Margaret Unger</dc:creator>
 <guid isPermaLink="false">comment 278 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Re: Educating IT decision-makers</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-271</link>
 <description>&lt;p&gt;Well said Claire!&lt;/p&gt;
</description>
 <pubDate>Thu, 10 Mar 2005 00:13:56 -0800</pubDate>
 <dc:creator>John Rusk</dc:creator>
 <guid isPermaLink="false">comment 271 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Maintaining the system</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-264</link>
 <description>&lt;p&gt;As far as maintaining the system is concerned, I don&#039;t see how someone would be better off reading code rather than having a look at some well structured *models* of the system, highlighting a particular view and shielding you from the noise of irrelevant implementation details.&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
</description>
 <pubDate>Tue, 08 Mar 2005 02:33:53 -0800</pubDate>
 <dc:creator>Guest</dc:creator>
 <guid isPermaLink="false">comment 264 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Educating IT decision-makers</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-252</link>
 <description>&lt;p&gt;I enjoyed the article because it is an exploration of questions and issues that I have pondered over myself.  The comment that I want to raise is more of a spin-off from your article than a direct comment.  There&#039;s a lot of debate about how to develop software by people who are actually doing the work.  What I find difficult and frustrating is the fact that the work we do is often ultimately commissioned by people who have no programming background.  Because they don&#039;t understand the nature of the process which delivers them a piece of software they are often the people who drive unreasonable expectations for projects.&lt;br /&gt;
I like the article because it&#039;s written (I think) in pretty simple terms and could be understood by people who aren&#039;t programmers.  (You don&#039;t need a degree in Computer Science to understand the &#039;less able physician&#039; analogy, for example.)  Maybe articles like this and debate about articles like this should be part of the curriculum for people who study law, accountancy, etc - basically anyone who might end up as a project sponsor or a decision-maker for an IT project.&lt;/p&gt;
</description>
 <pubDate>Fri, 04 Mar 2005 02:41:13 -0800</pubDate>
 <dc:creator>Claire Henning</dc:creator>
 <guid isPermaLink="false">comment 252 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Design versus Programming</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-251</link>
 <description>&lt;p&gt;Jack, I&#039;m glad I had the opportunity to read through your views on software design.  Your insights have helped me to crystalize my own view points on the nature of my profession.&lt;/p&gt;
&lt;p&gt;I&#039;d like to relate my experiences to you, hoping to add another voice to chorus seconding your views.&lt;/p&gt;
&lt;p&gt;About five years ago, I joined a rapid application development team that was floundering.  We were a loose affiliation of contractors and junior programmers without a guiding force.  After I had been with the team for about six months, I suggested that we start creating formal designs for our projects.  At the time, I thought I was doing it to help ensure that the code we generated was more correct and so our development times would be shorter.&lt;/p&gt;
&lt;p&gt;It turned out that even though we generated the documents and went through the design cycle, we still weren&#039;t able to produce software as reliably and quickly as I thought we could.  Shortly after this round of design documents were produced, we went through the industry-wide IT purge and lost roughly half of our developers.  After the purge happened, we stopped doing the formal design documents, but the tools we built were built faster and with fewer bugs - even though we didn&#039;t have time to go though the formal process.&lt;/p&gt;
&lt;p&gt;I think the real key is in the &quot;Less-Able&quot; Programmer concept.  Looking back now, I think the reason I pushed so hard for design documents is not that I felt like I needed to have a design document, but that I wanted the less experienced programmers or the weaker developers to have to go through the process so that their designs could be reviewed and modified as early as possible.  Perhaps I even thought that I could teach these people how to improve their software designs.&lt;/p&gt;
&lt;p&gt;In the end, though, even though design documents were written and reviewed and approved, the people responsible for building the software couldn&#039;t do it.  They wrote the documents, but still couldn&#039;t write the code.  And this was for a design that they had written.  I find it hard to imagine that any large software projects ever succeed that have different teams doing design and implementation.&lt;/p&gt;
&lt;p&gt;I&#039;ve been thinking alot about the Less-Able progremmer concept in relation to CMM levels as well, because there is a push at the company I work for to attain CMM level 3.  I believe that you need the overhead of CMM level 3, 4, or 5 class processes to ensure that the producitivity and quality you get out of each developer is the same.  That&#039;s not to say that you raise the productivity and quality of all your developers - just that all your developers look alike.  This helps to build schedules, timelines and budgets, but doesn&#039;t do a whole lot to build better software faster.  I&#039;m not saying that having a process is bad, just that large, cumbersome processes do not accentuate the abilities of great developers - it mitigates the failures of &quot;Less-Able&quot; developers.&lt;/p&gt;
&lt;p&gt;Eric&lt;/p&gt;
</description>
 <pubDate>Thu, 03 Mar 2005 19:32:20 -0800</pubDate>
 <dc:creator>Eric Helvey</dc:creator>
 <guid isPermaLink="false">comment 251 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>&quot;What&quot; is in the spec</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-250</link>
 <description>&lt;p&gt;[quote]&lt;br /&gt;
IMO, design is about the separation of &quot;what&quot; from the &quot;how&quot;, as far as possible.&lt;br /&gt;
[/quote]&lt;br /&gt;
I believe the &quot;what&quot; would be the S/W Specification, and the &quot;how&quot; would be the S/W Implementation.&lt;br /&gt;
But, by definition, the S/W Specification does not contain any implementation-level information. So the utility of the view that they need to be separated, is lost on me.&lt;br /&gt;
Also, the S/W Implementation does not exist at the time of S/W Design, in the majority ot today&#039;s S/W development scenarios, anyway.&lt;br /&gt;
Ultimately, you end up promoting as the (maybe not the only) right way, one of the author&#039;s observations that&lt;br /&gt;
[quote]&lt;br /&gt;
As just a small point, all programmers know that writing the software design documents after the code instead of before, produces much more accurate documents.&lt;br /&gt;
[/quote]&lt;br /&gt;
You also say about S/W Design that&lt;br /&gt;
[quote]&lt;br /&gt;
It&#039;s a valuable process, because it clarifies thought and intent.&lt;br /&gt;
[/quote]&lt;br /&gt;
I submit that, source code with disciplined comments, and the &quot;auxillary documents&quot; mentioned by the author, sufficiently &quot;clarify thought and intent&quot;. So, in a way, you seem to agree that the S/W Implementation &lt;strong&gt; is &lt;/strong&gt; the S/W design.&lt;br /&gt;
I would be interested in hearing from others on your point of view.&lt;/p&gt;
</description>
 <pubDate>Thu, 03 Mar 2005 08:18:39 -0800</pubDate>
 <dc:creator>Yatheendra</dc:creator>
 <guid isPermaLink="false">comment 250 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Yup! you are right</title>
 <link>http://www.developerdotstar.com/community/node/135#comment-248</link>
 <description>&lt;p&gt;This was the same view I had before being rudely shocked by people who had learnt software engineering.&lt;/p&gt;
</description>
 <pubDate>Thu, 03 Mar 2005 01:10:49 -0800</pubDate>
 <dc:creator>Arun Kumar</dc:creator>
 <guid isPermaLink="false">comment 248 at http://www.developerdotstar.com/community</guid>
</item>
<item>
 <title>Open Comments Thread for &quot;Code As Design: Three Essays by Jack W. Reeves&quot;</title>
 <link>http://www.developerdotstar.com/community/node/135</link>
 <description>&lt;p&gt;This an open comments thread for the three part essay published in &lt;i&gt;developer.* Magazine&lt;/i&gt; called &quot;&lt;a href=&quot;/mag/articles/reeves_design_main.html&quot;&gt;Code As Design: Three Essays by Jack W. Reeves&lt;/a&gt;.&quot;&lt;/p&gt;
&lt;p&gt;The featured essay, &quot;What Is Software Design?,&quot; was first published in 1992. Also included is a new essay entitled &quot;What Is Software Design: 13 Years Later&quot; and the original letter to the editor that inspired &quot;What Is Software Design?&quot;&lt;/p&gt;
&lt;p&gt;If you haven&#039;t already, you &lt;a href=&quot;/mag/articles/reeves_design_main.html&quot;&gt;can read it here&lt;/a&gt;, then add your comments below.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.developerdotstar.com/community/node/135&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.developerdotstar.com/community/node/135#comment</comments>
 <category domain="http://www.developerdotstar.com/community/taxonomy/term/34">Software Development Articles</category>
 <category domain="http://www.developerdotstar.com/community/taxonomy/term/1">Software Design</category>
 <pubDate>Wed, 23 Feb 2005 17:55:41 -0800</pubDate>
 <dc:creator>Daniel Read</dc:creator>
 <guid isPermaLink="false">135 at http://www.developerdotstar.com/community</guid>
</item>
</channel>
</rss>
