    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Editoral: Rise of the Machines</title>
        <link>https://members.accu.org/index.php/articles/1964</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Journal Editorial + Overload Journal #104 - August 2011</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c184/">Journal Columns</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c185/">Editorial</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c299/">o104</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c185-299/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c185+299/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Editoral: Rise of the Machines</h1>
<p><strong>Author:</strong>&nbsp;Martin Moene</p>
<p>
<strong>Date:</strong> 06 August 2011 17:14:35 +01:00 or Sat, 06 August 2011 17:14:35 +01:00</p>
<p><strong>Summary:</strong>&nbsp;Been having trouble with technology or simple devices? Ric Parkin fears for our future.</p>
<p><strong>Body:</strong>&nbsp;<p>Iâ€™ve not been having a good run of luck with machines. I almost feel like theyâ€™re out to get me, but that is taking anthropomorphisation too far and theyâ€™d hate that.</p>

<p>First the oven broke. Fortunately it was just the heating element that needed replacing, but it still took the engineer three tries over a week or so to get the right part as there were several possible ones, all with subtly different attaching holes and all incompatible.</p>

<p>Then I was awoken at 3:30am by water dripping through the ceiling. Turns out the water tank was leaking, and after a few goes trying to fix, I was told that the whole cold water system needed replacing â€“ apparently the ex-councellor whoâ€™d owned the house in the 1970s had used it to showcase local businesses, and all the piping was made by a local company ... but only for a year or so. It had never caught on as the acrylic pipes needed gluing together, which meant you couldnâ€™t test them for 24 hours, and were pretty much impossible to repair piecemeal. Plus, since then standard sizes have changed and you canâ€™t get compatible parts. Given the size of the job Iâ€™m getting the bathroom redone at the same time, and so am looking at options, in particular which shower to have put in.</p>

<p>Then this weekend I came home to find a washing machine full of undrained dirty water, with a couple of arbitary lights flashing.</p>

<p>What do these have in common? Well, Iâ€™ve got around to reading Donald A. Normanâ€™s classic book <em>The Design Of Everyday Things</em> [<a href="#[Norman]">Norman</a>] so have been thinking about how bad much of design is, including physical objects, electrical devices, and user interfaces. And I realised that my rebellious machines showed various aspects of his ideas, good and bad, and that many of them have lessons that can be applied to software.</p>

<p>So letâ€™s look at my examples in more depth.</p>

<p>An oven heating element is remarkably simple. Itâ€™s just a heavy spiral of metal that attaches to the electrics, and which, due to its high resistance, heats up. It connect to a circuit controlled via a thermostat and the userâ€™s controls on the face panel, and is held in place with a central screw. Unfortunately the usual element for that make has <em>two</em> screw holes on either side, and so couldnâ€™t be attached. A note was made of the model, and after some searching online a new one was ordered â€“ to find that it wasnâ€™t quite the right one, which didnâ€™t fit either. Finally the correct one was found, and installed in minutes.</p>

<p>What can be learnt here? First is to ask why on earth are there different fittings? It is surely simple to standardise on a single connector, or have a â€˜universalâ€™ bracket that has the right holes for any ovenâ€™s need, perhaps with two outer holes as well as a central. Having said that, there could be a safety aspect â€“ you wouldnâ€™t want to install an element that couldnâ€™t cope with the current the oven would deliver. A good solution to that is actually to have different connection types for the different power ratings so that you cannot possibly install the wrong type. But why did the wrong one get ordered? Well the types only differed in subtle ways that were missed when searching. So here is another lesson: make the differences <strong>obvious</strong>, perhaps via the number of rings, or the connection orientation, or even colour coding of the insulation. As it was they all looked the same.</p>

<p>As for the water system, one problem I found was knowing which bits were what, what each valve did, and where did all these pipes go as they usually disappeared under insulation or through the floor. What would have made things easier would be to have put simple labels on the pipes detailing their purpose, and perhaps even their measurements. When I get the system replaced Iâ€™ll be adding them. Another idea I got from Stewart Brandâ€™s <em>How Buildings Learn</em> [<a href="#[Brand]">Brand</a>] is, before you hide the utilities behind walls, plaster etc, take photos and put them in a book. The book stays with the house, and forms a record of the hidden anatomy of the place, and will become invaluable to yourself and any future owners and maintainers. And of course, as the pipes and shower are going to be boxed in, Iâ€™ll make sure thereâ€™s some way of access for maintenence.</p>

