<?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>/dev/psychology &#187; Learning</title>
	<atom:link href="http://p.einarsen.no/category/learning/feed/" rel="self" type="application/rss+xml" />
	<link>http://p.einarsen.no</link>
	<description></description>
	<lastBuildDate>Sun, 30 Oct 2011 11:29:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>What makes a superstar developer?</title>
		<link>http://p.einarsen.no/what-makes-a-superstar-developer/</link>
		<comments>http://p.einarsen.no/what-makes-a-superstar-developer/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 21:07:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Managing dev teams]]></category>
		<category><![CDATA[black swans]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Superstars]]></category>

		<guid isPermaLink="false">http://p.einarsen.no/?p=402</guid>
		<description><![CDATA[A funny discussion is going on at HBR Blogs:  Management-type blogger Bill Taylor suggests our culture wrongly celebrates the super-stars, and claims great people are overrated, on the cost of well-functioning teams (via Igor Sutton). But, to illustrate his example he uses software engineers as an example. Cue outpouring of frustration &#8211; Bill&#8217;s getting hammered [...]]]></description>
			<content:encoded><![CDATA[<p>A funny discussion is going on at HBR Blogs:  Management-type blogger Bill Taylor suggests our culture wrongly celebrates the super-stars, and claims <a href="http://blogs.hbr.org/taylor/2011/06/great_people_are_overrated.html">great people are overrated</a>, on the cost of well-functioning teams (<a href="http://igorsutton.com/">via Igor Sutton</a>). But, to illustrate his example he uses software engineers as an example. Cue outpouring of frustration &#8211; Bill&#8217;s getting hammered in the comment section.</p>
<p>So what&#8217;s the problem?</p>
<p>First, try to look past that Bill skipped 30 years of research and experience in software engineering and stamps into it like a PHB-cliche, seemingly assuming his opinion is as valid as any research on the subject. That alone probably ticked off the defensive reaction in any software developer accidentally stumbling into the Harvard Business Review blog section.</p>
<p>The main misunderstanding is the assumption that there is only one type of talent. And both Taylor and a fair amount of the commenters makes this mistake and applies their experience with basic bell-curve measured skills onto a type of talent that is ruled by other laws.  <strong><a href="http://www.fooledbyrandomness.com/">Nassim Nicholas Taleb</a> </strong>discusses this distinction in great detail in <a href="http://en.wikipedia.org/wiki/Black_swan_theory">The Black Swan</a> &#8211; <a href="http://www.math.nyu.edu/fellows_fin_math/gatheral/extremistan.pdf">the environments of &#8220;mediocristan&#8221; and &#8220;extremistan&#8221;.</a> The first which you can understand using the bell curve and gaussian distribution, the latter where differences are of an order of magnitude and are qualitative or disruptive differences.</p>
<p>For example, in most manual labour or production line work, a practitioner can get good or even excellent, but mostly within a range that can be measured safely with standard deviations and the differences between average and excellent performance does not differ in it&#8217;s nature, but it&#8217;s output. Here throwing more people at the problem can solve it &#8211; maybe your top salesman makes ten sales a week while your average makes 4. Well, throw in 3 averages and you&#8217;re just as good. That&#8217;s not necessarily good economy or a good idea, but it can get you where you want.</p>
<p>In contrast, in the world of &#8220;extremistan&#8221;, a difference in skill can be of such a magnitude that it makes a qualitative difference. In the comment section of Taylor&#8217;s article, someone asks, &#8220;Would you want a Shakespeare or 100 Bill Taylor&#8217;s?&#8221;, and countless variations on the theme. And software engineering is that sort of talent. A &#8220;superstar developer&#8221; doesn&#8217;t necessarily a programming Shakespeare make, but he or she can make something a lesser qualified individual can never do, or do it so fast it makes the difference between staying in competition or not. Or just connect the dots and save the day.</p>
<p>Throw in the special problem of software engineering that putting one more person on a task tends to double the time it takes to solve it, and the effect is even larger.</p>
<p>But then, the Bill Taylor&#8217;s take their experiences with the &#8220;mediocristan&#8221; type of talent and applies it on the very different world of software engineering. It comes out, as is well pointed out in the comment section, as commoditization of something that can not be commoditized. Software development can&#8217;t be reduced to the number of lines written per day, in any meaningful way. Even business people who really, really want to think about it in that way, will still be wrong. It has been discussed and demonstrated countless times. The classic <a href="http://javatroopers.com/Mythical_Man_Month.html">&#8220;The Mythical Man-Month&#8221;</a> explains how you can&#8217;t just think of your software engineers as burger flippers.</p>
<p>When the original blog post received so much vitriol, it comes from <em>every software engineer in the world&#8217;</em>s experience with clueless managers who approach development in the Bill Taylor way. Today&#8217;s successful companies are ran in a different way, by Zuckerberg&#8217;s and Steve Jobs&#8217; who are playing in a the-winner-takes-it-all world of the Internet. It doesn&#8217;t take that many, as long as you have the right people &#8211; Facebook has 2000 employees serving over 600 million users.</p>
<h3>So what makes a super star developer?</h3>
<p>I believe in the old truism that the difference between developers can be of the 100x magnitude &#8211; I actually think the<a href="http://p.einarsen.no/the-net-negative-production-programmer/"> Net Negative Production Programmer</a> is a reality, so accordingly a top developer is infinitely better than the worst&#8230; However, unless you think the superstars have their skills handed down to them by divine intervention, something must have brought them to this. Here&#8217;s some points I believe are what makes up the super star:</p>
<ul>
<li><strong>It&#8217;s knowing the codebase well</strong>. The superstar is often the guy who knows the codebase to the last semi-colon. It&#8217;s not about being the smartest guy in the room, but just knowing exactly where to hack in that little change, and that little change, and that little change, and that little change&#8230;. before lunch.</li>
</ul>
<ul>
<li><strong>It&#8217;s content knowledge. </strong>The superstar is the guy who also knows the content of what he is coding really well. If you&#8217;re making a chess bot, the developer who is also a chess grandmaster knows all the elements, the edge cases and the purpose of what he is trying to do. He will have a working prototype running while the developer without any chess background is still trying to understand all the implicit assumptions in the instructions he got from his <a href="http://en.wikipedia.org/wiki/Scrum_(development)#Core_Scrum_roles">Scrum Product Owner</a>. I think this one is essential, and so often overlooked. Knowing the thing you work with, and working with what you find interesting is not only making development work into a whole other ballgame, it&#8217;s also does wonders for motivation.</li>
</ul>
<ul>
<li><strong>It&#8217;s situational. </strong>You can&#8217;t throw Linus Torvalds, Larry Wall or Bill Joy into your hack app shop and expect to have the next Angry Birds in a month. You need the right person and the right setting.</li>
</ul>
<ul>
<li><strong>It&#8217;s knowing programming well. </strong>The superstar developer doesn&#8217;t have to be a superstar in the inner working of his programming language &#8211; but he knows it well enough that it&#8217;s not in the way of him reaching his ultimate goal.</li>
</ul>
<ul>
<li><strong>It&#8217;s practice, practice, practice. </strong>Yeah exactly! No one is born into superstardom. This is written about a lot, and <a href="http://www.gladwell.com/outliers/index.html">Malcolm Gladwell&#8217;s thesis of the 10.000 hours of practice rule</a> really applies the software engineering too. One complicating factor with this point is, as I wrote about in<a href="http://p.einarsen.no/accelerate-your-perl-learning/"> accelerating your Perl learning</a>, that most developers are on a lifelong learning mission anyways. They (we&#8230;) always look to learn something new, so what puts the superstar apart from the average? It&#8217;s not that easy to pick out, but in his article about the 10.000 hours of practice, Gladwell touches upon the differences of training and learning. It&#8217;s a large field of research and I hope to post more about it later.</li>
</ul>
<ul>
<li><strong>It&#8217;s a high level of intelligen</strong>ce. But not necessarily an extreme level of intelligence. However, a certain level of numeracy and ability of thinking in abstractions is necessary.  Maybe at some point we&#8217;ll find that super developers are able to hold more variables at the same time in their working memory, or something along those lines, and that turns out to explain the differences. But I have yet to see any research like that.</li>
</ul>
<p>And it&#8217;s motivation&#8230; and the right management&#8230; but these things are also things external to the superstar, that you one move around to find. The brain finds it&#8217;s ideal setting..</p>
<p>So there, that&#8217;s what put the superstars apart from the average. I&#8217;d love to hear others&#8217; take on it.</p>
<p><span style="font-size: 15px; font-weight: bold;">The sad thing is&#8230;</span></p>
<p>..that reality is that a well functioning team can usually match the lone superstar or even has it&#8217;s own advantages. <em>It&#8217;s actually a good message</em>: let&#8217;s not just celebrate these few people, they&#8217;re brought forward on the shoulders of people going through the daily grind of facilitating it and cleaning up the mess. Or we can achieve great things just by working together. It&#8217;s just presented so boneheadedly wrong.</p>
<p>Finally, Bill followed up with <a href="http://blogs.hbr.org/taylor/2011/06/great_people_are_overrated_par.html">a clarification of some sorts,</a> basically that IBM is made up of average people and see how long they have lasted, while Enron was full of superstars, and look how they crashed.  I wonder what IBM thinks of his base assumption there.</p>
]]></content:encoded>
			<wfw:commentRss>http://p.einarsen.no/what-makes-a-superstar-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Six steps to excellence</title>
		<link>http://p.einarsen.no/six-steps-to-excellence/</link>
		<comments>http://p.einarsen.no/six-steps-to-excellence/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 11:44:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[expertise]]></category>

		<guid isPermaLink="false">http://p.einarsen.no/?p=355</guid>
		<description><![CDATA[Tony Schwartz/Harvard Business Review has an interesting bullet point list of what is necessary to excel in any field: Six Keys to Being Excellent at Anything It&#8217;s based on Anders Ericsson&#8217;s work in the field, and holds as well for computer programmers as practitioners in any other field. See also: Accelerate your Perl learning]]></description>
			<content:encoded><![CDATA[<p>Tony Schwartz/Harvard Business Review has an interesting bullet point list of what is necessary to excel in any field: <a href="http://blogs.hbr.org/cs/2010/08/six_keys_to.html" target="_blank">Six Keys to Being Excellent at Anything</a></p>
<p>It&#8217;s based on Anders Ericsson&#8217;s work in the field, and holds as well for computer programmers as practitioners in any other field.</p>
<p>See also: <a href="http://p.einarsen.no/category/learning/">Accelerate your Perl learning</a></p>
]]></content:encoded>
			<wfw:commentRss>http://p.einarsen.no/six-steps-to-excellence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accelerate your Perl learning 2: From novice to adept</title>
		<link>http://p.einarsen.no/accelerate-your-perl-learning-2-from-novice-to-adept/</link>
		<comments>http://p.einarsen.no/accelerate-your-perl-learning-2-from-novice-to-adept/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 08:40:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Language]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Expert knowledge]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://p.einarsen.no/?p=324</guid>
		<description><![CDATA[I stated in an article some time back that a challenge in learning is that the knowledge setting experts apart from novices isn&#8217;t explicitly known by either &#8211; it&#8217;s tacit knowledge. Since that was about learning Perl, I just want to bring attention to this good series of blog posts by chromatic under the header [...]]]></description>
			<content:encoded><![CDATA[<p>I stated in <a href="http://p.einarsen.no/accelerate-your-perl-learning/" target="_blank">an article some time back that a challenge in learning</a> is that the knowledge setting experts apart from novices isn&#8217;t explicitly known by either &#8211; it&#8217;s <em><a href="http://en.wikipedia.org/wiki/Tacit_knowledge" target="_blank">tacit knowledge</a></em>. Since that was about learning Perl, I just want to bring attention to this good series of blog posts by <a href="http://www.modernperlbooks.com/mt/" target="_blank">chromatic</a> under the header &#8220;From Novice To Adept&#8221;, as they fill in a bit of this gap:</p>
<ul>
<li></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-the-risk-of-being-undone.html" target="_blank">The Risk of Being Undone</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-the-risk-of-maintenance.html" target="_blank">The Risk of Maintenance</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-the-risk-of-failure.html" target="_blank">The Risk of Failure</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-pronouns-in-perl.html" target="_blank">Pronouns in Perl</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-functional-versus-structural-code.html" target="_blank">Functional versus Structural Code</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-the-act-of-naming.html" target="_blank">The Act of Naming</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/11/from-novice-to-adept-the-act-of-naming.html" target="_blank">On Answers to Smart Questions</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/10/from-novice-to-adept-embrace-the-copious-documentation.html" target="_blank">Embrace the Copious Documentation</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/10/from-novice-to-adept-embracing-idioms.html" target="_blank">Embracing Idioms</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/10/from-novice-to-adept-cleaning-up-bad-code.html" target="_blank">Cleaning Up Bad Code</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/10/from-novice-to-adept-declarations-and-scope.html" target="_blank">Declarations and Scope</a></li>
<li><a href="http://www.modernperlbooks.com/mt/2009/10/from-novice-to-adept-scalar-context-and-arrays.html" target="_blank">Scalar Context and Arrays</a><a href="http://www.modernperlbooks.com/mt/2009/10/from-novice-to-adept-cleaning-up-bad-code.html" target="_blank"><br />
</a></li>
</ul>
<p>And a bonus: <a href="http://www.modernperlbooks.com/mt/2010/01/essential-skills-for-perl-5-programmers.html" target="_blank">Essential Skills For Perl 5 Programmers.</a></p>
<p>Are there any other good resources out there expicitly aiming at taking novices to the next level &#8211; or is that just when general &#8220;documentation&#8221; takes over as learning instruments? What&#8217;s it like in other languages?</p>
<p>Also, while updating with Perl news, scruffy old perl.org has become <a href="http://www.perl.org/" target="_blank">dashing new perl.org</a>!</p>
<p><em>Updated with new articles March 8, 2010</em><em>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://p.einarsen.no/accelerate-your-perl-learning-2-from-novice-to-adept/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Accelerate your Perl learning</title>
		<link>http://p.einarsen.no/accelerate-your-perl-learning/</link>
		<comments>http://p.einarsen.no/accelerate-your-perl-learning/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 21:23:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Arrested Development]]></category>
		<category><![CDATA[Excersise]]></category>
		<category><![CDATA[Omega-3]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://p.einarsen.no/?p=183</guid>
		<description><![CDATA[This is inspired by an article by chromatic from ages back, about your programming force multipliers. I think improving your learning is a major &#8220;force multiplier&#8221;, so this is about how to do that. Observation 1: Most programmers are on a life-long learning mission. Actually, all programmers are. Programming is about solving problems. You must pick [...]]]></description>
			<content:encoded><![CDATA[<p>This is inspired by an article by <a href="http://modernperlbooks.com/mt/index.html" target="_blank">chromatic</a> from ages back, about your <a href="http://broadcast.oreilly.com/2008/12/force-multipliers-for-developers.html" target="_blank">programming force multipliers</a>. I think improving your learning is a major &#8220;force multiplier&#8221;, so this is about how to do that.</p>
<p><strong>Observation 1</strong>: <em>Most programmers are on a life-long learning mission</em>.</p>
<p>Actually, <strong>all</strong> programmers are. Programming is about solving problems. You must pick up <em>something </em>from that.</p>
<p><strong>Observation 2</strong>: <em>Learning happens at different speeds, both between individuals and within the same individual. </em></p>
<p>One day you get the point of mod_perl and burst forward, after  making CGI-scripts in the same way for three years. At the same time your colleague kept discovering new cool skills every week.</p>
<p><strong>Accordingly</strong>, most programmers should be concerned not about their learning, but also their <em>learning velocity. </em>Your skill level is not only based on what you know, but how long it took you to learn it and how much more you can manage to squeeze in during your programmer life-span! If you&#8217;re ambitious, but your learning curve is slow or stuck, someone will put you on the sidelines. If your goal is to really understand something, you will be able to reach a deeper understanding if you can fit more learning into a short timespan.</p>
<p>So, this isn&#8217;t about using <a href="http://www.google.com/search?client=safari&amp;rls=en&amp;q=accelerated+learning&amp;ie=UTF-8&amp;oe=UTF-8" target="_blank">mind-maps, role-plays or fancy games at a training course</a>. Rather, this is about tactics and strategies for life-long learning, or the kind of <a href="http://tribes.tribe.net/ernstfuchs/thread/530b25e5-1644-4b99-b31d-f8125b8016c1" target="_blank">ten-year long learning</a> it takes to <a href="http://www.scientificamerican.com/article.cfm?id=the-expert-mind" target="_blank">create world-class expertise</a>. I want to share something about what Psychology knows about making us learn more, faster, better and deeper &#8211; as well as some personal experiences &#8211; and hopefully get some feedback about people&#8217;s own experiences about increasing their learning rate.</p>
<p>So here are some points:</p>
<h2>Avoid Arrested Development</h2>
<p>You start a new job. You have an amazing learning curve while you pick up knowledge and skills from your new colleagues. Six months in you&#8217;ve found the comfort level at which you can do your job well. Six years later you are still at that level. <em>Meet Arrested Development</em>.  This is why some people are Formula 1 drivers, while most people drive their car good enough to get them to work and the beach.</p>
<p>Getting out of arrested development might not be easy. One key is to avoid automatic behaviours. In coding, this is to be aware of your habits and trying to break them up. Starting every day with opening a secure shell to the server and starting vim? How about learning to use <a href="http://padre.perlide.org/" target="_blank">Padre</a> instead? Always firing up CGI::Application for every new web application? Learn Catalyst, HTML::Mason, even Ruby on Rails.</p>
<p>Or push your limits. Try taking on larger responsibilities. Take on a project that is larger, more complex or more difficult than anything you&#8217;ve built before.</p>
<p>The problem with getting out of arrested development is that it might take unlearning of the comfort level, and actually decrease your productivity and even understanding temporarily. It&#8217;s actually quite easy to explain in a programming setting: If you&#8217;re moving on from CGI::Application to Catalyst, your first web application is going to take longer than normal to develop. But your next one might be a big step forward for both you and human-kind.</p>
<p>(Although probably mostly for you)</p>
<h2>Take Risks</h2>
<p>It is found, again and again, that taking risk is a driving force in learning. In experiments in controlled learning environments, it is regularly found that being willing to try out more, click more buttons and do individual try-and-see experimenting is clearly correlated with higher outcomes in learning. And it&#8217;s just because the risk-takers will get more learning opportunities, they will simply see more of how things work.</p>
<p>So make sure you have a safe testing environment, a box for experiments and wild ideas. Try to break things that work, find edge cases or do things in a new way. Have a machine you can re-install without losing your precious collection of photos. Write some crazy ideas on your blog. Try and see what happens. But most important: Create a technical environment that is conductive to risk-taking, just as much as a social environment. If your development server is a sacred cow or people are dependent upon it, set up a crash-test server.</p>
<p>I think a reason <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">Test Driven Development </a>is working is also because it forces you to think about and try out your software. Writing tests is also a great way to get to know new packages or software suites, you can take risks you would never imagine doing while developing code. <em>This method</em><em> takes two scalars? I wonder what happens if I give it a 10.000 element list of japanese characters!</em></p>
<p>And let me repeat this: <em>Take on a project that is larger, more complex or more difficult than anything you&#8217;ve built before.</em></p>
<h2>Learn the right things</h2>
<p>Some knowledge needs pre-requisite knowledge. It&#8217;s just a fact of life. If you try to learn how to make 3d graphics, it will take you a lot longer if you don&#8217;t know vector mathematics. (And you might want to look at something other than Perl for implementation..)</p>
<p>It&#8217;s pretty obvious stuff.</p>
<p>What is less obvious is what the optimal learning direction in computer programming actually is. In Perl, is there a learning run that is better than others? A sequence of reading perldocs that is more effective than another? I can certainly imagine some bad and good places to start, but everyone can do that. What is more unclear is what happens after that start. When you&#8217;re half-good and can do what you want, but want to expand, what is the most optimal directions to follow?</p>
<p>I actually don&#8217;t have a good answer to that yet. My only advice would be that if the terminology is getting too tricky, it is time to go back a step. And not only to..</p>
<h2>Learn the terminology</h2>
<p>When you meet a new term, don&#8217;t fill in it&#8217;s meaning from the context. One of my own most immediate improvements in learning came from always immediately looking up words I don&#8217;t understand. I believe there usually is a reason I don&#8217;t know the word, and often I&#8217;ve had some surprises where my &#8220;context fill-in&#8221; actually was way off.</p>
<p>Also, as suggested above, it you&#8217;re missing too much terminology, it might be a hint you are in over your head and need to gain the pre-requisite knowledge.</p>
<h2>Learn something new outside Perl</h2>
<p>Everyone will tell you this. Stuck on Perl? Get some new vibes from Ruby. Your C-coding is getting you down, try Scala (<a href="http://creativekarma.com/ee.php/weblog/comments/my_verdict_on_the_scala_language/" target="_blank">should get you back to C soon enough</a>). And you can go further. <a href="http://use.perl.org/~Alias/journal/39661" target="_blank">Adam Kennedy says he gets inspiration from places like TED conferences, New Scientist or Economist.</a> Some people will suggest just learning anything can get you out of a rut.</p>
<p>However, there is a condition. If it is going to help your programming, it must involve some sort of <em>domain-transferable skills. </em>Not everything new you learn will necessarily do that. I&#8217;ve been doing digital photography for nearly ten years and have gotten to a decent level. <strong>It has absolutely not improved my programming in any way. </strong>It is far too <em>domain-specific</em>. Getting a degree in psychology, however, has plunged me forward on a lot of levels, from new learning skills to seeing new ways of solving problems and learning about how the brain does biological information processing. Studying Zen sometimes provides me with a focus that is very conductive to understanding difficult subjects. The same with learning mathematics, particularly discrete mathematics.</p>
<p>So consider well what you learn. Pick the right thing, and you might gain a unique perspective on programming or just sharpen your thinking. Pick the wrong thing and you are wasting good learning time on taking vacation shots.</p>
<p>Of course, you might want a whole and fulfilling life filled with culture and art too, but that&#8217;s not what this text is about.</p>
<h2>Accessing other peoples experience</h2>
<p><strong>Talk with people, and talk </strong><em><strong>with</strong></em><strong> them, not </strong><em><strong>to</strong></em><strong> them.</strong> Unless you are Ada Lovelace or Charles Babbage and invented this stuff, learning programming involves transferring knowledge from another human&#8217;s brain into your brain (I know some of you will lament this fact). One of the most effective ways of doing this, and the one way we are the most biologically disposed to, is talking combined with listening.  Reading is a hard-learnt skill that is piggy-backed on top of the visual system the last some-thousand years. Conversation, on the other hand, has a significant part of your head dedicated to it. Use that!</p>
<p><strong>Study the code of excellent programmers and learn from it</strong>. Avoid the code of bad programmers, and if you have to look at it, don&#8217;t learn from it. Perl is fantastic for this. As well as being a great code repository, CPAN is also a fabulous learning resource. In addition, the core modules are often very good and thorough code that has been optimized and looked after a lot. If you bring your laptop on the train and lose the connection to the net, study a core module.</p>
<p><strong>The problem of tacit knowledge</strong>. A problem of accelerating training towards an expert level is that the <strong>real </strong>expert knowledge is not the same as the knowledge written down in documentation and books. Rather, what actually sets a novice or an expert apart is unknown, or at least not explicitly known, to either. If you just squeeze 10 years worth of reading into someone in five years, they might just still be at the 5 year level in real skill, but with a lot of knowledge they don&#8217;t really know how to apply. This is related to the concept of declarative or procedural memory, or that <strong>what you read and what you do</strong> is remembered in completely different ways and places in your brain.</p>
<p>That, for example, is what things like <a href="http://p.einarsen.no/variables-and-the-roles-they-play/" target="_blank">the &#8220;variable roles&#8221; mentioned in a previous post</a> try to encode. They find how experts understand and use variables, and try to teach that to beginners instead of giving them the basic intro and letting them get the experience the hard way. How do this apply in a life-long learning perspective? Study the how and what people do, not only what they say (or write).  Also: Study design patterns. Don&#8217;t necessarily base your own software designs on them, but know them, as they encode expert experience that previously was <em>tacit</em>.</p>
<h2>Increase your physical learnability</h2>
<p>Up until recently, we thought you grew new neurons (brain cells) up to certain age, then it stops and from then on it went down hill. It is not the case. At least in the hippocampus, which is the center of forming new memories, neurogenesis is found to take place all through life.</p>
<p>But there is a condition&#8230;</p>
<p>It takes physical exercise, namely aerobic training &#8211; that means running, biking, rowing or anything that makes you pant and sweat for an extended period of time.</p>
<p>I&#8217;m sorry&#8230; but it will increase your learnability&#8230;</p>
<p>Furthermore, your brain needs the right chemicals to actually form new neurons. One major compound that can&#8217;t be synthesized by your body from normal foodstuffs is omega-3 fatty acids. Omega-3 is found repeatedly to increase general cognitive ability (meaning higher processing power in your head) under many conditions. <em>And you know you want more processing power as well as increased memory.</em> Omega-3 fatty acids can usually be bought as pure capsules, or they can be found in salmon and walnuts if you want to eat that every day.</p>
<p>But be careful with the portioning. Too high Omega-3 dosages can lead to thinning of the blood, and while you might want to accelerate your Perl learning until your gum bleeds, you didn&#8217;t read that here.</p>
<p>And the last, but not least, point, is to be well rested. The code-all-night pattern might work when you are teenager or young adult and physically don&#8217;t need as much sleep. After that, it will effectively decrease your hard-won cognitive abilities.</p>
<h2>And more?</h2>
<p>Believe it or not, but I would actually like to expand on most of the points above and provide some more evidence and put some numbers to the claims above. But I have to post my <a href="http://ironman.enlightenedperl.org/" target="_blank">Perl Ironman 10-day post</a> and that effectively limits the time.</p>
<p>So, please share how you learn, or your advice to <strong>increase your learning rate</strong>. I know some rather able Perl-programmers drop by here occasionally. If you managed to become a guru, please share what you have done different. Is it just a lot of years of experience? Or do you have a unique approach?</p>
]]></content:encoded>
			<wfw:commentRss>http://p.einarsen.no/accelerate-your-perl-learning/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The double hump of programming classes</title>
		<link>http://p.einarsen.no/the-double-hump-of-programming-classes/</link>
		<comments>http://p.einarsen.no/the-double-hump-of-programming-classes/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 15:32:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Graphs]]></category>
		<category><![CDATA[Teaching]]></category>

		<guid isPermaLink="false">http://p.einarsen.no/?p=132</guid>
		<description><![CDATA[Apparently, the distribution of marks in introductory courses to programming looks like this: How come? Some people just get it and some don&#8217;t? A failure of teaching? See the discussion at Mik&#8217;s blog. I don&#8217;t necessarily agree that this is caused by people falling behind and not being able to catch up (although that is [...]]]></description>
			<content:encoded><![CDATA[<p>Apparently, the distribution of marks in introductory courses to programming looks like this:</p>
<p><a href="http://blogs.kent.ac.uk/mik/2009/09/04/quality-oriented-teaching-of-programming/"><img class="alignnone" src="http://blogs.kent.ac.uk/mik/files/2009/09/chart1.png" alt="" width="480" height="308" /></a></p>
<p>How come? Some people just get it and some don&#8217;t? A failure of teaching?</p>
<p>See the <a href="http://blogs.kent.ac.uk/mik/2009/09/04/quality-oriented-teaching-of-programming/" target="_blank">discussion at Mik&#8217;s blog.</a></p>
<p>I don&#8217;t necessarily agree that this is caused by people falling behind and not being able to catch up (although that is probably also a problem).  If that was the case, you would probably see a skewed single peak distribution, as one of the commenters suggest.</p>
<p>Rather, I think the either/or explanation is the right. Now does that mean people in the left hump will never be able to learn, or are doomed to a life of poor understanding of programming? I think not, but how to move them to the &#8216;get it&#8217; group is another matter..</p>
]]></content:encoded>
			<wfw:commentRss>http://p.einarsen.no/the-double-hump-of-programming-classes/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

