<?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>HCoder.org &#187; development</title>
	<atom:link href="http://hcoder.org/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://hcoder.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 15 Apr 2012 21:43:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Pragmatic Thinking &amp; Learning, Wikis and Javascript</title>
		<link>http://hcoder.org/2011/10/24/pragmatic-thinking-learning-wikis-and-javascript/</link>
		<comments>http://hcoder.org/2011/10/24/pragmatic-thinking-learning-wikis-and-javascript/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 21:36:25 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[pet]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[wikis]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1207</guid>
		<description><![CDATA[After so much &#8220;slacking&#8221; (just posting book summaries) I&#8217;m trying to go back to regular blogging. Remember my summary of Pragmatic Thinking &#38; Learning? There are many exercises and pieces of advice in that book that I have been trying to practice. One of the things I decided to go for was having a personal [...]]]></description>
			<content:encoded><![CDATA[<p>After so much &#8220;slacking&#8221; (just posting book summaries) I&#8217;m trying to go back to regular blogging. Remember <a href="http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/">my summary of Pragmatic Thinking &amp; Learning</a>? There are many exercises and pieces of advice in that book that I have been trying to practice. One of the things I decided to go for was having a <a href="http://en.wikipedia.org/wiki/Personal_wiki">personal wiki</a>. One of the reasons being, in all honesty, that I had always wanted to have one. Another reason being that my pet TODO application, <a href="https://bitbucket.org/emanchado/bubug/wiki/Home">Bubug</a>, had finally died after some Debian update (some retarded Ruby module broke compatibility with the version I was using, or something; couldn&#8217;t care to investigate). And yet another reason, well, to have a new small pet project and follow my obsession with learning Javascript, and especially <a href="http://nodejs.org/">Node</a>. And that I wanted to give <a href="https://no.de/">Joyent&#8217;s free Node service</a> a try!</p>
<p>But enough with the reasons. It&#8217;s starting to look like it was a pretty useful mini-project. Not just because I learned a bit more Javascript, the excellent <a href="http://expressjs.com/">express</a> web development framework and other things, but also because the result itself, even though it didn&#8217;t take long to develop (and it was pretty fun, even!), feels useful. It feels like a nice place to put all my notes, TODOs, random ideas for projects, etc. A similar feeling of freedom as when I started using my first <a href="http://en.wikipedia.org/wiki/Moleskine">Moleskine</a>. Not that I would ditch paper for computer-<em>anything</em>, but it&#8217;s useful and freeing in its own way, for specific purposes.</p>
<p>About the technology, I used the <a href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> format for the pages thanks to the <a href="https://github.com/evilstreak/markdown-js">markdown-js library</a> (it&#8217;s really nice that the module has an intermediate tree format that you can parse to add your own stuff before converting to HTML, like e.g. wikipage links!), <a href="http://expressjs.com/">express</a> for the whole application structure and <a href="http://code.google.com/p/js-test-driver/">js-test-driver</a> + <a href="http://cjohansen.no/en/javascript/jstdutil_a_ruby_wrapper_over_jstestdriver">jsautotest</a> + a bit of syntax sugar from <a href="http://sinonjs.org/">Sinon.js</a> for the tests (but looking forward to trying out <a href="http://busterjs.org/">Buster.js</a> when it&#8217;s released!). The deployment to Joyent&#8217;s Node.js SmartMachine was reasonably easy. Actually, it was pretty easy once I figured the following:</p>
<ul>
<li>You must not forget to listen in the correct port, with <code class="syntax javascript">server.listen(process.env.PORT || 8001)</code></li>
<li>There are a couple of pretty useful <a href="http://wiki.joyent.com/display/node/Getting+Started+with+a+Node.js+SmartMachine#GettingStartedwithaNode.jsSmartMachine-SSHaccess">Node.js-related command-line utilities</a> to check logs, restart applications and so on</li>
<li>The configuration of the application can be done via <code class="syntax">npm config</code>, see <a href="http://wiki.joyent.com/display/node/npm+Integration">npm integration on Joyent&#8217;s Wiki</a></li>
</ul>
<p>If you&#8217;re curious to see the code, play with it or use it yourself, take a peek to the <a href="https://github.com/emanchado/Wiki-toki">Wiki-Toki repository</a> on GitHub. Happy hacking!</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1207&amp;md5=666f11f6b9488a0fae815494decab83b" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/10/24/pragmatic-thinking-learning-wikis-and-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2011%2F10%2F24%2Fpragmatic-thinking-learning-wikis-and-javascript%2F&amp;language=en_GB&amp;category=text&amp;title=Pragmatic+Thinking+%26%23038%3B+Learning%2C+Wikis+and+Javascript&amp;description=After+so+much+%26%238220%3Bslacking%26%238221%3B+%28just+posting+book+summaries%29+I%26%238217%3Bm+trying+to+go+back+to+regular+blogging.+Remember+my+summary+of+Pragmatic+Thinking+%26amp%3B+Learning%3F+There+are+many+exercises+and+pieces...&amp;tags=books%2Cdevelopment%2Cgithub%2Cjavascript%2Cmarkdown%2Cpet%2Cprogramming%2Cprojects%2Cwikis%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Book summary: Pragmatic Thinking &amp; Learning (III)</title>
		<link>http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/</link>
		<comments>http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 23:38:09 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1192</guid>
		<description><![CDATA[This is the third and last part of my summary of Pragmatic Thinking &#38; Learning, by Andy Hunt. See parts one and two on this same blog. This part will cover chapters &#8220;Gain experience&#8221;, &#8220;Manage Focus&#8221; and &#8220;Beyond Expertise&#8221;. Gain experience Your brain is made to learn by exploring and building mental models on your [...]]]></description>
			<content:encoded><![CDATA[<p>This is the third and last part of my summary of Pragmatic Thinking &amp; Learning, by Andy Hunt. See parts <a href="http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/">one </a>and <a href="http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/">two</a> on this same blog. This part will cover chapters &#8220;Gain experience&#8221;, &#8220;Manage Focus&#8221; and &#8220;Beyond Expertise&#8221;.</p>
<h2>Gain experience</h2>
<p>Your brain is made to learn by exploring and building mental models on your own, not by receiving information passively (see amazing footage of tennis teacher in Alan Kay&#8217;s <a href="http://video.google.com/videoplay?docid=-533537336174204822">Doing with Images Makes Symbols</a>, starting on 55:30). In real life there&#8217;s no curriculum, you&#8217;ll make mistakes and it will get messy: the kind of feedback you need. We learn by &#8220;playing&#8221;, but that doesn&#8217;t mean easy or non-business-like. <a href="http://en.wikipedia.org/wiki/Seymour_Papert">Papert</a> students called it &#8220;fun&#8221; <em>because</em> it was hard, not <em>in spite of</em>.</p>
<p>Leveraging existing knowledge helps learning new skills: we can often find similarities, literal or metaphorical, with existing skills. However, careful not to <em>stick</em> with the similarity. Fully embrace the new skill&#8217;s unique characteristics.</p>
<p>Failures are valuable because they can lead to study and understand what went wrong and how to fix it. They are critical to success, but only when well-managed. A good environment for good failures needs freedom to experiment (few problems have a single solution; prototype more than one solution to a problem), ability to backtrack to a stable state, reproduce any work product as of any time (source control, and the ability to run those versions of the program), ability to demonstrate progress (get comparable feedback between versions). Version control, unit testing and automation give this environment. A supporting environment can make or break learning for anyone.</p>
<p>Tip: to raise awareness when some code fails without apparent reason, try to imagine what the code should look like, then compare it to the real thing.</p>
<p>Time pressure actively shuts things down. Your vision narrows, and R-mode doesn&#8217;t get the chance to work at all.</p>
<h2>Manage Focus</h2>
<p>When not doing anything, the L-mode will produce incessant mental chatter, which interferes with R-mode processing. Meditation helps controlling the L-mode &#8220;monkey voice&#8221;.</p>
<p>When meditating you don&#8217;t want trance, falling asleep, or &#8220;contemplate the big mystery&#8221;, but to sink into a relaxed awareness of yourself and your environment without judgement or making responses. Meditation exercise suggestion: find a quiet spot; sit in a comfortable, alert position with a straight back (become aware of any tension and fix it); close you eyes and focus your awareness on your breath; be aware of the rhythm (don&#8217;t try to change it, just be aware); keep your mind focused on your breath (do not use words or start a conversation with yourself); when you start thinking about some topic or having a conversation with yourself, let the thoughts go and get the focus back on the breath. Even if you mind is wandering often, the exercise of bringing yourself back is useful.</p>
<p>You have to let your thoughts &#8220;marinate&#8221; to get the best results. Different people have different methods to marinate (sitting around doing nothing, humming, eating a crunchy snack, making paper dolls&#8230;). Thinking about at least three solutions to a problem gives you the confidence that you have thought &#8220;enough&#8221; about it. Then, you can let those ideas marinate and come up with the best solution.</p>
<p>Assorted tips:</p>
<ul>
<li>Develop your exocortex (mental memory or processing outside your physical brain: book collection, notes, favourite IDE, etc).</li>
<li>Deliberate switching to e-mail/IM. Close what you&#8217;re working on, take a deep breath, then switch.</li>
<li>Have a way to note things quickly when they come up, without losing the flow or what you were doing (wiki/scratchpad inside you IDE or whatever).</li>
<li>When stuck or bored, doodle on a piece of paper, or go for a walk (without talking to anyone). That helps against checking the internet or e-mail.</li>
<li>Don&#8217;t answer IM right away, put up a sign (&#8220;don&#8217;t disturb&#8221;) during a debugging session or similar, or close the door if you have one. When you do get interrupted, try to save your mental state before you lose it.</li>
<li>Get two monitors (same size and brand) to keep the whole context at sight. Organise virtual desktops by task (communications/distractions, writing, coding/checking documentation, surfing), not by kind of application (browsers, editors, terminals).</li>
</ul>
<p>In summary: learn to quiet your chattering L-mode, deliberately work with and add to thoughts in progress, and be aware of how expensive context switching can be.</p>
<h2>Beyond Expertise</h2>
<p>Change is harder than it looks, old habits don&#8217;t go away easily. Don&#8217;t be hard on yourself, just correct it and go back to the right path. Suggestions to make effective change:</p>
<ul>
<li><em>Start with a plan</em>. Keep track of what you have accomplished, it&#8217;s probably more than you think.</li>
<li><em>Inaction is the enemy, not error</em>. The danger is not doing things <em>wrong</em>, is not doing anything.</li>
<li><em>New habits take time</em>. Expect at least three weeks, maybe more.</li>
<li><em>Belief is real</em>. If you think you&#8217;ll fail, you will.</li>
<li><em>Take small, next steps</em>. Keep your big goal in mind, but don&#8217;t try to spell out all steps you need to get there.</li>
</ul>
<p>Possible first steps (complete list on p. 247-248, this is just two highlights): (1) pick two things that&#8217;ll help you maintain context and avoid interruption, do them right away; (2) open your mind to aesthetics and additional sensory information (your cubicle, desktop, code: how &#8220;pleasing&#8221; is it?).</p>
<p>You don&#8217;t want to become a &#8220;niche expert&#8221;: approach learning without preconceived notions, prior judgement or a fixed viewpoint; be aware of your own reaction to new technology and ideas; be aware of yourself and the context. The biggest reason any of us fail is the autopilot.</p>
<p>And this is the end. I hope you liked it.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1192&amp;md5=b4e15f8d8f4ecb83aed5a7e1f804de05" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2011%2F10%2F12%2Fbook-summary-pragmatic-thinking-learning-iii%2F&amp;language=en_GB&amp;category=text&amp;title=Book+summary%3A+Pragmatic+Thinking+%26%23038%3B+Learning+%28III%29&amp;description=This+is+the+third+and+last+part+of+my+summary+of+Pragmatic+Thinking+%26amp%3B+Learning%2C+by+Andy+Hunt.+See+parts+one+and+two+on+this+same+blog.+This+part+will...&amp;tags=books%2Cbrain%2Cdeveloper%2Cdevelopment%2Csoftware%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Book summary: Pragmatic Thinking &amp; Learning (II)</title>
		<link>http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/</link>
		<comments>http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 22:36:54 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1185</guid>
		<description><![CDATA[This is the second part of my summary of Andy Hunt&#8217;s &#8220;Pragmatic Thinking &#38; Learning&#8221;. See the first part on this blog. This part will cover chapters ”Get in Your Right Mind”, “Debug Your Mind” and &#8221;Learn Deliberately&#8221;. Get in Your Right Mind A good way to involve your brain more is to use more [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second part of my summary of Andy Hunt&#8217;s &#8220;Pragmatic Thinking &amp; Learning&#8221;. See the <a href="http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/">first part</a> on this blog. This part will cover chapters ”Get in Your Right Mind”, “Debug Your Mind” and &#8221;Learn Deliberately&#8221;.</p>
<h2>Get in Your Right Mind</h2>
<p>A good way to involve your brain more is to use more senses than usual. For tactile you can use building blocks like Lego, CRC cards, etc. Example of &#8220;role-playing&#8221; a software design on p. 77. The advantage of using the R-mode is not that it&#8217;s a panacea, it&#8217;s simply to use the other half of your brain <em>too</em> (reference to pair programming). Story of the climbing teacher on p. 81: the importance of feeling something first (R-mode) before learning it&#8217;s theory (L-mode), because it gives you the context to understand the theory and explanations better. Learning can be impeded by trying to memorise facts when you don&#8217;t grasp the whole yet. When creating, be comfortable with the absurd and impractical; when learning, get &#8220;used to it&#8221; before learning and memorising. Using metaphors can open up creativity because they communicate the R-mode and the L-mode (<a href="http://wordnet.princeton.edu/">wordnet</a> can help when creating metaphors).</p>
<p>Tip: the &#8220;morning pages&#8221; technique (p. 98). Write them first thing in the morning (before coffee, shower or anything else); write at least three pages by hand, without computer; do not censor what you write; do not skip a day. Blogging is also a good exercise (what you think about a topic, what you can defend publicly).</p>
<p>Tip: learn martial arts or yoga to improve concentration (p. 103). Tip: break small, daily routines (turn off the autopilot).</p>
<p>Forcing the brain to reconcile unlike patterns broadens the scope of material under consideration (see Zen koans and Greek oracles on p. 107). Reference to <a href="http://rtqe.net/ObliqueStrategies/">oblique strategies</a> (has electronic versions, including an <a href="https://market.android.com/details?id=org.multiply.strategies.oblique">Android version</a>!).</p>
<h2>Debug Your Mind</h2>
<p>We make decisions and solve problems based on faulty memory and our emotional state of the time, ignoring crucial facts, etc. <em>Some</em> cognitive biases: anchoring (ref: experiment with numbers and prices in predictably irrational), fundamental attribution error (other people behave based on their personality, we have excuses for our own behaviour; in reality, behaviour is often caused by the context), self-serving bias (&#8220;it&#8217;s my success&#8221;, but &#8220;it&#8217;s not my failure&#8221;; you&#8217;re always part of the system), need for closure (naturally uncomfortable with uncertainty; have to learn to live with it), confirmation bias, exposure effect (prefer familiar things), Hawthorne effect (people change when they&#8217;re being watched, but after a while they go back to how they were behaving), false memory (easy to confuse imagined events with real memories; every memory <em>read</em> is a <em>write</em> in light of the current context), symbolic reduction fallacy (L-mode is anxious to &#8220;symbol-away&#8221; complexity), nominal fallacy (thinking that labelling a thing means you understand it).</p>
<p>How to fight biases: understand that &#8220;rarely&#8221; doesn&#8217;t mean &#8220;never&#8221;, defer closure (you know the most about a project at the <em>end</em> of it, so don&#8217;t take decisions too early, be comfortable with uncertainty), remember that you don&#8217;t remember well. People are mainly a product of their environment and of the times. Explanation of different American generations on p. 125-131. In summary, generational archetypes are prophet (vision, values), nomad (liberty, survival, honor), hero (community, affluence) and artist (pluralism, expertise, due process). Realise where your thinking is coming from, what are your influences, and what kind of arguments you make. Try to have a diverse team so biases can catch/cancel each other. Myers Briggs Type Indicator discussion on p. 133-135. <em>Trust intuition, but verify</em>. If you think you have defined something, try to define the opposite.</p>
<h2>Learn Deliberately</h2>
<p>A single intense, out-of-context classroom event can only get you started in the right direction. You need continued goals, feedback to understand your progress and approach it far more deliberately than a once-a-year course.</p>
<p>For any goal (desired state, usually short-term) you have in mind you need a plan, a series of objectives (steps towards that goal). Objectives should be Specific (&#8220;learn Erlang&#8221; vs. &#8220;be able to write a web server in Erlang that dynamically generates content&#8221;), Measurable (how do you know when you&#8217;re done? related to &#8220;specific&#8221;. You don&#8217;t have to see where you&#8217;re going, just a couple of meters ahead of you), Achievable (from the current state!), Relevant (does it matter to you? is it under your control?) and Time-boxed (perhaps the most important: the deadline).</p>
<p>Create Pragmatic Investment Plans (PIP) to learn whatever you want to learn. Major point involving managing the plan:</p>
<ul>
<li><em>Have a concrete plan</em>: devise different levels of goals (now, next year, next five years).</li>
<li><em>Diversify</em>: make an effort to choose different methodologies, languages, industries, and non-technical stuff.</li>
<li><em>Active investment</em>: need to be able to evaluate your plan and realistically judge how&#8217;s going. Adapt/change the plan based on that.</li>
<li><em>Invest regularly</em>: you need to make a commitment to invest a minimum of time on a regular basis. Create a ritual, if needed.</li>
</ul>
<p>Other techniques, like mind maps, talk to the duck and learning by teaching are mentioned in this chapter, but I&#8217;m skipping them in the summary.</p>
<p>And this is the end of the second part of my summary. The next one will cover the rest of the book, namely chapters &#8220;Gain experience&#8221;, &#8220;Manage Focus&#8221; and &#8220;Beyond Expertise&#8221;.</p>
<p><strong>EDIT:</strong> read the <a href="http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/">third part</a> of this summary.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1185&amp;md5=9b20e4e00e84d6f8f36b52c24ff94e1e" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2011%2F10%2F11%2Fbook-summary-pragmatic-thinking-learning-ii%2F&amp;language=en_GB&amp;category=text&amp;title=Book+summary%3A+Pragmatic+Thinking+%26%23038%3B+Learning+%28II%29&amp;description=This+is+the+second+part+of+my+summary+of+Andy+Hunt%26%238217%3Bs+%26%238220%3BPragmatic+Thinking+%26amp%3B+Learning%26%238221%3B.+See+the+first+part+on+this+blog.+This+part+will+cover+chapters+%E2%80%9DGet+in+Your...&amp;tags=books%2Cbrain%2Cdeveloper%2Cdevelopment%2Csoftware%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Book summary: Pragmatic Thinking &amp; Learning</title>
		<link>http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/</link>
		<comments>http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 22:44:48 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1177</guid>
		<description><![CDATA[This is the first part of my summary of &#8220;Pragmatic Thinking &#38; Learning&#8220;, by Andy Hunt. It&#8217;s a book about how the brain works and how to take more advantage of it. It explores many interesting topics, like learning, focusing, the brain modes of operation, etc. Do note that I&#8217;ll skip many techniques/lessons in the [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first part of my summary of &#8220;<a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning">Pragmatic Thinking &amp; Learning</a>&#8220;, by Andy Hunt. It&#8217;s a book about how the brain works and how to take more advantage of it. It explores many interesting topics, like learning, focusing, the brain modes of operation, etc. Do note that I&#8217;ll skip many techniques/lessons in the summary, sometimes because they were less interesting for me (as in, I didn&#8217;t think they would work for me), sometimes because I already practise them. This first part will cover the introduction (<a href="http://media.pragprog.com/titles/ahptl/intro.pdf">in PDF</a>), and chapters &#8221;Journey from Novice to Expert&#8221; (<a href="http://media.pragprog.com/titles/ahptl/chap2.pdf">in PDF</a>) and &#8220;This is Your Brain&#8221;.</p>
<h2>Introduction</h2>
<p>Despite advances in programming languages, techniques, methodologies, &#8230;, the defect density has remained fairly constant. Maybe we&#8217;re focusing on the wrong things: software is created in your head.</p>
<p>You don&#8217;t get <em>taught</em>, you have to <em>learn</em>. Everything is connected, there&#8217;s nothing in isolation, so sometimes small things can have unexpectedly larger effects.</p>
<h2>Journey from Novice to Expert</h2>
<p>The novice needs clear, context-free rules to operate, but an expert is ineffective when constrained by those same rules. Experts don&#8217;t just &#8220;know more&#8221; than novices, they experience fundamental differences in how they perceive the world, approach problem solving, etc. The stages of learning in the Dreyfus model are:</p>
<ul>
<li><em>Novices</em>. Have little or no previous experience in this skill area (&#8220;experience&#8221; results in a change of thinking; doing the same for years doesn&#8217;t count!). They don&#8217;t particularly want to learn, want to accomplish an immediate goal, don&#8217;t know how to respond to mistakes and are fairly vulnerable to confusion when things go awry (example of doing taxes for years on p. 20).</li>
<li><em>Advanced Beginners</em>. Can start to break from the fixed rule set a little bit. Can try tasks on their own but have trouble troubleshooting. They want information fast (eg. API reference) and can start using advice in the correct context, but don&#8217;t have a holistic understanding and really don&#8217;t want it yet.</li>
<li><em>Competent</em>. Can develop mental models and work with them effectively, troubleshoot problems on their own, and begin to figure out how to solve novel problems, as well as seek and take advice from experts. They&#8217;re typically described as &#8220;having initiative&#8221; or &#8220;resourceful&#8221; and tend to be in a leadership role in the team (formal or not). They&#8217;re great to have on your team because they can mentor the novices while not annoying the experts.</li>
<li><em>Proficient</em>. Need the big picture, and thus will seek out and try to understand the larger conceptual framework around the skill. They&#8217;re frustrated by simplified information. This is the first level that can correct previous poor performance and revise their approach. They can also learn from the experience of others, which comes with the ability to understand and apply <em>maxims</em>.</li>
<li><em>Experts</em>. Primary sources of knowledge and information in any field, continually looking for better methods and better ways of doing things. Statistically, there aren&#8217;t many: probably around 1-5%. Experts work on intuition, not reason. They may be completely inarticulate as to how they arrived at a conclusion. They aren&#8217;t perfect though, and have the same cognitive biases as everyone else. They&#8217;re also likely to disagree with one another.</li>
</ul>
<p>Most people, for most skills, never get past the second stage. Plus, practitioners at a lower skill level have a marked tendency to overestimate their own abilities. Note that you want a mix of skills on a team. See &#8220;10 years to expertise&#8221; on p. 32. The dangers of overreliance on formal models (I&#8217;m skipping some in this list!):</p>
<ul>
<li><em>Confusing the model with reality</em>. It&#8217;s easy to confuse the two, but they aren&#8217;t the same.</li>
<li><em>Devaluing traits that cannot be formalised</em>. Good problem-solving skills are critical to our jobs, but problem solving is a very hard thing to formalise.</li>
<li><em>Legislating behaviour that contradicts individual autonomy</em>. You want thinking, responsible developers. Don&#8217;t reward herd behaviour.</li>
<li><em>Alienating experienced practitioners in favour of novices</em>. Targeting your methodology to novices, you create a poor working environment for the more experienced.</li>
<li><em>Oversimplification of complex situations</em>. Every project/situation is more complex than that.</li>
<li><em>Demand for excessive conformity</em>. What worked great in your last project might be a disaster in the next one.</li>
<li><em>Insensitivity to contextual nuances</em>. Formal methods are geared to the typical, not the particular. But when does the &#8220;typical&#8221; ever happen?</li>
<li><em>Mystification</em>. Speech becomes so sloganised that it becomes trivial and loses meaning (eg. &#8220;we&#8217;re a customer-focused organisation&#8221;).</li>
</ul>
<h2>This is your brain</h2>
<p>You have two &#8220;CPUs&#8221;: the linear, logical thought and language processing CPU (&#8220;L-mode&#8221;, for &#8220;linear&#8221;; the &#8220;left part of the brain&#8221;); and the searching and pattern matching CPU (The &#8220;R-mode&#8221;, for &#8220;rich&#8221;; the &#8220;right part of the brain&#8221;). They share the same bus so they can&#8217;t function at the same time.</p>
<p>R-mode can search &#8220;asynchronously&#8221; and come up with the response (possibly days) later. It doesn&#8217;t do any verbal processing, so the results are not verbal either (eg. trying to describe dreams). Also, it&#8217;s not under our direct concious control: as it can give answers anytime, we have to be ready to write down anything that comes up (related: <em>everyone</em> has good ideas, but far fewer <em>track</em> them; of those, even fewer bother to <em>act</em> on those ideas, and even fewer of those have the resources to make a good idea a success). It is very concrete, relating things as they are; it makes analogies and doesn&#8217;t require reason or known facts to process input. It&#8217;s holistic and wants to see the whole thing at once, perceiving overall patterns and structures. It&#8217;s intuitive, making leaps of insight, based on incomplete patterns, hunches, feelings or visual images. It&#8217;s very useful for software design.</p>
<p>Synthesis can be good for learning, see &#8220;<a href="http://web.media.mit.edu/~nicholas/Wired/WIRED2-07.html">Don&#8217;t Dissect the Frog, Build It</a>&#8221; on p. 62. Aesthetics also make a difference, see p. 66-67. The brain is wonderfully plastic. There&#8217;s no limit to the number of skills you can learn, <em>as long as you believe it</em> (ie. what you think about your brain capabilities physically affects the &#8220;wiring&#8221; of the brain itself).</p>
<p>And that&#8217;s all for now. The next part will cover chapters &#8221;Get in Your Right Mind&#8221; and &#8220;Debug Your Mind&#8221;.</p>
<p><strong>EDIT:</strong> read the <a href="http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/">second part</a> of this summary.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1177&amp;md5=3a009471028332e927f6e8dc7cd09c64" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2011%2F10%2F10%2Fbook-summary-pragmatic-thinking-learning%2F&amp;language=en_GB&amp;category=text&amp;title=Book+summary%3A+Pragmatic+Thinking+%26%23038%3B+Learning&amp;description=This+is+the+first+part+of+my+summary+of+%26%238220%3BPragmatic+Thinking+%26amp%3B+Learning%26%238220%3B%2C+by+Andy+Hunt.+It%26%238217%3Bs+a+book+about+how+the+brain+works+and+how+to+take+more+advantage...&amp;tags=books%2Cbrain%2Cdeveloper%2Cdevelopment%2Csoftware%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Work-related news</title>
		<link>http://hcoder.org/2008/07/22/work-related-news/</link>
		<comments>http://hcoder.org/2008/07/22/work-related-news/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 21:22:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Freedom]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[continuous]]></category>
		<category><![CDATA[curriculum]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Some time ago, Opera announced the Opera Web Standards Curriculum project. It&#8217;s a very interesting collection of articles that can be used as &#8220;curriculum&#8221; to learn about web development. It gets extra geeks points for using a Creative Commons license for the articles themselves. Even the W3C mentioned it :-) I just found some time [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, Opera <a href="http://www.opera.com/pressreleases/en/2008/07/08/">announced</a> the <a href="http://www.opera.com/wsc/">Opera Web Standards Curriculum</a> project. It&#8217;s a very interesting collection of articles that can be used as &#8220;curriculum&#8221; to learn about web development. It gets extra geeks points for using a Creative Commons license for the articles themselves. Even <a href="http://www.w3.org/QA/2008/07/web-standards-curriculum">the W3C mentioned it</a> <code>:-)</code> I just found some time to have a look at it, that&#8217;s why I&#8217;m posting now <code>:-)</code></p>
<p>The other news is that finally the <a href="http://my.opera.com/operaqa/blog">Opera QA blog</a> is online, and has the first non-hello-world-article (written by yours truly), &#8220;<a href="http://my.opera.com/operaqa/blog/show.dml/2358111">Continuous Integration: Team Testing</a>&#8221;. I&#8217;m very excited about this, because it&#8217;s the first time I&#8217;ll participate directly in a company blog, and because the IT world needs more (and better) QA, so hopefully we&#8217;ll be able to spread the word and make the world a better place <code>:-D</code></p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=32&amp;md5=9b41b00f4a42e2567a45c112eb187178" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2008/07/22/work-related-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2008%2F07%2F22%2Fwork-related-news%2F&amp;language=en_GB&amp;category=text&amp;title=Work-related+news&amp;description=Some+time+ago%2C+Opera+announced+the+Opera+Web+Standards+Curriculum+project.+It%26%238217%3Bs+a+very+interesting+collection+of+articles+that+can+be+used+as+%26%238220%3Bcurriculum%26%238221%3B+to+learn+about+web+development.+It...&amp;tags=blog%2Ccontinuous%2Ccurriculum%2Cdevelopment%2Cintegration%2Copera%2Cqa%2Cstandards%2Cweb%2Cblog" type="text/html" />
	</item>
		<item>
		<title>CHDK &#8211; Canon Hacker&#8217;s Development Kit</title>
		<link>http://hcoder.org/2008/06/15/chdk-canon-hackers-development-kit/</link>
		<comments>http://hcoder.org/2008/06/15/chdk-canon-hackers-development-kit/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 19:15:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[canon]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[kit]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Some days ago, Arve posted a very interesting link in Twitter: Turn Your Point-and-Shoot into a Super-Camera. It was about something called CHDK (Canon Hacker&#8217;s Development Kit), which is a non-official firmware enhancement for many Canon cameras. It sounds pretty scary, but actually it&#8217;s really safe and easy to use: you just copy some files [...]]]></description>
			<content:encoded><![CDATA[<p>Some days ago, <a href="http://virtuelvis.com/">Arve</a> posted a very interesting link in <a href="http://twitter.com">Twitter</a>: <a href="http://lifehacker.com/387380/turn-your-pointandshoot-into-a-supercamera">Turn Your Point-and-Shoot into a Super-Camera</a>. It was about something called <a href="http://chdk.wikia.com/"><span class="caps">CHDK</span></a> (Canon Hacker&#8217;s Development Kit), which is a non-official firmware <em>enhancement</em> for many Canon cameras.</p>
<p>It sounds pretty scary, but actually it&#8217;s really safe and easy to use: you just copy some files into your memory card, and ask the camera to upgrade the firmware via some menu option. The awesome part is that <em>it only &#8220;upgrades&#8221; a copy in memory</em>, so if you simply turn off the camera, the next time everything is back to normal. Of course there are options to load it on startup if you&#8217;re happy with it.</p>
<p>The goodies: saving in <span class="caps">RAW</span> format, some new menu options, more information on the <a href="http://en.wikipedia.org/wiki/On-screen_display"><span class="caps">OSD</span></a>, <em>configurable</em> <span class="caps">OSD</span>, <a href="http://en.wikipedia.org/wiki/BASIC"><span class="caps">BASIC</span></a> scripting, and even <strong>games</strong> (<a href="http://en.wikipedia.org/wiki/Sokoban">Sokoban</a> and <a href="http://en.wikipedia.org/wiki/Reversi">Reversi</a>). One of the features that caught my attention in the article was a special mode for motion detection, that apparently works well for making pictures of lightning strikes. And it&#8217;s actually a <a href="http://chdk.wikia.com/wiki/UBASIC/Scripts">user-written script</a>, how awesome is that?</p>
<p>I haven&#8217;t played that much with it yet, but I have tried and it works as advertised (<span class="caps">YMMV</span>). I can&#8217;t wait to use it more, and maybe even try some silly <span class="caps">BASIC</span> program.</p>
<p>Thanks a lot Arve! <code>;-)</code></p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=29&amp;md5=6000283fcf33dd78a01144a4405ef89a" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2008/06/15/chdk-canon-hackers-development-kit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2008%2F06%2F15%2Fchdk-canon-hackers-development-kit%2F&amp;language=en_GB&amp;category=text&amp;title=CHDK+%26%238211%3B+Canon+Hacker%26%238217%3Bs+Development+Kit&amp;description=Some+days+ago%2C+Arve+posted+a+very+interesting+link+in+Twitter%3A+Turn+Your+Point-and-Shoot+into+a+Super-Camera.+It+was+about+something+called+CHDK+%28Canon+Hacker%26%238217%3Bs+Development+Kit%29%2C+which+is+a...&amp;tags=basic%2Ccamera%2Ccanon%2Cdevelopment%2Cfirmware%2Chacker%2Ckit%2Cscripting%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

