<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sadek Drobi's Blog &#187; Useability</title>
	<atom:link href="http://sadekdrobi.com/category/useability/feed/" rel="self" type="application/rss+xml" />
	<link>http://sadekdrobi.com</link>
	<description>Sadek Drobi</description>
	<lastBuildDate>Tue, 08 Mar 2011 22:56:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Abstraction for People: Configurations, Patterns, DSLs and Monads</title>
		<link>http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/</link>
		<comments>http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 23:10:53 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[DOTNET]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[LinQ]]></category>
		<category><![CDATA[Model Mismatch]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/</guid>
		<description><![CDATA[

LinQ is often understood in terms of introducing a Domain Specific Language to work with data to C# and .Net in general. The fact is:it is not, and there is a considerable difference between LinQ syntax nature and a DSL. The problem is that DSL definition is blur enough to take anything interesting or cool [...]]]></description>
			<content:encoded><![CDATA[</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/03/dsc-2692a3.jpg"><img style="border-right-width: 0px; margin: 0px 20px 0px 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="DSC_2692a3" align="left" src="http://sadekdrobi.com/wp-content/uploads/2009/03/dsc-2692a3-thumb.jpg" width="222" height="327"></a></p>
<p>LinQ is often understood in terms of introducing a Domain Specific Language to work with data to C# and .Net in general. The fact is:it is not, and there is a considerable difference between LinQ syntax nature and a DSL. The problem is that DSL definition is blur enough to take anything interesting or cool under it!</p>
<p><span id="more-596"></span>
<p>Back to the beginning. When faced to doing software for a business that has some moving parts, a good practice is to make a generalization or an abstraction of the fixed part and express what is moving through some sort of configurations. That is in some respect what most of enterprise frameworks do when implementing the fixed part and letting you nicely only express what varies for your context. This way you are almost only concerned about your part since the framework itself is supposed to be steady and well abstracted and as a result implicit in your context. This experience hasn&#8217;t been nice enough when XML used to be involved. As someone that defends multi-paradigm design I could argue that XML can play a best fit in some contexts but this is out of the scope of this post. XML charset is not optimal for a lot of cases, so why not creating our own charset, and here comes DSLs.</p>
<p>Of course here I am only talking about the rise of DSLs in the enterprise and not the DSLs that FP been doing for ages, and I&#8217;ll get back to this one later.</p>
<p>Now using my favorite meta magical super dynamic language, I&#8217;d like to construct my customized embedded(or internal) domain specific language, and I&#8217;ll make my best to be English like/business like/ host language unlike to be really specific. And that is where my brains blocks! How can I get grasp of that thing, that &#8216;lil&#8217; language? It might be a personal problem I have because of the nature of my profession as a consultant: I switch contexts often, and&#8230; well I can only hope that it is 1:designed, 2: designed considering practices, rules and well established&#8230; did I say patterns?</p>
<p>&nbsp;</p>
<h3>P for Patterns :</h3>
<p>Another way of providing a solution to the problem of generality/variability is use a catalogue of non-formal generalization of recurring solutions to recurrent problems that provide a rich knowledge base of experience about tackling the kind of problem. Being of non-formal nature means that patterns aren&#8217;t provided as a framework but rather as a set of vocabulary and description that has its power in being adaptive&nbsp; and flexible. In my own experience, what I found particularly interesting when working with code that uses patterns is the way they communicate intent. If I find &#8220;Strategy&#8221; postfix I start searching for the other parts of the patterns and then start building on that. Providing this shared vocabulary helps me getting operational quite fast and help me scan code faster in a more &#8220;visual&#8221; way.</p>
<p>The good thing also about patterns is that I am still playing under the rules of my preferred hosting language. I know very well doing two very important things with it: combining and abstraction. A programming language is a set primitives together with a way to combine them and a mechanism for abstraction. What about my lil DSL? well it depends&#8230; Did I make sure to break any host language logic in there? Did I fight the intuitive nice &#8220;.&#8221;? Or did I decide that to implement my DSL for scratch? A programming language without means of abstraction results inevitably in long flat copy/paste configurations files and please don&#8217;t argue with me about their maintainability. What is the problem? The problem is that I am not a programming language designer, and to create a programming language no matter how simple and small it is, you need to have programming language design skills, so do you?</p>
<h3>Abstraction and Communication for People:</h3>
<p>Something that really drew my attention in functional programming languages like Haskell is their solid formal abstractions used for expressing computational patterns. These abstractions are packaged into a framework, and have a clear identity defined by a set of rules and are useable whenever semantics match. Take monads for example. It doesn&#8217;t matter if you are working with state, a database, the web, the screen or a robitic arm: you just use the do notation. The do notation in Haskell is a convenient way of working with a sound abstraction that is <a href="http://en.wikipedia.org/wiki/Monads_in_functional_programming">THE MONAD</a>. And all what you need to do for your framework is to verify that you satisfy the Monad laws and then you can safely use that syntax for it. This sharing of well identified semantics of the abstraction help developers reuse a well established mental model. LinQ syntax is the same, the dot &#8220;.&#8221; operator is the same, F#&#8217;s&nbsp; &#8220;|&gt;&#8221; operator is the same and examples are a lot. And I tend to prefer these kind of abstractions as they don&#8217;t sacrifice readability for developers for &#8220;readability&#8221; for users. I guess they have both the communicative property of Design Patterns yet they are formal and are offered as a concrete framework. Then of course you can name them DSLs, if you insist :) .</p>
<p>Now, if you are from the functional programming camp, and you have been doing embedded domain specific language using Lisp or Haskell for long time, then I apologize for wasting your time. I know you guys know best about doing abstractions, and you have lessons to tell if we&#8217;d only listen. And for those interested in some examples in EDSLs from the functional world, <a href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1238371080&amp;sr=1-1">Paul Hudak goes through the design of a language for reactive animation in his book</a>, <a href="http://augustss.blogspot.com/">Lennart Augustsson</a> discussed EDSLs in Haskell on his blog.</p>
<h3>Conclusion</h3>
<p>Though an attractive option of abstraction, DSLs trade off readability for developers for &#8220;potential&#8221; readability of users. Haskell monads, F#&#8217;s &#8220;|&gt;&#8221; operator and LinQ are examples of sound formal abstraction that can be offered as frameworks (code). These abstractions can save developers time being in a form of a recurring pattern that can be used in different contexts that match semantically, thus reusing developers&#8217; understanding of the abstraction&#8217;s mental model. </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You&#8217;ve got 100 pages to convince me of your shiny language!</title>
		<link>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</link>
		<comments>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 20:42:37 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</guid>
		<description><![CDATA[ In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-01501.jpg"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="322" alt="DSC_0150-" src="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-0150-thumb1.jpg" width="470" align="left" border="0"></a> In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of these concepts (see <a href="http://www.infoq.com/articles/paradigm-based-polyglot-prog">Paradigm based Polyglot Programming</a>).
<p>One thing that annoys me though about most programming language books is how raw they often are.</p>
<p><span id="more-575"></span></p>
<p>&nbsp; Probably constrained by time, authors and book teams seem to invest less on editorial stuff and teaching methodology and more on explaining details of technical and behind the scenes stuff. This often results in more manual-like books where you have a great wealth of material that you are not able to exploit anyway because of, well, lack of time. I am not sure I can invest time in reading 500+ manual of a new, or at least non mainstream, language that I might decide not to use by the end.&nbsp;
<p>I am not saying here that technical and behind the scene stuff does not matter, quite the opposite. I just think that manual, important it is, should not be the introduction to the programming language. A rather 100 to 200 pages brief book that is carefully edited to introduce paradigm, concepts, and strengths of the programming language is a more attractive choice , accompanied with a wordy but well organized reference book with examples and more in-depth explanation of language features. I guess this is a more pragmatic approach to programming language learning in the presence of WWW and Google search.
<p>PS: I personally find <a href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1231187744&amp;sr=8-1">Paul Hudak&#8217;s Haskell book</a> a very good example of an enjoyable, brief, nicely and carefully edited programming language book. Also <a href="http://www.amazon.com/Programming-Lua-Second-Roberto-Ierusalimschy/dp/8590379825/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1231187997&amp;sr=1-1">LUA&#8217;s programming book</a> is nicely done.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is Stream-oriented a better UI paradigm than Document-oriented for today&#8217;s knowledge workers?</title>
		<link>http://sadekdrobi.com/2008/07/11/is-stream-oriented-a-better-ui-paradigm-than-document-oriented-for-todays-knowledge-workers/</link>
		<comments>http://sadekdrobi.com/2008/07/11/is-stream-oriented-a-better-ui-paradigm-than-document-oriented-for-todays-knowledge-workers/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 12:40:37 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/?p=499</guid>
		<description><![CDATA[In Bryce Harrington&#8217;s opinion, document-oriented paradigm of user interface is not any longer optimal. Most often people deal with streams of information rather than static documents. Harrington advocates for a shift towards a new UI paradigm that would make stream management easier. Many tools and technologies are already based on stream-oriented approach; others are instrumental [...]]]></description>
			<content:encoded><![CDATA[<p>In Bryce Harrington&#8217;s opinion, document-oriented paradigm of user interface is not any longer optimal. Most often people deal with streams of information rather than static documents. Harrington advocates for a shift towards a new UI paradigm that would make stream management easier. Many tools and technologies are already based on stream-oriented approach; others are instrumental for adopting it.</p>
<p><span id="more-499"></span></p>
<p>Originally posted on <a title="http://www.infoq.com/news/2008/07/stream-oriented-ui" href="http://www.infoq.com/news/2008/07/stream-oriented-ui">http://www.infoq.com/news/2008/07/stream-oriented-ui</a></p>
<p>The mainstream approach to user interface has recently been questioned by Bryce Harrington who believes that <a href="http://www.bryceharrington.org/drupal/docs_vs_streams">&#8220;the prevailing UI paradigm today [&#8230;] built around the notion of document authoring&#8221; is not appropriate</a> for what most people use computers for. He argues in effect that knowledge workers more often deal with streams of information rather than traditional documents:</p>
<blockquote><p>Really, what I mostly do today is stream management. And I suspect this is true for the vast majority of people. I don&#8217;t deal with writing documents, but with changes to documents. I put comments onto things. I slap patches onto things. I tweak the states of things. Once in a rare while I may author a completely new thingee, but even there I usually end up working with it as a stream of changes that I build up over time (and usually in collaboration with a few other people who stream changes to me).</p>
</blockquote>
<p>Harrington believes that, with regard to this, many tools offered by today&#8217;s interfaces are irrelevant whereas they are not at all instrumental in helping users staying atop all the streams. What actually handles streams are cron jobs, &#8220;a stodgy old *server* tool&#8221; that non-technical people are not acknowledgeable about. To remedy to this, Harrington advocates for changing the underlying paradigm of UI:</p>
<blockquote><p>Since the purpose of our desktop UI is to make our work easier and more efficient, then if today&#8217;s knowledge workers are, like me, more stream-oriented than document-oriented, then doesn&#8217;t it stand to reason that we ought to re-think our UI design to optimize it for making stream management easier and more efficient? How would such optimization be done? How would such a UI look and feel? What kinds of toolkits would be needed?</p>
</blockquote>
<p>This post triggered a lot of reactions on <a href="http://www.bryceharrington.org/drupal/docs_vs_streams#comment-61">the author&#8217;s blog</a> and on <a href="http://www.reddit.com/info/6owbv/comments/">reddit</a> even though it was pointed out by many commentators that this idea is not really new. Many mentioned <a href="http://cs-www.cs.yale.edu/homes/freeman/lifestreams.html">Lifestream project</a> led in the mid-nineties at Yale University. Based on the conviction that today desktop paradigm is not the optimal way to organize information, Eric Freeman under the direction of David Gelernter developed novel software architecture:</p>
<blockquote><p>Lifestreams is built on a simple storage metaphor &#8212; a time-ordered stream of documents combined with several powerful operators &#8212; that replaces many conventional computer constructs (such as named files, directories, and explicit storage) and in the process provides a unified framework that subsumes many separate desktop applications to accomplish and handle personal communication, scheduling, and search and retrieval tasks.</p>
</blockquote>
<p>In the aftermath of this project, <a href="http://www.wired.com/wired/archive/5.02/fflifestreams.html">Steve G. Steinberg has analyzed the advantages of the approach based on temporal dimension</a> that is ignored by most UI and absent from many alternative methods of organizing information rather focused on spatial, semantic or network aspects. First of all, Steinberg stresses that &#8220;unlike spatial and networked schemes, which require users to come up with their own, highly arbitrary classifications, and unlike semantic schemes that place the burden on the computer, chronological ordering is clearly defined and unarguable.&#8221; Moreover, this kind of UI facilitates information search because &#8220;instead of following links or guessing keywords, we can simply scroll back in time, using our memory for hints&#8221;, which in turn allows to rebuilt the context of the researched information. Finally, as highlighted by Steinberg, &#8220;chronological ordering underlies many types of information&#8221;, e.g. files, emails, URL of visited web pages, and this makes Lifestreams &#8220;incredibly general and flexible&#8221;.</p>
<p>Even though commercialization of the project&#8217;s results was not successful, many recent products mentioned by commentators are based on similar concepts: <a href="http://www.bryceharrington.org/drupal/docs_vs_streams#comment-54">Mac OS X</a>, services like <a href="http://lifestreamblog.com/lifeinlines-and-lifeblob-two-new-lifestreaming-services/">LifeInLine and LifeBlob</a>, <a href="http://en.wikipedia.org/wiki/Sugar_%28GUI%29">Sugar interface</a> by the One Laptop Per Child Foundation, <a href="http://www.getmiro.com/">Miro interface</a> or upcoming <a href="https://www.mesh.com/Welcome/LearnMore.aspx">Microsoft&#8217;s Live Mesh</a>. It looks like the momentum is growing for a shift towards stream-oriented approach to UI. Other technologies and tools that may be instrumental, i.e. <a href="http://en.wikipedia.org/wiki/Dataflow_programming">dataflow languages</a> or <a href="http://en.wikipedia.org/wiki/Functional_reactive_programming">functional reactive programming</a>, are summed up in <a href="http://www.bryceharrington.org/drupal/node/57">Bryce Harrington&#8217;s follow up</a> to his own post and on <a href="http://software-libre.rudd-o.com/Streams_vs._documents">a wiki set up by Rudd-O</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/07/11/is-stream-oriented-a-better-ui-paradigm-than-document-oriented-for-todays-knowledge-workers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Insights: You don&#8217;t need your DSL to be English-like</title>
		<link>http://sadekdrobi.com/2008/03/28/insights-you-dont-need-your-dsl-to-be-english-like/</link>
		<comments>http://sadekdrobi.com/2008/03/28/insights-you-dont-need-your-dsl-to-be-english-like/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 19:49:13 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/03/28/insights-you-dont-need-your-dsl-to-be-english-like/</guid>
		<description><![CDATA[There is a widespread opinion that a good DSL has to be English-like. Dave Thomas advocates against such approach asserting that DSL are not about getting as close as possible to natural languages and that having this as a guiding principle of DSL design can be rather detrimental. He also highlights what he believes is [...]]]></description>
			<content:encoded><![CDATA[<p>There is a widespread opinion that a good DSL has to be English-like. Dave Thomas advocates against such approach asserting that DSL are not about getting as close as possible to natural languages and that having this as a guiding principle of DSL design can be rather detrimental. He also highlights what he believes is important in DSL design and provides some examples of successful DSL.</p>
<p><span id="more-459"></span></p>
<p><a title="http://www.infoq.com/news/2008/03/dsls-are-not-natural-languages" href="http://www.infoq.com/news/2008/03/dsls-are-not-natural-languages">http://www.infoq.com/news/2008/03/dsls-are-not-natural-languages</a></p>
<p>There is a widespread opinion that a good DSL has to be English-like in order to be readable for non-programmers. Dave Thomas advocates against such approach asserting that <a href="http://pragdave.blogs.pragprog.com/pragdave/2008/03/the-language-in.html">DSL are not about getting as close as possible to natural languages</a>. Moreover, he argues that having this as a guiding principle of DSL design can be rather detrimental. He also highlights what he believes is important in DSL design and provides some examples of successful DSL that do not necessarily reed like English. </p>
<p>According to Dave, DSL don&#8217;t need to be close to English or any other natural language because they targets a very specific category or users &#8211; domain experts &#8211; who actually don&#8217;t speak a natural language</p>
<blockquote><p>Domain experts [&#8230;] are speaking jargon, a specialized language that they&#8217;ve invented as a shorthand for communicating effectively with their peers. Jargon may use English words, but these words have been warped into having very different meanings&#8212;meanings that you only learn through experience in the field.</p>
</blockquote>
<p>Hence, DSL should reflect this jargon and express the expertise of domain specialists in a concise way. Make for dependency management, Groovy builders for expressing data in code and Active record declaration for data modeling in Ruby are a few successful examples of such DSL that respond to domain experts needs without necessarily being English-like. Even though some statements in Active record declaration may look like English, e.g. has_many or belongs_to, they actually are not: &#8220;they are jargon from the world of modeling&#8221; and &#8220;they have a specific meaning in that context.&#8221;</p>
<p>Another important point raised by Dave is that, in his opinion, &#8220;domain experts&#8221; should not be understood as business users but rather as people who are writing specs. These people are programmers. They do not really need an English-like language. Dave actually believes that the notion of fluent interface is often misunderstood: &#8220;the fluency here is programmer fluency, not English fluency. It&#8217;s writing succinct, expressive code&#8221;. </p>
<p>Dave Thomas argues that not only isn&#8217;t it necessary trying to get closer to a natural language, but it can also be detrimental. Natural languages are imprecise. This makes their power in the real world but this cannot apply to programming. This is why, &#8220;whenever we try to create a DSL that looks like a natural language, we fall short&#8221;. However hard one tries, syntax tends to remain &#8220;very unEnglish like&#8221;. And this gap is rather confusing: </p>
<blockquote><p>There&#8217;s a major cognitive dissonance&#8212;I have to take ideas expressed in a natural language (the problem), then map them into an artificial language (the AppleScript programming model), but then write something that is a kind of faux natural language.</p>
</blockquote>
<p>To illustrate the possible confusion, Dave gives an example of piece code from a test written using the test/spec framework and analyses one expression: </p>
<p><em>@result.should.be.a.kind.of String</em></p>
<blockquote><p>It reads like English. But it isn&#8217;t. The words are separated by periods, except the last two, where we have a space. As a programmer, I know why. But as a user, I worry about it. In the first example, we write @result.should.be.a.kind_of. Why not kind.of? If I want to test that floats are roughly equal, I&#8217;d have said @result.should.be.close value. Why not close.to value? </p>
<p>Trivial details, but it means that I can&#8217;t just write tests using my knowledge of English&#8212;I have to look things up. And if I have to do that, why not just use a language/API that is closer to the domain of specifications and testing?</p>
</blockquote>
<p>It is true that English-like DSL may be more readable, but Dave argues that &#8220;the attempt to create a natural language feel in the DSL leads to all sorts of leaks in the abstraction&#8221;. It might add to readability of code but it would &#8220;be taking away from its writability&#8221; and &#8220;adding uncertainty and ambiguity&#8221;: </p>
<blockquote><p>The second you find yourself writing </p>
</p>
<p>&#160; <em>def a       <br />&#160;&#160;&#160;&#160; self        <br />&#160; end</em></p>
</p>
<p>so that you can use &quot;a&quot; as a connector in </p>
</p>
<p><em>add.a.diary.entry.for(&quot;Lunch&quot;).for(August.10.at(3.pm))</em></p>
</p>
<p>you know you&#8217;ve crossed a line. This is not longer a DSL. It&#8217;s broken English. </p>
</blockquote>
<p>One of commentators, Has, also believes that trying to make a language readable to non-programmers one risks to end up with a &quot;read-only language&#8221;. He takes the example of AppleScript. To improve its readability, it was necessary to remove &#8220;most of the usual symbolic cues that describe a language&#8217;s semantics&#8221;. As a result, &#8220;the syntax effectively obfuscates, not clarifies, the language semantics&#8221;. If &#8220;it&#8217;s very easy to read an AppleScript and understand _what_ it does, it&#8217;s damnably hard to figure out exactly _how_ it does it&#8221;. </p>
<p>Has highlights another issue that may result from using an English-like DSL: users might assume that &#8220;because it _looks_ like English, it will also _behave_ like it&#8221; and &#8220;form all sorts of very strong associations and conclusions about its nature, which then have to be undone the long, hard way&#8221;. Hence, according to Has, English-like appearance &#8220;accidentally encourages unrealistic user assumptions&#8221;</p>
<p>If DSL readability and expressiveness are of interest for you, find more examples and comments on <a href="http://pragdave.blogs.pragprog.com/pragdave/2008/03/the-language-in.html">Dave&#8217;s blog post</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/03/28/insights-you-dont-need-your-dsl-to-be-english-like/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coplien and Martin Debate TDD, CDD and Professionalism</title>
		<link>http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/</link>
		<comments>http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 10:41:34 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[JAOO]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/</guid>
		<description><![CDATA[On JAOO 2007 I could, with the help of Floyd, organize a debate between Bob Martin and James Coplien about TDD and DbC. This is the most interesting debate about the subject I&#8217;ve ever heard of. A lot of things I wanted to say have been said here. And I am proud to announce it [...]]]></description>
			<content:encoded><![CDATA[<p>On JAOO 2007 I could, with the help of Floyd, organize a debate between Bob Martin and James Coplien about TDD and DbC. This is the most interesting debate about the subject I&#8217;ve ever heard of. A lot of things I wanted to say have been said here. And I am proud to announce it :)</p>
<p><a title="http://www.infoq.com/interviews/coplien-martin-tdd" href="http://www.infoq.com/interviews/coplien-martin-tdd">http://www.infoq.com/interviews/coplien-martin-tdd</a></p>
<p>Thanks Cope, thanks Bob.</p>
<p><a title="http://www.infoq.com/interviews/coplien-martin-tdd" href="http://www.infoq.com/interviews/coplien-martin-tdd">&#160;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can architecture create gap between developers and software they build?</title>
		<link>http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/</link>
		<comments>http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 00:17:34 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/</guid>
		<description><![CDATA[Today, many software project management and architecture approaches tend to parcel out&#160; work on a project creating hierarchical layers. This helps to simplify both developers work and management. However, the undelying information shielding among layers can&#160; potentially create a gap between developers and the software they are working on, if developers task are totally taken [...]]]></description>
			<content:encoded><![CDATA[<p>Today, many software project management and architecture approaches tend to parcel out&#160; work on a project creating hierarchical layers. This helps to simplify both developers work and management. However, the undelying information shielding among layers can&#160; potentially create a gap between developers and the software they are working on, if developers task are totally taken out of functional context. </p>
<p><span id="more-440"></span></p>
<p>Many efforts in today&#8217;s software community are targeted at bridging the gap between software professionals and business people. Several blogspace authors look at the issue from a slightly different perspective, highlighting the gap between developers and the software they are building. </p>
<p>According to Jeff Attwood, Amazon&#8217;s experience of regularly <a href="http://www.codinghorror.com/blog/archives/001013.html">involving its developers with costumer service</a> is a valuable means for improving quality and usability of software.&#160; He believes indeed that &#8220;all too often, software developers are merely tourists in their own codebase&#8221; because they lack a basic understanding of software users, their problems and concerns. This is what he has earlier referred to as&#160; &#8220;<a href="http://www.codinghorror.com/blog/archives/000206.html">ivory tower software development</a>&#8221;: </p>
<blockquote><p>In the absence of any other compelling evidence, developers assume everyone else is a developer. [...] The more isolated the developers, the worse the resulting end product. It doesn&#8217;t help that most teams have a layer of business analysts who feel it is their job it to shield developers from users [...] It&#8217;s dangerous to create an environment where developers have no idea who the users are. </p>
</blockquote>
<p>However, today&#8217;s industry is characterized, according to Abhijit Nadgouda, by <a href="http://ifacethoughts.net/2007/12/11/why-we-still-stink-at-software-development/">hierarchy, existence of multiple layers and information shielding among those layers</a>. He highlights that this simplifies management and makes business safer, but has rather negative implications on software quality: </p>
<blockquote><p>We create a hierarchy in our projects, and every level shields the lower levels from some information. How many members of the software development team know value of the software they are working on, or its importance to the client&#8217;s business? How many of them even know about pieces other the one they are working on? </p>
<p>[...] </p>
<p>There seems to be a disconnect between better business and better software development. Which is why, I believe, most of us are doing good business, but we as an industry still stink at software development. </p>
</blockquote>
<p>In his attempt to identify the reasons why &#8220;<a href="http://weblog.raganwald.com/2007/12/somethings-fishy.html">we still stink at software development</a>&#8221;, Reg Braithwaite also raises this issue arguing that it might be wrong to divide up work on a project in a way &#8220;that the people with the least experience are protected from damaging the code&#8221;. </p>
<p>Architecture based on such approach tends to simplify developers work through abstaction. If this is pushed to the extreme, developers tasks are taken out of functional context to become purely technical, which can potentially create a gap between developers and the software they are working on. </p>
<p>What is your opinion? Is such a protectionist architecture an impediment for software usability? Can architecture with developers ignorant of the full picture be effective? Does it deliver sofware and value?&#160; </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Religion driven industry: buzzwords and checklists vs. thinking and inspection</title>
		<link>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/</link>
		<comments>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 17:23:50 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[JAOO]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/</guid>
		<description><![CDATA[This post has been originally posted on infoQ on Religion driven industry: buzzwords and checklists vs. thinking and inspection
James O. Coplien has recently argued that todayâ€™s industry is based on buzzwords and checklists. The use of some techniques and methodologies, TDD for instance, has become â€œa religious issueâ€. This prevents from inspecting possible tradeoffs and [...]]]></description>
			<content:encoded><![CDATA[<p>This post has been originally posted on infoQ on <a href="http://www.infoq.com/news/2007/10/religous-industry" title="Religous Industry">Religion driven industry: buzzwords and checklists vs. thinking and inspection</a></p>
<p>James O. Coplien has recently argued that todayâ€™s industry is based on buzzwords and checklists. The use of some techniques and methodologies, TDD for instance, has become â€œa religious issueâ€. This prevents from inspecting possible tradeoffs and focusing on finding solutions that would be the most appropriate and the most cost-effectiveÂ .<span id="more-434"></span></p>
<p>â€œFor some reason, we have invented and are following religions [â€¦].â€ This is how <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=216434">James O. Coplien describes todayâ€™s industry</a> which, he believes, is based on buzzwords and checklists rather than on thinking, inspection and efforts to find solutions that would be the most appropriate and the most cost-effective for a given project:</p>
<blockquote><p>How much thought did you put into the tradeoffs of the last technique you brought into your organization: Ajax, TDD, On-Site Customer, or other buzzwords? Did you research its track record? Or did you go to the buzzword yellow pages?</p></blockquote>
<p>James uses the example of the <a href="http://agiletesting.blogspot.com/2007/10/whats-more-important-tdd-or-acceptance.html">debate around TDD which has occurred in the blog space</a> in the wake of Jaoo 2007 conference. When the discussion focuses on what approach to testing is the best (i.e. TDD or acceptance testing), it essentially addresses the wrong question. It obfuscates the real objective which is â€œto deliver what the customer wanted while optimizing qualityâ€ and to create value for the client. Testing is what we have on todayâ€™s checklist for quality but it is far from covering all the issues that actually affect quality:</p>
<blockquote><p>Quality suffers if you misunderstand what the customer wanted, or if the code has internal interactions that are difficult to foresee, or if local code violates array boundaries or uses untethered pointers. It also suffers if the interface makes it possible for the user to commit errors, or if it takes too many keystrokes to enter a small amount of common information.</p></blockquote>
<p>Focusing on quality requires considering every weapon in the arsenal:</p>
<blockquote><p>That means using Use Cases (which are an Agile way of engaging customers [â€¦]) instead of XP-style user stories (so you understand feature interactions up-front), doing pair programming or desk-check code inspections, doing design by contract, driving the process with usability experts and doing good usability testing, and a host of other things.</p></blockquote>
<p>Coplien emphasizes that it is impossible to do everything and that it is â€œa matter of cost effectivenessâ€. But being focused on techniques and driven by buzzwords we get stuck in practices that might not be optimal. The use of some techniques and methodologies, e.g. TDD, has become â€œa religious issueâ€, according to James:</p>
<blockquote><p>We are told that you have to do TDD to be a professional [â€¦] and yet are given no reason to believe this, no substantiation, and no evidence. Just believe.</p></blockquote>
<p>Coplien argues, for instance, that â€œintegration and system testing have long been demonstrated to be the least efficient way of finding bugsâ€, that TDD â€œdeteriorates the architectureâ€, and that â€œacceptance testing is orders of magnitude less efficient than good old-fashioned code inspections, extremely expensive, and comes too late to keep the design clean.â€ But he stresses how difficult it is to engage a challenging discussion on such â€œreligiousâ€ topics because any criticism is met with a lot of emotion.</p>
<blockquote><p>People have tied their Agile success to their introduction of TDD practices into their work. It&#8217;s the one thing they can do as individuals rather than as an enterprise.</p></blockquote>
<p>Coplien advocates for focusing on quality rather than testing and, more generally speaking, on thinking rather than checklists. He highlights however that â€œsorting these things out requires a system viewâ€, which often times lacks in todayâ€™s industry. He believes that â€œNew Age Agile movements consistently move away fromâ€ systems engineering. According to Coplien, â€œone root of the problem lies in modern education, which has increased its focus on technique and reduced its focus on thinking.â€ Todayâ€™s students â€œfewer and fewer understand software historyâ€ and â€œhave stronger memories [â€¦]on exactly when to use <code>--v</code> and when to use <code>v--</code> than they recall anything about logical design.â€</p>
<p>Close links which exist between academia and industry are also a part of the problem. Universities tend to adapt curricula to industryâ€™s needs in order to facilitate studentsâ€™ placement. Hence, it becomes difficult for academics to challenge predominate views, probably â€œas difficult as it was for Newtonâ€ to prevail â€œwith new insights on the working of the universeâ€:</p>
<blockquote><p>In fighting the broad misunderstandings that industry has chosen to adopt from selected interpretations of Agile, SOA, and programming language buzzwords, we face no less a religion, and no less threat to our cozy industry-financed academic positions, than he did.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

