<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: The Usability of Code, Part 1 of 2</title>
	<atom:link href="http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/</link>
	<description>Nagarro blog: software development, design, architecture and usability</description>
	<lastBuildDate>Fri, 30 Jul 2010 13:51:47 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Amit Jain</title>
		<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/comment-page-1/#comment-170</link>
		<dc:creator>Amit Jain</dc:creator>
		<pubDate>Sat, 15 Dec 2007 23:13:59 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/the-usability-of-programs-part-1-of-2/#comment-170</guid>
		<description>Deepak,

I can think of defining different interfaces and the class implementing those interfaces. A &#039;user&#039; would see just those APIs which are defined in the interface, the one he is using to access the class.
This is one way to make API&#039;s simple and easy to use. But this is definitely not &#039;Progressive&#039; disclosure.

For that, we can design a class with very basic methods plus a method like &#039;GetAdvanceControl()&#039; which would return an object with advance stuff.</description>
		<content:encoded><![CDATA[<p>Deepak,</p>
<p>I can think of defining different interfaces and the class implementing those interfaces. A &#8216;user&#8217; would see just those APIs which are defined in the interface, the one he is using to access the class.<br />
This is one way to make API&#8217;s simple and easy to use. But this is definitely not &#8216;Progressive&#8217; disclosure.</p>
<p>For that, we can design a class with very basic methods plus a method like &#8216;GetAdvanceControl()&#8217; which would return an object with advance stuff.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Deepak Nohwal</title>
		<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/comment-page-1/#comment-169</link>
		<dc:creator>Deepak Nohwal</dc:creator>
		<pubDate>Wed, 17 Oct 2007 09:49:49 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/the-usability-of-programs-part-1-of-2/#comment-169</guid>
		<description>I would also be interested in seeing if there is a pattern available for implementing a system using Progressive Disclosure technique. Has anyone defined such a pattern so far?</description>
		<content:encoded><![CDATA[<p>I would also be interested in seeing if there is a pattern available for implementing a system using Progressive Disclosure technique. Has anyone defined such a pattern so far?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vaibhav</title>
		<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/comment-page-1/#comment-168</link>
		<dc:creator>Vaibhav</dc:creator>
		<pubDate>Mon, 15 Oct 2007 06:14:47 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/the-usability-of-programs-part-1-of-2/#comment-168</guid>
		<description>Okay... now that I actually followed that link and read a little bit more about Progressive Disclosure, it sounds like exactly that middle path that I am seeking.

Oh, I didn&#039;t use the term &#039;conventional wisdom&#039; in any bad sense. I was trying to point out that most advice from experts points that path to follow. That is the &#039;right&#039; answer. Hardly anyone explains the true thought behind it. (Much like the real reasons for using Hungarian Notations).

I normally hate to just follow rules unless I understand the value they bring. And although I dislike the very widespread practice of people coding too many things inside a function (mostly stuff which is not reflected by the name of the function); I am also uncomfortable designing APIs which are loaded with various method calls.

Yes! Progressive Disclosure sounds interesting, although the right pattern for implementing such a system still probably needs to be discovered.</description>
		<content:encoded><![CDATA[<p>Okay&#8230; now that I actually followed that link and read a little bit more about Progressive Disclosure, it sounds like exactly that middle path that I am seeking.</p>
<p>Oh, I didn&#8217;t use the term &#8216;conventional wisdom&#8217; in any bad sense. I was trying to point out that most advice from experts points that path to follow. That is the &#8216;right&#8217; answer. Hardly anyone explains the true thought behind it. (Much like the real reasons for using Hungarian Notations).</p>
<p>I normally hate to just follow rules unless I understand the value they bring. And although I dislike the very widespread practice of people coding too many things inside a function (mostly stuff which is not reflected by the name of the function); I am also uncomfortable designing APIs which are loaded with various method calls.</p>
<p>Yes! Progressive Disclosure sounds interesting, although the right pattern for implementing such a system still probably needs to be discovered.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bill Kayser</title>
		<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/comment-page-1/#comment-167</link>
		<dc:creator>Bill Kayser</dc:creator>
		<pubDate>Sun, 14 Oct 2007 21:00:26 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/the-usability-of-programs-part-1-of-2/#comment-167</guid>
		<description>I guess I fall into the camp of conventional wisdom.  If I identify a method with control parameters to distinguish different &#039;modes&#039; I try to split them into distinct methods, but only if I can create distinct meaningful names for them.  If I can&#039;t come up with a new name that isn&#039;t just the original name plus some qualifier like &quot;...WithoutValidation&quot; then I&#039;ll go for the new method.  I also allow for common idioms for control flags like &quot;createIfAbsent&quot;, but for the most part I don&#039;t think the benefit of collapsing distinct methods into parameterized forms justify the loss of clarity.  After all, you could implement many API&#039;s with a single method by inserting an enum parameter for &quot;operation&quot;.  I think most times methods are combined with an  operation parameter as a convenience to the author, not the user.

Still, you could make a case that it complicates an API to have so many different methods.  You could even view it as a tradeoff of API usability versus code readability.  I just think combining methods just masks the complexity without really eliminating it.

If you end up with a lot of methods, think about progressive disclosure.  Is there a way to surface the most commonly used methods and classes while making the less common methods accessible, but less apparent?  I haven&#039;t had a chance to put that idea into practice but I&#039;m keeping an eye out.</description>
		<content:encoded><![CDATA[<p>I guess I fall into the camp of conventional wisdom.  If I identify a method with control parameters to distinguish different &#8216;modes&#8217; I try to split them into distinct methods, but only if I can create distinct meaningful names for them.  If I can&#8217;t come up with a new name that isn&#8217;t just the original name plus some qualifier like &#8220;&#8230;WithoutValidation&#8221; then I&#8217;ll go for the new method.  I also allow for common idioms for control flags like &#8220;createIfAbsent&#8221;, but for the most part I don&#8217;t think the benefit of collapsing distinct methods into parameterized forms justify the loss of clarity.  After all, you could implement many API&#8217;s with a single method by inserting an enum parameter for &#8220;operation&#8221;.  I think most times methods are combined with an  operation parameter as a convenience to the author, not the user.</p>
<p>Still, you could make a case that it complicates an API to have so many different methods.  You could even view it as a tradeoff of API usability versus code readability.  I just think combining methods just masks the complexity without really eliminating it.</p>
<p>If you end up with a lot of methods, think about progressive disclosure.  Is there a way to surface the most commonly used methods and classes while making the less common methods accessible, but less apparent?  I haven&#8217;t had a chance to put that idea into practice but I&#8217;m keeping an eye out.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vaibhav</title>
		<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/comment-page-1/#comment-166</link>
		<dc:creator>Vaibhav</dc:creator>
		<pubDate>Sun, 14 Oct 2007 20:05:23 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/the-usability-of-programs-part-1-of-2/#comment-166</guid>
		<description>At a smaller level, this thinking would apply to class design as well. How to design an interface to a class? What are the best practices?

In terms of an API, the most common question that I face is whether there should be fewer API methods which do a lot of things depending on the control information provided in the parameters? Or there should be many methods, with each one doing exactly one thing.

Conventional wisdom suggests the latter, however, I somehow have had trouble digesting that. I keep thinking there needs to be a middle path somehow, but where to strike that balance is something that eludes me.

Any help?</description>
		<content:encoded><![CDATA[<p>At a smaller level, this thinking would apply to class design as well. How to design an interface to a class? What are the best practices?</p>
<p>In terms of an API, the most common question that I face is whether there should be fewer API methods which do a lot of things depending on the control information provided in the parameters? Or there should be many methods, with each one doing exactly one thing.</p>
<p>Conventional wisdom suggests the latter, however, I somehow have had trouble digesting that. I keep thinking there needs to be a middle path somehow, but where to strike that balance is something that eludes me.</p>
<p>Any help?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Manas Fuloria</title>
		<link>http://www.nagarro.com/blog/the-usability-of-programs-part-1-of-2/comment-page-1/#comment-165</link>
		<dc:creator>Manas Fuloria</dc:creator>
		<pubDate>Sun, 14 Oct 2007 02:05:16 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.nagarro.net/kayser/the-usability-of-programs-part-1-of-2/#comment-165</guid>
		<description>Bill, I’m really enjoying this.

Just FYI, since we worked together I’ve become a convert to the importance of usability. Everything we do as engineers is to enhance human experience - our own or that of others. (Even if you are designing a bridge - you don’t want your users to get wet, right?!) It takes a lot of introspection and self-criticism to make human factors truly influence your design, but the results can be delightful.</description>
		<content:encoded><![CDATA[<p>Bill, I’m really enjoying this.</p>
<p>Just FYI, since we worked together I’ve become a convert to the importance of usability. Everything we do as engineers is to enhance human experience &#8211; our own or that of others. (Even if you are designing a bridge &#8211; you don’t want your users to get wet, right?!) It takes a lot of introspection and self-criticism to make human factors truly influence your design, but the results can be delightful.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