<p>In contrast the washing machine is a bit more of a success story, but there are still lessons to be learnt. In contrast to most models with their enormous number of controls, dials and displays, which are so complicated that you tend to learn one or two common settings and never use the rest, this one has gone for a very simple but useful set. See Figure 1. It comprises an outer ring of five buttons â€“ one power with embedded red â€˜lockedâ€™ LED , and four wash types, all of which have simple logos and temperature, and are back illuminated; an inner ring of LEDs; and a central logo. To start a wash, press the power button and the LEDs will light up one by one and a short tune indicates it booting quickly. What next? It prompts by having the wash buttonsâ€™ lights gently fading on and off. Then press your chosen wash button, and thatâ€™s it! Two presses â€“ thatâ€™s all thatâ€™s needed to start one of the six wash types. Ooops, yes you spotted it....four buttons, six types. Why did they spoil the simplicity of the single buttons? How can I remember how to do the others? They do redeem themselves partly by having an aide memoire of the types and the button presses needed on a little panel when you open the door to put the washing in. And one of the types â€“ rinse only â€“ is detected automatically by sensing detergent on the clothes at the start. But a mark lost for overloading the buttons for the last two.</p>

<table class="sidebartable">
	<tr>
		<td><img src="http://accu.org/content/images/journals/ol104/Editorial/Editorial-01.jpg" /></td>
	</tr>
	<tr>
		<td class="title">Figure 1</td>
	</tr>
</table>

<p>As the cycle progresses, the LEDs light up one by one giving a simple indicator of how long is left, spoilt only by the possibility of multiple rinses making the last few significantly longer than the others â€“ thankfully itâ€™s not as wildly inaccurate as the Windows progress dialog. Completion is indicated by a long beep, and in case you miss that the LEDs fade on and off to show itâ€™s finished, which really stands out in a dark room. </p>

<p>What if you want to cancel it? Just hold the power button till it beeps and starts to flash. Notice you have to hold it, otherwise you could cancel by accident. Would have been even better if it gave some feedback while you held it to show you were doing something correct, perhaps beeping repeatedly (but not rapidly â€“ that might make you think it was an incorrect action), but holding a power button to turn off is a pretty common convention.</p>

<p>The only other thing thatâ€™s wrong I spotted when the engineer came to look at it. If you noticed, the logo of the make is a play on the standard symbol for a power button, and as itâ€™s also curved to stand out, quite sensibly that was the first button he pressed to switch it on. An improvement might have been to actually make that the power button.</p>

<p>So here we have a fairly clean, simple user interface, with obvious options for the day-to-day things, a reminder of the less obvious, and useful feedback without information overload. Why canâ€™t more devices be made this useable? </p>

<p>And not just physical devices â€“ these examples have their counterparts in the world of software. For example, the popular distributed source control system, git, seems to cause new users some confusion. The example, as I understand it, involves some of the defaults â€“ when you do the basic <code>git pull</code> to get code, it gets only your current branch. But when you <code>git push</code>, it pushes all your changes, including ones on other branches, to the repository. Why the unexpected difference? It gets worse â€“ if there is a conflict on a different branch, it prevents you pushing, in a hard to fathom way. Sure you can get used to these, but choosing good defaults would be better. What sort of defaults? Well, ones that do the most obvious thing given the rest of the context, and causes least damage if invoked unexpectedly. In this case Iâ€™d say the best is to push/pull only the current, and provide explicit options to provide a list, or all. This is a bit like having sockets compatible only for safe things â€“ make it obvious to do the right, safe thing, but hard work (or impossible) to do anything stupid or unsafe.</p>

<p>This principle applies to tools, but also to API design. For example, consider a function that returns a raw pointer. What is its lifetime? Do you own it? How do you release it? You could document this, but thatâ€™s the equivalent of those thick appliance manuals that you never read. Instead (or on top of the harder to use API), encapsulate the ownership rules in a smart pointer. Perhaps allow a â€˜checkedâ€™ mode to detect incorrect usage, so long as performance doesnâ€™t suffer unduly. If there is an order of calls required, make the orders obvious, perhaps by passing a token or object back from one that needs to be passed to the next.</p>

<p>Similar ideas also apply to user interface design â€“ make the obvious things easy, and provide ways to recover from unexpected things, perhaps with an undo facility. Also avoid mistakes in the first place by providing clear feedback and indicators of what can be done next.</p>

<p>And, topically, security can learn from some of these principles. For example, if you provide a voicemail facility, it could be a good idea to have it disabled by default. If itâ€™s on, by default only allow access from the phone itself. Or allow only from known authorised numbers. And if from anywhere, do not have a default password/pin, but force one, perhaps with checks to discourage obvious ones such as 1234 or part of the phoneâ€™s own number. If such simple measures were in place, we might be a rather different world...</p>

<h2>References</h2>

<p class="bibliomixed"><a id="[Brand]"></a>[Brand] <a href="http://en.wikipedia.org/wiki/How_Buildings_Learn">http://en.wikipedia.org/wiki/How_Buildings_Learn</a></p>

<p class="bibliomixed"><a id="[Norman]"></a>[Norman] <a href="http://www.jnd.org/books.html#33">http://www.jnd.org/books.html#33</a></p>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
