<?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>Die Welt ist gar nicht so. &#187; simplestthingthatworks</title>
	<atom:link href="http://blog.dieweltistgarnichtso.net/tag/simplestthingthatworks/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.dieweltistgarnichtso.net</link>
	<description>Sie ist ganz anders.</description>
	<lastBuildDate>Mon, 23 Sep 2013 15:41:20 +0000</lastBuildDate>
	<language>de-DE</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.35</generator>
	<item>
		<title>Weniger Programmieren ist mehr</title>
		<link>http://blog.dieweltistgarnichtso.net/weniger-programmieren-ist-mehr</link>
		<comments>http://blog.dieweltistgarnichtso.net/weniger-programmieren-ist-mehr#comments</comments>
		<pubDate>Tue, 08 Nov 2011 16:36:12 +0000</pubDate>
		<dc:creator><![CDATA[erlehmann]]></dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[simplestthingthatworks]]></category>

		<guid isPermaLink="false">http://blog.dieweltistgarnichtso.net/?p=4127</guid>
		<description><![CDATA[Wenn ein Problem mit Hilfe eines Computerprogramms bearbeitet werden soll, ist es oft hilfreich, darüber nachzudenken, welcher Ansatz so einfach ist, dass er gerade so funktioniert. Eingeweihte nennen dies The Simplest Thing that Could Possibly Work. Diesem Paradigma folgende Lösungen &#8230; <a href="http://blog.dieweltistgarnichtso.net/weniger-programmieren-ist-mehr">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
Wenn ein Problem mit Hilfe eines Computerprogramms bearbeitet werden soll, ist es oft hilfreich, darüber nachzudenken, welcher Ansatz so einfach ist, dass er <em>gerade so</em> funktioniert. <span title="Altschuchteln">Eingeweihte</span> nennen dies <a href="http://en.wikiquote.org/wiki/Ward_Cunningham#The_Simplest_Thing_that_Could_Possibly_Work"><i lang="en">The Simplest Thing that Could Possibly Work</i></a>.
</p>
<p>
Diesem Paradigma folgende Lösungen können selbst dann gut funktionieren, wenn sie auf den ersten Blick absurd wirken: Die Frage <a href="http://www.peterkroener.de/spamschutz-leichtgemacht/"><i>Was ist der Vorname von Franz Beckenbauer?</i> schützt gegen <i lang="en">spam</i></a> nämlich genau so gut wie ein <a href="http://de.wikipedia.org/wiki/Akismet">komplexes Analyse-<i>plugin</i></a>. Auch die Methode der <a href="http://riesenmaschine.de"><i>Riesenmaschine</i></a>, neue Kommentare gegen eine kurze Liste unerwünschter Wortbestandteile (etwa <i>!!</i>, <i>lugschei</i>) zu prüfen, kommt ohne komplizierte Filtermodelle aus.
</p>
<p>
<a href="http://lea.verou.me/2011/05/get-your-hash-the-bulletproof-way/">Wie es hingegen <em>nicht</em> geht, beschreibt Lea Verou</a> anhand der Aufgabe, das Doppelkreuz am Anfang von <abbr title="Uniform Resource Locator">URL</abbr>-Fragmenten zu entfernen. In einem Buch fand sie dazu den <i>JavaScript</i>-Schnipsel <code>location.hash.<a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/match">match</a>(/#(\w+)/)[1]</code>. Der enthält allerdings nicht nur einen unleserlichen <a href="http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck">regulären Ausdruck</a>, sondern funktioniert auch nicht; so produziert die Verarbeitung des <a href="http://mathiasbynens.be/notes/html5-id-class">gültigen Werts</a> <i>#♥</i> einen Fehler. Verous in jedem Fall funktionierende Alternative lautet schlicht <code>location.hash.<a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring">substring</a>(1)</code>.
</p>
<p>
Um Fehler dieser Art zu verstehen, sollte man wissen, dass <a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html">viele Programmierer nicht programmieren können</a>. Damit ist nicht gemeint, dass sie unfähig sind, lauffähigen Code zu produzieren – sie haben jedoch Schwierigkeiten, ein <a href="http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html">zutreffendes mentales Modell der Programmlogik</a> zu entwickeln. Hinzu kommt <a href="http://haacked.com/archive/2007/02/27/Why_Cant_Programmers._Read.aspx">mangelnde Lesekompetenz</a>: So lehnen Programme etwa <a href="http://www.jacobsen.no/anders/blog/archives/2002/08/24/email_addresses_with_a_are_valid.html">Email-Adressen mit Plus-Zeichen</a> ab, weil die Entwickler <a href="http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx">nicht wissen, welche Zeichen erlaubt sind</a> – und dennoch überzeugt sind, das Richtige zu tun.
</p>
<p>
Dass jemand einen Algorithmus oder eine Spezifikation missverstanden hat, ist jedoch für Außenstehende nicht auf den ersten Blick erkennbar, <a href="http://de.wikipedia.org/wiki/Dunning-Kruger-Effekt">für einen selber sogar noch weniger</a>. Unabhängig vom Ego gilt aber: Programme nach dem <i lang="en">Simplest Thing</i>-Prinzip zu schreiben reduziert das Risiko, etwas Unverständliches zu produzieren – selbst für <span title="Die BESTEN der BESTEN der BESTEN.">jene, die sich für besonders clever halten</span>. Als Fingerübung habe ich mir daher vorgenommen, so weit wie möglich auf reguläre Ausdrücke zu verzichten.
</p>
<p>
<i lang="en">The Simplest Thing that Could Possibly Work</i> muss übrigens nicht unbedingt aus eigenem Code bestehen: Spezialisierte Programmbibliotheken zu nutzen spart nicht nur Zeit, sondern reduziert ebenfalls die Fehlerrate. Faustregel: Wer komplexe Formate wie <abbr title="Hypertext Markup Language">HTML</abbr> parsen oder generieren möchte, sollte besser <a href="http://code.google.com/p/html5lib/">existierende Werkzeuge</a> benutzen, als sich selbst Gedanken zu machen – sonst besteht das Risiko, eine <a href="http://regex.info/blog/2006-09-15/247">beherrschte Technik in einem Bereich anzuwenden, für den sie vollkommen unpassend ist</a> (<a href="https://github.com/matthiasr/logformat/pull/4">Patch für Negativ-Beispiel</a>).
</p>
<p>
Gleich doppelt beleuchtet diese Kategorie <a href="https://github.com/juuso/BozoCrack"><i>BozoCrack</i></a> – ein Programm, das mit <a href="http://de.wikipedia.org/wiki/Md5"><abbr title="Message-Digest Algorithm 5">MD5</abbr></a> unkenntlich gemachte Passphrasen nicht selbst knackt, sondern Google bemüht (danke, <i>plomlompom</i>): Es benutzt nicht nur eine externe Resource, sondern zeigt auch, dass die <abbr title="Message-Digest Algorithm 5">MD5</abbr> nutzenden Entwickler nicht verstanden haben, <a href="http://codahale.com/how-to-safely-store-a-password/">wie Passwörter gespeichert werden sollten</a>.
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.dieweltistgarnichtso.net/weniger-programmieren-ist-mehr/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
