<?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>Gerbrand on ICT &#187; Methodology</title>
	<atom:link href="http://www.gerbrand-ict.nl/category/methodology/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gerbrand-ict.nl</link>
	<description>Weblog on JEE and software-engineering</description>
	<lastBuildDate>Wed, 11 Aug 2010 20:51:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Software: bouwen of ontwerpen?</title>
		<link>http://www.gerbrand-ict.nl/2010/02/software-bouwen-of-ontwerpen/</link>
		<comments>http://www.gerbrand-ict.nl/2010/02/software-bouwen-of-ontwerpen/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 14:16:19 +0000</pubDate>
		<dc:creator>gerbrand</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://www.gerbrand-ict.nl/?p=379</guid>
		<description><![CDATA[Software werd in de afgelopen decennia steeds belangrijker binnen de overheid, en bij vrijwel alle overheidsinstanties is software de kurk waarop de bureaucratie drijft. Verbazingwekkend lijken de meeste mensen bij de overheid, net als bij veel bedrijven overigens, een slecht idee van software te hebben. Overheden denken dat software iets is wat je ´bouwt´, net [...]]]></description>
			<content:encoded><![CDATA[<p>Software werd in de afgelopen decennia steeds belangrijker binnen de overheid, en bij vrijwel alle overheidsinstanties is software de kurk waarop de bureaucratie drijft. Verbazingwekkend lijken de meeste mensen bij de overheid, net als bij veel bedrijven overigens, een slecht idee van software te hebben. Overheden denken dat software iets is wat je ´bouwt´, net als kantoorgebouw, een <a href="http://www.parool.nl/parool/nl/1084/DOSSIER-NOORD-ZUIDLIJN/index.dhtml">metrolijn</a>. Dit is een misvatting. Software, in essentie, bouw je niet, software schrijf je. Als een softwareprogramma geschreven is, kan het eindeloos verspreid worden, geïnstalleerd worden of hergebruikt worden.<br />
Behoorlijk, als niet vrijwel alle, it-projecten van de overheden falen jammerlijk of zijn veel duurder dan verwacht. Recente voorbeelden zijn b.v. het<a href="http://www.computable.nl/artikel/ict_topics/ecm/2994678/1277020/nieuw-computersysteem-politie-werkt-niet-goed.html"> aangiftesysteem van de overheid</a> of de <a href="http://forum.fok.nl/topic/1113596">ov-chipcard</a>. De overheid wilde software binnen een bepaalde vaste periode &#8216;gebouwd&#8217; hebben, koos de goedkoopste leverancier en probeerde zoveel mogelijk de kosten gedurende het proces te laag te houden. Resultaat is keer op keer dat de overheid vele miljoenen betaald voor software, die nauwelijks zo ingewikkeld is als software die bedrijven als Google of Microsoft, of open-sourceprogrammeurs op een vrijdag-namiddag maken.</p>
<p>Hoe moet het maken van software dan wel gezien worden? Voor een deel is software schrijven creatief, voor een ander deel wetenschappelijk-analytisch (scientific zouden Engelsen zeggen, helaas weet ik geen goede vertaling daarvoor). Als je het maken van software al zou willen vergelijken met bouwen van huizen, dan is dat alleen het maken van het ontwerp.<br />
Wat een junior-programmer doet is vergelijkbaar met wat in de bouw ontwerpers van leiding en electriciteitssystemen in huizen doet. Wat een senior-programmer of architect doet, is vergelijkbaar met wat een (daadwerkelijke) architect doet of projectontwikkelaar.<br />
Als je de metafoor van bouwen zou moeten vergelijken: De gemeente Utrecht had het idee een gigantische woontoren te bouwen: de Belle van Zuyden.<br />
<a href="http://www.gerbrand-ict.nl/wp-content/uploads/2010/02/kaart-overzicht1.jpg"><img class="alignnone size-medium wp-image-384" title="Belle van Zuylen ontwerp" src="http://www.gerbrand-ict.nl/wp-content/uploads/2010/02/kaart-overzicht1-150x300.jpg" alt="" width="150" height="300" /></a><br />
Een archtictbureau heeft een ontwerp gemaakt, een projectontwikkelaar heeft een schatting van de kosten gemaakt. Na een grondige test van het <a href="http://sargasso.nl/archief/2009/11/29/belle-van-zuylen-verleiding-of-misleiding/">bouwontwerp</a> en -plan, en een <a href="http://www.lombox.nl/cinebox/bellevanzuylen.html">gebruikerstest</a>, bleek het gebouw totaal niet werkbaar. Verder ontwerp is gestopt: intekenen van de verwarming is vermoedelijk niet gedaan. <img src="http://www.gerbrand-ict.nl/wp-content/uploads/2010/02/webedumortsel011.jpg" alt="" title="verwarmingssysteem" width="300" height="300" class="alignnone size-full wp-image-388" /><br/><br />
Belle van Zuylen is niet daadwerkelijk gebouwd, ofwel het is nooit in productie gekomen.</p>
<p>Softwareontwikkeling is dus vergelijkbaar met ontwerpen van machines, gebouwen, en systemen in het algemeen, niet het bouwen zelf. Dat verzin ik niet ter plekke, dit wordt ook onderbouwd door meerdere mensen die er<a href="http://www.poppendieck.com/"> verstand van hebben</a>. Collega&#8217;s hebben recentelijk nog een mooi artikel hierover geschreven:<br />
<a href="http://www.whitehorses.nl/whitebooks/2010/creativiteit-software-ontwikkeling">Creativiteit in Software Ontwikkeling</a> en <a href="http://www.whitehorses.nl/whitebooks/2009/snel-succesvolle-projecten-uitvoeren">Snel succesvolle projecten uitvoeren</a>.</p>
<p>Goed boek om mee te beginnen:<br />
<iframe src="http://rcm.amazon.com/e/cm?t=geonic-20&#038;o=1&#038;p=8&#038;l=as1&#038;asins=0321150783&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gerbrand-ict.nl/2010/02/software-bouwen-of-ontwerpen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pattern in RIA</title>
		<link>http://www.gerbrand-ict.nl/2009/01/pattern-in-ria/</link>
		<comments>http://www.gerbrand-ict.nl/2009/01/pattern-in-ria/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 16:49:48 +0000</pubDate>
		<dc:creator>gerbrand</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[jfall]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://www.gerbrand-ict.nl/?p=60</guid>
		<description><![CDATA[The Flex framework is getting more and  more populair, and other similar RIA-frameworks as JavaFX and Sliverlight get a lot of attention. Some people see Flex as a alternative for webframeworks as Widget, JSF, Struts or GWT. However, there&#8217;s something fundementelly different. When program in Flex, you actually build a client-application. That application runs entirely [...]]]></description>
			<content:encoded><![CDATA[<p>The Flex framework is getting more and  more populair, and other similar RIA-frameworks as JavaFX and Sliverlight get a lot of attention. Some people see Flex as a alternative for webframeworks as Widget, JSF, Struts or GWT. However, there&#8217;s something fundementelly different. When program in Flex, you actually build a client-application. That application runs entirely on the client&#8217;s computers. The client connects to the server only when the client need information from the server. The client retrieves information via (web)services.</p>
<p>The pattern (as you can call it) is very unlike webframeworks, where the software runs mostly on the server. When a user accesses a webapplication, the webframework will generate html, javascript and xml and send that to the client&#8217;s webbrowser. The webframework also needs to create a (HTTP-)session along with a sessionid that is stored at the client-computer.<br />
When a client performs some interaction, like pressing a button, a relatively complicated process is started: a javascript event or browser submit is emitted. The webframework will retrieve that event on the server using generated javascript- and html-code. Using the sessionid, the right user-session, containing client-data is loaded after which more automagic processes are performed.<br />
You might wonder, what about Ajax ? The answer, with Ajax, or JQuery or other framework, the only advantage is, in case o a UI-event not the entire browserpage has to be reloaded and shown on the user, but only a part.</p>
<p>Not so long ago most enterprise software was developed as client-server: a client application would run on an users computer, while the server would consist of a database server. The client would make a connection to the database. The (business) logic of the software was contained in the application, while the database contained the data.<br />
This development-model was quite easy for developers. I don&#8217;t have hard data, but I think the productivy was much higher back then. My guess is that, for many simple CRUD-like requirements, a average Visual Basic, Delphy, Clipper developer was a lot faster.<br />
Of course one of the mayor problems back then, were the installation and maintance of the client computers. Webapplications pretty much solved that, as the only client software you had was the browser.  Another problem is security: usually the client was connected with the server via a direct connection to the database. That means, if an unauthorized user would gain access to the client software he could do a lot of harm.<br />
In webapplications, a user can only access the software by logging in the the webapplication. Without a username/passsword or other means of authentication, getting access to the server is very hard.</p>
<p>In modern RIA frameworks these problems are mostly solved. The software runs in a standardized plugin like the flash-player or java-player. That software is a lot easier to maintain then custom client software. A RIA-application accesses the server via a webservice. Fine-grained security can  added accessed to the webservice, preventing unauthorized access. That way, access to the server/backend can be controlled.</p>
<p>All in all, modern RIA bring back productivity to the developer <strong>and </strong>the user. Developers finally don&#8217;t have to waste time learning yet another greatest framework (Struts, SpringMVC, JSF, ADF, GWT), and solving problems inherently part of webdevelopment (http-sessions, javascript debugging, html hell, generated code) . Users finally don&#8217;t have to wast time waiting for browser refreshes, loading times and timewasting slow operations.</p>
<p>For an overview on different RIA-frameworks, and more on this subject see: <a href="http://flexblog.faratasystems.com/?p=163">Rich Internet Applications: State of the Union</a> . The term design pattern for RIA I got from the following presentation of a Adobe Evangelist on <a href="http://www.bachelor-ict.nl/duane-nickull">J-Fall &#8217;08</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gerbrand-ict.nl/2009/01/pattern-in-ria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trying to do good for the wrong reasons</title>
		<link>http://www.gerbrand-ict.nl/2009/01/doing-good-for-the-wrong-reasons/</link>
		<comments>http://www.gerbrand-ict.nl/2009/01/doing-good-for-the-wrong-reasons/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 17:42:05 +0000</pubDate>
		<dc:creator>gerbrand</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[coder]]></category>
		<category><![CDATA[design patterns]]></category>

		<guid isPermaLink="false">http://www.gerbrand-ict.nl/?p=43</guid>
		<description><![CDATA[Many programmers with at least some education computer science code by a few principles: Encapsulate database access, using Data Access Objects so we&#8217;re not tied to one or another database Use Model View Controller pattern, so we can change the view logic easily without having to change the entire software. Use Facade beans and Remote [...]]]></description>
			<content:encoded><![CDATA[<p>Many programmers with at least some education computer science code by a few principles:</p>
<ul>
<li><em>Encapsulate database access, using Data Access Objects so we&#8217;re not tied to one or another database</em></li>
<li><em>Use Model View Controller pattern, so we can change the view logic easily without having to change the entire software.</em></li>
<li><em>Use Facade beans and Remote Beans so we can separate our application server in a frontend-server and business-logic server.</em></li>
<li><em>Know the book of <a href="http://clk.tradedoubler.com/click?a=1601421&amp;p=67859&amp;g=17297702&amp;epi=1001004004976354" target="_BLANK">GoF</a> by heart and use their <a href="http://en.wikipedia.org/wiki/Design_Patterns">patterns</a>, so our code is good.</em></li>
</ul>
<p>However that&#8217;s all wrong! The principles are good, when applied correctly. However the reasons are all wrong resulting mediocre software. If in any project changing database is from for example from MySQL to Oracle or changing view-layer from JSF to GWT is a possibility, then that software-project is very bad managed. The ability to change a product shouldn&#8217;t be the reason. And if people think they can have their software be more robust are perform better by setting up an extra business-logic server, they&#8217;ll be disappointed.</p>
<p>Because people often use the wrong reasons, a lot of code is overly complicated, badly performing and highly unmaintainable. You known something is wrong if you have to wade to a lot of interfaces, Impl classes, XML-configuration files just to known what a piece of code is doing</p>
<p>Naturally the principles are good, however, the goal is totally different.  The reason for all of the principles should be: <em>program correctly functioning code that can be adapted easily now or in the future.</em><br />
<strong>Design patterns isn&#8217;t a bible</strong></p>
<p style="text-align: left;">Known that any book on design patters shouldn&#8217;t be used as a bible. Wrongly applied design patterns produce <a href="http://blog.thinkrelevance.com/2007/5/17/design-patterns-are-code-smells">terrible code</a>. The book of GoF was a great book because they (Gamma et al.) introduced the concept of design patterns and gave a list of good design patterns for C++ and Smalltalk. Many of the design patterns are relevant, but many are also not.<br />
<a href="http://clk.tradedoubler.com/click?a=1601917&amp;p=67859&amp;g=17297702&amp;epi=1001004004976354"><img class="alignleft" style="border: 0pt none;" src="http://www.bol.com/intershoproot/thumb/BOOKCOVER/FC/1/4/0/5/8/1405837306.gif" border="0" alt="Design Patterns" width="48" height="62" /><br />
Design Patterns<br />
Erich Gamma &amp; Craig Larman<br />
</a></p>
<p>Most important contribution of the book, is the notion of design patterns. They introduces common words, a name, like Data Access Object, Visitor, Singleton to programming constructs. Because they gave name to certain programmings patterns, people can talk about them and understand each others code. Similar like architects use various patterns to design houses, office buildings, public buildings or monuments. The origin of design patterns was a book about architecture:</p>
<p><a href="http://clk.tradedoubler.com/click?a=1601917&amp;p=67859&amp;g=17297702&amp;epi=1001004000020130" target="_BLANK"><img src="http://www.bol.com/intershoproot/thumb/BOOKCOVER/FC/0/1/9/5/0/0195024028.gif" border="0" alt="The Timeless Way of Building" /><br />
The Timeless Way of Building<br />
Christopher Alexander<br />
</a></p>
<p>There are endless design patterns besides the one listed in <a href="http://en.wikipedia.org/wiki/Design_Patterns">Design Patterns: Elements of Reusable design</a>. Every programming language, framework and software project and application has its own patterns. Recognize patterns, give them a name if they haven&#8217;t got one. Make sure the patterns and the naming are known within the company, organization or all of the users of a framework. That way, the code will be easily to grasp for anyone who has modify or extend the software, because of common naming and usage.</p>
<p><strong>Great coder</strong></p>
<p>Read who a  <a href="http://www.paulgraham.com/gh.html">great hacker</a> is, how to become <a href="http://www.flipcode.com/archives/Being_A_Better_Programmer.shtml">better programmer</a> read what you can do to be a <a href="http://www.codinghorror.com/blog/archives/001138.html">better coder</a>. The greatest cause why software development is so expensive and costly, is because there&#8217;s enough emphasis within many organisations on writing good code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gerbrand-ict.nl/2009/01/doing-good-for-the-wrong-reasons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
