<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Marco Dorantes' WebLog</title><link>http://blogs.msdn.com/marcod/default.aspx</link><description>"Knowledge increases not by the matching of mind images with the real world -which is impossible-, that is, not by the direct perception of truth, but by a relentless bias toward the perception of error. This is as true of folk knowledge as it is of science" -Kenneth Boulding</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Product owner</title><link>http://blogs.msdn.com/marcod/archive/2009/10/30/ProductOwnerAccountability.aspx</link><pubDate>Fri, 30 Oct 2009 15:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9916219</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9916219.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9916219</wfw:commentRss><description>&lt;P class="ident noide"&gt;Writing software for my own—or my kids—use and delight is almost always a fun and successful endeavor, if expectations are not well managed, I throw it away, no problem. Likewise, when programmers write software for their own use, there are more chances the software can be steered gracefully to a useful end.&lt;/P&gt;
&lt;P class=ident&gt;It is quite different writing software for paying customers when the business value is a moving target. One development management strategy is to isolate the development team from such dynamism for at least a short period of time (30 days in the case of Scrum). Then reflect how close we are from the adjusted target and plan the next short development cycle based on current priorities. Enabling the &lt;A href="http://blogs.msdn.com/marcod/archive/2005/07/19/TheGrowthOfAFeature.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2005/07/19/TheGrowthOfAFeature.aspx"&gt;growth of the functional capacities the business actually needs&lt;/A&gt;. The whole point of the &lt;A href="http://blogs.msdn.com/marcod/archive/2008/09/30/AdaptiveMethodsForReality.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2008/09/30/AdaptiveMethodsForReality.aspx"&gt;adaptive methods&lt;/A&gt; of development is to give chance to the related parties —and especially to the Product Owner— to learn, to realize, to corroborate, what is the actual —up to a given point in time— need; and to direct the development effort only toward that need.&lt;/P&gt;
&lt;P class=ident&gt;In addition, if involved people lack the awareness of what entails this style of development for each role —like the accountability for steering the effort by the Product owner— then, &lt;A href="http://blogs.msdn.com/marcod/archive/2008/12/05/NewExcusesForBrittleSoftware.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2008/12/05/NewExcusesForBrittleSoftware.aspx"&gt;agile and lean fads become the new excuses for brittle software&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9916219" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/agile/default.aspx">agile</category></item><item><title>Writing</title><link>http://blogs.msdn.com/marcod/archive/2009/09/30/Writing.aspx</link><pubDate>Wed, 30 Sep 2009 14:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9901317</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9901317.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9901317</wfw:commentRss><description>&lt;P class="ident noide"&gt;The act of writing demands some skills from the writer, skills of the intellectual kind. Of course, the demand varies accordingly to the type of writing among many other factors.&lt;/P&gt;
&lt;P class=ident&gt;Writing texts for humans, from blog posts to literature, is challenging if the purpose is to convey a message in a clear and concise way, as possible.&lt;/P&gt;
&lt;P class=ident&gt;Writing technical texts for humans and computers, also known as &lt;A href="http://blogs.msdn.com/marcod/archive/2009/02/07/AnArtisticProgrammingTextbook.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2009/02/07/AnArtisticProgrammingTextbook.aspx"&gt;the act of artistic programming of digital computers&lt;/A&gt;, is also very challenging.&lt;/P&gt;
&lt;P class=ident&gt;Based on typical conversations between IT professionals nowadays, I guess that only very few people alive today actually &lt;I&gt;know&lt;/I&gt; what really entails a common communication between humans and computers through technical texts (also known as source code).&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901317" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category></item><item><title>SQA — Are you–really–making sure that quality is present?</title><link>http://blogs.msdn.com/marcod/archive/2009/08/30/SQA.aspx</link><pubDate>Sun, 30 Aug 2009 17:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9889901</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9889901.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9889901</wfw:commentRss><description>&lt;P class="ident noide"&gt;What is the idea behind SQA?&lt;/P&gt;
&lt;P class=ident&gt;If SQA stands for “Software Quality Assurance”, then I hardly find a project team member not under that cap —in a team with agile principles, values and practices, that is.&lt;/P&gt;
&lt;P class=ident&gt;If SQA stands for “testing” (validation and verification testing, for functional/integration/acceptance testing purposes) then I think the old practice of having a different set of professionals doing destructive testing still is a good advice (if finding bugs is the goal).&lt;/P&gt;
&lt;P class=ident&gt;Unit testing for Test-driven design is for developers (constructive mindset), validation and verification for functional/integration/acceptance testing purposes is for testers (destructive mindset). Hence, testers’ role does not change very much while adopting agile methods.&lt;/P&gt;
&lt;P class=ident&gt;Moreover, making really sure quality is in there implies something greater than thinking SQA as a role &lt;I&gt;some&lt;/I&gt; people have in a software project.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9889901" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/agile/default.aspx">agile</category></item><item><title>Where are we -as industry- about delivering business value to customers?</title><link>http://blogs.msdn.com/marcod/archive/2009/07/22/WhereAreWe.aspx</link><pubDate>Thu, 23 Jul 2009 05:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9845571</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9845571.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9845571</wfw:commentRss><description>&lt;P style="TEXT-ALIGN: justify; MARGIN-TOP: 0px; TEXT-INDENT: 0px; FONT: large/120% Georgia; COLOR: black"&gt;For a hint, see the The Standish Group CHAOS Report summary:&lt;/P&gt;
&lt;P style="TEXT-ALIGN: justify; MARGIN-TOP: 0px; TEXT-INDENT: 0px; FONT: large/120% Georgia; COLOR: black"&gt;&lt;A href="http://www1.standishgroup.com/newsroom/chaos_2009.php" mce_href="http://www1.standishgroup.com/newsroom/chaos_2009.php"&gt;CHAOS Report Summary 2009&lt;/A&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: justify; TEXT-INDENT: 0px; MARGIN: 0.25in; FONT: large/120% Georgia; COLOR: black"&gt;"These numbers represent a downtick in the success rates from the previous study, as well as a significant increase in the number of failures", says Jim Crear, Standish Group CIO, "They are low point in the last five study periods. This year's results represent the highest failure rate in over a decade"&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9845571" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category></item><item><title>Is there such a thing like a method of design?</title><link>http://blogs.msdn.com/marcod/archive/2009/06/15/AreThereDesignMethods.aspx</link><pubDate>Mon, 15 Jun 2009 09:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9852997</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9852997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9852997</wfw:commentRss><description>&lt;P class="ident noide"&gt;I have observed, time after time, an author or renowned professional share or publish her opinion about something, said, in time T1. Many people listen to that opinion —with accuracy or with misinterpretation— and then take that view for granted. Moreover, many, many people start behaving like propagandists of such reinterpreted or particular view; they even start enterprises based on generalizations of such views. Sometimes, curiously enough, the original author —who is guided by his own critical powers— find out, in time T2, new corroborated information which become the base for a shift in opinion or a significant improvement over her previous views. Including a complete departure from what he previously said.&lt;/P&gt;
&lt;P class=ident&gt;For instance, about 1964, &lt;A href="http://www.patternlanguage.com/leveltwo/ca.htm" mce_href="http://www.patternlanguage.com/leveltwo/ca.htm"&gt;Christopher Alexander&lt;/A&gt; wrote a book entitled &lt;A href="http://www.addall.com/detail/0674627512.html" mce_href="http://www.addall.com/detail/0674627512.html"&gt;Notes on the synthesis of form&lt;/A&gt;. Many people understood that what is important about design is the process or method of design and they emphatically pursued the development of design processes as mean to better designs. &lt;A href="http://g.oswego.edu/dl/index.html" mce_href="http://g.oswego.edu/dl/index.html"&gt;Doug Lea&lt;/A&gt; wrote about the &lt;A href="http://g.oswego.edu/dl/ca/ca/ca.html" mce_href="http://g.oswego.edu/dl/ca/ca/ca.html"&gt;integration of Alexander’s works to field of software design&lt;/A&gt;.&lt;/P&gt;
&lt;P class=ident&gt;Almost ten years later, the same Christopher Alexander wrote a preface to the paperback 1971 edition of the same book. There he explains that after the book was written, he discovered new information that leaded him to understand how unfortunate is the disproportion portrayed in the book between the attention given to the design method or process and the attention given to the practice of design itself. Mainly, &lt;I&gt;because no one will become a better designer by blindly following the denoted design method, or indeed by following any method blindly&lt;/I&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9852997" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category></item><item><title>Central piece of code as a cornerstone for a tool</title><link>http://blogs.msdn.com/marcod/archive/2009/05/08/UploadFileToSharepoint.aspx</link><pubDate>Fri, 08 May 2009 08:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9852955</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9852955.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9852955</wfw:commentRss><description>&lt;P class="ident noide"&gt;Sometimes, the idea of a tool could gravitate around a very simple piece of code, an enabling mechanism that gives life to a much larger functionality.&lt;/P&gt;
&lt;P class="ident noide"&gt;That is the case of a simple tool I am writing for my own use. It is an application, based on Windows Presentation Foundation, which help me to upload files from my local hard drive to a number of Windows Sharepoint sites and folders; following my own uploading and publishing patterns.&lt;/P&gt;
&lt;P class="ident noide"&gt;The whole of the tool goes around this single piece of code:&lt;/P&gt;&lt;IMG alt="" src="http://marcod.members.winisp.net/images/UploadFileToSharepoint.jpg" mce_src="http://marcod.members.winisp.net/images/UploadFileToSharepoint.jpg"&gt; &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9852955" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/detailed+design/default.aspx">detailed design</category></item><item><title>The importance of doubt in software design</title><link>http://blogs.msdn.com/marcod/archive/2009/04/30/ImportanceOfDoubt.aspx</link><pubDate>Fri, 01 May 2009 03:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9581616</guid><dc:creator>marcod</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9581616.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9581616</wfw:commentRss><description>&lt;P class="ident noide"&gt;The acts of exploring and discovering which start from simple doubts —kind of ‘&lt;I&gt;I am not entirely sure about...&lt;/I&gt;’ thoughts— is what makes software design and computer programming so exhilarating for me. Doubts from the efficiency or balance of a given design decision to the net and long-term benefits of traditional beliefs about the software development process in a business context.&lt;/P&gt;
&lt;P class=ident&gt;Based on the results so far from my personal research program on the subject of the act of computer programming, I have corroborated that this activity can be reduced —regarding its essence— to a pure act of design. Hence, further improvement or advancement of the software development profession goes on the road of improving the design skills of practitioners.&lt;/P&gt;
&lt;P class=ident&gt;Software designers on the road to seasoned software professionals will need education about art —please note that here education is used in its widest sense and not just the popular notion of schooling— and about methodologies of intellectual work in language, literature, history and philosophy. Of course, as is the case for the good education, it is self-inflicted. That is to say, training can be given but education can only be chosen.&lt;/P&gt;
&lt;P class=ident&gt;Among the set of dexterities in a software designer, the ability to think critically stands as a very important one. The exercise of the critical sense —in contrast with the common sense— has proved very beneficial for the design task and directly related to the quality attributes of its outcome, namely, working software that delivers actual business value.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9581616" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category></item><item><title>Know your design tools — The Singleton case</title><link>http://blogs.msdn.com/marcod/archive/2009/03/29/KnowYourDesignToolsTheSingletonCase.aspx</link><pubDate>Mon, 30 Mar 2009 05:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9517806</guid><dc:creator>marcod</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9517806.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9517806</wfw:commentRss><description>&lt;P class="ident noide"&gt;A professional software designer —one whose next paycheck depends on the quality of her software— looks for an ever increasing acquaintance with his design tools.&lt;/P&gt;
&lt;P class=ident&gt;One of the most important design tools in software is the actual computing machine —abstract, virtual and physical— where the software under design will be executed. The reason why the computer is a design tool is the interacting or conversational exchange with it that allows better design decisions. That is, the practice of a reflective conversation with the situation at hand as described by &lt;A href="http://blogs.msdn.com/marcod/archive/2004/08/18/216823.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2004/08/18/216823.aspx"&gt;The Reflective Practitioner: How Professionals Think in Action by Donald A. Schön&lt;/A&gt;.&lt;/P&gt;
&lt;P class=ident&gt;One benefit out of such conversational exchange with the computing environment is that hardware and software components will be utilized closer to their original intent, unnecessary code will not be present and thus simple, clean, less complex, and more maintainable software could be put on the hands of users.&lt;/P&gt;
&lt;P class="ident vcsharp"&gt;For instance, if you need to implement the Singleton design pattern using Microsoft Visual C&lt;SUP&gt;#&lt;/SUP&gt; upon the &lt;A href="http://msdn.microsoft.com/en-us/netframework/aa569283.aspx" mce_href="http://msdn.microsoft.com/en-us/netframework/aa569283.aspx"&gt;Common Language Infrastructure (CLI)&lt;/A&gt; implementation from Microsoft, the Common Language Runtime (CLR), then it is better to first know these design tools in depth instead of trying ‘as is’, the same, unquestioned assumptions from other computing environments.&lt;/P&gt;
&lt;P class=ident&gt;The point of Singleton is to have a single instance of a class, an exact same object shared across a given CLR AppDomain inside a Windows’s Win32_Process instance, that is, a global state available to all executing threads in the give CLR AppDomain.&lt;/P&gt;
&lt;P class=ident&gt;The idea is, given this method...&lt;/P&gt;&lt;PRE&gt;static bool AreTheseTheExactSameObject(object a, object b)
{
  return object.ReferenceEquals(a, b);
}
&lt;/PRE&gt;
&lt;P class="ident noide "&gt;...that the following assertion will succeed, even if this assertion is executed concurrently by a plethora of AppDomain’s threads:&lt;/P&gt;&lt;PRE&gt;object a = TimepointSingleton.Instance;
object b = TimepointSingleton.Instance;
System.Diagnostics.Debug.Assert(AreTheseTheExactSameObject(a, b));
&lt;/PRE&gt;
&lt;P class=ident&gt;The horror of global variables from old structured design techniques strikes back, now in the form of nice-looking object oriented terms. The horror could be kept in control if the shared state is read-only. But, even if the shared object’s state is read-only, there is one state that must be written once at instantiation time: the variable holding the reference to that single and shared object.&lt;/P&gt;
&lt;P class=ident&gt;At instantiation time the following constructor must be executed only once:&lt;/P&gt;&lt;PRE&gt;private TimepointSingleton()
{
  point = DateTime.Now;
  Console.WriteLine("Timepoint acquired");
  
  //This simulates resource contention to show up
  //better the multithreading problem when no
  //proper thread synchronization is in place.
  System.Threading.Thread.Sleep(4000);
}
&lt;/PRE&gt;
&lt;P class="ident noide"&gt;With the following class type member field:&lt;/P&gt;&lt;PRE&gt;private DateTime point;
&lt;/PRE&gt;
&lt;P class=ident&gt;The private access modifier in the constructor ensures that instantiation could only occur inside the class; no other place in the program could create objects of this class. The one and only instance of this class is created by the class itself and its reference will be kept in a private static field member and accessed by a static read-only property:&lt;/P&gt;&lt;PRE&gt;private static readonly TimepointSingleton instance;
public static TimepointSingleton Instance { get { return instance; } }
&lt;/PRE&gt;
&lt;P class=ident&gt;Of course, the heart of the issue is that multiple threads could invoke that public static read-only property simultaneously; which is not a problem once the object reference is in place —in the reference type variable of the private static field member— because, once initialized, this field’s value (an object reference) is read-only state for those multiple threads.&lt;/P&gt;
&lt;P class=ident&gt;So the main design decision here is how to write the object reference of the one and only instance into that private static field.&lt;/P&gt;
&lt;P class="ident vcsharp"&gt;Modern computing environments usually have implicit and explicit mechanisms that ensure the execution of a single thread in a given code point. The implicit ones are provided by the underlying execution environment and are the simplest and easy to use. That kind of mechanism is what we prefer here over explicit mechanisms that could convolute and add complexity to our design unnecessarily. Visual C++ with native code has them, and also Visual C&lt;SUP&gt;#&lt;/SUP&gt; with the current CLR.&lt;/P&gt;
&lt;P class=ident&gt;Explicit mechanisms for thread synchronization at initialization time involving single or double checks and volatile fields &lt;I&gt;could be&lt;/I&gt; applied successfully, but if simpler, implicit, mechanisms are at hand that could deliver clearer results, then they should be chosen.&lt;/P&gt;
&lt;P class="ident vcsharp"&gt;Based on empirical analysis and also corroborated from &lt;A href="http://www.addall.com/detail/0735621632.html" mce_href="http://www.addall.com/detail/0735621632.html"&gt;CLR via C# by Jeffrey Richter&lt;/A&gt;, that simpler mechanism for the Singleton case is a &lt;I&gt;static constructor&lt;/I&gt;, (also named &lt;I&gt;type initializer&lt;/I&gt; or &lt;I&gt;class constructor&lt;/I&gt;).&lt;BR&gt;From the &lt;A href="http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc"&gt;Microsoft Visual C&lt;SUP&gt;#&lt;/SUP&gt; Language Specification 3.0&lt;/A&gt;, in the &lt;I&gt;10.12 Static constructors&lt;/I&gt; section:&lt;/P&gt;
&lt;P class=ident&gt;“&lt;I&gt;The static constructor for a closed class type executes at most once in a given application domain.&lt;/I&gt;”&lt;/P&gt;
&lt;P class=ident&gt;So, the crucial code would be:&lt;/P&gt;&lt;PRE&gt;static TimepointSingleton()
{
  instance = new TimepointSingleton();
}
&lt;/PRE&gt;
&lt;P class="ident noide"&gt;This way, the class is not marked with the &lt;CODE&gt;beforefieldinit&lt;/CODE&gt; CLR metadata attribute that allows the CLR to optimize type initialization for perfomance, and not necessarily for correctness. So the following field initializer accomplishes not exactly the same thing (that is, the &lt;CODE&gt;beforefieldinit&lt;/CODE&gt; attribute is still generated):&lt;/P&gt;&lt;PRE&gt;private static readonly TimepointSingleton instance = new TimepointSingleton();
&lt;/PRE&gt;
&lt;P class="ident noide"&gt;For additional perspectives click &lt;A href="http://www.yoda.arachsys.com/csharp/singleton.html"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9517806" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/detailed+design/default.aspx">detailed design</category></item><item><title>An artistic -as in skillful- programming excellent textbook</title><link>http://blogs.msdn.com/marcod/archive/2009/02/07/AnArtisticProgrammingTextbook.aspx</link><pubDate>Sat, 07 Feb 2009 22:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9405399</guid><dc:creator>marcod</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9405399.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9405399</wfw:commentRss><description>&lt;P class="ident noide"&gt;The mind of Bjarne Stroustrup through the thinking and design style of the C++ programming language has been of critical importance for my own thinking and practice of programming. Yes, he is a philosopher of computer programming, an artistic programmer (as conveyed in &lt;A href="http://blogs.msdn.com/marcod/archive/2009/02/07/ArtisticProgrammingAsTheoryFormulation.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2009/02/07/ArtisticProgrammingAsTheoryFormulation.aspx"&gt;Artistic programming as theory formulation&lt;/A&gt;).&lt;/P&gt;
&lt;P class=ident&gt;Newcomers to computer programming and experts alike could benefit from &lt;A href="http://www.amazon.com/gp/product/0321543726/" mce_href="http://www.amazon.com/gp/product/0321543726/"&gt;Programming: Principles and Practice Using C++ book&lt;/A&gt;, as a variety of concepts and exercises are covered, including historical perspectives. Also, seasoned programmers could find many hints as the book is an instance of how an expert explains and teaches to newcomers.&lt;/P&gt;
&lt;P class=ident&gt;As a reading suggestion: in section 1.6 Ideals for programmers, a general programming process is explained and the importance of &lt;B&gt;&lt;I&gt;how&lt;/I&gt;&lt;/B&gt; testing, analysis, design and programming are related is noticed. So, for a perhaps better reading, I suggest the sixth paragraph which says:&lt;BR&gt;&lt;BR&gt;“We can describe the process of developing a program as having four stages:”&lt;BR&gt;&lt;BR&gt;would be clearer if read this way:&lt;BR&gt;&lt;BR&gt;“We can describe the process of developing a program as having four &lt;B&gt;&lt;I&gt;activities&lt;/I&gt;&lt;/B&gt;:”&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9405399" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category></item><item><title>Artistic programming as theory formulation</title><link>http://blogs.msdn.com/marcod/archive/2009/02/07/ArtisticProgrammingAsTheoryFormulation.aspx</link><pubDate>Sat, 07 Feb 2009 21:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9405261</guid><dc:creator>marcod</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9405261.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9405261</wfw:commentRss><description>&lt;P class="ident noide"&gt;An artistic painter enjoys painting. That is a trait of artful making even when there is no fulfillment other than the act of painting in itself. The same could be said about problem-solving. Financial gratification could be part of the after-the-fact effects of painting or problem-solving but is not related at all with the act of painting or solving complex problems, nor as cause, reason or driver.&lt;/P&gt;
&lt;P class=ident&gt;As time goes by, as observations and corroborations expand, computer programming —as a material object of philosophical study— looks more and more like a mix of artistic making and problem-solving activities, and less and less like an industrializable or automatable activity; there is a continuum of better tooling but that doesn’t take out a bit of the essence of programming.&lt;/P&gt;
&lt;P class=ident&gt;But, once again, &lt;A href="http://www.naur.com/comp/default.html" mce_href="http://www.naur.com/comp/default.html"&gt;what is computer programming?&lt;/A&gt; Adopting and keeping a reflexive skepticism over what we do as computer programmers and searching for better answers to that question will allow us to enhance our fulfillment and also to evolve the groundwork for the next scientific revolution related to how humans make use of digital computation.&lt;/P&gt;
&lt;P class=ident&gt;Programming entails communication, between humans and also between humans and digital computers (hence its relation with &lt;A href="http://pespmc1.vub.ac.be/CYBSYSTH.html" mce_href="http://pespmc1.vub.ac.be/CYBSYSTH.html"&gt;cybernetics&lt;/A&gt;, which is the theory or study of communication and control in living organisms or machines). For communication, we human beings make use of linguistic signs —the association of a concept with an acoustic image, as signified and signifier respectively— which are codified in a language, natural or artificial, as a medium of expression. For digital computing to take place we must, ultimately, articulate and codify our concepts in an artificial language, whether this is a programming language or the language of mathematics.&lt;/P&gt;
&lt;P class=ident&gt;A frame for effective and precise communication of concepts as &lt;A href="http://www.freeinquiry.com/intro-to-sci.html" mce_href="http://www.freeinquiry.com/intro-to-sci.html"&gt;justified true beliefs&lt;/A&gt; has been the scientific idea of theory, which represents the best effort to explain and to predict something, and yet, it has a provisional character, and never an absolutist position. For computing purposes, a theory and its formulation are the outcome and the process of programming, respectively.&lt;/P&gt;
&lt;P class=ident&gt;&lt;A href="http://alistair.cockburn.us/ASD+book+extract:+%22Naur,+Ehn,+Musashi%22" mce_href="http://alistair.cockburn.us/ASD+book+extract:+%22Naur,+Ehn,+Musashi%22"&gt;Programming as theory formulation&lt;/A&gt; occurs even if the mainstream programmer is not aware of that, perhaps this unawareness is part of the reason of crappy and brittle software. An artistic programmer, on the other hand, enjoys the act of programming, of solving problems, and frames her mind and his expression as a coherent system of general, constant and necessary relationships between concepts.&lt;/P&gt;
&lt;P class=ident&gt;Happy thinking and programming&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9405261" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category></item><item><title>The practical disproportion</title><link>http://blogs.msdn.com/marcod/archive/2009/01/31/ThePracticalDisproportion.aspx</link><pubDate>Sat, 31 Jan 2009 20:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9387691</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9387691.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9387691</wfw:commentRss><description>&lt;P class="ident noide"&gt;Some individual or a small group of them have an idea or a system of ideas that look promising out of which come outstanding outcomes. Later, those very same ideas are adopted into the mainstream but a much lesser level of greatness comes out.&lt;/P&gt;
&lt;P class="ident noide"&gt;I have observed this pattern over a number of dissimilar contexts, software development, business, religion, to name a few.&lt;/P&gt;
&lt;P class="ident noide"&gt;Why is that?&lt;/P&gt;
&lt;P class="ident noide"&gt;Is it a fixated perception that —as colored glasses— makes me watch something where there is no such a thing? Perhaps.&lt;/P&gt;
&lt;P class="ident noide"&gt;Which could be another explanation or reasonable system of interpretation for this pattern of behavior among humans?&lt;/P&gt;
&lt;P class="ident noide"&gt;A possibility is that an important part of the root cause for that situation is a disproportional focus on the practical side out of everything. Many, many people believing practical consequences are the sole criteria to judge knowledge, meaning and value.&lt;/P&gt;
&lt;P class="ident noide"&gt;I suspect the obsessive, disproportional and exclusive focus on the practical aspects of a subject matter carries most of the blame.&lt;/P&gt;
&lt;P class="ident noide"&gt;How many of us could actually explain the difference between theory and practice, theory and hypothesis, reliable knowledge and belief?&lt;/P&gt;
&lt;P class="ident noide" style="MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0.25in; TEXT-ALIGN: justify"&gt;“&lt;I&gt;Those who are enamored of practice without theory are like a pilot who goes into a ship without rudder or compass and never has any certainty where he is going. Practice should always be based upon a sound knowledge of theory&lt;/I&gt;”&lt;BR&gt;-Leonardo da Vinci (1452–1519)&lt;/P&gt;
&lt;P class="ident noide" style="MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0.25in; TEXT-ALIGN: justify"&gt;“&lt;I&gt;The trouble with people is not that they don't know but that they know so much that ain’t so&lt;/I&gt;”&lt;BR&gt;-Josh Billings (1818–1885)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9387691" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/general/default.aspx">general</category></item><item><title>Agile and lean fads are the new excuses for brittle software</title><link>http://blogs.msdn.com/marcod/archive/2008/12/05/NewExcusesForBrittleSoftware.aspx</link><pubDate>Fri, 05 Dec 2008 16:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9180161</guid><dc:creator>marcod</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9180161.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9180161</wfw:commentRss><description>&lt;P class="ident noide"&gt;Now that many are looking for ways to cut costs and maximize the benefits out of their shrunk budget, there is no shortage of offers about how to do just that. Among those offers are the agile and lean software development methods, which are quickly becoming the norm rather than the exception in the IT industry’s parlance nowadays. Soon, in most IT shops, anyone talking against agile and lean concepts will become the next weird, anti-social, anarchist, non-team-player guy that dare to endorse a different view than the mainstream view. Just as it happened when some guy started to talk about the shortcomings of structured analysis, design and programming compared with object-oriented techniques, as with many other ideas in the history of our infant industry. Each time, an exaggerated message of the future gains was given in order to hook buyers on the new ideas. Why this time would be different?&lt;/P&gt;
&lt;P class=ident&gt;Don’t get me wrong, the most gratifying and positive professional experiences —individually and in teams— on software development have come from the agile and lean mindsets. It is just that the patterns of behavior that I have seen from we humans in large groups make me wonder, why on Earth this time the substance is actually going to be broadly adopted and not just the buzzwords? Is the general public going to really enhance their average software experience because of better software or the whole point for the software providers is costs reduction only? I’m afraid the latter is closer to the truth than the former. The main concern I have is that —as far as my understanding on agile and lean mindsets can go— the former is the way to reach the latter. This has been the whole point since the first generation of Method Wars in the history of professional software development. Point that, historically, could not have been fully explained and broadly understood yet.&lt;/P&gt;
&lt;P class=ident&gt;There is adaptive software development (&lt;A href="http://blogs.msdn.com/marcod/archive/2008/09/30/AdaptiveMethodsForReality.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2008/09/30/AdaptiveMethodsForReality.aspx"&gt;also known as &lt;I&gt;agile&lt;/I&gt;&lt;/A&gt;) thinking and there is lean software development thinking, just as there are their corresponding fads (adopting only the buzzwords and not the change in mentality). The thinking part is more likely to achieve some level of the sought-after benefits, and the fads will just give a bad name to the good ideas in agile and lean.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9180161" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category><category domain="http://blogs.msdn.com/marcod/archive/tags/agile/default.aspx">agile</category></item><item><title>A way to specify behavior</title><link>http://blogs.msdn.com/marcod/archive/2008/11/30/SpecifyBehavior.aspx</link><pubDate>Mon, 01 Dec 2008 07:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9159406</guid><dc:creator>marcod</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9159406.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9159406</wfw:commentRss><description>&lt;P class="ident noide"&gt;The modern name for an ancient programming technique —which roots can be traced back to Dr. E.W. Dijkstra*— was “test-first programming” and didn’t preclude, in any sense, the need of validation and verification testing, done by an independent group of people with a different mindset and goals (whereas programmers want to release the best possible software, the testers want to stop releasing software with any lurking bug).&lt;/P&gt;
&lt;P class=ident&gt;Seasoned testing professionals usually have a bunch of techniques for testing existing software &lt;B&gt;based on already specified behavior&lt;/B&gt;, and these professionals have been able to do just well without “test-first programming”. An important project (is there any that not?) could not afford to go without these professionals and any attempt to dismiss their importance because of a programmer’s technique is a recipe for disaster.&lt;/P&gt;
&lt;P class=ident&gt;On the other hand, test-first programming is &lt;B&gt;a way to specify behavior&lt;/B&gt; and to build trust that the specified behavior is kept in place while the software grows in capacity.&lt;/P&gt;
&lt;P class="ident noide"&gt;* &lt;SPAN style="FONT: medium Georgia; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0.5in; TEXT-ALIGN: justify"&gt;“Instead, you construct a correct program in small steps. Each step takes the specification and produces something a little nearer to the final program. Each step is small enough that you can see exactly what needs to be proved to show that the step is correct.”&lt;/SPAN&gt; &lt;BR&gt;– &lt;A href="http://blogs.msdn.com/marcod/archive/2004/06/12/154045.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2004/06/12/154045.aspx"&gt;The Professor Edsger Wybe Dijkstra school of thought&lt;/A&gt; (aren’t these the eXtreme Programming test/code/refactoring micro-cycles?)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9159406" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/design/default.aspx">design</category><category domain="http://blogs.msdn.com/marcod/archive/tags/agile/default.aspx">agile</category></item><item><title>Faculties offer courses and lectures freely</title><link>http://blogs.msdn.com/marcod/archive/2008/10/29/FacultyCourses.aspx</link><pubDate>Wed, 29 Oct 2008 12:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9051920</guid><dc:creator>marcod</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/marcod/comments/9051920.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=9051920</wfw:commentRss><description>&lt;P class="ident noide"&gt;The University of Washington, the Computer Science &amp;amp; Engineering department —as other faculties like MIT and Stanford with programs like &lt;A href="http://ocw.mit.edu/OcwWeb/web/home/home/index.htm" mce_href="http://ocw.mit.edu/OcwWeb/web/home/home/index.htm"&gt;MIT OpenCourseWare&lt;/A&gt; and &lt;A href="http://see.stanford.edu/" mce_href="http://see.stanford.edu/"&gt;Stanford Engineering Everywhere&lt;/A&gt;— offers &lt;A href="http://www.cs.washington.edu/news/colloq.info.html" mce_href="http://www.cs.washington.edu/news/colloq.info.html"&gt;videos recordings of selected lectures&lt;/A&gt; and course materials. This is great for those interested in learning and further improvement.&lt;/P&gt;
&lt;P class="ident noide"&gt;For example, recently (October 21, 2008) Joe Duffy from Microsoft gave a talk about &lt;A href="http://norfolk.cs.washington.edu/htbin-post/unrestricted/colloq/details.cgi?id=768" mce_href="http://norfolk.cs.washington.edu/htbin-post/unrestricted/colloq/details.cgi?id=768"&gt;Microsoft's Parallel Computing Platform: Applied Research in a Product Setting&lt;/A&gt;. The video recording is freely available.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9051920" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/life+and+character/default.aspx">life and character</category></item><item><title>Adaptive Methods for reality</title><link>http://blogs.msdn.com/marcod/archive/2008/09/30/AdaptiveMethodsForReality.aspx</link><pubDate>Wed, 01 Oct 2008 06:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8971055</guid><dc:creator>marcod</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/marcod/comments/8971055.aspx</comments><wfw:commentRss>http://blogs.msdn.com/marcod/commentrss.aspx?PostID=8971055</wfw:commentRss><description>&lt;P class="ident noide"&gt;The attitude of mind to approach reality that has helped humans to explain and to predict phenomena (observed facts) consistently and precisely, the scientific mindset, is one among those things computer professionals could adopt to better understand software development fundamentals. There are two somehow conflicting aspects of the scientific attitude that make it so compelling just because that opposing effect.&lt;/P&gt;
&lt;P class=ident&gt;First, that eagerness to bring all possible thoughts about a subject matter by previous and current thinkers to the working table, so new work can be based on rock solid arguments gained through rigorous work and tested conclusions. In contrast, how many current software professionals have a working knowledge of structured design methods? And of first, second and third generations of object-oriented analysis and design methods?&lt;/P&gt;
&lt;P class=ident&gt;Second, in the essence of a scientific attitude is the constant disposition to disprove current beliefs, to refute our own viewpoints, an inexorable bias to distrust self-righteous thinking; that is, to put our conclusions under the most severe and ruthless testing conditions possible. Why? Kenneth Boulding said: "&lt;I&gt;Knowledge increases not by the matching of mind images with the real world —which is impossible—, that is, not by the direct perception of truth, but by a relentless bias toward the perception of error. This is as true of folk knowledge as it is of science&lt;/I&gt;". In contrast, how often can we found people with a dogmatic view of their profession in software? “&lt;I&gt;We only do this or that buzzword around here&lt;/I&gt;”, “&lt;I&gt;This brand or fashion is the only true game in town&lt;/I&gt;”, etc.&lt;/P&gt;
&lt;P class=ident&gt;The combination of those —rational and skeptic— attitudes is requisite for scientific progress, that is, the accretion of reliable knowledge about a subject matter within the reach of science (the natural world). Philosophers of science have factored those attitudes out of science and have made them available for use in other disciplines so they could also be able to advance the knowledge in their fields in a rigorous and reliable way; for instance, social sciences like sociology, economics, anthropology (which includes physical anthropology, archeology, ethnology, and linguistics), political science, and others.&lt;/P&gt;
&lt;P class=ident&gt;The world of software is a world of the artificial, a world of logical constructs governed by a different set of relationships in sharp contrast with those from the physical world and very similar to that from the field of linguistics, where the relationship between the sign (symbol), the signified (concept) and the signifier (linguistic image) is subject of significant changes between a discrete point in time (synchronic linguistic) and its evolution (diachronic linguistic). As far as we are interested &lt;I&gt;to know&lt;/I&gt; something about software development we better strengthen our critical thinking powers including those mental attitudes mentioned above.&lt;/P&gt;
&lt;P class=ident&gt;I have seen those very same attitudes in practitioners of the now generally known agile methods for software development; a distinction is in order, the practitioners I am referring to are not those just using the buzzwords, but those that bet their careers on their professional &lt;A href="http://www.agilemanifesto.org/principles.html" mce_href="http://www.agilemanifesto.org/principles.html"&gt;values and principles&lt;/A&gt;; those &lt;A href="http://blogs.msdn.com/marcod/archive/2004/08/18/216823.aspx" mce_href="http://blogs.msdn.com/marcod/archive/2004/08/18/216823.aspx"&gt;reflective practitioners&lt;/A&gt; who backup their beliefs with their behaviors, those who take the scientific approach to reality as a tool, not as a religion. These guys are perpetual learners, de facto scientists in the field of software. For they, the name &lt;I&gt;agile&lt;/I&gt; means just a starting point for a continuous cooperative understanding. The term &lt;I&gt;agile&lt;/I&gt; means only a token to bring a conversational style, just like the term &lt;I&gt;adaptive&lt;/I&gt; which, by the way, was the second candidate name word from that &lt;A href="http://www.agilemanifesto.org/history.html" mce_href="http://www.agilemanifesto.org/history.html"&gt;Snowbird, Utah meeting on February 2001&lt;/A&gt;. In my opinion, &lt;I&gt;adaptive&lt;/I&gt; reflects better the contrast with absolutist predictive approaches and emphasizes the ever-changing and self-critical nature of modern (or post-modernist from a philosophical perspective) software development processes.&lt;/P&gt;
&lt;P class=ident&gt;Adaptive methods imply —in addition— a dual mode of behavior from their practitioners, just like the progress of science needs &lt;A href="http://www.addall.com/detail/0618551050.html"&gt;a dualistic endeavor for unblocking situations&lt;/A&gt;. These modes could be called up like &lt;I&gt;Evolutionary&lt;/I&gt; and &lt;I&gt;Revolutionary&lt;/I&gt;, where the former refers broadly to a thinking style that search truth deeper in a single direction by kind of specializations and the latter means a thinking style that broaden the perspective by kind of generalizations; the traits could be like follow:&lt;/P&gt;
&lt;CENTER&gt;
&lt;TABLE class="" style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Georgia; FONT-VARIANT: normal" cellPadding=9 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;
&lt;P class="ident noide" style="FONT-WEIGHT: bold; TEXT-ALIGN: center"&gt;Evolutionary mode&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;P class="ident noide" style="FONT-WEIGHT: bold; TEXT-ALIGN: center"&gt;Revolutionary mode&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Craftspeople&lt;/TD&gt;
&lt;TD class=""&gt;Seers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Team players&lt;/TD&gt;
&lt;TD class=""&gt;Independent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Normal evolutionists&lt;/TD&gt;
&lt;TD class=""&gt;Non-normal. Revolutionary.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Technical climbers-engineers. Problem climbers.&lt;/TD&gt;
&lt;TD class=""&gt;Travelers. Valley crossers. Philosophers.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/CENTER&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8971055" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/marcod/archive/tags/agile/default.aspx">agile</category></item></channel></rss>