<?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>f3yourmind &#187; learning</title>
	<atom:link href="http://aslamkhan.net/tag/learning/feed/" rel="self" type="application/rss+xml" />
	<link>http://aslamkhan.net</link>
	<description>"There are no limits. There are only plateaus, and you must not stay there, you must go beyond them." - Bruce Lee</description>
	<lastBuildDate>Wed, 01 Sep 2010 22:25:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Coding for Enlightenment</title>
		<link>http://aslamkhan.net/software-development/coding-for-enlightenment/</link>
		<comments>http://aslamkhan.net/software-development/coding-for-enlightenment/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:54:05 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=345</guid>
		<description><![CDATA[Jimmy Nilsson asked me in an email a few days ago &#8220;How&#8217;s life?&#8221;.  I&#8217;m sure it was just a regular, friendly question, but I gave him a &#8220;life&#8221; answer.  It was not spontaneous but something that has been brooding in me for a while.   It is about things that I have been trying to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jimmynilsson.com">Jimmy Nilsson</a> asked me in an email a few days ago &#8220;<em>How&#8217;s life?&#8221;</em>.  I&#8217;m sure it was just a regular, friendly question, but I gave him a <em>&#8220;life&#8221;</em> answer.  It was not spontaneous but something that has been brooding in me for a while.   It is about things that I have been trying to do for a long time.</p>
<p>Here&#8217;s a few splintered thoughts from my email exchange.</p>
<ul>
<li>Enlightened, for me, is about happiness that comes from being content; unenlightened is just trying to be happy.</li>
<li>There are many solutions for every problem, whether I am aware of them or not; and the problem has already chosen the best solution, but I have not found it yet.</li>
<li>Code from my heart because I should trust myself first.</li>
<li>Be part of the exploration, not just an observer.</li>
<li>This moment is more important than trying to figure out how it impacts the future, because I can deal with the future in that future moment.</li>
<li>Passion is constant whether I succeed or fail.</li>
<li>Let the project plan me, by bending to suit the situation not and not bending the situation to suit me.</li>
<li>The code I write knows everything, because every line of code has an impact on someone else or some other piece of code.</li>
</ul>
<p>Now I&#8217;ve decided to actively explore why I write code, or why I wish to continue doing what I am doing.  I am not sure what I will uncover in this exploration, but I know that it will be very personal.  I don&#8217;t even know if it will be worth sharing, that&#8217;s why I am sharing so early.  It just felt right.</p>
<p>I think it will be really tough, but I take solace from my 9 year old son who told his 6 year old sister <em>&#8220;Getting hurt is part of playing&#8221;</em>.</p>
<p>PS: I don&#8217;t think Jimmy will ever ask me a <em>&#8220;How&#8217;s life?&#8221;</em> question again <img src='http://aslamkhan.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fcoding-for-enlightenment%2F&amp;linkname=Coding%20for%20Enlightenment"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/coding-for-enlightenment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Readability is the real (re)usability</title>
		<link>http://aslamkhan.net/software-development/readability-is-the-real-reusability/</link>
		<comments>http://aslamkhan.net/software-development/readability-is-the-real-reusability/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 20:23:02 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[intentions]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=280</guid>
		<description><![CDATA[Last week on the factor10 DDD course in Cape Town, the question of reusability came up again.  It&#8217;s the same old object orientation promise of &#8220;Just do OO and you get phenomenal reuse for free&#8221;.  Today, I was refactoring some code with another developer at a client and I extracted some lines into a few [...]]]></description>
			<content:encoded><![CDATA[<p>Last week on the factor10 DDD course in Cape Town, the question of reusability came up again.  It&#8217;s the same old object orientation promise of <em>&#8220;Just do OO and you get phenomenal reuse for free&#8221;</em>.  Today, I was refactoring some code with another developer at a client and I extracted some lines into a few private methods just to clean up a really fat loop.  The initial reaction from the other developer was <em>&#8220;That&#8217;s an overkill because you won&#8217;t reuse that method&#8221;</em>.  My spontaneous reaction was <em>&#8220;Readability is the real reusability&#8221;</em>.</p>
<p>It&#8217;s true, the method won&#8217;t be reused.  It&#8217;s also true that most us were taught in some Programming 101 course that you should create a method, function, procedure only if you are going to call it more than once, otherwise just leave it all inline.  I value ubuntu coding, and so I have learned to unlearn that naive rule.  When I make my code more readable, I get more reuse out of it.  The reuse I value is not really about the number of repeated method calls or number of inherited classes.  I value the increased reusability that is achieved when more developers are able to read my code and walk away understanding my intention, clearly and unambiguously.</p>
<p>Let me put it another way.  Your code is a representation of your model.  Your model should be used to drive all collaborative discussions about the solution.  That&#8217;s where you get the real reuse in your model.  If people can&#8217;t understand your model, then your model can&#8217;t be re-used for further discussions.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Freadability-is-the-real-reusability%2F&amp;linkname=Readability%20is%20the%20real%20%28re%29usability"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/readability-is-the-real-reusability/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ubuntu Coding for your Friends</title>
		<link>http://aslamkhan.net/software-development/ubuntu-coding-for-your-friends/</link>
		<comments>http://aslamkhan.net/software-development/ubuntu-coding-for-your-friends/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 11:07:30 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[balance]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[intentions]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=211</guid>
		<description><![CDATA[Last week I gave a domain driven design course and one slide I put up was titled &#8220;Coding for Friends&#8221; with a single message &#8220;Avoid conceptual corruption&#8221;. In other words &#8220;Code so I can understand you and you don&#8217;t screw up my mind&#8221;.  I did not realise the significance until I started working through the [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I gave a domain driven design course and one slide I put up was titled &#8220;Coding for Friends&#8221; with a single message &#8220;Avoid conceptual corruption&#8221;. In other words &#8220;Code so I can understand you and you don&#8217;t screw up my mind&#8221;.  I did not realise the significance until I started working through the practical exercises with the groups and kept on referring back to this simple idea.</p>
<p>So often we write code in isolation and the code reflects our personal interpretation of the problem and a personalised solution too.  We easily forget that other people will execute this code, modify it, and, at the very least, read it.  Coding is a social exercise first, then a technical exercise.  We have a responsibility towards increasing the probability of success for the next person or team that will work this code.</p>
<p>We can write code in isolation that is of high quality, focusing on self and metaphysics of quality, etc.  That&#8217;s a zen view and it is about you.  I like to think (believe?) that Ubuntu is zen for a group, not for an individual.</p>
<p>In Zulu, the Ubuntu philosophy is summed up as</p>
<blockquote><p>Umuntu ngumuntu ngabantu</p></blockquote>
<p>which roughly translates to</p>
<blockquote><p>A person is a person through (other) persons</p></blockquote>
<p>And in geek-speak it is</p>
<blockquote><p>A developer is a developer through (other) developers</p></blockquote>
<p>I get better because you make me better through your good actions.  And the opposite also holds true: You get worse at what you do when I am bad at what I do.</p>
<p>How do we write ubuntu code?  It&#8217;s not hard.  It&#8217;s based on &#8220;old&#8221; principles and wise words of many people.  It&#8217;s old material but worth revisiting with ubuntu glasses on: when you think about what the effect is on other developers and what the reciprocal effect will be, back onto yourself.</p>
<p><strong>Reveal your intention, not your implementation.</strong> If you have designed a project management app with tasks and decided to implement it as a graph, call the class <em>Task</em> and give it a method called <em>resolveCyclicDependencies()</em>.  Don&#8217;t create a class <em>Node</em> with a method called <em>topologicalSort()</em>.</p>
<p><strong>Avoid side effects.</strong> Let a method do one thing, and one thing only.  It&#8217;s frightening how many developers don&#8217;t do this.  For example, if you add a line item to an invoice, don&#8217;t update the total.  Have something else that calculates the total.  Basically, be boring and predictable.  I long time ago a SQL guru looked at my code and said &#8220;The optimizer does not like fancy code&#8221;.  Same thing.</p>
<p><strong>Broken metaphors.</strong> Metaphors exist for conceptual understanding.  Once you get the conceptual break through, leave it.  It&#8217;s ok! Trying to build an economic model with a metaphoric model of fluid flows (or bears and bulls!) will just create havoc downstream.</p>
<p><strong>Where am I?</strong> Figure out where you are in the bigger picture.  Are you upstream or downstream?  Is someone going call my code to create that <em>Book</em> object? Am I going to call someone else&#8217;s code to get the <em>Customer</em> object?  In other words, know what you supply and what you consume.</p>
<p><strong>Fail fast.</strong> Assert! It&#8217;s allowed in production code too.  I would rather fail quickly and dramatically than delay the effect until it is obscure.  More importantly, when I read an assert then I know that the particular condition is critical.  It is an invariant that must be honored.</p>
<p><strong>Pairing.</strong> Programming in pairs is an active exercise, not a case of a second syntax checker.  I see many teams that pair mechanically and it does nothing for increasing code quality at all.  If you practice active pairing, you are closer to ubuntu coding.</p>
<p>There are other techniques which increase the collective responsibility of your design and code such as context maps in strategic design, values and attitudes such as responsibility and feedback.  I&#8217;ll deal with those on another day.</p>
<p>But for now, I think that</p>
<blockquote><p>Code is code through (other) code!</p></blockquote>
<p>Do you have any other ubuntu coding techniques? Attitudes?</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fubuntu-coding-for-your-friends%2F&amp;linkname=Ubuntu%20Coding%20for%20your%20Friends"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/ubuntu-coding-for-your-friends/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Hundreth Away from Fame</title>
		<link>http://aslamkhan.net/software-development/one-hundreth-away-from-fame/</link>
		<comments>http://aslamkhan.net/software-development/one-hundreth-away-from-fame/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 11:33:22 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[balance]]></category>
		<category><![CDATA[diversity]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=208</guid>
		<description><![CDATA[I read an article on the strength of the Finnish schooling system yesterday.  It&#8217;s considered as the best in the world with a 4% variance between the best school and the worst school.  How did they achieve that?  They give a lot of focus on the bottom 99% of kids in the classroom and not [...]]]></description>
			<content:encoded><![CDATA[<p>I read an <a href="http://www.thetimes.co.za/News/Article.aspx?id=1021966">article</a> on the strength of the Finnish schooling system yesterday.  It&#8217;s considered as the best in the world with a 4% variance between the best school and the worst school.  How did they achieve that?  They give a lot of focus on the bottom 99% of kids in the classroom and not the top 1%.</p>
<p>I have a fear that as a community we promote the top 1%.  I hear developers being labeled such as <em>rock stars</em> and <em>ninjas</em>.  It&#8217;s no different to <em>junior</em> developers and <em>senior</em> developers.  We find all sorts of measures to be in the top 1%:  Twitter follower-count, Facebook friends, LinkedIn connections.  I think such labels and measures create an air of exclusivity and elitism to the detriment of 99% of the people.  NINETY NINE PERCENT !!</p>
<p>My 1% rankings have always been nothing more than a fleeting moment.  Once I won a book prize at school and I got an award for some design in university and meal voucher or two for a job well done.  It was meaningfully great in that context, relative to the others in that context.  But it was perceived as such by a few at that moment in time.</p>
<p>Looking back, I feel sad.  Not because of the scarcity my top 1% ranking, but by the reflection that those fleeting moments did not have lasting value to those that were in that context with me.  I should have made it count more significantly.  These days, I want to do things that touch others meaningfully.  Is my my code worth reading and from which you can learn?  Did our conversation over coffee move us closer to understanding each other?  And I want to be affected similarly too, by 100% of the people, not just the 1%.</p>
<p>Sometimes you&#8217;re in the top 1% and sometimes you&#8217;re in the bottom 99%.  But you will always be part of the 100%.  I am nothing, yet I am everything.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fone-hundreth-away-from-fame%2F&amp;linkname=One%20Hundreth%20Away%20from%20Fame"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/one-hundreth-away-from-fame/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Wanted: Muse. No experience needed.</title>
		<link>http://aslamkhan.net/software-development/wanted-muse-no-experience-needed/</link>
		<comments>http://aslamkhan.net/software-development/wanted-muse-no-experience-needed/#comments</comments>
		<pubDate>Tue, 12 May 2009 09:03:31 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=185</guid>
		<description><![CDATA[Artists have muses.  Muses are their creative inspiration.  The Greeks also called it a daemon &#8211; that mythical thing that gave magical creativity.  It&#8217;s actually their genius spirit that helps them when they&#8217;re stuck in a metaphorical tight corner.  Same thing, I think.  So when did we stop having geniuses and became geniuses?
I think I [...]]]></description>
			<content:encoded><![CDATA[<p>Artists have muses.  Muses are their creative inspiration.  The Greeks also called it a daemon &#8211; that mythical thing that gave magical creativity.  It&#8217;s actually their genius spirit that helps them when they&#8217;re stuck in a metaphorical tight corner.  Same thing, I think.  So when did we stop having geniuses and became geniuses?</p>
<p>I think I am actually searching for a muse.  Something that will be my creative genius.  I gave up trying to be a genius a long time ago.  Now I just want to learn from those that are better than me, whatever the context.  Maybe my muse is the sum of every engagement with the genius in each person with whom I work and live.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fwanted-muse-no-experience-needed%2F&amp;linkname=Wanted%3A%20Muse.%20No%20experience%20needed."><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/wanted-muse-no-experience-needed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continental Shifts</title>
		<link>http://aslamkhan.net/software-development/continental-shifts/</link>
		<comments>http://aslamkhan.net/software-development/continental-shifts/#comments</comments>
		<pubDate>Fri, 08 May 2009 11:13:22 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=179</guid>
		<description><![CDATA[I see many people freak out at the mention of any change.  I often do that too.  Why?  Because it forces me out of my comfortable existing neural wiring.  Now I try to view change as a contextual adjustments and a little bit of re-wiring for comfort sake.
Hmmm, as I age, I think the slight [...]]]></description>
			<content:encoded><![CDATA[<p>I see many people freak out at the mention of any change.  I often do that too.  Why?  Because it forces me out of my comfortable existing neural wiring.  Now I try to view change as a contextual adjustments and a little bit of re-wiring for comfort sake.</p>
<p>Hmmm, as I age, I think the slight contextual shifts that I go through now feels less like the massive catastrophic continental shifts.  Much nicer.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fcontinental-shifts%2F&amp;linkname=Continental%20Shifts"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/continental-shifts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Learning Rules for Noobs</title>
		<link>http://aslamkhan.net/software-development/learning-rules-for-noobs/</link>
		<comments>http://aslamkhan.net/software-development/learning-rules-for-noobs/#comments</comments>
		<pubDate>Thu, 07 May 2009 14:42:41 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Architecture and Development]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=172</guid>
		<description><![CDATA[The unfortunate human characteristic in all of us is that we like rules when we&#8217;re in a new and unfamiliar situation, and hate them the moment we think we are experts.  The problem is that rules are great for creating concrete things.  If you want to build this then: do a, then b, if you have [...]]]></description>
			<content:encoded><![CDATA[<p>The unfortunate human characteristic in all of us is that we like rules when we&#8217;re in a new and unfamiliar situation, and hate them the moment we think we are experts.  The problem is that rules are great for creating concrete things.  If you want to build this then: do a, then b, if you have a c then do d otherwise do e.  But it does not work with creating abstract things.  And software development is all about building abstractions.</p>
<p>In the past few weeks, I&#8217;ve had a few instances where I realized that some people were,  basically, asking me for DDD rules &#8211; steps for building an aggregate, when and how to use the specification pattern, etc.  There are no rules for the noobs for these things.  But I think I can constrain the environment so that the noobs can focus a bit more intimately with these aggregates and specifications.    One rule I put down was &#8220;When working with the following &#8230; don&#8217;t work outside of this Java package&#8221;</p>
<p>Essentially, my proposition is that rules for noobs should constrain the learning environment, not the subject being studied.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Flearning-rules-for-noobs%2F&amp;linkname=Learning%20Rules%20for%20Noobs"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/learning-rules-for-noobs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
