<?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; Job</title>
	<atom:link href="http://softwarecreation.org/category/job/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: 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. The Effective Way.</title>
		<link>http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/</link>
		<comments>http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 22:09:28 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Expertise]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/</guid>
		<description><![CDATA[Shareexperts are made, not born &#8211; Scientific American
  Disclaimer: This post is devoted to a person who wants to become an expert &#8211; the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to [...]]]></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-the-effective-way/&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-the-effective-way/' 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-the-effective-way/'></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-the-effective-way/'></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-the-effective-way/&amp;title=How+to+Become+an+Expert.+The+Effective+Way.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><em>experts are made, not born &#8211; </em><a href="http://www.sciam.com/article.cfm?id=the-expert-mind" id="vu87" title="Scientific American">Scientific American</a></p>
<p><small>  <strong>Disclaimer:</strong> This post is devoted to a person who wants to become an expert &#8211; the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to be the best. </small></p>
<p><img src="http://softwarecreation.org/images/2009/kasparov.jpg" /></p>
<p>If you want to become an expert, it is not enough to follow your work assignments or occasionally play with interesting stuff at home. You have to push yourself hard in specially designed way.</p>
<p><strong>@Work</strong><br />
Your paid work tasks and projects are not designed to make you an expert. Your company expects results from your work: reliable, with minimal mistakes and focused on the company main goal &#8211; make money. Your employer could provide minimal training to help you with job requirements. However, your growth will be constrained by company needs, timelines, work assignments and acceptable methods. We cannot blame our organizations &#8211; this is part of the deal &#8211; they pay for your work and expect specific results. But&#8230; is this the best way for you to become an expert, acquire new skills and gain knowledge? To become an expert, you have to make many mistakes, learn from them, experiment with alternatives and work hard on your weaknesses. How many organizations do allow this risky, unproductive and unreliable way of working?</p>
<p><strong>@Home</strong><br />
Your play at home with interesting stuff has problems too. To satisfy your programming instincts and curiosity, you will probably select what you enjoy to do and eager to try. You&#8217;ll immense in this activity and find great satisfaction from doing it. But&#8230;  is this the best way to become an expert by doing only what you like? Becoming an expert requires hard, sometimes unpleasant work, specifically designed to improve your performance and push you over comfort zone. <span id="more-81"></span></p>
<h3><strong>Genesis of an expert</strong></h3>
<p><img src="http://softwarecreation.org/images/2009/kasparovyoung.jpg" /></p>
<p>Research shows that experts <a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf">do not have more innate talent</a>, but put more effort and dedication. Newcomers to the field <a href="http://www.time.com/time/health/article/0,8599,1717927,00.html" id="ipzg">need at least 10 years</a> to become an expert. They move through <a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition" title="several stages" id="ur5d">several stages</a>: from a novice, who blindly follows rules, to an expert, who does not need rules.<br />
Most people will stop on the level of competent specialist acceptable for the majority of jobs in the field. Only few will continue pushing forward to achieve the top level.</p>
<blockquote><p>  <em>We agree that expert performance is qualitatively different from normal performance and even that expert performers have characteristics and abilities that are qualitatively different from or at least outside the range of those of normal adults. However, we deny that these differences are immutable, that is, due to innate talent. Only a few exceptions, most notably height, are genetically prescribed. Instead, we argue that 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></blockquote>
<blockquote><p>  <em>Even the novice engages in effortful study at first, which is why beginners so often improve rapidly in playing golf, say, or in driving a car. But having reached an acceptable performance&#8211;for instance, keeping up with one&#8217;s golf buddies or passing a driver&#8217;s exam&#8211;most people relax. Their performance then becomes automatic and therefore impervious to further improvement. In contrast, experts-in-training keep the lid of their mind&#8217;s box open all the time, so that they can inspect, criticize and augment its contents and thereby approach the standard set by leaders in their fields. </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></blockquote>
<p>Kathy Sierra <a href="http://headrush.typepad.com/creating_passionate_users/2006/03/how_to_be_an_ex.html" id="rwk5" title="wrote">wrote</a> that you, to become an expert who kicks ass, should keep reminding: <em>&#8220;I&#8217;ll keep pushing myself. There&#8217;s always some way to do it better&#8230;&#8221;</em>. How should we push ourselves?</p>
<p>If you do same tasks over and over again, you will not become an expert. If you do what you are good at, you will not improve your overall performance. You should focus on improving skills beyond your present competence. <strong>Outcome of your practice as not as important as developing your capabilities.</strong><br />
You can spend years doing your favorite activities and still stay at amateur level while dedicated novice can quickly leave you behind. <strong>Practice should concentrate around your weaknesses</strong> and areas that are important, but you probably try to avoid. You should repeatedly progress to the higher level through persistent training and overcome your limits.</p>
<p>Anders Ericsson (his research is the most influential in this area) calls this approach <strong>deliberate practice</strong>:</p>
<blockquote><p> &#8220;Deliberate practice is different. It entails considerable, specific, and sustained efforts to do something you can&#8217;t do well-or even at all. Research across domains shows that it is only by working at what you can&#8217;t do that you turn into the expert you want to become.&#8221;</p></blockquote>
<h3>  <strong>Design your practice</strong></h3>
<p><img src="http://softwarecreation.org/images/2009/kasparov1.jpg" /></p>
<p>Follow 7 steps</p>
<p><strong>1. Who is an expert?</strong><br />
You should understand what is the profile of an expert that you want to be &#8211; required capabilities, knowledge, areas of expertise and types of the problems experts work on.<br />
Have a beer with guru and ask for opinion (early enough), study job advertisements for high skilled positions (don&#8217;t be carried away), read about top players &#8211; why they are considered experts, what makes them special (skip part how they spend money) and how they achieved top level.<br />
<strong><br />
2. Find your gaps and weaknesses.</strong><br />
You can identify areas which require improvement once you know the profile of the ideal expert. Put them on the list and assign importance.</p>
<p><strong>3. Build roadmap.</strong><br />
Answer the questions: in what order you want to work on these areas and what are the major steps.<br />
Instead of focusing for a long time on one area, I would recommend to go in spiral &#8211; learn and practice various areas in parallel. Each spiral cycle should add to your experience small, but integral chunk of core expertise. Often developing diverse skills together brings synergy &#8211; deeper perspective, holistic view and increased capabilities for wider range of tasks.</p>
<p><strong>4. Design practice to improve performance </strong><br />
Set specific goals and methods &#8211; how do you improve performance, gain skills and knowledge for each area.<br />
Consider famous <a href="http://en.wikipedia.org/wiki/SMART_%28project_management%29" id="mkny" title="SMART goals">SMART goals</a> for practice: specific, measurable, achievable, relevant, time-boxed. Coach, who can effectively guide you, is very helpful on this stage. However, you can go alone if you are motivated and disciplined enough.<br />
Don&#8217;t burn yourself too much &#8211; your mind and body should be ready and eager to practice. Give yourself time for recovery, life and other favorite activities, otherwise you&#8217;ll soon hate your practice.</p>
<p><strong>5. Everyday practice on the edge of capabilities &#8211; at least 30 minutes</strong><br />
Deliberate practice is highly demanding and requires intensive concentration and focus. The practice should be scheduled, clear and focused &#8211; don&#8217;t give yourself chances to procrastinate. Concentrate on the excellence of execution &#8211; sloppy practice is not acceptable for top players. You should practice challenging tasks on the edge of your capabilities. Compare playing basketball with professional players or beginner kids from the neighborhood. Who will push you more and show how good you are?<br />
Observe and understand how and what you do &#8211; this process will develop intuition and patterns in your brains for future fast automatic decision making. Train yourself to think and act on the higher level &#8211; what is difficult for other people, should be trivial for you.</p>
<p><strong>6. Feedback</strong><br />
Constant feedback loop is the must in deliberate practice. Correct assessment of performance and results with following adjustment of practice will move you much faster. And certainly, interested and qualified coach capable of giving constructive and painful feedback is very important. Each day of practice should move you forward against higher and higher standards.</p>
<p><strong>7. Correct your roadmap and practice.</strong><br />
Feedback, self-evaluation and practical use of your skills will tell if you are on the right track. Be fluid and open for change of direction, new knowledge and unexpected opportunities. Learn and adjust goals, plans and methods on the go. As Eisenhower said: plans are nothing, planning is everything. Your rise as an expert will open for you new horizons that definitely change your plans and original intentions.</p>
<p>Additional Requirements</p>
<ul>
<li> <strong>Discipline, motivation, unsatisfaction</strong> &#8211; top experts are extremely dedicated, disciplined and motivated to grow and improve performance. Without the goal of improving performance, the motivation to engage in practice vanishes, and practice becomes boring routine.</li>
<li> <strong>Support</strong> &#8211; you&#8217;ll have ups and downs, moments of despair and disbelief. You need somebody who can understand, compassionate and encourage &#8211; friends, family, colleagues or a coach.</li>
</ul>
<h3>Deliberate practice in context</h3>
<p><img src="http://softwarecreation.org/images/2009/karpov-kasparov1987.jpg" /></p>
<p><strong>Practice @Work</strong><br />
Deliberate practice methods and work objectives are different. However, it is possible to grow as an expert and work productively.</p>
<ul>
<li> First, your company could have work in target areas of your expertise growth. Position yourself to take advantage of any opportunity to move there.</li>
<li> Second, any company will benefit from motivated and competent player, who wants to grow his capabilities. A smart company will support and encourage your drive&#8230; and use for own benefits.</li>
</ul>
<p>Strategy:</p>
<ol>
<li>  <strong>Job intelligence</strong> &#8211; what are opportunities, potential projects and tasks to assist with your progress as an expert? How can your help your company while upgrading your skills? Invent new opportunities. You have to build case for your advance and show benefits for the company.</li>
<li>  <strong>Call for the job redesign</strong> &#8211; many companies will be flexible for people who wants to progress and contribute more (if no, maybe you are in the wrong place)</li>
<li>  <strong>Productive work and intensive practice</strong> &#8211; work in the best way to help with your goals, but don&#8217;t make a company victim of your practice. Separate prototyping and experiments from production work. Make them open, controllable with a clear statement of benefits. Seek for challenging assignments on the edge of your capabilities.</li>
<li>  <strong>Tap into company pool of talents, expertise and knowledge</strong> &#8211; this is free (actually paid) opportunity to use coaching and valuable resources for growth acceleration. Ask for advises, guidance and feedback.</li>
</ol>
<p>You will find, as your star is rising (expertise growing), that you have more freedom to work in areas that have the most interest for you.</p>
<p><strong>Practice @Home, @Train or @Cafe</strong><br />
This is time for</p>
<ul>
<li>  research, learning, thinking</li>
<li>  crazy experiments</li>
<li>  irrelevant to your work practice</li>
<li>  practice that need special focus, time and conditions, difficult to achieve at work</li>
</ul>
<p><strong>Formal training</strong><br />
Qualified and relevant training can move you much faster. If you decide to invest in education be very specific what you expect and make sure that you&#8217;ll not waste your time.</p>
<p><strong>Sample Road to become Web Development Expert<br />
</strong>You can identify few key areas<strong>:<br />
</strong></p>
<ul>
<li>HTML / CSS</li>
<li>Graphic Design / Art</li>
<li>Usability / Aesthetics</li>
<li>Information Architecture</li>
<li>Client &#8211; side programming / javascript / AJAX</li>
<li>RIA (e.g. Silverlight / Flash)</li>
<li>Server &#8211; side programming and databases</li>
</ul>
<p>And design practice for each of them, for example:</p>
<table border="1" cellpadding="3" cellspacing="0">
<tr>
<td><strong>Area</strong></td>
<td><strong>Strategic Importance<br />
(or why I need this)</strong></td>
<td><strong>Expertise Gaps</strong></td>
<td><strong>Practice / Learning Goals</strong></td>
<td><strong>Actions</strong></td>
</tr>
<tr>
<td>HTML/CSS</td>
<td>core for building web sites</td>
<td>lack of experience with advanced css and layouts</td>
<td>master css, be comfortable with building any complex layouts</td>
<td>phase 1:<br />
<strong>@work</strong>:</p>
<ul>
<li>build myself CSS for assignments at work</li>
<li>seek guidance of senior web designer</li>
<li>learn company&#8217;s best practices</li>
</ul>
<p><strong>@home</strong>:</p>
<ul>
<li>learn advanced online css guides</li>
<li>read CSS Mastery book</li>
<li>absorb leading composition styles</li>
<li>dissect <a href="http://www.csszengarden.com/" title="CSS Zen Garden" id="df5.">CSS Zen Garden</a> designs</li>
<li>find interesting designs and build complex CSS layouts for them, make them better</li>
</ul>
</td>
</tr>
</table>
<h3><strong>Experts: Executive Summary</strong></h3>
<p>Experts are essential for the company/team competitive advantage. They <a href="http://softwarecreation.org/2008/ideas-in-software-development-revolution-vs-evolution-part-1" title="enable revolutions and support evolution" id="fu6g">enable revolutions and support evolution</a>.</p>
<p>Experts are made, not born.<strong> Experts are made by themselves.</strong> It is a long, thorny and hard road. But this road makes their life interesting, positive, meaningful and brings <a href="http://softwarecreation.org/2008/the-happiness-programmers-edition/" title="happiness" id="r8q4">happiness</a> from achieving a rare gift &#8211; mastery in the field they love.</p>
<p>Albert Camus said: <strong id="wn530">But what is happiness except the simple harmony between a man and the life he leads?</strong></p>
<p>For few people the harmony is a journey to become The Master.</p>
<p><img src="http://softwarecreation.org/images/2009/kasparov-happy.jpg" /></p>
<p><strong>Resources:</strong><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://headrush.typepad.com/creating_passionate_users/2006/03/how_to_be_an_ex.html" title="How to be an expert">How to be an expert</a> , Kathy Sierra<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=81&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2009/how-to-become-an-expert-the-effective-way/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>The Elements of Pragmatic Programming Style. Intention.</title>
		<link>http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/</link>
		<comments>http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 05:36:26 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/</guid>
		<description><![CDATA[Share&#8220;I made this program longer than usual because I lack the time to make it shorter.&#8221; &#8211; paraphrasing Blaise Pascal

The Elements of Pragmatic Programming Style is the collection of rules for pragmatic programmers. This collection doesn&#8217;t pretend to be comprehensive guide how to program. Rather it concentrates on fundamentals: how any programmer can build better [...]]]></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-elements-of-pragmatic-programming-style-intention/&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-elements-of-pragmatic-programming-style-intention/' 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-elements-of-pragmatic-programming-style-intention/'></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-elements-of-pragmatic-programming-style-intention/'></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-elements-of-pragmatic-programming-style-intention/&amp;title=The+Elements+of+Pragmatic+Programming+Style.+Intention.&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><cite>&#8220;I made this program longer than usual because I lack the time to make it shorter.&#8221;</cite> &#8211; paraphrasing Blaise Pascal</p>
<p><img src="http://softwarecreation.org/images/2008/pascal.gif" /></p>
<p>The Elements of Pragmatic Programming Style is the collection of rules for pragmatic programmers. This collection doesn&#8217;t pretend to be comprehensive guide how to program. Rather it concentrates on fundamentals: how any programmer can build better software for the customer. Some of the rules are obvious, but, surprisingly, many programmers don&#8217;t even think about them. They make same mistakes over and over again. I hope this post will inject a healthy dose of pragmatism into your programming style and make it a bit better .</p>
<p>Style Components:</p>
<ul>
<li><strong>Intention </strong>- understand your task and how to get it done</li>
<li><strong><a href="http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-approach">Approach</a> </strong>- basic principles of writing code</li>
<li><strong><a href="http://softwarecreation.org/2009/the-elements-of-pragmatic-programming-style-composition/">Composition</a> </strong>- organization of code</li>
<li><strong>Expression </strong>- expressing ideas in code</li>
<li><strong>Object Oriented Pragmatic Style</strong></li>
</ul>
<p>The goals of Pragmatic Programming Style are</p>
<ol>
<li>Building reliable software fast.</li>
<li>Delivering maximum value for the customer.</li>
<li>Writing code that is easy to understand, change and share.</li>
</ol>
<h3><strong>Intention</strong></h3>
<p><cite id="ypkf4"></cite><em>&#8220;Everyone hears only what he understands.&#8221;</em> &#8211; Johann Wolfgang von Goethe</p>
<p>Understand your task and how to get it done</p>
<p><img src="http://softwarecreation.org/images/2008/thinker.jpg" /><br />
<a href="http://flickr.com/photos/sidereal/349496270/" class="photocredit">Sidereal</a><br />
<span id="more-76"></span></p>
<p><strong>1. Know your programming task beforehand.</strong></p>
<p>Understand clearly your programming task before start. You will be focused, productive and efficient if you know exactly what to do. Vague tasks breed confusion, indecision and sluggishness. Misunderstanding leads to wrong code, dissatisfaction and conflicts. <em>Therefore, ask questions, listen and pursue until you have good enough understanding of the task and your customer needs.</em> Sometimes, of course, even your customer does not clearly understand what she wants. Most probably you&#8217;ll discover together what is needed on the go. And still, effort to understand your task beforehand will increase satisfaction and efficiency.</p>
<p>Don&#8217;t overuse this rule &#8211; first practical results in the first weeks will do more for understanding than months of conversations and drawing diagrams.</p>
<p><strong>2. Understand what is important.</strong></p>
<p>You have to make many decision on your own while programming. Customers cannot always prompt what options are better or how to overcome technical hurdles. They will rely on your technical expertise and common sense. <em>Therefore, understand what is important to make the best decisions for the customer. </em>For example, customers can be interested in easy to learn and responsive user interface. Or they can be interested in minimal cost and time. Or they can ask for highly secure solution. Better you know what is important, better decisions you will make.</p>
<p><strong>3. Think how to implement task before programming.</strong></p>
<p>Think how to implement your task before writing the first line of code. Many adventurous programmers don&#8217;t like to think ahead and prefer to immediately dive into programming. Often they find themselves lost in programming jungles with sad choice to continue struggle until code is a complete mess or start over again. <em>Don&#8217;t be lost. Think ahead about how you will implement your task, what is missing and what is not clear.</em> Use search, read help and ask other programmers. Quick sketches and notes on the paper will summon up your thoughts to find better solution.</p>
<p><strong>4. Define when task is &#8216;DONE&#8217;.</strong></p>
<p>You should know when your task is done, be it user interface, algorithm or database code. Sometimes, the programmer thinks that task is done without careful testing and consideration of alternative cases. Sometimes the programmer spends huge effort on polishing already good enough solution. Unfinished code or wasted time are both bad for your customer. <em>Therefore, know when your task is &#8216;DONE&#8217; and when you should stop.</em></p>
<p><strong>5. Share your ideas with your team</strong></p>
<p>Discuss your ideas with your fellow programmers. Even the smartest programmer will benefit from explaining her ideas to a team. Other programmers can help to find flaws, challenge ideas or suggest a better way. In addition, they will learn how you solve problems, gain better experience and knowledge about the system. <em>Therefore, don&#8217;t conceal your ideas, but share and improve them with your team.</em> Learn and grow together.</p>
<p><strong>6. Communicate required effort, risks and alternatives.</strong></p>
<p><span style="font-weight: normal">Inform your customer about required effort, risks, possible alternatives for the task. The customer will appreciate honest and full information before you spend time on programming. Yes, the customer could cancel some requests or select cheaper alternative if effort seems too large. But your customer will have comfortable and powerful feeling (that is so fragile) of control over the project that brings trust and desire to cooperate. <em>See your customer rather as a long-term partner than a quick source of revenue. </em>It will pay with more satisfaction from work, better reputation and more customers.</span></p>
<p><strong>7. Plan steps to get strength to start</strong></p>
<p><em>&#8220;The first and the best victory is to conquer self.&#8221;</em> &#8211; Plato</p>
<p><span style="font-weight: normal">You can be the biggest obstacle to get the task done &#8211; your procrastination, your indecision and your unproductive mood. Try to plan your steps, once you have clear ideas what should be done. Plan how these steps will fit into your working schedule, a release cycle and the customer availability for questions and feedback.<em> Create concrete actions &#8211; more detailed for more complex parts. Visualize your steps to assure yourself that your task can be accomplished. </em></span>While it is possible that your plan will be useless, it will provide <span style="font-weight: normal">confidence and energy to embrace the most challenging tasks.</span></p>
<p><span style="font-weight: normal">Now you are ready to start programming.</span></p>
<p>Next posts will bring rules and examples for Approach, Composition, Expression and Object Oriented Pragmatic style.</p>
<p><strong>Inspiring reference:</strong> <em>The Elements of Style</em>, W. Strunk Jr. and E.B. White</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=76&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/the-elements-of-pragmatic-programming-style-intention/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Top 5 non-traditional traits for survival of in-house programmers</title>
		<link>http://softwarecreation.org/2008/top-5-non-traditional-traits-for-survival-of-in-house-programmers/</link>
		<comments>http://softwarecreation.org/2008/top-5-non-traditional-traits-for-survival-of-in-house-programmers/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 04:17:01 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/top-5-non-traditional-traits-for-survival-of-in-house-programmers/</guid>
		<description><![CDATA[Share
Can in-house software programmers become extinct?
Companies spend millions dollars  on in-house software development. There is no easy escape for business &#8211; they must use software in today world. Companies need in-house programmers for specific for their businesses applications and pay hefty ransom. But will it continue forever? Companies are not happy. And there are few trends that can [...]]]></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/top-5-non-traditional-traits-for-survival-of-in-house-programmers/&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/top-5-non-traditional-traits-for-survival-of-in-house-programmers/' 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/top-5-non-traditional-traits-for-survival-of-in-house-programmers/'></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/top-5-non-traditional-traits-for-survival-of-in-house-programmers/'></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/top-5-non-traditional-traits-for-survival-of-in-house-programmers/&amp;title=Top+5+non-traditional+traits+for+survival+of+in-house+programmers&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><h1><img src="http://softwarecreation.org/images/2008/extinction.jpg" title="undefined" alt="undefined" style="width: 400px; height: 350px" width="400" height="350" /></h1>
<p>Can in-house software programmers become extinct?</p>
<p>Companies <a href="http://www.infoworld.com/article/08/08/14/Analyst_Inhouse_app_development_fraught_with_waste_1.html" title="spend millions dollars">spend millions dollars</a>  on in-house software development. There is no easy escape for business &#8211; they must use software in today world. Companies need in-house programmers for specific for their businesses applications and pay hefty ransom. But will it continue forever? Companies <a href="http://www.infoworld.com/news/feeds/08/07/23/Faulty-complex-in-house-software-costs-companies--says-IDC.html" id="mzsr" title="are not happy">are not happy</a>. And there are few trends that can put in danger a large population of in-house programmers:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">customizable commercial and open-source software for conventional needs as accounting, CRM, CMS, etc.</li>
<li style="margin-top: 0px; margin-bottom: 0px"><a href="http://www.computereconomics.com/article.cfm?id=1265" title="outsourcing">outsourcing</a>  to specialized consulting software companies</li>
<li style="margin-top: 0px; margin-bottom: 0px">growth of <a href="http://www.intentsoft.com/" id="xh4." title="domain specific languages and workbenches">domain specific languages and workbenches</a>  that allow business experts to build software.</li>
<li style="margin-top: 0px; margin-bottom: 0px">development of <a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-2-becoming-intelligent/" id="aqn9" title="AI that can replace programmers" style="color: #551a8b">AI that can replace programmers</a>, e.g. neural networks, expert systems, evolutionary computation.</li>
</ul>
<p><span class="Apple-style-span" style="font-weight: bold">Thought experiment</span></p>
<p style="margin: 0px"> <img src="http://softwarecreation.org/images/2008/programming-machine.jpg" /></p>
<p>Lets imagine the worst scenario. Suppose the dark day came &#8211; somebody invented a machine that can program. Non-programmers can use the machine for building software for their business needs. Technical knowledge and programming skills are no longer needed &#8211; just tell machine what you want and get a software program. Will it be the end of in-house programmer&#8217;s era?        <span id="more-74"></span></p>
<h4>What does business care about?</h4>
<p style="margin: 0px">&nbsp;</p>
<p style="margin: 0px"><img src="http://softwarecreation.org/images/2008/business-cares.jpg" onmouseout="undefined" onmouseover="undefined" title="undefined" /></p>
<p>The present programmers value for business is mostly in knowing what business don&#8217;t care about, but cannot avoid because of technical complexity and large amount of specialized expertise involved. But can programmers help with what business cares about? Can they offer something beyond technical expertise? Can they become key players for business?</p>
<h3>Top 5 non-traditional, but essential aptitudes for complex business world</h3>
<h4><strong>1. Meaning</strong></h4>
<p>Communication with people is not easy. We have different backgrounds, knowledge, ways to think and present information. The major part of our knowledge is stored on the subconscious level, which is not easy to access, describe with words and share with other people. And often this is one of the biggest challenges in software development &#8211; correctly understand meaning of what people need. In many cases, customers don&#8217;t have clear understanding even themselves. Good solutions for complex and wicked problems are only possible with clear understanding of these problems. Programmers and customers can together define problems, explore needs and overcome gaps in understanding.</p>
<p>Business will need programmers who help to discover meaning &#8211; true needs and real problems that should be solved by computers.</p>
<p>Components:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">communication and presentation skills</li>
<li style="margin-top: 0px; margin-bottom: 0px">understanding business lexicon and domain concepts</li>
<li style="margin-top: 0px; margin-bottom: 0px">listening and desire to find out what customers need</li>
<li style="margin-top: 0px; margin-bottom: 0px">ability to comprehend complex problems</li>
</ul>
<h4><strong>2. Logic</strong></h4>
<p>Logical, rational and analytical mind is necessary for solving complex problems. Left brain is probably the most important part of a programmer&#8217;s body (at least for work). It could be used not only for programming, but also for resolving customer needs. Programmers should be able to convert complex business needs into clear, logical and consistent models and processes. They can remove contradictions, vagueness and gaps in the logic and concepts behind the system.</p>
<p>Business will need programmers who can come up with straight and logical ideas for solving complex twisted problems.</p>
<p>Components:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">logic</li>
<li style="margin-top: 0px; margin-bottom: 0px">analysis</li>
<li style="margin-top: 0px; margin-bottom: 0px">problem solving</li>
</ul>
<h4><strong>3. Design</strong></h4>
<p>Software for people should be convenient, easy-to-use and simple. Good programmers understand how <a href="http://softwarecreation.org/people/" id="rjz6" title="human mind works" style="color: #551a8b">human mind works</a>, the value of simplicity and beauty. They can strike the balance between functionality, usability and quality of the system. They understand what is important or can be left out. They could make software users productive, successful and happy.</p>
<p>Business will need programmers who can come up with friendly, elegant and simple software designs that empower people.</p>
<p>Components:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">creativity</li>
<li style="margin-top: 0px; margin-bottom: 0px">usability</li>
<li style="margin-top: 0px; margin-bottom: 0px">appreciation of simplictiy</li>
<li style="margin-top: 0px; margin-bottom: 0px">aesthetics</li>
</ul>
<h4><strong>4. Empathy</strong></h4>
<p>People are more comfortable with other people than with machines. Programmers could connect, share feelings and support human customers in the process of creating a software system. They can work in playful way, motivate and open mind. They can engage customers, become good partners and merge into powerful motivated team for tackling any challenges.</p>
<p>Business will need programmers who can make them comfortable, open minded and fully engaged in building software.</p>
<p>Components:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">psychology</li>
<li style="margin-top: 0px; margin-bottom: 0px">care about others</li>
<li style="margin-top: 0px; margin-bottom: 0px"><a href="http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/" id="ondg" title="appreciating difference">appreciating difference</a>  in <a href="http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/" id="bc78" title="personalities">personalities</a> and approaches</li>
<li style="margin-top: 0px; margin-bottom: 0px">cooperation and teamwork</li>
</ul>
<h4><strong>5. Big picture</strong></h4>
<p>The complexity of today world and huge amount of information overwhelm our brains. Many people are becoming narrow specialists who loose sight beyond the realm of their small professional world and job responsibilities. But good solutions require understanding of complex systems as a whole, how they fit into company business and outside world. Good programmers can understand this big picture, core concepts and relations. They know what is important, possible and makes sense.</p>
<p>Business will need programmers who can comprehend big picture, have intellectual control over complex systems and offer intelligent solutions.</p>
<p>Components:</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px"><a href="http://softwarecreation.org/2007/11-laws-of-the-system-thinking-in-software-development/">system thinking</a></li>
<li style="margin-top: 0px; margin-bottom: 0px">understanding what really matters and what are limitations</li>
<li style="margin-top: 0px; margin-bottom: 0px">broad vision and out-of-the box thinking</li>
<li style="margin-top: 0px; margin-bottom: 0px">knowledge of environment, context and system outside relations</li>
<li style="margin-top: 0px; margin-bottom: 0px">synthesis of concepts, information and experience</li>
</ul>
<h3>The New Programmer</h3>
<p>Present programmer&#8217;s strategy for survival is</p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">intensively learn new technologies</li>
<li style="margin-top: 0px; margin-bottom: 0px">push business for using them</li>
<li style="margin-top: 0px; margin-bottom: 0px">as a result make system more complex and business more dependent.</li>
</ul>
<p>It works well now. Probably, developing 5 non-traditional non-technical aptitudes seems laughable, naive and wasteful. But this is the way to survive. Programmers should become key players for business. They should be involved in what business cares about.</p>
<p><strong>Three forces make this strategy viable:</strong></p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">new trends (see the beginning of the post) will make pure technical skills less important</li>
<li style="margin-top: 0px; margin-bottom: 0px">Agile development successfully offers a way to build software in a direct contact with a customer without an army of PM, BA, architects and consultants</li>
<li style="margin-top: 0px; margin-bottom: 0px">companies face more complex problems and tough competition; they need infusion of smart, logical and creative brains (programmers are premium source of this kind of brains)</li>
</ul>
<p><img src="http://softwarecreation.org/images/2008/5aptitudes.jpg" onmouseout="undefined" onmouseover="undefined" title="undefined" /> <strong>Key Points:</strong></p>
<ul style="margin-top: 0px; margin-bottom: 0px">
<li style="margin-top: 0px; margin-bottom: 0px">Learn how to talk with business and understand their problems</li>
<li style="margin-top: 0px; margin-bottom: 0px">Learn how to create practical and usable solutions in the business best interests</li>
<li style="margin-top: 0px; margin-bottom: 0px">Learn how to see out of your box, project and profession.</li>
</ul>
<p>You can be more than a trivial technical programmer. Think about strengthening your positions as The New Programmer who mastered Meaning, Logic, Design, Empathy and Big Picture aptitudes.</p>
<p>Resources:</p>
<p><a href="http://www.amazon.com/gp/product/1594481717?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594481717" target="_blank"><span class="title">A Whole New Mind: Why Right-Brainers Will Rule the Future</span></a>, Daniel H. Pink</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=74&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/top-5-non-traditional-traits-for-survival-of-in-house-programmers/feed/</wfw:commentRss>
		<slash:comments>1</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>Top 10 Qualities of The Perfect Programmer</title>
		<link>http://softwarecreation.org/2008/top-10-qualities-of-the-perfect-programmer/</link>
		<comments>http://softwarecreation.org/2008/top-10-qualities-of-the-perfect-programmer/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 03:22:55 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/top-10-qualities-of-the-perfect-programmer/</guid>
		<description><![CDATA[Share
Who are the perfect programmers? Popular blogger Alex Iskold answers in  Top 10 Traits of a Rockstar Software Engineer:

Loves To Code
Gets Things Done
Continuously Refactors Code
Uses Design Patterns
Writes Tests
Leverages Existing Code
Focuses on Usability
Writes Maintainable Code
Can Code in Any Language
Knows Basic Computer Science

It is a solid list, but this list concentrates on the secondary traits, which [...]]]></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/top-10-qualities-of-the-perfect-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/top-10-qualities-of-the-perfect-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/top-10-qualities-of-the-perfect-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/top-10-qualities-of-the-perfect-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/top-10-qualities-of-the-perfect-programmer/&amp;title=Top+10+Qualities+of+The+Perfect+Programmer&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/mr-olympia.jpg" /></p>
<p>Who are the perfect programmers? <br id="vpcx" /><br id="yn-y" />Popular blogger Alex Iskold answers in  <a href="http://alexiskold.wordpress.com/2008/04/08/top-10-traits-of-a-rockstar-software-engineer/" title="Top 10 Traits of a Rockstar Software Engineer" id="x4qy">Top 10 Traits of a Rockstar Software Engineer</a>:<br id="seko" /></p>
<ol id="pe4t">
<li id="as65">Loves To Code</li>
<li id="gapf">Gets Things Done</li>
<li id="v9vp">Continuously Refactors Code</li>
<li id="w5zq">Uses Design Patterns</li>
<li id="bbvo">Writes Tests</li>
<li id="o4sf">Leverages Existing Code</li>
<li id="vjpc">Focuses on Usability</li>
<li id="n42t">Writes Maintainable Code</li>
<li id="tp4h">Can Code in Any Language</li>
<li id="p2ph">Knows Basic Computer Science</li>
</ol>
<p><br id="w085" />It is a solid list, but this list concentrates on the secondary traits, which are just consequences of the deeper set of qualities. And it is an idealistic list. Do you expect the same qualities from a Flash programmer for kids websites and a software engineer for B2B financial transaction services? But how can we recognize a perfect programmer in the crowd of developers?<br id="v86d" /><br id="bt_s" /><span id="wvob"><span id="cqws"><em id="bezz">The Ultimate Criteria for finding The Perfect Programmer:</em></span><strong id="nwn3"> The perfect programmer delivers good software that meets client&#8217;s expectations.</strong></span><br id="apen" /><br id="sm-3" />Therefore, the shocking truth is that perfect programmers could know only one programming language, don&#8217;t have any idea what are design patterns and don&#8217;t program all nights in their basements creating the next Google. We cannot objectively measure the programmers perfection like you could measure diameter of your biceps. The perfect programmers are simply perfect if they deliver a quality, usable and maintainable software system [a good system] in time and meet client needs.</p>
<p><span id="more-61"></span><br id="gpeb" /><strong>Corollaries:</strong></p>
<p><br id="fkl2" />1. <span id="u.n1"><em id="bdab">A perfect programmer should match a client&#8217;s problem or grow to match it within reasonable time</em></span>. All programmer&#8217;s qualities are relative to the client&#8217;s problem and context: <br id="o518" /></p>
<ul id="pv4q">
<li id="bt1i">some problems need creativity, some &#8211; detail orientation</li>
<li id="f75h">some problems need mostly technical expertise, some &#8211; deep business knowledge</li>
<li id="fb2o">some problems need thorough analytical mind, some social skills and intuition<br id="th_y" /></li>
</ul>
<p>2. <span id="y_3o"><em id="qgdk">A perfect programmer</em></span><span id="fs83"><em id="ziu8"> should understand what is &#8220;done&#8221; and care about quality</em></span>. Meaning of &#8220;Done&#8221; for the software system includes more than finishing writing code. A perfect programmer will do all the necessary steps to deliver the system: test, clean code to keep it minimal, effective and readable, make system usable and ensure that client and users like the system.<br id="npwo" /></p>
<h3 id="rluk">Top 10 qualities of The Perfect Programmer</h3>
<p>Every quality of a perfect programmer has a range depending on the specific problem and context. There is no absolutely perfect programmer for all the problems (at least on this planet). And the perfect programmer for particular problem should have<br id="w.y3" /><br id="z61a" /></p>
<ol id="xezk">
<li id="tekr"><span id="mqy0"><strong id="lids">Intellect</strong></span>- can understand the problem, translate and express ideas in clear and readable code, has analytical and logical mind (range: building programs for narrow well defined requests to conquering freaking complex problems in elegant way)<br id="omo6" /></li>
<li id="q97q"><span id="jqag"><strong id="v:3w"><a href="http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/" title="Personality" id="uobf">Personality</a> </strong></span>- has right mixture of personal traits (detail-oriented vs. creative, flexible vs. disciplined, sociable vs. independent)<br id="d30j" /></li>
<li id="pkt."><span id="kjad"><strong id="vvrz">Expertise </strong></span>- knowledge and experience for solving client&#8217;s problems in the specific context with chosen technologies (range: a specialist in one technology to a veteran programmer with broad experience in different domains and platforms)<br id="pbnj" /></li>
<li id="pkt."><span id="pcb4"><strong id="f:78">Motivation </strong></span>- cares about work, shows enthusiasm, interest and love for programming (range: from working for money only to implementing interesting ideas in spare time without pay)<br id="bu1t" /></li>
<li id="pkt."><span id="q5gt"><strong id="ul5j">Maturity</strong></span><span id="q5gt"> &#8211; knows and uses sound software development principles, practices and approaches as agile, design and architecture patterns, domain-driven design, </span><span id="q5gt">unit testing, refactoring (range: from an enthusiastic amateur to a black belt guru, who can invent new approaches on the go)</span><br id="e4j2" /></li>
<li id="pkt."><span id="y9pi"><strong id="h5l:">Pragmatism </strong></span>- understands what is possible, loves simplicity and avoids over-engineering; understands business goals, keeps touch with reality and focus on what should be done (range: from a spontaneous artist to a self-driven pragmatic achiever)<br id="ut8w" /></li>
<li id="pkt."><span id="e0-7"><strong id="ld8g">Cooperation </strong></span>- listens, accepts that other people could have better ideas, supports team goals without hidden agenda, shares ideas and knowledge and coach others (range: from idea challenger to a team coach)<br id="mdxf" /></li>
<li id="pkt."><span id="qquc"><strong id="zyjy">Communication </strong></span>- effectively communicates and exchanges ideas, supports knowledge and decisions about the system with clear explanations, justifications and answers (range: from a quiet introvert to a system evangelist)<br id="o8i4" /></li>
<li id="pkt."><span id="u.6y"><strong id="gzam">Potential </strong></span>- has professional goals, good learning skills, curiosity, adaptability and performs constant self correction (range: from person who reached his limits to the future programming star)</li>
<li id="pkt."><span id="drrp"><strong id="kg9m">Vision </strong></span>- sees the big picture, understands context, trends and people, aligns actions with team and company implicit goals, contributes into building shared vision for the software system (range: from interested in programming only to entrepreneurial visionary)<br id="u854" /></li>
</ol>
<h3 id="iwi5">How to find perfect programmers for the specific problem?</h3>
<p>Certainly, it is better to find the programmers with the best qualities. But these geeks are expensive, often unavailable or will be bored with your problem.<br id="e95z" /><br id="f2tp" />Therefore,<br id="z010" /></p>
<ol id="ip2l">
<li id="o9so"><span id="z.mh"><em id="hs5g">Understand the problem before hiring.</em></span> Assess the required level for each quality. Prepare questions and even tests.</li>
<li id="n3r1"><span id="i3o6"><em id="wdav">Build a perfect team with not necessary perfect programmers.</em></span> Just ensure that a sum of qualities of team members matches required levels. Probably only <span id="p3vy"><strong id="v4-i">cooperation</strong></span> is very important quality for every team member.</li>
<li id="c7pn"><span id="an9v"><em id="ztzv">Create environment that enables most effective use and growth of these top qualities.</em></span> Use right <a href="http://softwarecreation.org/2007/what-is-the-best-leader-for-the-software-team/" title="leadership style" id="n_bu">leadership style</a>. Make programmers <a href="http://softwarecreation.org/2007/how-to-be-happy-at-work-short-tutorial/" title="happy" id="mmax">happy</a>.<br id="fg7j" /></li>
</ol>
<p><br id="v2n9" />People with good core qualities will pick up the best approaches including writing unit tests and refactoring; learn design patterns and what is most important &#8211; deliver great and useful software.<br id="ctas" /><br id="d02x" /><span id="sq9s" style="font-weight: bold">Perfect programmers are not born, they just work on the right for them problems.</span></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=61&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/top-10-qualities-of-the-perfect-programmer/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Five Big Personality Traits of a Programmer. Do They Matter?</title>
		<link>http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/</link>
		<comments>http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 05:18:53 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[Job]]></category>
		<category><![CDATA[People]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/</guid>
		<description><![CDATA[Share&#8220;Variety is the spice of life&#8221;
Did you see a software team with members that are

     always stressed and full of fear to fail or completely indifferent to end results?
     totally agree with each other and satisfied with their product, but very far from harsh reality?
   [...]]]></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/five-big-personality-traits-of-a-programmer-do-they-matter/&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/five-big-personality-traits-of-a-programmer-do-they-matter/' 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/five-big-personality-traits-of-a-programmer-do-they-matter/'></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/five-big-personality-traits-of-a-programmer-do-they-matter/'></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/five-big-personality-traits-of-a-programmer-do-they-matter/&amp;title=+Five+Big+Personality+Traits+of+a+Programmer.+Do+They+Matter%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><cite>&#8220;Variety is the spice of life&#8221;</cite></p>
<p>Did you see a software team with members that are</p>
<ul>
<li>     always stressed and full of fear to fail or completely indifferent to end results?</li>
<li>     totally agree with each other and satisfied with their product, but very far from harsh reality?</li>
<li>     competing and fighting for the true solution, but cannot achieve common goals?</li>
<li>     always inventing something interesting, but cannot focus on work and deliver software?</li>
<li>     overly disciplined, planning everything, but deliver mediocre boring results without any spark of imagination?</li>
<li>     having excellent communication, rapport and environment, but spend most of the time talking than working?</li>
<li>     sitting in separate cubicles without talking, barely understanding what others are doing?</li>
</ul>
<p>Can these teams be successful?  What is the root cause of their problems? How these problems could be prevented?</p>
<h3>   Our personalities</h3>
<p><img src="http://softwarecreation.org/images/2008/wizard-oz.jpg" /><br />
One of the most interesting things about humans is their personality. We are different in behavior, reactions and feelings in the similar situations. These wonderful personality traits make our life refreshing and sometimes totally unpredictable. Do they matter in software development, apparently logical and rational activity? I believe that people are the most important factor in the software development and they determine success. A programmer&#8217;s personality affects behavior and therefore it must have significant impact on the work itself.</p>
<p><a href="http://en.wikipedia.org/wiki/Big_Five_personality_traits" id="bg.d" title="Empirical research">Empirical research</a> shows five broad dimensions of personality:</p>
<ul>
<li>     <strong>Openness </strong>- appreciation for art, emotion, adventure, unusual ideas, imagination, curiosity, and variety of experience.</li>
<li>     <strong>Conscientiousness </strong>- a tendency to show self-discipline, act dutifully, and aim for achievement; planned rather than spontaneous behavior.</li>
<li>     <strong>Extroversion </strong>- energy, positive emotions, and the tendency to seek stimulation and the company of others.</li>
<li>     <strong>Agreeableness </strong>- a tendency to be compassionate and cooperative rather than suspicious and antagonistic towards others.</li>
<li>     <strong>Neuroticism </strong>- a tendency to experience unpleasant emotions easily, such as anger, anxiety, depression, or vulnerability; sometimes called emotional instability.</li>
</ul>
<p>What are the best personal traits for the programmer? Before answering this question, I want to mention <a href="http://www.newscientist.com/channel/being-human/mg19726421.800-the-personality-factor-what-makes-you-unique.html" id="py5l" title="research">research</a> of rudimentary personality traits in wild animals. Small birds, great tits, have personality ranging from highly exploratory to more cautious one. Scientists found that the both personality types are optimal, but under different conditions. When resources were scarce it paid the birds to dispense further. However, when resources are abundant more cautious birds were more likely to survive. Morale is that our  evolution preserved different personalities for the good reason. They help us to survive and advance under various unpredictable conditions. They made overall population resilient to changing environment, threats and challenges.</p>
<p>Software teams need diversity not only in skills, experience and knowledge. They need the optimal balance of personalities to effectively build software, especially in our rapidly changing technological, business and social worlds.</p>
<p><span id="more-59"></span></p>
<h3>   Five Big Personality Traits</h3>
<h4>   Openness</h4>
<p>Intellectual curiosity &#8211; open to new experience, new ways of doing things.</p>
<p><strong>High &#8211; Explorer</strong><br />
<img src="http://softwarecreation.org/images/2008/magellan.JPG" /><br />
Positive: imagination, creativity, flexibility, innovative, open-minded<br />
Negative: over-complication, ambiguous, distracted, reinventing the wheel, seeks complexity<br />
Optimal contribution: new ideas / creative and innovative solutions<br />
Professions: entrepreneurs, architects, change agents, artists, theoretical scientists</p>
<p><strong>Low &#8211; Preserver</strong><br />
<img src="http://softwarecreation.org/images/2008/hoptile.jpg" /><br />
Positive: vigilance, practical, concrete, pragmatic<br />
Negative: narrow minded, conservative, conforming<br />
Optimal contribution: pragmatic implementation, attention to details, stability<br />
Professions: financial managers, performers, project managers, applied scientists, police, sales</p>
<p>In the middle is <strong>Moderate</strong> &#8211; can explore novel solutions with interest; on other hand can focus on familiar for extended period of time.</p>
<h4>   Conscientiousness</h4>
<p>Degree to which we push toward goals at work. Control, regularity, direct impulses.</p>
<p><strong>High &#8211; Focused</strong><br />
<img src="http://softwarecreation.org/images/2007/zhukov.jpg" height="200" width="300" /><br />
Positive: organized, disciplined, persistent, industrious, dependable, plans everything<br />
Negative: perfectionist, workaholic, boring, formalist, craving for achievements<br />
Optimal contribution: discipline, reliable results, organized and planned work<br />
Professions: high achievers, leaders, executives</p>
<p><strong>Low &#8211; Flexible</strong><br />
<img src="http://softwarecreation.org/images/2008/marin.jpg" /><br />
Positive: fun, colorful, playful, imaginative, open ended, creative, relaxed, multi-tasking<br />
Negative: spontaneous, impulsive, unreliable, easily distracted<br />
Optimal contribution: fun, improved morale, imagination spark, unexpected insights<br />
Professions: researchers, detectives, consultants</p>
<p>In the middle, <strong>Balanced</strong> &#8211; can move from focus to laxity and from production to research</p>
<h4>   Extroversion</h4>
<p>Degree to which person can tolerate sensory stimulation from people and situations. Engagement with external world</p>
<p><strong>High &#8211; Extravert</strong><br />
<img src="http://softwarecreation.org/images/2008/obama.jpg" /><br />
<a href="http://flickr.com/photos/jmtimages/2284681757/" class="photocredit">jmtimages</a><br />
Positive: enthusiastic, action-oriented, sociable, outgoing, trust others<br />
Negative: need attention, risk prone, low energy when alone<br />
Optimal contribution: enthusiasm, communication, shared understanding, team aligning and bonding<br />
Professions: sales, politics, arts</p>
<p><strong>Low &#8211; Introvert</strong><br />
<img src="http://softwarecreation.org/images/2007/alone.jpg" height="204" width="300" /><br />
Positive: stoical, self-sufficient, independent, can work alone<br />
Negative: reserved, retiring, deliberate, skeptical<br />
Optimal contribution: independence, focus, ability to work alone without interruptions<br />
Professions: production managers, natural scientists</p>
<p>On between two extremes, <strong>Ambivert </strong>- move comfortably from outgoing social situations to isolation of working alone</p>
<h4>   Agreeableness</h4>
<p>Degree to which we defer to others. Need for cooperation, social harmony</p>
<p><strong>High &#8211; Adapter</strong><br />
<img src="http://softwarecreation.org/images/2008/fans.jpg" /><br />
<a href="http://flickr.com/photos/howie_berlin/169921905/" class="photocredit">howie_berlin</a><br />
Positive: friendly, helpful, cooperative, empathetic, tolerant, agreeable, accepting<br />
Negative: conformity, lack of focus, over trust, lost sense of self<br />
Optimal contribution: team play, cooperation, support, empathy, harmony<br />
Professions: teachers, social workers, psychologists</p>
<p><strong>Low &#8211; Challenger </strong><br />
<img src="http://softwarecreation.org/images/2007/docent.jpg" /><br />
Positive: objective, tough decisions, individuality, expressive, persistent<br />
Negative: self-centered, suspicious, ruthless, hostile, rude, need for power<br />
Optimal contribution:  tough decisions, objective, independent and critical views, challenging status quo<br />
Professions: advertisers, managers, military leadership, critics, soldiers</p>
<p>In the middle, <strong>Negotiator</strong> &#8211; able to move from leadership to followership as the situation demands</p>
<h4>   Neuroticism</h4>
<p>Degree to which person responds to stress. Emotional stability</p>
<p><strong>High &#8211; Reactive</strong><br />
<img src="http://softwarecreation.org/images/2007/i-robot.jpg" height="186" width="336" /><br />
Positive: vigilance, responsive to threats, sensible, reactive, insecure<br />
Negative: easily stressed, anxious, over emotional<br />
Optimal contribution: sensitive, responsive attitude<br />
Professions: social scientists, customer service.</p>
<p><strong>Low &#8211; Resilient</strong><br />
<img src="http://softwarecreation.org/images/2007/klichko-lewis.jpg" height="240" width="320" /><br />
Positive: calm, secure, self-satisfied, unflappable, resilient<br />
Negative: unflappable, laid-back, impervious, indifferent<br />
Optimal contribution: calm, confidence, optimism<br />
Professions: air-traffic controllers, airline pilots, military snipers, finance managers, engineers</p>
<p>In the middle, <strong>Responsive </strong>- able to turn behavior from both extremes on what seems appropriate to the situation</p>
<p><strong>Comments: </strong></p>
<ul>
<li>Scientists think that heredity and environment play equal role in possessing these traits.</li>
<li> In young ages Agreeableness, Conscientiousness increases, Extraversion, Neuroticism and Openness decreases. But it doesn&#8217;t change much after 30. Therefore you could expect that the 20 years old unorganized and always arguing developer could become more disciplined and agreeable in the future, but don&#8217;t expect much changes from the 40-years old programming veteran.</li>
</ul>
<h3>   Combinatorial Traits Matrix</h3>
<p>Some traits are more beneficial for the software development: Explorer, Focused, Extravert. Other could also nicely compliment each other like Focused Preserver or Open-Minded Challenger. Some traits could be dangerous for the project and team like Nervous Preserver or Agressive Challenger.</p>
<table border="1">
<tr>
<td>&nbsp;</td>
<td><strong>Explorer</strong><br />
(high openness)</td>
<td><strong>Preserver</strong><br />
(low openness)</td>
<td colspan="8" rowspan="2">&nbsp;</td>
</tr>
<tr>
<td><strong>Focused</strong><br />
(high conscientiousness)</td>
<td style="background-color: #00ff40">Open-minded disciplined<br />
creator<br />
(reliable innovations)</td>
<td style="background-color: #00ff40">Pragmatic implementer<br />
(predictable results)</td>
</tr>
<tr>
<td><strong>Flexible</strong><br />
(low conscientiousness)</td>
<td style="background-color: #8cffe9">Creative spontaneous artist<br />
(unpredictable ideas)</td>
<td style="background-color: #cccccc">Troubleshooter</td>
<td><strong>Focused</strong><br />
(high conscientiousness)</td>
<td><strong>Flexible</strong><br />
(low conscientiousness)</td>
<td colspan="6" rowspan="2">&nbsp;</td>
</tr>
<tr>
<td><strong>Extravert</strong><br />
(high extraversion)</td>
<td style="background-color: #00ff40">Inspirational visionary<br />
(creative vision)</td>
<td style="background-color: #8cffe9">Cheer leader<br />
(stability)</td>
<td style="background-color: #00ff40">Team leader<br />
(energy and direction)</td>
<td style="background-color: #8cffe9">Soul of the team<br />
(morale)</td>
</tr>
<tr>
<td><strong>Introvert</strong><br />
(low extraversion)</td>
<td style="background-color: #00ff40">Independent inventor<br />
(thoughtful solutions)</td>
<td style="background-color: #cccccc">Quiet worker</td>
<td style="background-color: #00ff40">Productive achiever<br />
(quality results)</td>
<td style="background-color: #cccccc">Impulsive individualist</td>
<td><strong>Extravert</strong><br />
(high extraversion)</td>
<td><strong>Introvert</strong><br />
(low extraversion)</td>
<td colspan="4" rowspan="2">&nbsp;</td>
</tr>
<tr>
<td><strong>Adapter</strong><br />
(high agreeableness)</td>
<td style="background-color: #00ff40">Catalyst<br />
(integrated views)</td>
<td style="background-color: #cccccc">Tolerant follower</td>
<td style="background-color: #00ff40">Coach<br />
(experience)</td>
<td style="background-color: #cccccc">Submissive collaborator</td>
<td style="background-color: #8cffe9">Mediator<br />
(harmony)</td>
<td style="background-color: #cccccc">Conformist</td>
</tr>
<tr>
<td><strong>Challenger</strong><br />
(low agreeableness)</td>
<td style="background-color: #8cffe9">Strong-minded pioneer<br />
(tough decisions)</td>
<td style="background-color: #cccccc">Realistic critic</td>
<td style="background-color: #cccccc">Industrious opponent</td>
<td style="background-color: #ffa5a5">Debater</td>
<td style="background-color: #cccccc">Opposition leader</td>
<td style="background-color: #ffa5a5">Discordant employee</td>
<td><strong>Adapter</strong><br />
(high agreeableness)</td>
<td><strong>Challenger</strong><br />
(low agreeableness)</td>
</tr>
<tr>
<td><strong>Reactive</strong><br />
(high neuroticism)</td>
<td style="background-color: #cccccc">Sensitive scout<br />
(warning)</td>
<td style="background-color: #ffa5a5">Nervous conservator</td>
<td style="background-color: #ffa5a5">Stressed workaholic</td>
<td style="background-color: #cccccc">Emotional artist</td>
<td style="background-color: #cccccc">Alarmist</td>
<td style="background-color: #ffa5a5">Neurotic avoider</td>
<td style="background-color: #8cffe9">Sharp companion</td>
<td style="background-color: #ffa5a5">Aggressive competitor</td>
</tr>
<tr>
<td><strong>Resilient</strong><br />
(low neuroticism)</td>
<td style="background-color: #8cffe9">Forward-looking robust<br />
fellow</td>
<td style="background-color: #cccccc">Die Hard</td>
<td style="background-color: #cccccc">Bureaucrat</td>
<td style="background-color: #ffa5a5">Indifferent procrastinator</td>
<td style="background-color: #8cffe9">Optimistic supporter</td>
<td style="background-color: #8cffe9">Stoical soul</td>
<td style="background-color: #8cffe9">Easy helper</td>
<td style="background-color: #8cffe9">Skeptic</td>
</tr>
</table>
<p>Legend</p>
<table border="1">
<tr>
<td style="background-color: #00ff40">Excellent combination</td>
</tr>
<tr>
<td style="background-color: #8cffe9">Good</td>
</tr>
<tr>
<td style="background-color: #cccccc">Neutral</td>
</tr>
<tr>
<td style="background-color: #ffa5a5">Damaging</td>
</tr>
</table>
<h3>   Team Traits Checklist</h3>
<p>A team could work on the green-field new development to maintenance projects. Therefore, proportion of optimal personalities will be different. Team leader could use this checklist to find out if his team is diverse enough.</p>
<table border="1" width="100%">
<tr>
<td><strong>Desirable contribution</strong></td>
<td><strong>Question &#8211; Do you have&#8230;<br />
</strong></td>
<td><strong>Trait</strong></td>
<td><strong>Probable Ratio</strong></td>
</tr>
<tr>
<td>New ideas / creative and innovative solutions</td>
<td>creative people capable for coming up with new exciting ideas, innovations and creative solutions?</td>
<td style="background-color: #00ff40">Explorer</td>
<td rowspan="2">new: 70/30<br />
maintenance: 30/70</td>
</tr>
<tr>
<td>Pragmatic implementation, attention to details, stability</td>
<td>down-to-earth people who will concentrate on implementation and mundane details instead of building castles in the sky?</td>
<td style="background-color: #00ff40">Preserver</td>
</tr>
<tr>
<td>Discipline, reliable results, organized and planned work</td>
<td>disciplined productive people who will reliably deliver results in consistent and organized manner?</td>
<td style="background-color: #00ff40">Focused</td>
<td rowspan="2">new: 60/40<br />
maintenance: 80/20</td>
</tr>
<tr>
<td>Fun, improved morale, imagination spark, unexpected insights</td>
<td>open-ended people, who could spark imagination, bring unexpected insights and make team feel better?</td>
<td style="background-color: #8cffe9">Flexible</td>
</tr>
<tr>
<td>Enthusiasm, communication, shared understanding, team aligning and bonding</td>
<td>enthusiastic outgoing people who establish great communication channels, create shared understanding and jell the team?</td>
<td style="background-color: #00ff40">Extravert</td>
<td rowspan="2">new: 60/40<br />
maintenance: 40/60</td>
</tr>
<tr>
<td>Independence, focus, ability to work alone without interruptions</td>
<td>independent people, able to work alone without interruptions and distracting other people?</td>
<td style="background-color: #00ff40">Introvert</td>
</tr>
<tr>
<td>Team play, cooperation, support, empathy, harmony</td>
<td>team players, who support and follow team decisions and readily cooperate with others</td>
<td style="background-color: #00ff40">Adapter</td>
<td rowspan="2">new: 60/40<br />
maintenance: 80/20</td>
</tr>
<tr>
<td>Tough decisions, objective, independent and critical views, challenging status quo</td>
<td>objective people, who could challenge status quo, have independent opinion and can make tough decisions?</td>
<td style="background-color: #8cffe9">Challenger</td>
</tr>
<tr>
<td>Sensitive, responsive attitude</td>
<td>sensitive people who could warn and early respond to changing conditions and threats?</td>
<td style="background-color: #8cffe9">Reactive</td>
<td rowspan="2">new: 40/60<br />
maintenance: 20/80</td>
</tr>
<tr>
<td>Calm, confidence, optimism</td>
<td>calm confident people who could face challenges and crisis without breaking down?</td>
<td style="background-color: #00ff40">Resilient</td>
</tr>
</table>
<h3>   How to make personality traits work?</h3>
<p><img src="http://softwarecreation.org/images/2008/right-people.jpg" /></p>
<p>1. <strong>Recognize that people have different personalities</strong>. We cannot do much to change them in an adult age (in many cases even after the birth).</p>
<p>2. <strong>Assemble a diverse team covering a range of personalities</strong> able to effectively respond in different situations. Don&#8217;t hope that you&#8217;ll find perfect match in one person &#8211; all of us have strength and weaknesses. And often you&#8217;ll need opposite personalities (I&#8217;m against hiring people with multi personal disorder to solve this problem :)). It is true, some people could conditionally switch behavior between opposite trait extremes, but most of us are comfortably operate only in the narrow range. Therefore, we should look for the optimal combination of traits in different people, which compliment each other.</p>
<p>Minimal requirements for the software team member:</p>
<ul>
<li>     Respect to other people</li>
<li>     Can listen and accept other views</li>
<li>     Can learn and change</li>
</ul>
<p>3. <strong>Create an open, honest and tolerant atmosphere and rules</strong> where people can resolve diverse opinions and approaches stemming from the different personalities. This is a quintessence and the most powerful tool of the diverse team &#8211; finding effective balance between different views for the particular people, project and situation: Stability vs. Innovation, Creativity, vs. Simplicity, Risk vs. Predictability, Cooperation vs. Individualism, Fun vs. Hard-work, Implementation vs. Research, etc.  The best outcome is than people effectively resolve these views, make optimal decisions and become comfortable with them. And the team could leverage different personalities if:</p>
<ul>
<li>     Overall team members experience and expertise matches the problem</li>
<li>     Everybody feels fair, satisfied with work and compensation</li>
<li>The team is self-organized or at least has enough freedom to make independent decisions.</li>
</ul>
<h3>   Final words</h3>
<p>It is a problem than a software team doesn&#8217;t have balanced personalities and one of them becomes dominated. The team could be infected by one or few of the problems I&#8217;ve started the post with: constant stress, overconfidence, groupthink, building dream castles,  fighting with each other, lost focus and many others. While we could blame our customers, ugly problems, bad managers or crappy technologies and tools for the problems, our personalities are often the very reason for the problems with our software projects.</p>
<p>A diverse, self organized and balanced team with right personalities is not panacea from all the problems, but it substantially increases chances for the overall success. And, don&#8217;t forget to appreciate the gift, the nature gave to us, to become great software creators &#8211; our personalities :).</p>
<p>And questions: What criteria your company / leaders are using to assemble software teams? Do they care about personalities?</p>
<p><strong>Interesting resources:</strong><br />
<a href="http://en.wikipedia.org/wiki/Big_Five_personality_traits" title="Big Five personality traits" id="mxei">Big Five personality traits</a>, Wikipedia<br />
<a href="http://www.newscientist.com/channel/being-human/mg19726421.800-the-personality-factor-what-makes-you-unique.html" title="The personality factor: What makes you unique?" id="pwfz">The personality factor: What makes you unique?</a>, New Scientist<br />
<a href="http://www.centacs.com/quickstart.htm" title="The Big Five Quickstart" id="npzk">The Big Five Quickstart</a>, Center for Applied Cognitive Studies (CentACS)</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=59&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2008/five-big-personality-traits-of-a-programmer-do-they-matter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Can Computers Beat Human Programmers? Part 5. Future of human programmers</title>
		<link>http://softwarecreation.org/2007/can-computers-beat-human-programmers-future-of-human-programmers/</link>
		<comments>http://softwarecreation.org/2007/can-computers-beat-human-programmers-future-of-human-programmers/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 06:11:33 +0000</pubDate>
		<dc:creator>Andriy Solovey</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://softwarecreation.org/2007/can-computers-beat-human-programmers-future-of-human-programmers/</guid>
		<description><![CDATA[SharePart 1. Gaining processing power
Part 2. Becoming intelligent
Part 3. Interacting with humans
 Part 4. Building useful programs
 Part 5. Future of human programmers
Computers don&#8217;t retire, overreact and complain. They could in minutes get all the knowledge accumulated by other computers. They could work 24 hours without making stupid mistakes. They make more and more human [...]]]></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/2007/can-computers-beat-human-programmers-future-of-human-programmers/&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/2007/can-computers-beat-human-programmers-future-of-human-programmers/' 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/2007/can-computers-beat-human-programmers-future-of-human-programmers/'></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/2007/can-computers-beat-human-programmers-future-of-human-programmers/'></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/2007/can-computers-beat-human-programmers-future-of-human-programmers/&amp;title=+Can+Computers+Beat+Human+Programmers%3F+Part+5.+Future+of+human+programmers&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></div></div></div><div style='clear:both'></div><p><a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part1-gaining-processing-power/" title="Part 1. Gaining processing power" id="squr">Part 1. Gaining processing power</a><br />
<a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-2-becoming-intelligent/" title="Part 2. Becoming intelligent" id="prn5">Part 2. Becoming intelligent</a><br />
<a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-3-interacting-with-humans/" title="Part 3. Interacting with humans" id="n455">Part 3. Interacting with humans</a><br />
<a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-4-building-useful-programs/"> Part 4. Building useful programs</a><br />
<strong> Part 5. Future of human programmers</strong></p>
<p>Computers don&#8217;t retire, overreact and complain. They could in minutes get all the knowledge accumulated by other computers. They could work 24 hours without making stupid mistakes. They make more and more human jobs obsolete. It is inevitable, computers will replace programmers in many areas. Even more, if <a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-2-becoming-intelligent/" title="Strong AI" id="st.s">Strong AI</a>, capable of reasoning and understanding meaning, will appear, programming as a profession will be almost eliminated (at least coding part). Customers will be able to describe their needs directly to a computer. Computer AI will be translating these specifications to machine code (and stronger AI will require less formal specifications) and relentlessly building the software system.</p>
<p>Does it mean that that at the some point in the future software developers will no longer be needed? It could be true, if customers could specify exactly what they need and can effectively collaborate with AI to build the system. But things are not so simple, especially with non-trivial problems and humans (assuming that customers and users will be still humans). There are three roles that software specialists could play in the future even with powerful computer programming AI.<img src="http://softwarecreation.org/images/2007/programmer-future.jpg" /></p>
<p><span id="more-49"></span></p>
<ol>
<li><strong>Translators</strong><br />
Customers often have <a href="http://softwarecreation.org/2007/software-requirements-are-elusive-6-reasons-why-customers-cannot-get-them-right/" title="difficulties" id="dph-">difficulties</a> describing what they need, lack knowledge of how to interact with computers to get solution right. Not all of them can formulate concepts and ideas suitable for consumption by AI. Software developers could be effective partners in discovering, refining and translating customers needs for computer AI.</li>
<li><strong>Innovators</strong><br />
Many of the best human achievements are the product of intuition, irrationality and ability to go beyond rules and established theories. Coming up with novel, breakthrough and beautiful solutions is one of the most exciting parts of the software development. Indeed, effective and most useful software systems require creativity, innovation and aesthetics. Left brain thinking, purely rational and logical, is not enough for building these solutions, especially for human users. Can computers acquire these abilities, break encoded rules and become better than intuitive and creative human programmers? It is <a href="http://softwarecreation.org/2007/can-computers-beat-human-programmers-part-4-building-useful-programs/" title="a big question" id="orwx">a big question</a>.</li>
<li><strong>Advisers</strong><br />
Every system have some purpose and fits into some context. Customers will require people who understand the big picture: problem domain, emerging concepts and IT environment. People, who still understand how computers operate and what is possible and makes sense. People, who can answer &#8216;Why&#8217; and &#8216;What&#8217; solutions are required in addition to &#8216;How&#8217; to implement them.</li>
</ol>
<h3>Present and Future</h3>
<p>Daniel H. Pink in his excellent book <a href="http://www.amazon.com/gp/product/1594481717/104-2883280-1296732?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594481717" id="ab23" title="A Whole New Mind">A Whole New Mind</a> writes:</p>
<blockquote><p> &#8220;Programmers will have to master different aptitudes, relying more on creativity than competence, more on tacit knowledge than technical manuals, and more on fashioning the big picture than sweating the details.&#8221;</p></blockquote>
<p>We&#8217;ll need to supplement our well developed high-tech abilities with high touch, which:</p>
<blockquote><p>&#8220;involves the ability to create artistic and emotional beauty, to detect patterns and opportunities, to craft a satisfying narrative, and to combine seemingly unrelated ideas into a novel intervention. High touch involves the ability to emphasize, to  understand the subtleties of human interaction, to find joy in one&#8217;s self and to elicit it in others, and to stretch beyond the quotidian, in pursuit of purpose and meaning.&#8221;</p></blockquote>
<p>Modern trends in programming are not in the areas of enhancing sophistication of building software systems, but in making easier to manipulate and understand these systems by humans. Complexity of the modern software systems and problem domains makes software development difficult endeavor for our relatively small, delicate and easy to confuse brains. Programmers have challenges to transparently represent customers ideas in the software code and avoid complications specific to technical platforms.  Effective software teams try to overcome disconnect between technical and business perspectives on the system:</p>
<ul>
<li>use agile practices focused on speed, business value and rapid feedback from customers</li>
<li>apply Domain Driven Design and Domain Specific Languages for representing customer ideas and concepts</li>
<li>develop with high level languages suited for describing programming logic closer to human language (Ruby, C#)</li>
<li>write automated executable specifications for describing and testing domain logic (Fit, Test and Behavior Driven Development)</li>
<li>leverage existing commercial and open source solutions to bring business value faster and concentrate on core problems instead of spending effort on secondary.</li>
</ul>
<p>Alex Iskold in <a href="http://www.readwriteweb.com/archives/the_future_of_software_development.php" title="The Future of Software Development" id="s5ih">The Future of Software Development</a> says</p>
<blockquote><p> Equipped with a modern programming language, great libraries, and agile methods, a couple of smart guys in the garage can get things done much better and faster than an army of mediocre developers.</p></blockquote>
<p><img src="http://softwarecreation.org/images/2007/fantastic4.jpg" /></p>
<p>I believe &#8211; the future software teams will be powerful small units (similar to special forces in army) of diverse highly capable professionals. Remaining software developers will be domain experts, professional communicator and creative innovators understanding well both business and technology.</p>
<p>Computer Science will be <a href="http://www.softwarebyrob.com/2007/06/27/computer-science-enrollment-going-down-taking-software-jobs/" title="attractive again" id="b8f2">attractive again</a> and people will value profession of the software developer as prestigious and one of the most important for human civilization progress.</p>
<p><em>Interesting Resources:</em><br />
<a href="http://www.amazon.com/gp/product/1594481717/104-2883280-1296732?ie=UTF8&amp;tag=softwcreatmys-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=1594481717" id="ab23" title="A Whole New Mind">A Whole New Mind</a>, Daniel H. Pink<br />
<a href="http://www.readwriteweb.com/archives/the_future_of_software_development.php" title="The Future of Software Development" id="s5ih">The Future of Software Development</a>, Alex Iskold<br />
<a href="http://www.hans-eric.com/2007/11/09/the-extinction-of-programmers/" title="The Extinction of Programmers" id="lo_9">The Extinction of Programmers</a>, Hans-Eric Gronlund</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=49&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://softwarecreation.org/2007/can-computers-beat-human-programmers-future-of-human-programmers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
