<?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>Software Creation Mystery &#187; People</title>
	<atom:link href="http://softwarecreation.org/category/people/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwarecreation.org</link>
	<description>What are the forces behind software development?</description>
	<lastBuildDate>Wed, 07 Jul 2010 04:34:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to Become an Expert: Creativity</title>
		<link>http://softwarecreation.org/2010/how-to-become-an-expert-creativity/</link>
		<comments>http://softwarecreation.org/2010/how-to-become-an-expert-creativity/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 04:20:08 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=122</guid>
		<description><![CDATA[Sharecre·a·tiv·i·ty -the ability to transcend traditional ideas, rules, patterns, relationships, or the like, and to create meaningful new ideas, forms, methods, interpretations

Creativity can be developed and improved. Here is my Theory of Creativity in 3 parts

Prepared Mind &#8211; prepare your mind to be creative
Right challenges &#8211; know what challenges you should embrace now
Creative ideas &#8211; [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2010/how-to-become-an-expert-creativity/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2010/how-to-become-an-expert-creativity/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2010/how-to-become-an-expert-creativity/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2010/how-to-become-an-expert-creativity/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2010/how-to-become-an-expert-creativity/&amp;title=How+to+Become+an+Expert%3A+Creativity&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><span style="font-family: verdana,arial,helvetica,sans-serif;"><span style="color: #333333;"><strong>cre·a·tiv·i·ty -</strong><em>the ability to transcend traditional ideas, rules, patterns, relationships, or the like, and to create meaningful new ideas, forms, methods, interpretations</em></span></span></p>
<p><img class="alignnone" title="Vladimir Kush" src="http://softwarecreation.org/images/2010/windmills.jpg" alt="" /></p>
<p>Creativity can be developed and improved. Here is my Theory of Creativity in 3 parts</p>
<ol>
<li><strong>Prepared Mind</strong> &#8211; prepare your mind to be creative</li>
<li><strong>Right challenges</strong> &#8211; know what challenges you should embrace now</li>
<li><strong>Creative ideas</strong> &#8211; use powerful techniques to get new ideas</li>
</ol>
<h3>I. Prepared Mind</h3>
<div>Your mind is the main tool for generating ideas. Empty, timid and rigid mind will not produce successful ideas.</div>
<p>What should be the qualities of the mind to get great ideas and solve complex problems?</p>
<ol>
<li><strong>Knowledgeable </strong>- know problem domain and other fields that can inspire new ideas</li>
<li><strong>Flexible </strong>- able to vary and adapt the ways of thinking</li>
<li><strong>Forceful </strong>- eager and resolute to find a solution</li>
<li><strong>Easy </strong>- clear and free from stress and fear</li>
<li><strong>Playful </strong>- can surprise and break rules</li>
<li><strong>Intuitive </strong>- come up with ideas without thinking and reasoning</li>
</ol>
<div>How can you develop these qualities and prepare your mind to be creative?</div>
<div><span id="more-122"></span></div>
<h4>1. Feed Head &#8211; make mind knowledgeable</h4>
<div><em>&#8220;If you want to make an apple pie from scratch, you must first create the universe.&#8221;</em> &#8211; Carl Sagan</div>
<p><em> </em>Organize regular information channels for delivering intellectual food for your head and push your mind outside of familiar boundaries.</p>
<p><strong>Build optimal flow of information in areas of your interests </strong></p>
<ul>
<li>Subscribe to blogs, magazines, podcasts, rss, twitter, etc.
<ul>
<li>Balance <strong>broad </strong>(e.g. <a id="fgdm" title="techcrunch.com" href="http://techcrunch.com/">techcrunch.com</a>, <a id="hmvu" title="digg.com" href="http://digg.com/">digg.com</a>) and <strong>deep </strong>sources (specialized sites or thought leaders blogs).</li>
<li>Group online sources (rss, blogs, twitter) based on <strong>frequency </strong>of updates and <strong>value </strong>to avoid missing valuable posts in the pile of shallow news.</li>
<li>Periodically review existing sources and re-arrange or remove them to keep the feed optimal for your current needs</li>
</ul>
</li>
</ul>
<ul>
<li>Scan for new books, blogs and articles
<ul>
<li>amazon.com is the best site to find great new books</li>
<li>Collect references and mentions from trusted sources</li>
<li>Use sites like <a id="wu9s" title="www.stumbleupon.com" href="http://www.stumbleupon.com/">www.stumbleupon.com</a> to discover new blogs and articles</li>
</ul>
</li>
</ul>
<p><strong><br />
Probe other fields</strong> &#8211; regularly try new fields for potentially useful information, interesting ideas and new perspectives.<br />
<em><br />
<span style="font-style: normal;">Start with general fields &#8211; history, art, economy, philosophy, management, psychology, physics, engineering and many others. Dig deeper if you find the field interesting.</span><br />
</em></p>
<ul>
<li>Subscribe to magazine and websites with interesting articles in wide range of fields targeted for general audience (e.g. <a id="s8lo" title="New Scientist" href="http://www.newscientist.com/">New Scientist</a> for science fields)</li>
<li>Search for highly ranked sources that are interesting and deliver good overview of the selected field.</li>
<li>Again, amazon.com and Google search are good starting points</li>
<li>Connect new information to your field &#8211; approaches, concepts, problems, solutions</li>
</ul>
<p><strong>Content analysis</strong> &#8211; keep your hand on pulse of your society and industry &#8211; general trends, key events, statistics, buzzes, news. All this information can be a valuable source for understanding present and future.</p>
<p><strong>Take notes</strong> &#8211; write down facts, thoughts and problems that can give rise to the new ideas, solutions or topics for future investigation</p>
<ul>
<li>Find good tools to capture your thoughts &#8211; otherwise you can lose great thoughts and ideas forever</li>
<li>Maintain Brainbank &#8211; collection of idea starters (undeveloped idea briefs) for specific topics in designated virtual or physical folders</li>
</ul>
<h4>2. Prime Your Mind &#8211; make it flexible</h4>
<p><em>&#8220;The mind is everything. What you think you become.&#8221;</em> &#8211; Buddha <em> </em></p>
<p><em> </em>Train mind to be creative, flexible and open to the world. Do not allow to stale &#8211; shake and exercise it every day with</p>
<ul>
<li><strong>daily idea quote</strong> &#8211; come up with few ideas every day for any aspect of your professional, public or private life.</li>
<li><strong>routines </strong>- change what you do and how you do from time to time</li>
<li><strong>experiences</strong> &#8211; strive for new experiences &#8211; travel, engage in the new activities, meet new people and attend new events</li>
<li><strong>thinking techniques</strong> &#8211; improve how you think, always look for new approaches</li>
</ul>
<h4>3. Explorer&#8217;s Drive (Energy, Courage, Self-Belief) &#8211; make mind forceful</h4>
<p><em>&#8220;The wind and the waves are always on the side of the ablest navigators.&#8221; <span style="font-style: normal;">- Edward Gibbon</span><br />
</em></p>
<div>Eager, brave and energetic mind can tackle any challenge and overcome any difficulty. A human without this explorer&#8217;s drive is passive bystander following beaten paths. This person will not be creative.</div>
<div>Believe in yourself. Remove psychological and physical barriers to be creative. It is a complex topic how to overcome these barriers and develop a strong inner self. You can find many recommendations &#8211; raising self-esteem, finding meaning in life, positive thinking, improving health and lifestyle, diet, physical exercises and <a id="ach7" title="fulfilling daily activities" href="../2008/the-happiness-programmers-edition/">fulfilling daily activities</a> and so on. Whatever it takes, but make an effort to ignite the drive, if you miss it.</div>
<div>You should believe in three things:</div>
<ul>
<li>better ideas exist</li>
<li>you will find them</li>
<li>you can make mistakes</li>
</ul>
<div>Explorers often fail, but you will fail for sure if you don&#8217;t try and don&#8217;t believe in yourself.</div>
<h4>4. Clear Mind &#8211; make it easy</h4>
<div><em>&#8220;The time to relax is when you don&#8217;t have time for it.&#8221;</em> &#8211; Jim Goodwin</div>
<div>Anxious, overwhelmed and stressed mind will not cooperate well. Meditate, relax and slow down sometimes to make your mind ready to be creative.</div>
<h4>5. Fun, Play, Being a Child &#8211; make your mind playful</h4>
<p><em>&#8220;All children are artists. The problem is how to remain an artist once he grows up.&#8221;</em> &#8211; Pablo Picasso</p>
<div>A normal adult becomes more serious and conservative with age that incur heavy cost &#8211; decreasing ability to find surprising and groundbreaking ideas.</div>
<p>Try to</p>
<ul>
<li>have fun, play</li>
<li>forget dogmas, break rules</li>
<li>be curious and spontaneous</li>
<li>be silly and illogical</li>
</ul>
<p>Encourage your inner child and don&#8217;t let him to grow up :)</p>
<h4>6. Train gut feeling &#8211; make mind intuitive</h4>
<div><em>&#8220;It is through science that we prove, but through intuition that we discover.&#8221;</em> &#8211; Jules H. Poincare</div>
<div>Our subconscious mind is much more powerful than linear conscious mind and in the same time it is much more difficult to control. The greatest thinkers know how to use both minds. In essence, gut feeling is your internalized experience, a form of pattern recognition and the way to communicate with subconsciousness. It can be <a id="cb7r" title="encouraged" href="http://www.cyc-net.org/features/ft-gutfeeling.html">encouraged</a> and <a id="qp_q" title="trained" href="http://www.ehow.com/how_2060669_develop-intuition.html">trained</a>.</div>
<div>Every time you have problem try to come up with ideas and solutions without thinking. Good intuition enable you to</div>
<ul>
<li>know how to attack the problem without know how you know</li>
<li>relate problems in one field to unrelated another field</li>
<li>recognize the crux of the problem</li>
<li>see general solution to the problem</li>
<li>recognize solution because it feels right</li>
</ul>
<p>(by George Turin, of the University of California)</p>
<h3>II. Right Challenges</h3>
<p><em>&#8220;He who knows when he can fight and when he cannot will be victorious&#8221; -</em> Sun Tzu</p>
<p>And still, creative person with prepared mind can waste talent and energy on solving irrelevant problems. You should focus on the most important problems instead of stretching yourself to fight any challenge.</p>
<ul>
<li>Select few important battles that you can win instead of squandering your energy in useless fights.</li>
<li>Actively prioritize, select or reject your outstanding challenges.</li>
<li>Select challenges that you are ready to accept and come up with ideas and solutions.</li>
<li>Focus and work the challenge</li>
</ul>
<h4>1. Know your problems</h4>
<div><em>&#8220;You won&#8217;t find a solution by saying there is no problem.&#8221;</em> &#8211; William Rotsler</p>
<p>Monitor your life, inquire your situation and make your problems explicit. Solving right problems in the right time is the best way to apply your creativity and improve your life.</p></div>
<p>Regularly,</p>
<ul>
<li><strong>keep the journal of interesting problems</strong> &#8211; problems you want to solve</li>
<li><strong>see waste</strong> &#8211; useless activities and commitments in your life. Streamline your life to have more time for important stuff.</li>
<li><strong>measure key parameters of your life</strong> &#8211; health, happiness, career, achievements, wealth. Small changes that you barely notice could lead to serious future problems.</li>
<li><strong>go and see</strong> (<a id="xf9i" title="Genchi Genbutsu" href="http://en.wikipedia.org/wiki/Genchi_Genbutsu">Genchi Genbutsu</a>) &#8211; if you feel that something is wrong, do not hide, but understand and face the challenge</li>
<li><strong>ask 5 whys</strong> (<a id="e9dp" title="Kaizen" href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>) &#8211; find root causes of your problems. Do not discard problems as impossible to solve &#8211; convert into challenges and opportunities for making your life better.</li>
</ul>
<p>(the list is inspired by <a id="r7gs" title="Toyota Production System" href="../2009/how-to-rescue-failing-software-projects-toyota-way/">Toyota Production System</a>)</p>
<h4>2. Accept challenge</h4>
<p><em>&#8220;Even if you&#8217;re on the right track, you&#8217;ll get run over if you just sit there.&#8221; - <span style="font-style: normal;">Will Rogers</span></em></p>
<p>The last step before working on the challenge is to <strong>accept it</strong>. We have so many distraction in our life, we procrastinate and keep postponing actions. You have to make a serious deal with yourself to succeed with challenges. Accept the challenge means to commit yourself to work on it. Period. Commit, focus and work the problem, otherwise your attempts will be in vain.</p>
<h3>Questions to assess your mind preparation</h3>
<ol>
<li>Do I have good sources of information and adequate knowledge?</li>
<li>Do I have broad perspective of various fields?</li>
<li>Am I flexible and open-minded?</li>
<li>Do I have drive, energy and courage to embrace challenges?</li>
<li>Is my mind clear and relaxed?</li>
<li>Am I playful, curious and free of dogmas?</li>
<li>Does my intuition work well?</li>
<li>Do I know my challenges?</li>
<li>Do I accept them?</li>
</ol>
<h3>Action Plan</h3>
<table id="xhs4" border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong><br />
</strong></td>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong>Daily</strong></td>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong>Weekly</strong></td>
<td style="background-color: #000000; color: #ffffff; text-align: center;" width="25%"><strong>Monthly</strong></td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Feed Brains</strong>: blogs, twitter, websites, rss, podcasts, books, magazines, audio, video</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>read</li>
<li>think</li>
<li>take notes</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>scan for new information sources</li>
<li>rearrange or remove sources to keep them optimal</li>
<li>plan learning for the week</li>
<li>content analysis &#8211; news, events, buzzes</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>select a new general field for learning: get overall picture, find top ranked sources, add to learning plan</li>
<li>set and evaluate strategic learning goals and plans</li>
<li>analyse industry trends and statistics</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #cccccc;" width="25%"><strong>Prime mind</strong></td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>generate 5 ideas daily</li>
<li>change routines</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>meet new people</li>
<li>look for new experiences</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>learn new thinking techniques and improve existing</li>
<li>travel, visit new places</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Clear mind</strong></td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>meditate</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>connect to nature</li>
<li>do what you like</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>retreat and rest</li>
</ul>
</td>
</tr>
<tr style="background-color: #cccccc;">
<td width="25%"><strong>Boost driv</strong>e &#8211; energy, courage and self-believe</td>
<td width="25%">
<ul>
<li>diet</li>
<li>physical exercises</li>
<li>fulfilling activities</li>
</ul>
</td>
<td width="25%">
<ul>
<li>praise your achievements, work on weaknesses</li>
</ul>
</td>
<td width="25%">
<ul>
<li>find meaning in the life</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Have fun, play</strong></td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>laugh, play and don&#8217;t miss any opportunity to have fun</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>have fun, do stupid things (within crime code and human norms :))</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>have a lot of fun :)</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #cccccc;" width="25%"><strong>Train intuition</strong></td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>come up with ideas without thinking</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>sharpen gut feeling &#8211; evaluate success of your intuitive ideas</li>
</ul>
</td>
<td style="background-color: #cccccc;" width="25%">
<ul>
<li>spend time understanding your inner-self</li>
</ul>
</td>
</tr>
<tr>
<td style="background-color: #eeeeee;" width="25%"><strong>Know your problems and work on them</strong></td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>log problems</li>
<li>work on accepted challenges</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>monitor life parameters</li>
<li>Kaizen &#8211; ask 5 whys, find root causes</li>
<li>streamline and remove waste from your life</li>
</ul>
</td>
<td style="background-color: #eeeeee;" width="25%">
<ul>
<li>Long-term planning and life review</li>
<li>Convert problems into opportunities</li>
<li>Accept or reject challenges</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>If your mind is prepared, you are ready to use your creativity for solving challenges. The next post will equip you with powerful techniques for getting new ideas.</p>
<h4>Resources</h4>
<p><a id="e5ix" title="Thinkertoys: a handbook of creative-thinking techniques" href="http://www.amazon.com/gp/product/1580087736?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1580087736">Thinkertoys: a handbook of creative-thinking techniques</a>, Michael Michalko<br />
<a id="o-le" title="How to get ideas" href="http://www.amazon.com/gp/product/1576754308?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1576754308">How to get ideas</a>, Jack Foster</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=122&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-become-an-expert-creativity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert: Making Ideas Stick</title>
		<link>http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/</link>
		<comments>http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 03:49:05 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/?p=106</guid>
		<description><![CDATA[ShareAre ideas born interesting or made interesting? &#8211; Chip &#38; Dan Heath

angelderoca
You have 2 options to communicate your ideas:


Tell people what is interesting for you &#8211; easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.
Make your ideas interesting for other people &#8211; hard, but you have [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/&amp;title=How+to+Become+an+Expert%3A+Making+Ideas+Stick&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><div style="margin-top: 10px; margin-bottom: 10px;"><em>Are ideas born interesting or made interesting?</em> &#8211; Chip &amp; Dan Heath</div>
<div><span style="font-weight: normal; font-size: 13px; "><img class="alignnone" title="ideas" src="http://softwarecreation.org/images/2010/apple-snake.jpg" alt="" width="500" height="429" /></span></div>
<div><a class="photocredit" href="http://www.flickr.com/photos/angelderoca/3998624908/">angelderoca</a></div>
<p>You have 2 options to communicate your ideas:</p>
<div>
<ol>
<li>Tell people what is interesting <strong>for you</strong> &#8211; easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.</li>
<li>Make your ideas interesting <strong>for other people</strong> &#8211; hard, but you have chances that other people will pay attention, understand, remember and act upon your ideas.</li>
</ol>
</div>
<div>This post is devoted to people who are interested in the second option.</div>
<p><strong>Why should a programmer care about communicating ideas to other people?</strong></p>
<p>It is true, the primary job of a programmer is to feed computers with ideas. But you cannot quietly hide behind a computer forever. You have to deal with other people:</p>
<div>
<ul>
<li>team &#8211; to contribute and explain your programming ideas</li>
<li>customers &#8211; to discuss and build trust in your solutions</li>
<li>end-users &#8211; to make your programming ideas useful for users</li>
<li>programmers of the world &#8211; to share your knowledge and exchange ideas</li>
<li>capitalists &#8211; to sell your ideas</li>
</ul>
<ul>
<li>low tech crowd &#8211; to promote technology ideas</li>
</ul>
<p><strong>Why is it so hard to make ideas interesting for other people?</strong></p>
<ol>
<li><a id="f62:" style="color: #551a8b;" title="Curse of knowledge" href="http://37signals.com/svn/posts/213-the-curse-of-knowledge">Curse of knowledge</a> &#8211; once you know something, it is hard to imagine not knowing it and communicate to novices</li>
<li><a id="nwtu" style="color: #551a8b;" title="Resistance" href="http://changingminds.org/disciplines/change_management/resistance_change/rationale_resistance.htm">Resistance</a> &#8211; many people ignore or resist new ideas</li>
<li>Limited brains &#8211; people have short <a id="edk2" style="color: #551a8b;" title="attention span" href="http://en.wikipedia.org/wiki/Attention_span">attention span</a> and can be easily overwhelmed by new and complex information</li>
</ol>
<p><span id="more-106"></span></p>
<p>The turning point in my professional life was Kent Beck&#8217;s book &#8211; <a id="tr45" title="Extreme Programming Explained" href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0321278658">Extreme Programming Explained</a>. Kent Beck made me think beyond technical aspects of software development. In addition to algorithms, computer languages and technologies, I started to realize very important factors &#8211; simplicity, feedback, business value and people interactions. Kent Beck influenced not only me, but millions of programmers by introducing Agile approach (Extreme Programming), iterations, user stories, refactoring, unit testing, pair programming, continuous integration and other practices. Kent transformed new and existing ideas into the form that made them widely accepted and used by almost any professional programming team now. Kent Beck knows how to make his ideas <a id="xoei" title="sticky" href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1400064287">sticky</a>.</div>
<div>
<h3>Principles of Stickiness</h3>
<p>Chip and Dave Heath defined 6 principles of sticky ideas in the book <a  title="Made to Stick" href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1400064287">Made to Stick</a>: Simple Unexpected Concrete Credible Emotional Stories (SUCCESs).</p>
<h4>Simple</h4>
<div>
<p><img style="width: 240px; height: 180px;" src="http://softwarecreation.org/images/2010/Inukshuk.jpg" alt="" width="240" height="180" /><br />
<a class="photocredit" href="http://www.flickr.com/photos/manning999/2165379782/">manning999</a></p>
</div>
<p>Usually people will remember only one idea from your message. They will remember nothing, if your ideas are complex and difficult to get. Therefore, distill your ideas into the simple and compact form.</p>
<ol>
<li><strong>Find core of your idea</strong> &#8211; remove all unimportant information, keep bare essential minimum</li>
<li><strong>Prepare <a id="xifw" title="Commander Intent" href="http://en.wikipedia.org/wiki/Commander's_intent">Commander Intent</a></strong> &#8211; plain statement of <span style="font-family: Verdana, Arial, Helvetica, sans-serif;"><span style="font-size: x-small;">the purpose of the operation and the desired end state.</span></span> Example: <em>The goal of this iteration is to build minimal end-to-end order flow &#8211; capture and save order, display it to an administrator.</em></li>
<li><strong>Build people understanding on familiar knowledge</strong> &#8211; introduce new ideas gradually, compare and merge with existing. Example: <em>Design patterns &#8211; we can use Factory method here to have full control over object creation.</em></li>
<li><strong>Use metaphors and analogies</strong> as a base for the new thinking. Substitute something easy for something difficult. Best examples are proverbs: <em>&#8220;A bird in the hand is worth two in the bush&#8221; &#8211; lets build first version on the proven technology to avoid risk of missing release date.</em></li>
<li><strong>Establish common language</strong> &#8211; with the same meaning to everybody. Domain Driven Design has <a id="kvfs" style="color: #551a8b;" title="ubiquitous language" href="http://domaindrivendesign.org/node/132">ubiquitous language</a> as a core principle for communication between business and technology people.</li>
</ol>
<h4>Unexpected</h4>
<div>
<p><img style="width: 240px; height: 160px;" src="http://softwarecreation.org/images/2010/judo.jpg" alt="" width="240" height="160" /><br />
<a class="photocredit" href="http://www.flickr.com/photos/parrhesiastes/2566999335/">parrhesiastes</a></p>
</div>
<p>
The sad truth is that people won&#8217;t get your idea if they don&#8217;t pay attention. You have to get and hold attention if you are serious about success of your ideas. It is similar to judo &#8211; once you get good grip on your opponent, you become in control and open possibility for many effective techniques. You cannot do much without solid grip.
</p>
<ol>
<li><strong>Surprise people and violate their expectations</strong>. Example: <em>my idea will remove half of the existing code and make the system much faster<br />
</em></li>
<li><strong>Stimulate curiosity</strong>: open gaps in knowledge and fill them with interesting answers, be provocative: <em>We can increase traffic to your website 10 times in two weeks. Do you want to know how?<br />
</em></li>
<li><strong>Make you message interesting for people</strong>. Use new information, twists, suspense and humor. Example: <em>Do you know that you current system is open for hackers and important information is leaking to Internet?</em></li>
</ol>
</div>
<div>
<h4>Concrete</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/montessori.jpg" alt="" width="181" height="200" /></p>
</div>
<p>People have hard time to understand abstract vague language. Use instead definite and concrete language. Often <a id="y3iz" style="color: #551a8b;" title="bullshit" href="http://www.erikandanna.com/Humor/bullshit_generator.htm">bullshit</a> is disguised as abstract and conceptual language.<br />
Compare A to B:<br />
A. Our IT governance mandate requires us to carefully consider all the aspects of software quality, scalability and performance. We use comprehensive QA methods to meet wide range of possible live system usage scenarios and challenges. We employ best resources to accomplish this mission.<br />
B. We need one more week for thorough testing.</p>
<ol>
<li><strong>Make ideas clear and tangible</strong> &#8211; everybody should understand your message the same way</li>
<li><strong>Provide real examples</strong>, discuss real scenarios to nail down understanding, let customers play with concrete working implementation as early as possible</li>
<li><strong>Help to visualize ideas</strong> &#8211; one image is worth thousands words &#8211; build prototypes, wireframes, draw on paper</li>
</ol>
<h4>Credible</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/einstein.jpg" alt="" width="300" height="180" /></p>
</div>
<p>People will believe in your ideas only if they are credible. Establish credibility with</p>
<ol>
<li><strong>Facts, statistics and arguments</strong> &#8211; build a strong case for your idea, provide clear explanation and rationale</li>
<li><strong>Proven solutions</strong> &#8211; reference similar ideas that are already implemented and successfully working</li>
<li><strong>Past success</strong> &#8211; quotes, testimonials and live examples of your previous solutions; use Sinatra test: <em>if you </em><em>can make it there, you </em><em>can make it anywhere </em>(he referred to success in New York)</li>
<li><strong>Reliable methods</strong> &#8211; disclose your QA and verification process, monitoring and troubleshooting procedures; build trust in your ability to deliver quality implementation</li>
<li><strong>Control and transparency</strong> &#8211; give impression of control to your clients by providing testable solutions and full information to understand and manage the system independently.</li>
</ol>
</div>
<div>
<h4>Emotional</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/goal.jpg" alt="" width="140" height="200" /></p>
</div>
<p>People can do wonders if they care. They will care about your ideas if you wake their emotions and feelings. Emotions motivate and move us.</p></div>
<ol>
<li><strong>Make ideas connected with people, not abstractions</strong>. Tell them about Joe who was frustrated with our search or Jenny who was so excited with our website new features.</li>
<li><strong>Appeal to the senses of responsibility and professional dignity</strong> &#8211; make people conscience aware about quality problems, system security concerns, low user satisfaction</li>
<li><strong>Use self-interest</strong> &#8211; what is in this idea for the person: survival in the company, career growth opportunity or interesting challenge</li>
<li><strong>Appeal to identity</strong> &#8211; people care about their image and status: &#8220;what could someone like me do in this situation?&#8221; <em>A good developer not only cares about working code, but also about usability of a solution.</em></li>
</ol>
<div>
<h4>Stories</h4>
<div>
<p><img class="alignnone" src="http://softwarecreation.org/images/2010/storyteller.jpg" alt="" width="179" height="200" /></p>
</div>
<p>Stories are the best and oldest communication tool. The brain even process them differently (with <a id="sive" title="episodic memory" href="http://en.wikipedia.org/wiki/Episodic_memory">episodic memory</a>). We remember stories longer and recall them better. Stories are</p>
<ol>
<li><strong>Inspirations</strong> &#8211; <em>about a developer who build overnight prototype of super fast search fixing most frequent complain for past year.</em></li>
<li><strong>Simulations</strong> &#8211; <em>about crashes of the system and hours of downtime, long desperate troubleshooting under guns of management that were caused by a small bug with infinite loop</em></li>
<li><strong>Lessons</strong> &#8211; <em>about the programmer who committed code without testing</em></li>
<li><strong>Awareness</strong> &#8211; <em>about users who couldn&#8217;t figure out how to complete simple tasks on a website</em></li>
</ol>
<h3>Finally,</h3>
<p>Programmers expertise grows not only with increased technical knowledge, but also with ability to transform and communicate ideas. Expert programmers know how to make their ideas interesting, working and successful.</p></div>
<div>In short, their ideas are</div>
<div>
<ul>
<li><strong>simple &#8211; </strong>to understand</li>
<li><strong>unexpected &#8211; </strong>to pay attention</li>
<li><strong>concrete </strong>- to make sense</li>
<li><strong>credible </strong>- to believe</li>
<li><strong>emotional &#8211; </strong>to care</li>
<li><strong>stories </strong>- to remember</li>
</ul>
<p>I wish you many great ideas that people will love, remember and follow.</p>
<p><strong>Reference:</strong></p>
<div><a id="jo9y" title="Made to Stick: Why Some Ideas Survive and Others Die" href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1400064287">Made to Stick: Why Some Ideas Survive and Others Die</a>, Chip Heath, Dan Heath</div>
</p>
</div>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=106&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2010/how-to-become-an-expert-making-ideas-stick/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What do programmers really do?</title>
		<link>http://softwarecreation.org/2009/what-do-programmers-really-do/</link>
		<comments>http://softwarecreation.org/2009/what-do-programmers-really-do/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 00:21:28 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/what-do-programmers-really-do/</guid>
		<description><![CDATA[ShareComputers are useless. They can only give you answers. &#8211; Picasso
Many people (including my mother-in-law) think that computers are becoming so smart that programmers will be no longer needed in the near future. Other people think that programmers are geniuses who constantly solve sophisticated math puzzles in front of their monitors. Even many programmers don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/what-do-programmers-really-do/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/what-do-programmers-really-do/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/what-do-programmers-really-do/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/what-do-programmers-really-do/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/what-do-programmers-really-do/&amp;title=What+do+programmers+really+do%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><em>Computers are useless. They can only give you answers.</em> &#8211; Picasso</p>
<p>Many people (including my mother-in-law) think that computers are becoming so smart that programmers will be no longer needed in the near future. Other people think that programmers are geniuses who constantly solve sophisticated math puzzles in front of their monitors. Even many programmers don&#8217;t have clear idea what they do.</p>
<p>In this post I want to provide some explanation to uninformed people what programmers really do:</p>
<blockquote><p><strong>Programmers are translators of human ideas into the language of computers.</strong></p></blockquote>
<p>They are a link between two worlds &#8211; human and computers. Do you think it is easy to maintain this link?</p>
<p><img src="http://softwarecreation.org/images/2009/translator.jpg" height="500" width="500" /></p>
<p><span id="more-85"></span></p>
<h3>Human World Background</h3>
<p><em>The problem with people is that they&#8217;re only human.</em> -  Bill Watterson</p>
<p>Humans are product of biological evolution and have a unique and precious organ for producing ideas for programmers &#8211; the brain. The brain is a complex combination of neocortex (unique to humans) and older structures inherited from mammals and reptiles. Older brain structures are mostly responsible for reproduction (sex) and survival (finding food or escaping danger). Neocortex evolved to support these function better, however it started to cause strange side effects &#8211; consciousness, thinking and curiosity. Thanks to these effects humans invented civilization and thousands years later computers.</p>
<p>Somebody could believe that after thousands years of development humans should become completely dull, predictable and rational species, but it didn&#8217;t happen &#8211; their old brain structures, complex psychology and social behavior often make people irrational, unpredictable and deceiving. In addition, humans have poor memory, strong emotions and personal interests. However, programmers don&#8217;t have choice of working with more rational species and have to work with human beigns to translate their ideas into the language of computers.</p>
<h3>Computer World Background</h3>
<p><em>Part of the inhumanity of the computer is that, once it is competently programmed and working smoothly, it is completely honest.</em> &#8211;  Isaac Asimov</p>
<p>A computer is the best invention of human civilization. It consist of CPU, motherboard, memory, hard drive, monitor and <a href="http://en.wikipedia.org/wiki/Computer_hardware" title="some other parts" id="uump">some other parts</a>. Computers moved our civilization to the new level, filled our life with meaning and entertainment and compensated weaknesses of our brains. There are good chances that computers will become <a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-2-becoming-intelligent/" title="more intelligent than humans" id="m-o4">more intelligent than humans</a>. (However, I am a bit concerned if computers need human programmers after it happens.)</p>
<p>Modern computers are completely logical, straightforward and obedient. It is pleasure to work with a computer if you know what it should do and how to instruct it. The only problem is that computers will do exactly what you tell them to do. Therefore, you should have very clear ideas and instructions for a computer to avoid feeling miserable when you see your boss or customer.</p>
<h3>Translation Between Humans and Computers</h3>
<p>There are three main challenges in translation:</p>
<ol>
<li><strong>Language ambiguity.</strong> Human language is vague, complex and ambiguous &#8211; for example: &#8220;This program doesn&#8217;t provide good user experience&#8221;. Culture, background and context affect communication and meaning. On the contrary, any computer language is exact, straightforward and context-free.</li>
<li><strong>Levels of details</strong>. Humans communicate often in general terms without many details &#8211; for example: &#8220;I want this f* program work right&#8221;. It allows them to save time and energy, but cause two big problems &#8211; misinterpretation and possibility that important details are missing. And a computer requires all details &#8211; everything should be spelled out.</li>
<li><strong>Thinking style</strong>. Humans often think in terms of needs, outcomes and solutions &#8211; for example, &#8220;This report should run in 2 seconds instead of 2 hours&#8221;. However, computers need algorithms &#8211; sequence of steps how to achieve desired outcomes.</li>
</ol>
<p>In order to write good software, programmers have to overcome these challenges, understand humans and translate their ideas into the computer language.</p>
<h3>Skills of a Super Programmer</h3>
<p><img src="http://softwarecreation.org/images/2009/superman.jpg" /><br />
As we can see a super programmer should have two distinct sets of skills to deal with both worlds.</p>
<p><strong>Understand humans and create solutions:</strong></p>
<ol>
<li><strong>Communication </strong>-ability to establish contact with humans, talk with them without alienating and even heroic attempts to share own opinion.</li>
<li><strong>Meaning </strong>- extract useful information from conversations with humans, decode and make sense from it</li>
<li><strong>Logic </strong>- clearing, removing ambiguity and controversy from human ideas for uncompromising reality of computers</li>
<li><strong>Creativity </strong>- dig, twist and play with human ideas to create good solutions</li>
<li><strong>Design </strong>- wrap programming ideas with human friendly interfaces and convenient interactions</li>
<li><strong>Big Picture</strong> &#8211; know how solutions fit into world of users, business and Universe to make your program useful.</li>
</ol>
<p><strong>Tell computers what to do and build solutions:</strong></p>
<ol>
<li><strong>Logic (again)</strong> &#8211; organize programmer&#8217;s thoughts into cohesive software ideas and instructions for computers</li>
<li><strong>Technology </strong>- uncovering and understanding the black box of technology (black box for 99% of population)</li>
<li><strong>Programming Languages</strong> &#8211; learn the beautiful, logical and unambiguous languages for feeding computers with programmer&#8217;s ideas</li>
<li><strong>Algorithms </strong>- master the most effective ways how a computer can accomplish a task</li>
<li><strong>Modeling  </strong>- create abstractions and models for grasping and manipulating ideas in software code</li>
<li><strong>Practices </strong>(as Refactoring, Unit Testing, Continuous Integration) &#8211; recurrent activities to keep system solid, healthy and possible to change</li>
</ol>
<p>There is a big difference between a human-oriented and hardcore object / system &#8211; oriented programmer.<br />
A programmer who is specialized to work with computers only is a half of the good programmer. Great solutions require skills for <strong>computers</strong><strong> <u>and</u> </strong><strong>human</strong> worlds.  Connect both worlds and become a super good programmer!</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=85&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/what-do-programmers-really-do/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Three Dimensions of a Software Programmer: How to get things done</title>
		<link>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/</link>
		<comments>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 04:43:40 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/</guid>
		<description><![CDATA[Share    What you are as a person is far more important that what you are as a basketball player. &#8211; John Wooden
People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting &#8211; all people are completely different in their attitudes and [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/&amp;title=Three+Dimensions+of+a+Software+Programmer%3A+How+to+get+things+done+&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>    <em>What you are as a person is far more important that what you are as a basketball player.</em> &#8211; John Wooden</p>
<p>People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting &#8211; all people are completely different in their attitudes and behavior. But this comes with price &#8211; it is difficult to understand people and even more difficult to find the best way to deal with them.<br />
Many people, who see programmers as extensions of their computer systems, will be surprised to discover that programmers are amazing individuals too. Programmers exhibit similar to other people behavior, they have different personalities and need individual approach.</p>
<p>I offer in this post a simple theory about <em>Three Dimensions of a Software Programmer</em> that could help to put relations with these individuals on some rational basis.</p>
<p id="fw_e" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3DArchetypes.jpg" style="width: 500px; height: 500px" width="500" height="500" /></p>
<h3>Axioms</h3>
<p>There are two basic axioms in foundation of the theory</p>
<ol>
<li><strong>Constancy </strong>- some programmers consistently outperform others under same conditions.</li>
<li><strong>Variability </strong>- performance of a programmer varies under different conditions.</li>
</ol>
<p><span id="more-84"></span></p>
<h3>Talents (constants)</h3>
<p><em>Talents are recurring patterns of thoughts, feelings and behavior that can be productively applied. &#8211; </em><a href="http://www.amazon.com/First-Break-All-Rules-Differently/dp/0684852861" title="First, Break All the Rules: What the World's Greatest Managers Do Differently" id="kq_b">First, Break All the Rules</a><br />
Genes and upbringing form an adult human with specific talents and personality, strengths and weaknesses. These core individual characteristics of a programmer are difficult to change (except some limited success with consumption of large quantities of beer). Programmers are different &#8211; creative, thorough, funny, systematic, laid-back, curious, analytical, spontaneous and so on. Some people cannot be programmers at all.<br />
Each unique programmer has a base performance level that is constant and almost impossible to change.</p>
<h3>Three Dimensions (variables)</h3>
<p>Now we can move to the part of equation that can be changed. Can we make programmers permanently performing above their base level? To answer this question lets review three variables of programmer&#8217;s performance.</p>
<p><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>X. Energy</strong><br />
<em>measures amount of work and power of ideas that could change and improve reality</em>.<br />
Here I consider a specific kind of energy &#8211; creative positive energy that is directed to build better software and aligned with company and customers goals. Individual&#8217;s desire to act, create and achieve is the source of this energy. As we discussed above, part of this energy is based on character and predetermined. However, there is a big variable component of individual energy that is driven by motivation and environment.</p>
<p><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Y. Discipline</strong><br />
<em>measures ability to focus and follow necessary steps to achieve goals with good quality</em>.<br />
Accountability, self-organization and focus are core elements that keep individuals to perform on a high level. Personality matters here &#8211; some people will promise and forget immediately, give up experiencing first difficulties or become distracted by more interesting tasks. Some will fight until the end and go beyond limits to meet commitments, exceed expectations and bring excellent results. However, significant part of programmer&#8217;s discipline is variable and depends on context and expectations.</p>
<p><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Z. Expertise</strong><br />
<em>measures knowledge and experience in programming, technology and a customer domain.</em><br />
Expertise includes <em>know how</em> to build software, make right decisions and implement good solutions with minimal troubles. There is no doubt that expertise is growing with time, but individual variations are big. Many people consider expertise as the only important characteristic of a programmer. I believe that it has much lower value without two other variables.</p>
<h3>Programmer&#8217;s Archetypes</h3>
<table border="1" bordercolor="#aaaaaa" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td></td>
<td valign="top" width="80"></td>
<td>Energy</td>
<td>Discipline</td>
<td>Expertise</td>
<td>Description</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong>Creator<br />
</strong></td>
<td valign="top">
<p id="ow2o" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-creator.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>Highly productive, creative and successful, know how and what to do; have energy, discipline and desire to accomplish tasks on the highest level</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Enthusiast<br />
</strong></td>
<td valign="top">
<p id="xdnc" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-enthusiast.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td>Great drive and energy to make things happen; however makes unnecessary mistakes and poor decisions</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Artist<br />
</strong></td>
<td valign="top">
<p id="a0t6" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-artist.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>A talented and experienced individual who could create great solutions; however inconsistent and unpredictable</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Doer </strong></td>
<td style="text-align: center">
<p id="a0t6" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-doer.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>A disciplined and knowledgeable programmer, who is strong in implementation, but lacks creativity and drive</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong>Noise Maker </strong></td>
<td valign="top">
<p id="yv.b" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-noise-maker.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">
<p id="l6jp"><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td>A lot of energy and movement without much useful results</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Bureaucrat<br />
</strong></td>
<td valign="top">
<p id="f.um" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-bureaucrat.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="yyzo"><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td style="text-align: center">-</td>
<td>Consistent and rational, but does not have creative energy and knowledge to be productive</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Sage<br />
</strong></td>
<td valign="top">
<p id="ddpc" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-sage.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td style="text-align: center">
<p id="ibqr"><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px" /></p>
</td>
<td>Deep knowledge and vast experience without willigness to perform and change anything</td>
</tr>
<tr>
<td style="font-family: Comic Sans MS; text-align: center; font-size: 14px"><strong> Lost soul<br />
</strong></td>
<td valign="top">
<p id="a3w9" style="text-align: left"><img src="http://www.softwarecreation.org/images/2009/3D-lost-soul.jpg" style="width: 80px; height: 80px" width="80" height="80" /></p>
</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td style="text-align: center">-</td>
<td>Don&#8217;t want to do anything and don&#8217;t know how to do it anyway</td>
</tr>
</table>
<p><a href="http://kael.civfanatics.net/" class="photocredit" title="FfHII" id="g4u5">FfHII</a></p>
<h3>How to Improve</h3>
<p>A programmer can be 10 times more productive than other programmer and 10 times more productive than himself under different conditions. Therefore right people under right conditions could be 100 times more productive than others.</p>
<p>How can you influence programmer&#8217;s performance with these three dimensions? Hopefully, you found right people with right talents. It is a waste of time to change personality and push in direction where talent is absent. However, it is possible to amplify natural strengths and create conditions for super productivity.</p>
<p><img src="http://www.softwarecreation.org/images/2009/energy-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" width="20" height="20" /><strong>Energy</strong><br />
goal: <em>make people empowered, motivated, interested and satisfied; engage them to perform above their base level of energy</em></p>
<p><u>job design</u></p>
<ul>
<li>  interesting work &#8211; brings inspiration and motivation</li>
<li>control &#8211; over own work and decisions &#8211; pushes people forward</li>
<li>self-organization &#8211; opportunities to find own ways that bring best results</li>
<li>creative tension &#8211; goals on the edge of capabilities to focus energy and open new energy sources</li>
<li>defined outcomes &#8211; clear direction that reduces anxiety and doubt and increases productivity</li>
</ul>
<p><u>psychology</u></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29" title="flow" id="c9qo">flow</a> &#8211; put mind in a state of energized focus, full involvement, and success</li>
<li>  positive experience &#8211; good emotions and healthy team relations; comfortable and trusted environment</li>
<li>personal interests &#8211; decision making considers and takes care of individual interests</li>
<li>right incentives  &#8211; <a href="http://softwarecreation.org/2007/fair-compensation-for-programmers-is-it-possible/" title="compensation" id="iobi">compensation</a>, rewards, recognition are the great source of energy and motivation</li>
</ul>
<p><u>environment</u></p>
<ul>
<li>  space for mistakes &#8211; tolerance and open ways to fix mistakes make people think about moving forward instead of covering assess</li>
<li>  productive environment &#8211; where people think about work instead of nuisances</li>
<li>fit &#8211; between personal and company goals, culture and views &#8211; amplify people desire to work</li>
<li>reasonable pressure &#8211; normal workload, minimal stress, time slack to avoid energy drains</li>
</ul>
<p><img src="http://www.softwarecreation.org/images/2009/discipline-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Discipline<br />
</strong>goal: <em>make people focused, responsible and aligned; make them performing in the right way</em></p>
<p><u>support system</u></p>
<ul>
<li>established process &#8211; align actions with goals and support their execution (Agile is the best way to go)</li>
<li>transparency &#8211; reasons for decisions should be clear, problems should surface quickly</li>
<li>pull system (<a href="http://en.wikipedia.org/wiki/Kanban" title="kanban" id="cggp">kanban</a>) &#8211; signaling system to trigger action based on actual needs</li>
<li>  control mechanisms, check and balances, audit, risk management (e.g. iterations)</li>
</ul>
<p><u>zone of responsibility </u></p>
<ul>
<li>clear areas of responsibility &#8211; what is included and what is not</li>
<li>balance of responsibility and authority &#8211; adequate authority to accomplish goals; restrictions to avoid damage</li>
<li>  <a href="http://en.wikipedia.org/wiki/Rules_of_engagement" title="rules of engagements" id="gyw1">rules of engagements</a>  &#8211; when, where, and how force (bold actions) shall be used</li>
<li>  match confidence with responsibilities &#8211; an individual is prepared and ready for the new responsibilities</li>
</ul>
<p><u>standards</u></p>
<ul>
<li>  safety regulations &#8211; mandatory rules for everyone</li>
<li>professional standards &#8211; recommended parameters of work and products (security, performance, availability, etc.)</li>
<li>best practices &#8211; spread approaches that work</li>
</ul>
<p><img src="http://www.softwarecreation.org/images/2009/expertise-icon.gif" style="width: 20px; height: 20px; float: left; margin-left: 0pt; margin-right: 1em" /><strong>Expertise</strong><br />
goal: <em>make people knowledgeable, experienced and growing based on their talents</em></p>
<p><u>career</u></p>
<ul>
<li><a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="right career path" id="ypa_">right career path</a> &#8211; built on persons strengths &#8211; enable growth in area of competence and natural strengths without switching into paths that don&#8217;t match talents (e.g. management). Avoid consequences of raising to the level of incompetence (<a href="http://en.wikipedia.org/wiki/Peter_Principle" title="Peter Principle" id="hviz">Peter Principle</a>).</li>
<li>broadbanding &#8211; build levels of achievements and pay schemes that allow to achieve and earn more within the same profession</li>
<li>  match expertise and challenges- keep people always interested and challenged, avoid boring or over complicated tasks</li>
<li>assist self-discovery &#8211; help search for the better career and role</li>
</ul>
<p><u>perspective</u></p>
<ul>
<li>  diversity in tasks and activities &#8211; accelerates growth and understanding</li>
<li>  big picture, direct communication with customer &#8211; informed people make more optimal decisions</li>
<li>exposure to different subject areas &#8211; broader knowledge opens new possibilities and solutions outside the narrow specialization</li>
</ul>
<p><u>learning and practice</u></p>
<ul>
<li>  feedback loop &#8211; continuous evaluation and improvements based on feedback</li>
<li>opportunities for learning &#8211; grow expertise beside direct work tasks</li>
<li>sharing, coaching, communication &#8211; peer and experts access and support for growth</li>
</ul>
<p>There is no standard way to increase performance of an individual programmer. Each individual is unique and requires personal approach. The theory of Three Dimensions of a Software Programmer suggests framework for these approaches.<br />
It takes a huge effort to understand every programmer in your team individually and craft personalized approach, path and conditions. But it makes sense to do. <strong>People will be productive, engaged and happy. The company will grow and succeed.</strong></p>
<p>What could be a better outcome in our civilized hard working world?</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=84&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>How to become an Expert. Embrace Reality.</title>
		<link>http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/</link>
		<comments>http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/#comments</comments>
		<pubDate>Tue, 12 May 2009 04:19:01 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Expertise]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/</guid>
		<description><![CDATA[ShareReality is merely an illusion, albeit a very persistent one &#8211; Albert Einstein
An expert have much better models of reality and methods to build them than an ordinary specialist. The expert, armed with these models, can quickly put pieces of a problem puzzle together, find explanations and solve the problem.

Models can be related to anything [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/&amp;title=How+to+become+an+Expert.+Embrace+Reality.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><em>Reality is merely an illusion, albeit a very persistent one</em> &#8211; Albert Einstein</p>
<p>An expert have much better models of reality and methods to build them than an ordinary specialist. The expert, armed with these models, can quickly put pieces of a problem puzzle together, find explanations and solve the problem.</p>
<p id="ejcw" style="text-align: left"><img src="http://softwarecreation.org/images/2009/expert-models.jpg" width="600" height="600" /></p>
<p>Models can be related to anything &#8211; software systems, business domain or your personal relationships. <span id="more-83"></span></p>
<h3><strong>Predictions and </strong><strong>Solutions!</strong></h3>
<blockquote><p><em>A theory is a good theory if it satisfies two requirements: It must accurately describe a large class of observations on the basis of a model that contains only a few arbitrary elements, and it must make definite predictions about the results of future observations.</em></p>
<p align="right">Stephen Hawking, A Brief History of Time</p>
</blockquote>
<p>Any expert as good as he can effectively predict future outcomes and solve new unforeseen problems. Solutions and predictions are not coming out of blue. They stem from good understanding of reality in an expert&#8217;s head. Internal models of reality help to explain problems, find relations and play with future scenarios. These models establish the base for effective thinking and direct expert&#8217;s effort to solve problems. If you have poor models of reality, you will make bad decisions. Good models of reality allow reliable predictions and efficient solutions than vague guesses and ad-hoc spontaneous fixes.</p>
<p>Characteristics of a good model:</p>
<ol>
<li><strong>Explanation </strong>- provides understanding of elements, processes, events, root causes and effects</li>
<li><strong>Testable predictions </strong>- a model that makes no predictions that can be observed is not a useful model.</li>
<li><strong>Simple </strong>- you can remember and use a model without titanic effort</li>
<li><strong>Frameworks </strong>- knowledge how to recognize common patterns and deal with range of similar problems. Frameworks allow to extend and apply existing models to new situations without building new models.</li>
</ol>
<h3>Brains &#8211; the main tool of an expert</h3>
<p><em>I think, therefore I am</em> &#8211; Rene Descartes</p>
<p>An expert&#8217;s brain carry and operates with models of reality. Unfortunately, our brains are not ideal for this task. Models they create are not identical to reality. Here is why.</p>
<p><strong>limitations</strong></p>
<ul>
<li><em>perception </em>- our senses deliver to brain partial and incomplete information</li>
<li><em>memory </em>- our brains can process and memorize only fraction of available information; and even more &#8211; we quickly forget this knowledge without practice</li>
<li><em>imagination </em>- brains automatically filling gaps for missing information, substitute with interpretation based on internal representation of the outside world</li>
</ul>
<p><strong>cognitive biases</strong> (bugs in brain software)</p>
<ul>
<li><em>anchoring or priming</em> &#8211; previous irrelevant experiences prime your consequent thinking and decisions</li>
<li><em>need for closure</em> &#8211; we are uncomfortable with doubt and uncertainty; we have urge to resolve and find convenient explanations quickly without much thinking</li>
<li><em>confirmation bias</em> -  from all facts we unconsciously pick facts that confirm our beliefs and predispositions</li>
<li><em>symbolic reduction</em> &#8211; we are anxious to reduce complexity for better understanding and tend to form simplified generalizations ignoring complex details and relations.</li>
<li>and <a href="http://en.wikipedia.org/wiki/List_of_cognitive_biases" title="many others" id="fa5u">many others</a></li>
</ul>
<p><strong>social behavior</strong></p>
<ul>
<li><em>subconscious models and believes</em> &#8211; our minds carry beliefs and views imposed by our parents, teachers and culture.  These subconscious models deeply influence our models of reality without much awareness.</li>
<li><em>peer pressure, conformity</em> &#8211; our minds are wired to conform and agree with other people making us blind for inconvenient facts, ready to follow crowd and accept conventional views without critical revision</li>
</ul>
<h3><strong>Objective Reality</strong></h3>
<p><em>There are no facts, only interpretations.</em>  &#8211; Friedrich Nietzsche</p>
<p>Even smartest brains will have challenges to understand reality.</p>
<p>We deal with <strong>complex situations</strong>:</p>
<ul>
<li><em>incomplete information</em> &#8211; we rarely have access to full information and even if it is available we don&#8217;t have capacity to collect and absorb all of it</li>
<li><em>perpetual changes</em> &#8211; reality is very fluid and changes every second</li>
<li><em>complex relations and behavior</em> &#8211; complex systems are difficult to understand: causes and effects, correlations, feedback loops, influence of processes in external systems</li>
<li><em>difficult to test</em> &#8211; we often cannot afford large number of experiments, trials and errors to come up with right models and explanations</li>
</ul>
<p>We deal with <strong>people</strong> who make our reality very complicated:</p>
<ul>
<li><em>unpredictable </em>- people are difficult to predict, they are often irrational and inconsistent</li>
<li><em>confusing </em>- people cannot clearly explain their thinking and feelings or even don&#8217;t understand themselves</li>
<li><em>deceiving </em>- sometimes people have difficulty to tell truth or simply lie for own advantage</li>
</ul>
<h3><strong>Building Models</strong></h3>
<p><em>The test of a first-rate intelligence is the ability to hold two opposed ideas in the mind at the same time, and still retain the ability to function.</em> -  F. Scott Fitzgerald</p>
<p>We understand reality different ways &#8211; learning, investigating problems, finding new solutions and practicing. For years we can concentrate on solving immediate problems and do our work without attempts to understand the big picture. Many good specialists have incomplete understanding and fragmented knowledge that still allow to perform well. But it is impossible to become an expert without deep understanding and conscious effort to build good models of reality.</p>
<p>For example, we can stumble for a long time with challenges and failures in building software without understanding its <a href="http://softwarecreation.org/2007/what-is-software-development/" title="essence" id="y:mc">essence</a>  and <a href="http://softwarecreation.org/2007/human-forces-and-software-creators/" title="forces" id="iufv">forces</a>. (By the way, search for this understanding is the reason for this blog existence).</p>
<p>Potentially everything what we do in life could help to build and improve our models of reality. We just need to consciously relate our experience and learning to our understanding of reality. And we can do it on the go without special preparation, when we actively engage our minds &#8211; working, talking, reading, practicing, traveling, thinking and even sleeping. Just focus on reality modeling.</p>
<p>The models of reality could be explicit (<strong>facts and theories</strong>) and implicit (<strong>intuition and tacit knowledge</strong>).<br />
<img src="http://softwarecreation.org/images/2009/models-composition.jpg" width="300" height="300" /></p>
<p>You can use several strategies to build models in your whole mind.<br />
<strong>A. Analytical</strong></p>
<ul>
<li>find what is most important, map and connect main elements, players and subsystems; learn relations; draw Mind Maps</li>
<li>understand influence of context and main forces</li>
<li>create stories, metaphors and patterns &#8211; make your models better suited for your brain</li>
<li>repeat the process for the most important subsystems</li>
</ul>
<p><strong>B. Empirical</strong></p>
<ul>
<li>find most pressing problems, contradictions or real life facts</li>
<li>understand how do they fit into your models of reality</li>
<li>it is great if they don&#8217;t fit &#8211; you have opportunity to improve your models</li>
</ul>
<p><strong>C. Synthesis</strong> &#8211; reconcile your models with existing knowledge and leading models</p>
<ul>
<li>find what are dominating models, views and believes; what other experts think</li>
<li>critically analyze this information and theories behind</li>
<li>find the best opposing theories and try to combine them to form better model</li>
</ul>
<p><strong>D.</strong> <strong><a href="http://en.wikipedia.org/wiki/Scientific_method" title="Scientific method" id="yk9g">Scientific method</a> </strong> &#8211; use it for practical evaluation of models and confirmation of your theories.</p>
<ul>
<li>build hypothesis about reality and outcomes of your actions</li>
<li>test it in practice</li>
<li>learn from results and adjust your models</li>
</ul>
<p><strong>E. People interests and agenda</strong> &#8211; people are often most surprising and unpredictable element of reality. Your models will be much closer to reality if you understand motives, interests and agenda of involved people.<br />
<strong>F. Change perspective</strong> &#8211; switch different perspectives to enrich models &#8211; economic, emotional, social, physical, etc. Try to view from opposite viewpoints and set of principles. Imagine yourself as user of your system, investor of your company, manager, any animal, computer part, etc. (Try to get back without loosing your identity :))  Web developers have interesting concepts of <a href="http://en.wikipedia.org/wiki/Personas" title="Personas" id="dujl">Personas</a> &#8211; imaginary users with distinct behavior on website that help to design a system for various cohesive sets of needs.<br />
<strong>G.</strong> <strong><a href="http://en.wikipedia.org/wiki/Lateral_thinking" title="Lateral thinking" id="u._z">Lateral thinking</a> </strong></p>
<ul>
<li>random association &#8211; associate models with recent books, distant knowledge fields, your favorite characters</li>
<li>provocative thinking &#8211; make unacceptable, funny, stupid ways to explain problems and shock your models</li>
<li>ask &#8220;why?&#8221; &#8211; continue asking &#8216;why&#8217; until your reach questions that nobody could answer on this Earth (or the only answer is <a href="http://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker%27s_Guide_to_the_Galaxy#Answer_to_Life.2C_the_Universe.2C_and_Everything_.2842.29" title="42" id="pc2c">42</a>).</li>
<li>expand concepts borrowed from other sources to have wider horizon for ideas</li>
</ul>
<p>In overall, you will switch between <a href="http://softwarecreation.org/2008/ideas-in-software-development-revolution-vs-evolution-part-1/" title="two grand strategies" id="xpdh">two grand strategies</a> &#8211; Evolution (discover reality and adopt to it) and Revolution (breakthrough and change reality). The choice depends on models maturity, certainty and your people capabilities.</p>
<h3>Therefore</h3>
<p><em>Few people have the imagination for reality.</em>  &#8211; Johann Wolfgang von Goethe</p>
<p>You can be certain that reality in your head is different from objective reality, which is complex, changing and controversial. Effective experts don&#8217;t have choice and master reality by<br />
1. Accepting own limitations in understanding of elusive reality<br />
2. Building good models of reality applying different strategies<br />
3. Using, testing and improving models in practice</p>
<p>Good models of reality will make your thinking, decisions and solutions much better. They will make you a master of reality instead of a victim of reality. Good luck with embracing reality!<br />
<strong>References:</strong><br />
<a href="http://www.amazon.com/gp/product/1422118924?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1422118924" title="The Opposable Mind: How Successful Leaders Win Through Integrative Thinking" id="ri0p">The Opposable Mind: How Successful Leaders Win Through Integrative Thinking</a> , by Roger L. Martin<br />
<a href="http://www.amazon.com/gp/product/1934356050?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1934356050" title="Pragmatic Thinking and Learning: Refactor Your Wetware" id="n9_c">Pragmatic Thinking and Learning: Refactor Your Wetware</a>, by Andy Hunt</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=83&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-become-an-expert-embrace-reality/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to Become an Expert. Top 7 Qualities</title>
		<link>http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/</link>
		<comments>http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 04:43:23 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/</guid>
		<description><![CDATA[ShareExperts do not need rules to make decisions. They have qualities that allow them to consistently make good decisions and show high level of performance under different circumstances without any rules. This post discusses these core qualities that turn a novice into an expert.

Definitions
rule: prescribed guide for conduct or action
intuition: instinctive knowing (without the use [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/&amp;title=How+to+Become+an+Expert.+Top+7+Qualities&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p>Experts do not need rules to make decisions. They have qualities that allow them to consistently make good decisions and show high level of performance under different circumstances without any rules. This post discusses these core qualities that turn a novice into an expert.</p>
<p><img src="http://softwarecreation.org/images/2009/novice-expert.jpg" /></p>
<p><strong>Definitions</strong><br />
<strong>rule:</strong> prescribed guide for conduct or action<br />
<strong>intuition:</strong> instinctive knowing (without the use of rational processes)<br />
<strong><a href="http://en.wikipedia.org/wiki/Tacit_knowledge" title="tacit knowledge" id="v:.:">tacit knowledge</a>:</strong> automatic, unexpressed knowledge that provides context for people, places, ideas, and experiences. Tacit knowledge is not easily shared. As Polanyi said: &#8220;We know more than we can tell.&#8221;<br />
<strong>context</strong>: the set of circumstances or facts that surround a particular event, situation, etc.</p>
<h3>Problems with rules</h3>
<p>Most rules didn&#8217;t come from heaven. They come from ordinary people. They are product of <strong>practice, theories, traditions and fear</strong>.<br />
Problems:</p>
<ul>
<li><strong>context-free</strong> &#8211; rules reflect standard situations without considering your specific circumstances</li>
<li><strong>limited verification</strong> &#8211; most rules are empirical and do not pass vigorous analysis, strict prove and experiments</li>
<li><strong>time sensitive</strong> &#8211; many rules become outdated quickly in dynamic professions, industries and societies</li>
<li><strong>overcautious</strong> &#8211; fear fuels many rules and seeks to protect from the worst scenario, often imaginable</li>
<li><strong>low skills denominator</strong> &#8211; rules tuned to match capabilities of the majority without accounting for individual strengths and weaknesses</li>
<li><strong>misinterpretation</strong> &#8211; tacit knowledge of experts, which forms base for many rules, is <a href="http://en.wikipedia.org/wiki/Tacit_knowledge" title="difficult to transfer" id="ntk5">difficult to transfer</a> in correct and understandable form</li>
</ul>
<p><span id="more-82"></span></p>
<h3>Core 7 Qualities of the Expert</h3>
<p><strong>1. </strong><strong>Motivation. </strong><strong>Believe in self. Energy. Unsatisfaction</strong><br />
<em>Motivation appears to be a more important factor than innate ability in the development of expertise.</em><em> &#8211; </em><a href="http://www.sciam.com/article.cfm?id=the-expert-mind" id="vu87" title="Scientific American">Scientific American</a></p>
<p>You have to believe in self to become a successful expert. An expert need strength, energy and motivation to go beyond ordinary performance levels.<br />
Top performers in different disciplines do this &#8211; envision own success and prepare their minds to achieve higher levels. Thinking <a href="http://www.amazon.com/gp/product/0345472322?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0345472322" title="can " id="fziu">can &#8220;wire&#8221;</a>  our brains for developing new capabilities and success.<br />
<strong>Questions:</strong> Am I ready? How can I boost my strength, energy and motivation? How will I succeed?</p>
<p><strong> 2. Hard Work. Discipline. Focus.</strong><br />
<em> The differences between expert performers and normal adults reflect a life-long period of deliberate effort to improve performance in a specific domain.</em> &#8211; <a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf" id="pxqg" title="Anders Ericsson">Anders Ericsson</a></p>
<p>Hard work is not as difficult after you start and dive into it. Often the problem is that you cannot start or concentrate. Procrastination ruins your progress. There are many barriers for focused and productive work:</p>
<ul>
<li><strong>pressure and stress</strong> kills productivity</li>
<li><strong>low interest</strong> &#8211; without engaged mind your brain will resist to form knowledge</li>
<li><strong>multitasking</strong> &#8211; takes away precious concentration and mindset needed for productive work</li>
<li><strong>unclear goals</strong> &#8211; disoriented mind cannot focus effectively</li>
<li><strong>no specific time</strong>  &#8211; you will tend to postpone, delay and miss practice without strictly scheduled time</li>
<li><strong>distractions</strong> &#8211; inconvenient  environment and frequent interruptions don&#8217;t help</li>
</ul>
<p>New Scientist had an advice <a href="http://www.newscientist.com/article/mg19926732.000-the-origins-of-willpower.html?page=3" title="how to get a grip on yourself" id="we5g">how to get a grip on yourself</a> and strengthen willpower. The main ideas &#8211; willpower is limited resource, easily depleted; it requires planning, boost and  practice.</p>
<p>Also, keep yourself interested. Switch if you start loosing focus and interest. Reboot. Have prepared practices in different areas to enable fresh start for your mind.<br />
<strong>Questions:  </strong>How do I maintain focus, stay committed and interested? Do I have clear goals, action plan and productive environment?</p>
<p><strong>3. Think critically. Think as a beginner</strong><br />
<em>In the beginner&#8217;s mind there are many possibilities, but int the expert there are few</em> &#8211; Suzuki Roshi</p>
<p>As an expert you cannot go with the flow, believe everything and hide behind authoritative opinions. You cannot stick with your own views forever without changing them. You have to think critically: challenge beliefs, existing theories and dominant ideas. Some of them are completely wrong. Many of them have flaws and can be improved. Most of them are not the best in your specific context.<br />
<a href="http://en.wikipedia.org/wiki/5_Whys" id="dzy-" title="5 Whys">5 Whys</a> is an excellent method to discover reality.<br />
Better unforeseen solutions exist if you look for them. If you don&#8217;t think critically, you will be a follower without much chances to grow your ideas and find better solutions. Keep your mind open and question ideas including your own.<br />
<strong>Questions:</strong>  What are hard facts, assumptions and theories? What should I trust, dismiss or verify?</p>
<p><strong>4. Full brain power. Use right brain </strong>(in addition to left).<br />
<em>The right hemisphere synthesizes over space. The left analyzes over time.</em> &#8211; Jerre Levy</p>
<p>Your right brain (more accurately &#8211; right brain mode) is inherited from our animal ancestors and shaped by millions years of evolution. Right brain mode is much more powerful, reliable and faster than left brain mode. Right brain works in parallel with images, subconscious mind and deep vast memory (even when you sleep). On the contrary, left brain works with symbols and words; it is logical, analytical and linear. It can only work with few ideas in the same time (4-7) and needs focus and conscious effort. We need left brain to formulate, express ideas and communicate them to others.<br />
Experts are using both brains &#8211; <strong>left </strong>for rational thinking, analysis and communication, <strong>right </strong>for intuition, imagination and creative insights. One of the best books how to start using you right brain is <a href="http://www.amazon.com/gp/product/0874774241?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0874774241" title="The New Drawing on the Right Side of the Brain" id="mnuy">The New Drawing on the Right Side of the Brain</a>.<br />
Learn how to expand your brain power with the right brain mode. If you use only left brain mode, you&#8217;ll stay dull, rational and predictable specialist.<br />
<strong>Questions:</strong> How can I engage my both brain modes? (Hint: interest, humor, senses, emotions, surprise.) What puzzles can I feed to my subconscious mind?</p>
<p><strong>5. Continuous learning. Sharing</strong><br />
<em>The real voyage of discovery consists not in seeking new landscapes but in having new eyes.</em> &#8211; Marcel Proust</p>
<p>Experts never stop to learn. The day you believe you know everything is your last day as an expert. Experts learn from new research and existing knowledge, they learn from other people and they learn from own experience. Also they learn from disciplines outside of their professional realm that can provide new ideas.<br />
For a example, a programmer could benefit from learning:</p>
<ul>
<li>  <strong>psychology</strong> &#8211; better understand how users think and perceive, how to engage customers, how to make yourself and team productive and motivated;</li>
<li>  <strong>design, aesthetics, art</strong> &#8211; beautiful systems are more usable and successfu<strong>l<br />
</strong></li>
<li><strong>  management theories and practices</strong> &#8211; learn how to organize people and activities  (for example Agile learned a lot from <a href="http://www.informit.com/articles/article.aspx?p=664147&amp;seqNum=4" title="Toyota Production System" id="m_id">Toyota Production System</a> and <a href="http://jeffsutherland.com/scrum/2009/01/roots-of-scrum-takeuchi-and-nonaka.html" title="Japanese product development" id="dk:o">Japanese product development</a>)</li>
<li>  <strong>system theories</strong> &#8211; understand fundamental principles and laws governing complex systems</li>
<li>  <strong>economics, business</strong> &#8211; why people and business need software, how software fails or succeed on market; how your software fits into company business; how to start your own company</li>
<li>  <strong>culture, social life, demographics</strong> &#8211; trends in behavior, interest and problems of groups of people (by sex, age, education, profession, etc). This knowledge will explain current dynamic and suggest future opportunities.</li>
</ul>
<p>Make learning essential part of your everyday life. If you don&#8217;t learn, you stop your journey to become an expert.<br />
You gain deeper knowledge if you <strong>share </strong>your knowledge with other people &#8211; <strong>discuss, explain, teach, blog, speak, present</strong>. Other people &#8211; with different views and perspective &#8211; will quickly show weaknesses and quality of your knowledge. Sharing with others will push your learning further and deeper than keeping knowledge to yourself.</p>
<p><strong>Questions:</strong> What do I not know? How will I learn it? How will I share it?</p>
<p><strong>6. Self-improvement</strong>.<strong> Know yourself. </strong><br />
<em>Why do you see the speck in your brother&#8217;s eye but fail to notice the beam in your own eye?<span class="body"></span></em><span class="body"> &#8211; </span>Matthew</p>
<p>We protect ourselves from inconvenient truth and often are blind to own mistakes. Our psychological defense systems help to avoid depression and anxiety by protecting our ego, but also distort our view and perception of true reality.<br />
Good experts are capable to see truth, be objective and correct themselves. They try to avoid the trap of groupthink, crowd psychology and self white washing.  They know own strengths, weaknesses and biases.<br />
Seek  the truth about self, know your internal beliefs and motivation and improve yourself. Otherwise, your rosy distorted pictures will hinder your growth and you will become the part of a problem, not the part of a solution.<br />
<strong>Questions:</strong> What can I do better? How can I improve myself? Am I honest with myself?</p>
<p><strong>7. Big picture. Systems Thinking. Creative solutions.</strong><br />
<em><span class="body">Opportunity ideas do not lie around waiting to be discovered. Such ideas need to be produced</span></em><span class="body"><em>.</em> &#8211; </span>Edward de Bono</p>
<p>Experts main advantages are tacit knowledge and experience. They understand big picture, reality, context and how systems work. However, it is not enough. <strong>Experts should solve problems</strong>. And therefore, they should train themselves for problem solving, innovation and changing reality in the novel ways. The outcome, a creative solution,  is quintessence of hard work, deep knowledge and intuition.<br />
<strong>Questions:  </strong>What is the big picture: forces, players and relations? How things can be done better? Do I see new ways?</p>
<h3>Questions to Ask Yourself</h3>
<ol>
<li><strong>Motivation</strong> &#8211; Am I ready? How can I boost my strength, energy and motivation? How will I succeed?</li>
<li><strong>Focus</strong> &#8211; How do I maintain focus, stay committed and interested? Do I have clear goals, action plan and productive environment?</li>
<li><strong>Critical thinking</strong> &#8211; What are hard facts, assumptions and theories? What should I trust, dismiss or verify?</li>
<li><strong>Full </strong><strong>Brain power</strong> &#8211; How can I engage my both brain modes? What puzzles can I feed to my subconscious mind?</li>
<li><strong>Continuous Learning</strong> &#8211; What do I not know? How will I learn it? How will I share it?</li>
<li><strong>Self Improvement</strong> &#8211; What can I do better? How can I improve myself? Am I honest with myself?</li>
<li><strong>Creative solutions</strong> &#8211; What is the big picture: forces, players and relations? How things can be done better? Do I see new ways?</li>
</ol>
<p>If you know answers to these questions, you don&#8217;t need rules to solve problems &#8211; you are ready to make good decisions and become an expert.</p>
<p><strong>References:</strong><br />
<a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition" title="Dreyfus Model of Skill Acquisition" id="kr4d">Dreyfus Model of Skill Acquisition</a> , Wikipedia<br />
<a href="http://www.time.com/time/health/article/0,8599,1717927-1,00.html" title="The Science of Experience" id="pyn3">The Science of Experience</a>, by John Cloud/Tallahassee, TIME<br />
<a href="http://www.amazon.com/gp/product/1934356050?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1934356050" title="Pragmatic Thinking and Learning: Refactor Your Wetware" id="n9_c">Pragmatic Thinking and Learning: Refactor Your Wetware</a>, by Andy Hunt<br />
<a href="http://www.amazon.com/gp/product/0874774241?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0874774241" title="The New Drawing on the Right Side of the Brain" id="mnuy">The New Drawing on the Right Side of the Brain</a>, by Betty Edwards<br />
<a href="http://www.sciam.com/article.cfm?id=the-expert-mind" title="The Expert Mind">The Expert Mind</a> , Scientific American<br />
<a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf" title="The Role of Deliberate Practice in the Acquisition of Expert Performance">The Role of Deliberate Practice in the Acquisition of Expert Performance</a>, K. Anders Ericsson, Ralf Th. Krampe, and Clemens Tesch-Romer</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=82&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Dealing with programmers who are different and disagree</title>
		<link>http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/</link>
		<comments>http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 03:37:33 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/</guid>
		<description><![CDATA[ShareThere is nothing either good or bad, but thinking makes it so. &#8211; Shakespeare, &#8220;Hamlet&#8221;

Generally, we are very tolerant and understanding. We appreciate to work with other people, listen and accept their ideas. Especially it is easy with people who completely agree with us. As for people who don&#8217;t&#8230; How could we appreciate people who [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/&amp;title=Dealing+with+programmers+who+are+different+and+disagree&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><cite>There is nothing either good or bad, but thinking makes it so.</cite> &#8211; Shakespeare, &#8220;Hamlet&#8221;</p>
<p><img src="http://softwarecreation.org/images/2008/fight-club.jpg" /><br id="r_qo0" /></p>
<p>Generally, we are very tolerant and understanding. We appreciate to work with other people, listen and accept their ideas. Especially it is easy with people who completely agree with us. As for people who don&#8217;t&#8230; How could we appreciate people who disagree with your bright ideas, have own opposite opinion and don&#8217;t want to happily follow you? We can fight them, lure them and even force them to agree. There are many persuasion techniques, psychological tricks and political games that could make them to convert to your side. But should we always convert them? This post is devoted to the hard and ungrateful job of appreciating people who think, feel and behave differently.<br id="m5zw" /></p>
<p class="MsoNormal" id="gyhw14">   There are three concepts that help me to deal with these people:<br id="qxk11" /></p>
<ol>
<li>   Appreciate the difference<br id="ah1d" /></li>
<li>   Pygmalion Effect</li>
<li>   Seeing the Truth</li>
</ol>
<p><span id="more-71"></span></p>
<h3 id="fc_x0">   1. Appreciate the difference (or wisdom of diverse groups).<br id="w8an" /></h3>
<p>We are uncomfortable with people who are different from us. We have inner resistance to connect to them, understand and accept their ideas.<br id="g9hg" /> <br id="g9hg0" /> But most of us are different. Many programmers (especially in Canada) came from different cultures, were raised in different societies and taught differently. And even within the same culture, we, individuals, have different <a href="http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/" title="personalities" id="hywa">personalities</a>, backgrounds and views. Some programmers are quick problem-solvers who can come with practical solutions for particular problems in no time. Some are abstract thinkers who need the big picture and require concepts and system pieces to fit together. Some are creative innovators capable of producing crazy and beautiful software ideas, some are thorough down-to-earth implementers building reliable and high quality systems. We all have different ideas, concerns and approaches. But when we work together and exchange ideas, we often come up with solutions which are much better than individual suggestions.<br id="quab0" /> <br id="v74k" /> Diverse opinions are the strength and blessing for software teams. <strong id="qlrr">Diverse groups have broader perspectives, more information and deeper expertise. They make much better decisions and don&#8217;t stuck with a single and only way.</strong> I feel myself empowered and lucky when I work with strong people who are different and don&#8217;t agree with everything. They make my world much more interesting, richer and they are source of most valuable learning.<br id="q1g2" /> <br id="q1g20" /> One more point &#8211; if you consider people interests, try to understand them and see the world trough their eyes, many things about them will start making perfect sense, even if you don&#8217;t agree with them.<br id="j3fn2" /></p>
<h3 id="b9qw3">   2. The Pygmalion effect (or self-fulfilling prophecy).</h3>
<p class="MsoNormal" id="gyhw21">George Bernard Shaw wrote a famous play Pygmalion, in which Professor Henry Higgins insists that he can turn a poor flower girl into a lady. He succeeds. But a flower girl, Eliza Doolittle, said to Higgins&#8217; friend Pickering:&#8221;The difference between a lady and a flower girl is not only how she behaves, dress and speak, but how she&#8217;s treated. I shall always be a flower girl to Professor Higgins, because he always treats me as a flower girl, and always will, but I know I can be a lady to you because you always treat me as a lady, and always will.&#8221;</p>
<p> I learned this effect many years ago when I was a young and hotheaded programmer. I was a team lead for the first time and had one reporting to me programmer. I saw him as a bad programmer. Indeed, he wasn&#8217;t able to produce good code &#8211; at least in my opinion. His motivation was low and I seriously considered him as a lost case. Soon, I moved to another place and this programmer had to replace me and became responsible for the whole system. I expected disaster. Surprisingly, I received very favorable feedback about him. My substitution programmer continued development and internal users praised his intelligence, responsiveness and quality of work. I&#8217;m sure his code wasn&#8217;t great, but he was doing his job and kept people happy. I suspect they liked him much more than me. I was puzzled about this radical change until I&#8217;ve learned about The Pygmalion Effect.</p>
<p class="MsoNormal" id="dv-q4"> The Pygmalion Effect means &#8220;you get what you expect.&#8221;  Consciously or not people will get what we think and expect from them and adjust behavior to match our expectations. <strong id="iv8j">If you expect the best from people, they will try to meet expectations and even go beyond, if no&#8230; oh well, see consequences.</strong></p>
<h3 id="b9qw4">   3. Seeing the Truth (inconvenient, about yourself).</h3>
<p class="MsoNormal" id="gyhw36"> My small daughter sometimes is running into the table or other obstacles that often prevent kids from running as wild as they wish. If she feels pain, she starts to cry: “Bad table, bad table” and kicks it. I’m trying to explain – it is not a table, table doesn’t do anything to you – it is all about you, you should be careful. My words don&#8217;t help and she continues crying: “You don’t love me, Dad, and don’t see how bad this table is”.</p>
<p class="MsoNormal" id="gyhw38"> I was laughing to myself: “she will grow, become wiser and understand that she is the cause, not the table”. But at some point, I realized: “I’ve grown up, but didn’t become wise enough”. If something goes wrong, I often don&#8217;t recognize that I’m the cause of the problem. I can find many reasons why this problem happened. Certainly, it is not me, it caused by other people, circumstances, bad luck, Microsoft, irresponsible customers (you can continue the list).</p>
<p class="MsoNormal" id="gyhw39"> But if I even unconsciously do realize that I’m the problem, I double my effort to shift the blame and lose objective and rational view. I become powerful self white-washing machine. I am not alone. <strong id="ot_b">All of us have psychological defensive system inside that protects our ego and self-esteem. It works perfectly. The only problem that it prevents us from seeing the inconvenient truth and learning how to solve our problems.</strong><br id="l5560" /></p>
<h3 id="ahin0">   The bottom line:</h3>
<p><strong id="obly"> Appreciate the difference, expect the best from people and see the truth about yourself.</strong><br id="pseu0" /><br id="zs.-" />It is not easy to really listen, understand and even agree with other people. But if I don&#8217;t &#8211; I will have many nasty fights, can rely on myself only and miss many opportunities to grow and learn. My world will shrink and I will be left alone against winds, waves and problems of this world.<br id="q-p." /><br id="cmu_" /></p>
<p><cite>Everyone thinks of changing the world, but no one thinks of changing himself.</cite> &#8211; Leo Tolstoy</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=71&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to use search skills to become an effective programmer</title>
		<link>http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/</link>
		<comments>http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 04:20:22 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[People]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/</guid>
		<description><![CDATA[Share No man is an island unto himself every man is a part of the whole &#8211; John Donne
It is possible to program a web page or small application with little knowledge of programming. Use Google to search for examples and if you are lucky, you will find ready code and your are almost done. [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/&amp;title=How+to+use+search+skills+to+become+an+effective+programmer&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p> <cite>No man is an island unto himself every man is a part of the whole</cite> &#8211; John Donne</p>
<p>It is possible to program a web page or small application with little knowledge of programming. Use Google to search for examples and if you are lucky, you will find ready code and your are almost done. Even experienced programmers often retreat to search to save time and effort for finding solutions for their problems.</p>
<p><strong>Modern effective programming is unthinkable without using search, the  Internet and collective intelligence. Therefore, search skills are becoming primary for an effective programmer.</strong></p>
<p>Now we don&#8217;t need to know and remember how to solve many programming problems &#8211; we can use search. We are becoming more effective, productive and able to solve wider range of problems. But does it mean that good search skills are enough for building software? This post will review the role of search skills in forming programmer knowledge and how to use search effectively.<br id="n0n60" /></p>
<h3 id="g51j"><strong id="n0n61">Types of knowledge and how it grows in programmer&#8217;s brains.</strong></h3>
<p><img src="http://softwarecreation.org/images/2008/knowledge-types.jpg" /></p>
<p><span id="more-69"></span>There are three types of knowledge:<br id="i-3f" /></p>
<ul id="i-3f0">
<li id="i-3f1"><strong id="s4v_">Conceptual</strong> (why, what, if &#8211; semantic) &#8211; understanding concepts, principles, relations and major approaches for building software systems. This knowledge provides answers to why architecture or code should be done specific way, what are alternatives and logic behind selecting the best of them. Conceptual knowledge refers to the bigger picture and understanding beyond solving specific problems on a chosen programming language.
<ul id="m4m6">
<li id="i-3f2"><em>Application</em>: find new solutions for complex open-ended problems and create sound software systems.</li>
<li id="khtm"><em>Acquisition</em>: learning computer science, architecture and programming concepts, and building own theories based on practical implementations and experience.<br id="khtm0" /></li>
</ul>
</li>
<li id="i-3f3"><strong id="my0g">Practical</strong> (how-to &#8211; procedural) &#8211; knowledge how to solve a specific programming problem. This knowledge doesn&#8217;t require deep understanding of concepts and rationale behind implementation choices. Search plays the biggest role here as it is relatively easy to share and explain specific solutions for limited problems using programming language.
<ul id="m4m60">
<li id="i-3f4"><em>Application</em>: solve problems quickly using proven and known solutions without re-inventing new approaches every time.</li>
<li id="w7zj"><em>Acquisition</em>: searching for existing solutions, learning by example or coming up with own and reusing later.<br id="fr33" /></li>
</ul>
</li>
<li id="i-3f5"><strong id="gs1w3">Tacit</strong> (expertise, experience and intuition) &#8211; inner knowledge that people carry in their minds based on personal experience of implementing software systems. Tacit knowledge allows to synthesize and make work together two other types of knowledge using powerful brain capabilities. This knowledge is difficult to transfer, because the big part of it is stored in our subconscious mind. It works with intuition and allows optimal decisions based on experience, feedback and evaluation of conceptual and practical knowledge in specific context. <br id="hxcb" />
<ul id="m4m61">
<li id="i-3f6"><em>Application</em>: using own expertise, experience and intuition for implementing the best solution<br id="sl3e" /></li>
<li id="abkw"><em>Acquisition</em>: building software and learning from results<br id="fjp:" /></li>
</ul>
</li>
</ul>
<p><img src="http://softwarecreation.org/images/2008/knowledge-growth.jpg" /></p>
<p>Design patterns (as well as architectural, domain and others) are interesting example for combining of all types of knowledge: &#8216;how-to&#8217; examples, concepts behind these examples and experience of implementing them. This way of representing knowledge is one of the reasons for patterns success and wide use.</p>
<p>Value of practical knowledge in the head is decreasing when more and more practical solutions and examples are available on the Internet. We don&#8217;t need to keep them in our heads. We can tackle now almost any common programming problem we might encounter in building software. However, a master programmer knows much more than examples how to solve problems or where to search for examples. He can come up with own solutions, make most optimal decisions and apply them in the best way. In addition, solutions for the new, complex, domain and context specific problems are difficult to find on the Internet. And any non trivial software project requires knowledge of the high level software development principles, experience of applying them and deep understanding of the system, problem space and environment to make good decisions how to solve problems. <br id="uely" /> <br id="uely0" /> <strong>Therefore, conceptual and tacit knowledge are still very valuable in software development. And when we use  search we should make effort to expand all types of knowledge instead of just solving particular problems. It will pay off with enhancing ability to solve much more advanced problems and becoming even more effective programmer.</strong></p>
<p><img src="http://softwarecreation.org/images/2008/knowledge-lifecycle.jpg" /></p>
<h3 id="l3oa">Effective Search for Solving Practical Problems<br id="rc:8" /></h3>
<p><strong id="ikue">A. Find</strong><br id="dt5r" /></p>
<ol id="dwy3">
<li id="dwy30"><em id="rw-b">Define </em>- understand what problem should be solved and focus on what you are trying to find. Internet has so much interesting stuff that search could easily take all your work time (and personal).<br id="lobi" /></li>
<li id="dwy31"><em id="rw-b0">Search  </em>(use standard Google, <a href="http://www.google.com/codesearch" title="code search" id="e7qz">code search</a> or <a href="http://www.deitel.com/ResourceCenters/Programming/CodeSearchEnginesandCodeSites/tabid/454/Default.aspx" title="other search engines" id="vguh">other search engines</a>) &#8211; there are <a href="http://www.dumblittleman.com/2007/06/20-tips-for-more-efficient-google.html" title="many" id="faiu">many</a> <a href="http://www.mapelli.info/tips/ultimate-google-search-tips-guide" title="recommendations" id="d:f8">recommendations</a> <a href="http://sudarmuthu.com/blog/2006/05/07/google-search-syntax-dissected.html" title="how" id="u9yl">how</a> to use <a href="http://help.yahoo.com/l/us/yahoo/search/basics/basics-04.html" title="search" id="grph">search</a> engines <a href="http://www.media-awareness.ca/english/resources/special_initiatives/wa_resources/wa_teachers/tipsheets/search_internet_effectively.cfm" title="effectively" id="i9-v">effectively</a>. <br id="y5p2" /></li>
<li id="zkju"><em id="rw-b1">Scan </em>results (quality of content, credibility and level of expertise; stop if source has low trust level) &#8211; <em id="rw-b2">Read </em>- <em id="rw-b3">Evaluate </em>(effort, needed tools and libraries)<br id="vupj" /></li>
</ol>
<p><br id="jmbp" /><strong id="ikue0">B. Use</strong><br id="ikue1" /></p>
<ol id="dt5r1">
<li id="fy2o"><em id="rw-b4">Copy </em>code &#8211; <em id="rw-b5">Try </em>in isolation (discovery unit tests with <a href="http://c2.com/cgi/wiki?SpikeSolution" title="spikes" id="r-83">spikes</a> are the best for this purpose) <br id="c-gw" /></li>
<li id="jt_y"><em id="rw-b6">Clean </em>code &#8211; keep only minimal, relevant and clear code for your solution</li>
<li id="soir"><em id="rw-b7">Apply </em>code to your system<br id="soir0" /></li>
</ol>
<p><br id="jmbp0" /><strong id="unpd">C. Learn</strong><br id="jmbp2" /></p>
<ol id="dt5r2">
<li id="jt_y0"><em id="rw-b8">Understand </em>- why and what have you done &#8211; learn from the code and implementation<br id="eh.j" /></li>
<li id="rskz"><em id="rw-b9">Expand </em>knowledge -
<ul id="g3-:">
<li id="g3-:0"><strong id="unpd0">practical</strong>: specific approaches, tricks and style of problem solving; <br id="g3-:1" /></li>
<li id="g3-:2"><strong id="g3-:3">conceptual</strong>: learn new concepts, refine existing and build your own; <br id="g3-:4" /></li>
<li id="g3-:5"><strong id="g3-:6">tacit</strong>: experience will grow automatically if you intelligently use found solutions and learn from them<br id="g3-:7" /></li>
</ul>
</li>
<li id="jmbp3"><em id="rw-b10">Collect </em>(links, opinions, references, to-read lists) &#8211; any interesting information for your future searches, discovery and learning. Keep backlog for these purpose.</li>
</ol>
<p><br id="u9-x" />Do you have any tips for effective code search?</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=69&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/how-to-use-search-skills-to-become-effective-programmer/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Happiness. Programmer&#8217;s Edition.</title>
		<link>http://softwarecreation.org/2008/the-happiness-programmers-edition/</link>
		<comments>http://softwarecreation.org/2008/the-happiness-programmers-edition/#comments</comments>
		<pubDate>Wed, 28 May 2008 04:15:19 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/the-happiness-programmers-edition/</guid>
		<description><![CDATA[ShareHappiness is a direction, not a place.  &#8211; Sydney J. Harri
tookie
Happy programmers are more productive, healthier and live longer. It is pleasure to work with happy programmers. Are you a happy programmer? Do you have feeling of joy and satisfaction every day? Do you want to know how to become happier?This post considers programmer&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2008/the-happiness-programmers-edition/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2008/the-happiness-programmers-edition/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2008/the-happiness-programmers-edition/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2008/the-happiness-programmers-edition/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2008/the-happiness-programmers-edition/&amp;title=The+Happiness.+Programmer%27s+Edition.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><cite>Happiness is a direction, not a place.</cite>  &#8211; Sydney J. Harri<br id="gtft0" /><br id="gtft1" /><img src="http://softwarecreation.org/images/2008/happy.jpg" /><br />
<a href="http://flickr.com/photos/tookie/183503927/" class="photocredit">tookie</a><br />
<br id="pznz0" />Happy programmers are more productive, healthier and live longer. It is pleasure to work with happy programmers. Are you a happy programmer? Do you have feeling of joy and satisfaction every day? Do you want to know how to become happier?<br id="jezc0" /><br id="nd3a0" />This post considers programmer&#8217;s satisfaction with live as a whole (I had another post dedicated to <a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="happiness at work" id="d.9n">happiness at work</a>). <br id="p:qg0" /><br id="kwc40" />Programmers as other people are happier if they have<br id="z5rx0" /></p>
<ul id="z5rx1">
<li id="z5rx2">more money</li>
<li id="z5rx2">successful marriage</li>
<li id="z5rx2">excellent health</li>
<li id="z5rx2">good friends</li>
<li id="z5rx2">live in a beautiful place with wonderful weather<br id="llim0" /></li>
</ul>
<p><br id="i4020" /><span id="k7ej0"><strong id="db:o0">But we have what we have.</strong></span> It is not easy to achieve all of this: become rich, find perfect spouse and  friends, be completely healthy and move to the best place on the Earth. But the most nasty news is that even after achieving all of this happiness is not guaranteed to last forever.</p>
<p><span id="more-63"></span></p>
<h3 id="xnmm0">Pessimism</h3>
<p><img src="http://softwarecreation.org/images/2008/escalator.jpg" /><br id="y31s1" />We face 3 serious obstacles to increase our level of happiness for a long time.<br id="dt::2" /><br id="kyda0" /><span id="m0jx0"><strong id="ur300">1. Genes / personality</strong></span> &#8211; our basic level of happiness significantly depends on our genes and personality and stays almost the same over time. We cannot change much this level. Some of us could be cheerful and joyful in tough times and some will be cranky and frustrated in the best moments of their life.<br id="rhjk0" /><span id="m0jx1"><strong id="ur301">2. Adaptation</strong></span> &#8211; any gains in happiness are only temporary, because humans so quickly adapt to change. After 1 year lottery winners were no happier than before win. U.S. citizens&#8217; personal income has more than doubled in the past 50 years, but <a href="http://www.davidmyers.org/davidmyers/assets/Funds.friends.faith.pdf" title="their happiness levels have remained the same" id="kvib">their happiness levels have remained the same</a>. <br id="rhjk1" /><span id="m0jx2"><strong id="ur302">3. Illusions</strong></span> &#8211; we often create illusions that replace reality. Our imagination creates pretty pictures about what makes us happy and miss important real life details. We have tough time to imagine that we will ever think, want, or feel differently than we do now. We overestimate our future appetite when are hungry or why we desperately need this beautiful iPhone [insert here any gadget of your dream] right now to be happy.<br id="b9zu0" /><br id="lxjp0" />Does it mean that we cannot increase our happiness for a long time? We still have some reasons for optimism<br id="k_i42" /></p>
<h3 id="k_i43">Optimism</h3>
<p><img src="http://softwarecreation.org/images/2008/manchester.jpg" /><br id="dvjp0" /></p>
<p>Yes, we have genetically determined <span id="hp7s0"><strong id="ast62">set point</strong></span>. <a href="http://www.psych.umn.edu/courses/fall06/macdonalda/psy4960/Readings/LyubomirskySustain_RGP05.pdf" title="Research" id="pnai">Research</a> shows that our genes and personality accounts for <span id="eix90"><strong id="z.-e0">50% of our happiness</strong></span>, which is fixed and almost impossible to change. <br id="zyi80" /><br id="a2880" />But we have other things under our control &#8211; our life and what we do.<br id="bphg0" /> <br id="dukg0" />Many people believe that changing life is the ultimate path to happiness.<br id="g7w00" />Surprisingly, research shows that <span id="hp7s1"><strong id="ast63">circumstances</strong></span> of our life (wealth, health, marriage, friends, living place, etc.) accounts for only <span id="eix91"><strong id="z.-e1">10% of happiness</strong></span>. We can change level of our happiness by marriage (risky) or moving to Florida [insert here any place of your dream] (less risky). But how long it will last? Not long because our illusions will quickly fade and adaptation to the new life events will return us back to the basic level. We are similar to pedestrians walking up a descending escalator. You should constantly move to stay above your basic happiness level. Stop and you quickly get back.<br id="lj7j0" /><br id="eix92" />What is left for the rest <span id="eix93"><strong id="z.-e2">40% of our happiness</strong></span>?<br id="var12" /><span id="gl__0"><strong id="ast64">Intentional Activity</strong></span> &#8211; the wide variety of things that people do and think in their daily lives from exercising regularly to achieving important life goals. Illusions are less severe because we constantly get experience. Adaptation is weaker, because we can adjust, don&#8217;t spend all time doing one thing and we can vary the same activity and move to the new levels. We can remain happy over long period doing things that we enjoy or that bring meaning in our life.<br id="x3qo0" /><br id="x3qo1" />Think about your software projects. Do they bring you meaningful experience? Do you feel that your work and growth as a programmer could be the source of happiness? You can try moving to another project, change roles and work with other interesting domains and problems to get more satisfaction from work and fight adaptation.<br id="pbpq0" /><br id="e1510" /><a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="Enjoyment from work" id="oa.w">Enjoyment from work</a> comes at very specific point: when our tasks and challenges match our capabilities. Work should be not overwhelmingly complex and not too simple. With these conditions you will enjoy your work and grow quickly.<br id="e1511" />To be happy at work you should have<br id="e1512" />   1. Control over your task assignments and execution.<br id="e1513" />   2. Environment and time to focus on your tasks.<br id="e1514" />   3. Clear goals and immediate feedback.<br id="e1515" /><br id="e1516" />Other areas (to achieve <a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29" title="flow" id="de9e">flow</a> and happiness from activities):<br id="sx8_0" /></p>
<ul id="sx8_1">
<li id="sx8_2"><strong id="tflz0">Body</strong>: exercises, yoga, sport</li>
<li id="sx8_2"><strong id="tflz1">Mind</strong>: learn something new, e.g. science, history, languages (human and programming); blog or build programs for interesting problems (and share them)<br id="ihff0" /></li>
<li id="sx8_2"><strong id="s2.l0">Feelings</strong>: music, art or poetry</li>
<li id="sx8_2"><strong id="r8oc0">Social</strong>: join study groups and clubs for personal growth (e.g. <a href="http://www.toastmasters.org/" title="Toastmasters" id="jfia">Toastmasters</a>) or social contribution, volunteer or simply help people.</li>
</ul>
<p><br id="e70o0" />There are few steps to become happier with your intentional activity.<br id="i5m.0" /></p>
<h3 id="zi781">Important Steps<br id="kdcl0" /></h3>
<ol id="lcgl0">
<li id="lcgl1"><span id="lcgl2"><strong id="gg791">Match</strong></span>. Find activities that match your strengths, interests and personality. Something that you would really enjoy and find as a good fit and complement to your life.</li>
<li id="lcgl3"><span id="lcgl4"><strong id="gg792">Start.</strong></span> It is the most important step. We have thousands of real and imaginative reasons why not to start. Our busy lives and habits often stop us. Avoid overcommitment and don&#8217;t burn yourself with activities, but don&#8217;t hesitate too much &#8211; just start it. Who doesn&#8217;t try &#8211; doesn&#8217;t drink champagne<br id="j_-l0" /></li>
<li id="lcgl3"><span id="hzhu0"><strong id="gg793">Maintain</strong></span>. Your activities will make you happier if you do them for a long time, make a progress and achieve results. Your activities should make your life interesting, bring enjoyment and satisfaction to keep your new happiness level, otherwise it doesn&#8217;t make sense to continue them. However, you could have less enjoyable activities if they move your closer to life goals and make life more meaningful.</li>
<li id="lcgl3"><span id="i3v_0"><strong id="gg794">Change</strong></span>. You should periodically look for the new activities, evaluate and change existing and even drop less valuable. Your time is precious and you should select what brings you most satisfaction, happiness and meaning in life.<br id="a93e0" /></li>
</ol>
<p><br id="r-vm0" /><span id="f9ls0">Confucius said<strong id="xl9o2">: </strong></span><span id="f9ls0"><strong id="xl9o2">&#8220;The one who would be in constant happiness must frequently change.&#8221;</strong></span><br id="r-vm1" /></p>
<p><img src="http://softwarecreation.org/images/2008/happiness-anatomy.jpg" /><br id="mlf:0" />So, happiness is combination of two outcomes:<br id="mlf:1" /></p>
<ol id="oex10">
<li id="oex11"><span id="oex12"><strong id="gg795">Recent experiences (bottom-up)</strong></span> &#8211; people who can recall a large number of recent positive experiences are very happy. Your activities are the great source of these experiences.<br id="udfp0" /></li>
<li id="oex11"><span id="x3qs2"><strong id="ast614">Meaning and purpose (top-down) &#8211; </strong>even suffering, we can be happy and positively re-frame our experiences if we have sense of achieving meaning and purpose in our life. And activities could move you closer to them.<br id="k1.f0" /></span></li>
</ol>
<p><br id="ksbf0" />Albert Camus: <span id="p._j0"><strong id="wn530">But what is happiness except the simple harmony between a man and the life he leads?</strong></span><br id="ksbf1" /><span id="p._j1"><strong id="wn531"><br id="ngra0" /> Life is action. Act and be happy.</strong></span><br id="wh800" /><br id="dtkv0" />Resources:<br id="dtkv1" /><a href="http://www.psych.umn.edu/courses/fall06/macdonalda/psy4960/Readings/LyubomirskySustain_RGP05.pdf" title="Pursuing Happiness: The Architecture of Sustainable Change" id="a4_l">Pursuing Happiness: The Architecture of Sustainable Change</a>, Sonja Lyubomirsky, Kennon M. Sheldon, David Schkade<br id="h1bi0" /><a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" id="h1bi1">How to Be Happy At Work. Short tutorial</a></p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=63&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/the-happiness-programmers-edition/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Secret of Building Effective Software Systems</title>
		<link>http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/</link>
		<comments>http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/#comments</comments>
		<pubDate>Mon, 19 May 2008 20:55:50 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Concepts]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/</guid>
		<description><![CDATA[Share
I can&#8217;t wait to share this simple secret with you right now.  The Secret: Effective Software Systems are the systems that easy to understand and operate with human brains.  Programmers are more productive with effective software systems. Programmers can better learn and grow these system. Programmers have less problems, work faster and make [...]]]></description>
			<content:encoded><![CDATA[<div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><iframe src='http://api.tweetmeme.com/button.js?url=http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/&source=AndriySolovey&service=&service_api=&style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></div><div class='dd_button'><a name='fb_share' type='button_count' share_url='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/'></script></div><div class='dd_button'><a title='Post on Google Buzz' class='google-buzz-button' href='http://www.google.com/buzz/post' data-button-style='small-count' data-url='http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/'></a><script type='text/javascript' src='http://www.google.com/buzz/api/button.js'></script></div><div class='dd_button'><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/&amp;title=The+Secret+of+Building+Effective+Software+Systems&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><img src="http://softwarecreation.org/images/2008/software-unknown.jpg" /></p>
<p>I can&#8217;t wait to share this simple secret with you right now.<br id="bcz60" /> <br id="icww1" /> <span id="yb4h0"><em id="rzm80">The Secret</em></span>: <span id="tmg00"><strong id="lh4q0">Effective Software Systems are the systems that easy to understand and operate with human brains.</strong></span><br id="jwyk0" /> <br id="lfgv0" /> Programmers are more productive with effective software systems. Programmers can better learn and grow these system. Programmers have less problems, work faster and make better decision with them.<br id="lfgv1" /> <br id="jwyk1" /> Now, you can avoid spending time reading this post if you already know this secret and you know how to avoid building the software system that:<br id="jwyk2" /></p>
<ul id="jwyk3">
<li id="jwyk4">almost impossible to understand in reasonable time<br id="cskb0" /></li>
<li id="jwyk4">has confusing and convoluted swamp of logic and structure</li>
<li id="jwyk4">scary to change as nobody has any clue what will be broken, but sure that it will be broken<br id="ys3i0" /></li>
</ul>
<p><br id="df:u0" /> If you are still interested, lets find out what makes software systems effective.<br id="i1br0" /> <br id="fj_60" /> Software Development is a pure mental endeavor (except typing on keyboard) that includes 3 main activities:<br id="q2o50" /></p>
<ul id="ky5w0">
<li id="ky5w1"><span id="qo7g0" style="font-weight: bold">Understand </span>- learn and know system concepts and implementation</li>
<li id="ky5w2"><span id="qo7g1" style="font-weight: bold">Evolve </span>- build, modify and support growth of the system ideas in the code<br id="n51v0" /></li>
<li id="ky5w3"><span id="qo7g2" style="font-weight: bold">Share </span>- communicate and exchange ideas about the system</li>
</ul>
<p><br id="y-gl2" /> Programmers should care about 7 areas to make the system better suited for our brains:<br id="ky5w4" /></p>
<ol id="attr0">
<li id="attr1"><span id="ccgy0"><strong id="pyx80">Knowledge Creation and Retention</strong></span> &#8211; parsing, memorization and comprehension of the system ideas<br id="v1n_0" /></li>
<li id="attr1"><span id="zvyt0"><strong id="pyx81">System Organization</strong></span> &#8211; elements, relations and structure in the system<br id="e:xy0" /></li>
<li id="attr1"><span id="urez0"><strong id="pyx82">Sustaining Emerging Order</strong></span> &#8211; support evolution of the system and gain control over chaos<br id="fwyu0" /></li>
<li id="attr1"><span id="hg-z0"><strong id="pyx83">Minimize Noise</strong></span><span id="r4tk0" style="font-weight: bold"> and Purify</span> &#8211; avoid adding unnecessary stuff to the system<br id="hg-z1" /></li>
<li id="attr1"><span id="mc1a0"><strong id="pyx84">System Discovery and Learning</strong></span> &#8211; making sense of the system<br id="mc1a1" /></li>
<li id="attr1"><span id="mc1a2"><strong id="pyx85">Mental Models</strong></span> &#8211; our internal explanations for how things are working in the real system<br id="j:8d0" /></li>
<li id="attr1"><span id="mc1a3"><strong id="pyx86">Shared Knowledge</strong></span> &#8211; ideas exchange, reconciliation of opinions and creation of mutually enhanced knowledge.</li>
</ol>
<p><span id="more-62"></span></p>
<h3 id="jbhv1">1. Knowledge Creation and Retention<br id="cth80" /></h3>
<p><cite id="ypkf0">Information is not knowledge.</cite> &#8211; Albert Einstein</p>
<p><img src="http://softwarecreation.org/images/2008/knowledge.jpg" /><br id="hapl0" /> <br id="hapl1" /> Programmers should keep as less as possible things in the mind when work with the system. Less information, simpler and more logical ideas behind the code cause less brain damage and more understanding.<br id="cth81" /> Main principles:<br id="cth82" /></p>
<ul id="nrz20">
<li id="nrz21"><span id="ur9t0"><strong id="pyx87">Chunking</strong></span> &#8211; combining many units of information into a limited number of units and chunks, so that information is easier to process and remember. Logical groups (subsystems -&gt; modules -&gt; classes) should contain only few elements. These groups should emerge with growth of the system functionality and complexity. They should replace large clusters of difficult to remember similar and unstructured elements.<br id="m-210" /></li>
</ul>
<ul id="q5os">
<li id="c1yo"><span id="ur9t1"><strong id="pyx88">Abstraction </strong></span>- generalize, find common meaning and remove redundancy in the similar concepts across the system. You can substantially reduce number of ideas required for understanding the system.</li>
<li id="vlkd"><span id="ur9t2"><strong id="pyx89">Simplicity </strong></span>- simpler ideas make understanding (and programmers life) much easier.</li>
<li id="vlkd"><span id="ur9t3"><strong id="pyx810">Isolation </strong></span>- reduce relations and dependencies between elements. These relations add significant complexity to the system and therefore effort to understand and remember them. The volume of knowledge about relations could easily exceed the knowledge about individual elements.</li>
</ul>
<p><br id="j90r0" /> Examples of useful tools for supporting knowledge formation:<br id="j90r1" /></p>
<ul id="f:nj1">
<li id="f:nj2"><span id="g2oc0"><strong id="pyx811">Unit tests</strong></span> &#8211; capture knowledge about the system correct behavior. They evolve with the system and become a parallel verification system. Good unit tests reduce our effort and limit necessary for understanding scope as they focus on the system behavior in isolated components and functions.<br id="f:nj3" /></li>
<li id="f:nj4"><span id="rikw0"><strong id="pyx812">Visuals </strong></span>- take advantage of diagrams, <a href="http://en.wikipedia.org/wiki/Mind_map" title="mind maps" id="j::n">mind maps</a> and pictures to simplify, distill and integrate important knowledge and ideas about the system<br id="d8s50" /></li>
<li id="f:nj5"><span id="e2nd0"><strong id="pyx813">Storytelling </strong></span>- create imagery, emotions and understanding of the system behavior through stories (our <a href="http://softwarecreation.org/2008/the-programmers-brains-at-work-understanding-the-software-system/" title="episodic memory" id="os4o">episodic memory</a> is very powerful). For example, create narratives how users accomplish tasks with your system. Or share dramatic stories how programmers doomed the system with ignoring important practices. <br id="ku0v0" /></li>
</ul>
<h3 id="jbhv5">2. System Organization</h3>
<p><cite id="ypkf1">Be regular and orderly in your <span style="font-weight: bold" id="gqbw0">system organization</span>, so that you may be violent and original in your <span style="font-weight: bold" id="gqbw1">software solutions</span>.</cite>  (paraphrasing Flaubert)</p>
<p><img src="http://softwarecreation.org/images/2008/organization.jpg" /><br id="t0q40" /> <br id="t0q41" /> Human programmers shouldn&#8217;t have hard time to memorize and comprehend a software system. Computers don&#8217;t care much about the organization as long as the logic is correct, but we, human programmers, do. Clear, logical and consistent organization make us much more productive.<br id="ian90" /> Main principles:<br id="ian91" /></p>
<ul id="lxye">
<li id="nfbk"><span id="ib_l0"><strong id="pyx814">Modularity </strong></span>- managing system complexity by dividing large subsystems into multiple, smaller self-contained systems</li>
<li id="n8ng"><span id="ib_l1"><strong id="pyx815">Layering </strong></span>- process of organizing information into related groupings in order to manage complexity and reinforce relationships in the information</li>
<li id="u48h"><span id="ib_l2"><strong id="pyx816">Hierarchy </strong></span>- hierarchical organization is the simplest structure for visualizing and understanding complexity<br id="j90r2" /></li>
</ul>
<h3 id="jbhv6">3. Sustaining Emerging Order</h3>
<p><cite id="ypkf2">Evolution is not a force but a process. Not a cause but a law.</cite> &#8211; John Morley</p>
<p><img src="http://softwarecreation.org/images/2008/evolution.jpg" /><br id="a3or0" /> <br id="a3or1" /> The main challenge for effective system organization is the fact that a system is constantly changing during active development. Good organization today doesn&#8217;t mean good organization tomorrow with many new added features. New customer needs, contribution of fellow developers and growing complexity push a software system to chaos.<br id="jxp-" /> Therefore, we have to keep organization optimal for today needs and still ready for tomorrow changes with<br id="cth83" /></p>
<ul id="br8f0" style="margin-top: 0in" type="disc">
<li id="br8f1" class="MsoNormal"><span id="gy6r0"><strong id="pyx818">Refactoring      </strong></span>– constant effort to improve the system internal      structure and making it effective for recent changes to prevent system degradation and rule of chaos</li>
<li id="br8f2" class="MsoNormal"><span id="uh2c0"><strong id="pyx819">Simple      principles and rules</strong></span> (that everybody follows) help to keep consistency and      integrity of the system in time of intensive growth and modifications.</li>
<li id="br8f4" class="MsoNormal"><span id="i4rm0"><strong id="pyx820">Small independent,      single-purpose components</strong></span> – enable rich behavior with minimum number of      elements, which could participate in various and often unforeseen scenarios. Bigger      components are less reusable, more specialized and lead to more code,      complexity and duplication.</li>
<li id="br8f4" class="MsoNormal"><a href="http://softwarecreation.org/2007/evolutionary-software-architecture-or-why-developers-are-not-janitors/" style="font-weight: bold" title="Building adaptive system" id="lon8">Building adaptive system</a> using agile approach</li>
</ul>
<h3 id="jbhv7">4. Minimize Noise and Purify<br id="omaq0" /></h3>
<p><cite id="p0rn0">Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.</cite> -Antoine de Saint-Exupery</p>
<p><img src="http://softwarecreation.org/images/2008/noise.jpg" /><br id="tw.y0" /> <br id="wnlj0" /> Complexity is one of the biggest problem for the programmers brains. While good organization and representation of the system ideas help to fight it, the ultimate challenge is to avoid adding unnecessary stuff to the system.<br id="n7:a0" /> <br id="p0rn1" /> Principals for Complexity Reduction:<br id="p0rn2" /></p>
<ul id="bf-b0">
<li id="bf-b1"><span id="p0rn3"><strong id="pyx821">Increase Signal-to-Noise Ratio</strong></span> &#8211; ratio of relevant to irrelevant information in the system. Minimize noise by removing unnecessary elements and minimize the expression of necessary elements.</li>
</ul>
<ul id="bf-b2">
<li id="bf-b3"><span id="bf-b4"><strong id="pyx822">Follow 80/20 Rule (</strong><a href="http://en.wikipedia.org/wiki/Pareto_principle" title="Pareto's Principle" id="obe5"><strong id="pyx823">Pareto&#8217;s Principle</strong></a><strong id="pyx824"> )</strong></span> &#8211; a high percentage of effects in any large system are caused by a low percentage of variables. In other words, 80% of requested functionality will be used rarely or not used at all, while substantially increasing system complexity.<br id="vb9m0" /></li>
<li id="bf-b5"><span id="q03r0"><strong id="pyx825">Consider Good Enough Alternatives</strong></span> &#8211; don&#8217;t dash against the rock implementing exactly what customer asks. Slight modifications and alternatives could often cover need with less effort and complexity.<br id="awte2" /></li>
</ul>
<h3 id="jbhv8">5. System Discovery and Learning<br id="k7nz0" /></h3>
<p><cite id="ypkf3">The real voyage of discovery consists not in seeking new lands, but in seeing with new eyes.</cite> &#8211; Marcel Proust</p>
<p><img src="http://softwarecreation.org/images/2008/discovery.jpg" /><br id="j7y40" /> <br id="o-2g0" /> Learning and navigating the complex software system is a difficult task. Usually developers read code, documentation and debug the system. These methods take time and often are not efficient.<br id="ub::0" /> <br id="q:g80" /> A better way to discover the system and make it discoverable with:<br id="rvyw0" /></p>
<ul id="ufr.0">
<li id="ufr.1"><span id="ufr.2"><strong id="pyx826"> Entry Point</strong></span><span id="ydut0"><strong id="pyx827">s</strong></span> &#8211; points of attentional entry into the system. There are points in the system that doesn&#8217;t require much knowledge about the rest of the system. They could be starting points to understand other elements. For a example, UI screens or the system input / output. Other parts could start making sense and uncover their purpose in relation to these entry points. Discover these points and help newcomers to find them.</li>
<li id="ufr.3"><span id="dc7f0"><strong id="pyx828"> Progressive Disclosure</strong></span> &#8211; a strategy for managing information complexity in which only necessary information is visible at any given time. Good design and coding style allow understanding of intent and logic of the studied system area without deeply diving into boundless waters of implementation details.</li>
</ul>
<p>Code example:<br id="msj:0" /> <code id="ikca0"> Criteria criteria = Criteria.AddPriceRange(10, 100).AddDateRange(Period.LastMonth);<br id="l8j.0" /> IList orders = Database.Orders.LoadBy(criteria);<br id="n9760" /> decimal totalTaxes = orders.Sum(order =&gt; order.Tax)</code>    <br id="tglh0" /></p>
<ul id="ufr.0">
<li id="ufr.4"><span id="mg-x0"><strong id="pyx829"> Recognition over Recall</strong></span> &#8211; memory for recognizing things is better than memory for recalling things. (e.g. multiple choice questions with possible answers vs. fill-in-the-blank questions). Minimize the need to recall information from memory whenever possible. Use tools to make available options clearly visible. For example, <a href="http://msdn.microsoft.com/en-us/library/hcw1s69b%28vs.71%29.aspx" title="Visual Studio Intellisense" id="ryvo">Visual Studio Intellisense</a> and <a href="http://www.jetbrains.com/resharper/" title="Resharper" id="f2wi">Resharper</a> remove need in memorizing members, purpose and syntax of .Net library classes and methods. Build tools or extend a development environment to construct code without memorizing all details.<br id="fw6v0" /></li>
<li id="ufr.5"><span id="lpkt0"><strong id="pyx830"> Inverted pyramid</strong></span> &#8211; method of presentation in which information is presented in descending order of importance. Discover first what is most important and make it easily accessible  following by less and less important information.</li>
<li id="ufr.6"><span id="lpkt1"><strong id="pyx831"> Performance load</strong></span> &#8211; the greater the effort to accomplish a task, the less likely the task will be accomplished successfully. Most important tasks should be easy to accomplish and most valuable information should be easiest to access (including direct access to the people who has the best knowledge).<br id="z61v0" /></li>
<li id="ufr.7"><span id="lpkt2"><strong id="pyx832"> Picture superiority effect</strong></span> &#8211; pictures are remembered better than words. Use pictures and words together to reinforce the learning.</li>
<li id="ufr.8"><span id="ydut1"><strong id="pyx833"> Associations with familiar</strong></span> &#8211; link new information to already familiar concepts. Build on this knowledge by comparing and contrasting to reach deep understanding.<br id="ydut2" /></li>
<li id="ufr.8"><span id="ydut3"><strong id="pyx834">Examples</strong></span> &#8211; learning examples is always one of the best method to understand how to use the system (including best practices, how-to, and tutorials).<br id="ydut4" /></li>
</ul>
<h3 id="jbhv9">6. Mental Models</h3>
<p><cite id="ch7i0">A mental model is an explanation in someone&#8217;s thought process for how something works in the real world.</cite> &#8211; <a href="http://en.wikipedia.org/wiki/Mental_model" title="Wikipedia" id="k4sl">Wikipedia</a></p>
<p><img src="http://softwarecreation.org/images/2008/mental-models.jpg" /><br id="yd.o0" /> <br id="ch7i1" /> People understand systems and environments and interact with them by comparing the outcomes of their mental models with the system and real-world domain concepts. Good mental models bring better understanding and optimal decision making.<br id="fc_n2" /> <br id="mqqf0" /> <span id="x5tm0"><strong id="pyx835"> Schema</strong></span><span id="tt9c0"><strong id="pyx836">ta</strong></span> &#8211; networks of connected ideas or relationships that help to organize experience and information into a meaningful system. Conversation between individuals is most effective if both share common schemata. <br id="eu9j0" /> Examples:<br id="eu9j1" /></p>
<ul id="eu9j2">
<li id="eu9j3"><a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29" title="design and architecture patterns" id="fm5t">Design and architecture patterns</a> &#8211; general reusable solutions to a commonly occurring problems in software design.</li>
<li id="eu9j4"><a href="http://xp123.com/xplor/xp0004/index.shtml" title="system metaphors" id="qtkr">System metaphors</a> &#8211; a simple story of how the system works. A system metaphor provides common vision and shared vocabulary.<br id="iweu0" /></li>
<li id="eu9j4">Conventions &#8211; standard and well known approaches in architecture, design, code and user interface. They make intuitive and common sense and save mental energy for present and future developers. Custom and novel approaches should be used only if they have serious advantage.<br id="fc_n4" /></li>
</ul>
<h3 id="j:8d3">7. Shared Knowledge</h3>
<p><cite id="ypkf4">I know that you believe you understand what you think I said, but I&#8217;m not sure you realize that what you heard is not what I meant.</cite> &#8211; Robert McCloskey</p>
<p><img src="http://softwarecreation.org/images/2008/shared.jpg" /><br id="bjfn0" /> <br id="t_8r0" /> The system is rarely envisioned, built and used by the same person. A successful system is a result of people interactions &#8211; intensive ideas exchange, reconciliation of opinions and creation of mutually enhanced knowledge. It is not easy for people to properly <a href="http://softwarecreation.org/2007/software-development-is-the-flow-of-ideas-the-rest-is-secondary/" title="translate, communicate and understand" id="ta6o">translate, communicate and understand</a> each other ideas. Complex knowledge, different background and experience increase the gap that people should jump to completely understand each other.<br id="c6sz0" /> Main principles:<br id="szrf0" /></p>
<ul id="s6zq0">
<li id="s6zq1"><span id="j8y80"><a href="http://www.domaindrivendesign.org/discussion/messageboardarchive/UbiquitousLanguage.html" title="Ubiquitous language" id="c3_x"><strong id="pyx837">Ubiquitous language</strong></a></span> &#8211; the shared language that people with different perspectives use to exchange ideas about the system. The same meaning of the words is very important for understanding, but <a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-2-becoming-intelligent/" title="very difficult to achieve" id="hurk">very difficult to achieve</a>.<br id="keiw0" /></li>
<li id="s6zq2"><span id="j8y81"><strong id="pyx838"> Clear goals and intention</strong></span> &#8211; help to align people thinking and actions, and avoid wasteful effort caused by misunderstanding or confusion.<br id="tl400" /></li>
<li id="s6zq4"><span id="j8y82"><strong id="pyx839">Express business domain concepts in the code</strong></span> &#8211; represent business concepts in the code. Developers will better understand domain, synchronize implementation with customer ideas and align the system with relevant business concepts. As a result, the system can effectively grow with the refinement and expansion of business needs.<br id="wz6o0" /></li>
<li id="s6zq5"><span id="j8y83"><strong id="pyx840">Code readability</strong></span> &#8211; good naming and readable code enables better understanding by fellow programmers, reduce chances of errors and lead to correct future modifications.<br id="rsgb0" /></li>
<li id="s6zq6"><span id="j8y84"><strong id="pyx841">Shared mental models</strong></span> &#8211; frequent face-to-face discussions, pair programming and direct conversations with customers bring shared understanding, effective exchange of knowledge and most optimal solutions.<br id="mb.v0" /></li>
</ul>
<p><img src="http://softwarecreation.org/images/2008/software-knowledge.jpg" /></p>
<p>Evolution didn&#8217;t consider adaptation of human brains for software development. But our brains is the most important tool for programming. You cannot change brains (and human nature), so make software development compatible with them. Build effective software systems.<br id="zy4m1" /> <br id="pp8j" /> <span id="s6zq9"><strong id="pyx842">Resources:</strong></span><br />
<a href="http://softwarecreation.org/2008/the-programmers-brains-at-work-understanding-the-software-system/">The Programmer&#8217;s Brains At Work: Understanding The Software System</a><br />
<a href="http://www.amazon.com/gp/product/1592530079/104-3570359-3820730?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1592530079" title="Universal Principles of Design" id="zgk1">Universal Principles of Design</a>, William Lidwell , Kritina Holden, Jill Butler</p>
<!-- Social Buttons Shared Counts Generated by Digg Digg plugin v4.0.9, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ --><img src="http://softwarecreation.org/?ak_action=api_record_view&id=62&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/the-secret-of-building-effective-software-systems/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
