<?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>Endlessly Curious &#187; Learning</title>
	<atom:link href="http://www.endlesslycurious.com/category/learning/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.endlesslycurious.com</link>
	<description>by Daniel Brown</description>
	<lastBuildDate>Thu, 03 Jun 2010 16:53:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Presentation Pet Peeves</title>
		<link>http://www.endlesslycurious.com/2009/02/09/presentation-pet-peeves/</link>
		<comments>http://www.endlesslycurious.com/2009/02/09/presentation-pet-peeves/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 09:00:15 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Lists]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1051</guid>
		<description><![CDATA[Have you heard the term &#8220;PowerPoint poisoning&#8220;?
I have come to dread presentations especially those that involve PowerPoint: this fear has developed over the years mostly due to sitting through way too many terrible presentations.  Here are several trends I have noticed in these painful presentations.


Reading the slides to the audience.
This is my number one complaint, [...]]]></description>
			<content:encoded><![CDATA[<p>Have you heard the term &#8220;<a href="http://www.dilbert.com/strips/comic/2000-08-16/">PowerPoint poisoning</a>&#8220;?</p>
<p>I have come to dread presentations especially those that involve PowerPoint: this fear has developed over the years mostly due to sitting through way too many terrible presentations.  Here are several trends I have noticed in these painful presentations.</p>
<ul>
<li>
<h4>Reading the slides to the audience.</h4>
<p>This is my number one complaint, most people can read faster than they can talk yet most presenters fall into the trap of reading their slides to their audience.  I read pretty fast, so I am usually finished reading the slide way before the presenter is finished reading the contents of the current slide.  I would rather be emailed the presentation so I could read it myself than have to sit through someone else reading it out to me without any extra embellishment.</li>
<li>
<h4><a href="http://office.microsoft.com/en-us/powerpoint/default.aspx">PowerPoint</a> encourages bullet point lists.</h4>
<p>The large text size, overuse of team or corporate logos and stylised templates encourages the use of bullet point lists.  Bullet points list in presentations are terrible as the text size prevents any sort of length or detail.  This means that the information has to be condensed to the point of being almost worthless.</li>
<li>
<h4>Lack of hand outs.</h4>
<p>Most presenters don&#8217;t give out hand outs: they expect the PowerPoint slide deck to be all the audience requires for future reference on the presentation, most are not even aware of the note feature built into PowerPoint for generating printed hand outs.  If you are giving any sort of technical presentation a handout that is more in depth than the presentation is a must.</li>
<li>
<h4>Slide layouts &amp; logos.</h4>
<p>To a lot of presenters it would seem that having a fancy PowerPoint template complete with corporate or team logo is more important than the actual content of their presentation.  I suspect that more time has been spent on the layout and logos of a lot of the presentations I have seen than the actual content.  Which is a disaster as the content is what is going to keep the audience engaged, not some fancy slide template or moving text.</li>
<li>
<h4>Lack of pictures.</h4>
<p>You see very little eye candy in most presentations, but having images gives your audience something to look at other than text.  We all know the phrase &#8216;a picture is worth a thousand words&#8217; yet the content of most presentations is mostly text not images.  This makes no sense as images are one of the most effective tools for the communication of ideas and concepts.</li>
</ul>
<p>I&#8217;d highly recommend reading this brief <a href="http://www.aaronsw.com/weblog/000931">article</a> which also talks about the pain of PowerPoint usage in particular and recommends a general product recall.  I think a lot of the issues I&#8217;ve outlined above about presentations can be traced to the assumption made by most presenters that they are just delivering information: this is false as merely delivering information is not enough.  You must teach your audience the content of your presentation, not throw the information at them and hope it just sticks (it won&#8217;t).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2009/02/09/presentation-pet-peeves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Effective Work Breaks</title>
		<link>http://www.endlesslycurious.com/2009/02/04/effective-work-breaks/</link>
		<comments>http://www.endlesslycurious.com/2009/02/04/effective-work-breaks/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 09:00:25 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Dogs]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Work Breaks]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1028</guid>
		<description><![CDATA[I have made an interesting discovery since I started taking our new puppies to work with me: I actually seem to be more productive now than I was before I started taking the puppies to work!  The pups generally need to be taken outside to relieve themselves and run off some energy every hour or [...]]]></description>
			<content:encoded><![CDATA[<p>I have made an interesting discovery since I started taking our new <a href="http://www.endlesslycurious.com/2009/01/26/alternative-linkage/">puppies</a> to work with me: I actually seem to be more productive now than I was before I started taking the puppies to work!  The pups generally need to be taken outside to relieve themselves and run off some energy every hour or so for about ten minutes.  These puppy induced breaks are fairly practicable and not skippable unless the pups are asleep at which point I think it is better to let sleeping dogs lie.</p>
<p>Previously I had been using programs like <a href="http://www.workrave.org/welcome/">Work Rave</a> and <a href="http://tech.inhelsinki.nl/antirsi/">Anti-RSI</a> to make sure I&#8217;m taking sufficient work breaks, mostly to keep me sane and free of RSI like injuries (I still recommend these programs).  I confess I am guilty of skipping breaks suggested by these applications fairly frequently, which perhaps is not a smart thing to do as it increases the likelihood of fatigue, injury and lowered productivity.  I had thought this system to be effective but I&#8217;m finding puppy breaks even more effective: possibly due to the lack of a skip option.  As puppies with full bladders cannot miss a break without risking an accident!</p>
<p>I think perhaps this lack of a skip option to puppy induced breaks is giving me more of a sense of having to make the most of the time between the breaks, this is helping me focus which results in increased productivity (which is not what I would have expected).  This is a most welcome and unexpected side effect to having the puppies at work with me: aside from the obvious benefits of canine companionship and having a very good excuse to go for a walk at lunch time!</p>
<p>I have found over the years that any sort of regular break gives me a chance to pause and reflect about my current task and that is very useful for considering options and possible solutions to problems.  The end result is that stopping to reflect about what I am currently doing regularly results in a superior end product than just hammering away at a task.</p>
<p>Do you have regular breaks and do they help or hinder your productivity?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2009/02/04/effective-work-breaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RE: Teaching students memory managment</title>
		<link>http://www.endlesslycurious.com/2008/11/24/re-teaching-students-memory-managment/</link>
		<comments>http://www.endlesslycurious.com/2008/11/24/re-teaching-students-memory-managment/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 21:00:27 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Teaching]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=817</guid>
		<description><![CDATA[Jani Hartikainen has written an excellent post in reply to my earlier post about teaching software engineering students memory management, and his post is well worth a read.  I started off writing a comment on his post as a reply but I ended up writing more than I expected as I refined my ideas.
I agree [...]]]></description>
			<content:encoded><![CDATA[<p>Jani Hartikainen has written an excellent <a href="http://codeutopia.net/blog/2008/11/24/programmers-education/">post</a> in reply to my earlier <a href="http://www.endlesslycurious.com/2008/11/20/teaching-students-memory-managment/">post</a> about teaching software engineering students memory management, and his post is well worth a read.  I started off writing a comment on his post as a reply but I ended up writing more than I expected as I refined my ideas.</p>
<p>I agree teaching a higher level language with built in memory management as a first programming language is the more humane option as far as first time students are concerned.  As learning your first programming language and all the associated concepts is hard enough without all the nasty memory related gotchas in a language like C or C++.  Although the nice thing about learning something like C or php (as Jani suggests) is that teaching object orientation can be avoided initially, as that particular concept does seem to be something that some students struggle with a lot the first time they encounter it.</p>
<p>However I do think a low level language that has manual memory management should be at least <em>experienced</em> by every programmer, as it is a fundamental concept of programming effectively.  And I believe that having minimal experience with some form of manual memory management would help most programmers write higher performance programs.  But perhaps I was being a bit over zealous recommending that everyone learns a language like C/C++ as a first language, although I think at least a short course featuring a language with manual memory management would be invaluable to all programmers.  The course would not even need to cover object orientation as you can teach that in higher level languages that are easier to manipulate than C++: the key point of the course would be to teach memory management and its implications for writing fast high quality software.</p>
<p>As much as I go on about knowing assembler, I admit its not something I <em>write</em> very often at all, however it is something that is incredibly handy to be able to <em>read</em> and <em>comprehend. </em>Even the most basic level of understanding of the instructions for loading data from or to memory and registers, branching and basic math operations would allow you to check the compiler has actually generated the assembly code you expected. This is especially useful for debugging unexpectedly slow code in compiler optimised builds.  You also don&#8217;t need to know about all the fancy vendor specific assembly instructions, as I&#8217;ve mentioned the basics are usually sufficient to be able to understand roughly what a slow piece of code is doing to then rewrite the higher level source code in a way that prompts compiler to generate faster assembly code.  Actually writing assembly code should always be the last resort and only done by experts after all other higher level refactorings are attempted, as higher level optimisation or refactoring work is usually more effective and easier to understand.  Also, assembler is not usually easily portable to other hardware platforms and most programmers find it harder to debug assembler than normal C/C++ source code.  Plus as Jani mentions it is scary to find a block of inline assembler in the C++ program you are working as it is much harder to decipher than regular source code unless it is very well documented.</p>
<p>This ability to check what is going on &#8216;under the hood&#8217; of your language is essential for those hard to track down bugs and when optimising your application for performance, especially where the compiler has reordered the program flow or generated unexpectidally slow code. This can also be applied to high level languages as well as C/C++: checking that the IL byte code generated by your C# compiler or the Java byte code generated by the JVM is doing what you expected can be very useful in understanding your program&#8217;s execution and performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/11/24/re-teaching-students-memory-managment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teaching students memory managment</title>
		<link>http://www.endlesslycurious.com/2008/11/20/teaching-students-memory-managment/</link>
		<comments>http://www.endlesslycurious.com/2008/11/20/teaching-students-memory-managment/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 09:00:42 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=796</guid>
		<description><![CDATA[Yesterday morning I spent a fascinating hour or so in a meeting listening to a very senior engineer give and in depth presentation about the performance characteristics of the low level memory systems on a console and the content of the presentation got me thinking about how software engineering is taught.  Specifically are students being [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday morning I spent a fascinating hour or so in a meeting listening to a very senior engineer give and in depth presentation about the performance characteristics of the low level memory systems on a console and the content of the presentation got me thinking about how software engineering is taught.  Specifically are students being taught enough about low level languages and the hardware, so that they have some experience of what is happening under the hood of these fancy modern memory managed languages like Java, C#, php, python or ruby?  If students are not being taught assembler or languages where you need to think about managing memory and the underlying hardware e.g. C or C++ how can they then be expected to program effectively in a higher level language?  As systems with finite resources like consoles have memory systems that are one of the biggest potential bottlenecks on the platform and also one of the most subtle to understand.</p>
<p>It used to be the case that students would be first taught assembler then a language like C before moving on to a higher level object orientated language like C++ or Java.  Although this was even starting to change when I went to university: the mainstream computer science students were being taught in Java from the start.  Although the course I was on started in C with some assembler plus hardware theory and then onto C++ but this was the exception.  Plus I&#8217;d already encountered assembler in high school too, which I&#8217;d imagine is no longer the case in high school computing classes today. Talking to the students we have had on placement at work recently, it sounds like C# and Java are now the languages that are mainly being taught.  This means only the theory of memory management and hardware concepts are being taught with no practical experience to reinforce that knowledge.</p>
<p>Why is this a big deal?  Well if a programmer does not understand how the system his high level language is running upon works, how can they then be expected to program that high level language in a way that takes advantage of the available hardware and system architecture?  Or at a minimum avoid the bottlenecks inherent on the particular hardware configuration they are working on?  For example how could they appreciate the potential performance implications of accessing a variable length array vs a fixed length array of structures in a key inner loop if they do not understand how these data types have been implemented in the underlying language libraries or how their underlying hardware system will process it?</p>
<p>Maybe this is something to do with our high performance requirements and that our platforms are closed systems with more finite resources compared to a common PC but we see this sort of thing a lot especially with new software engineers straight out of university.  The lack of understanding of the implications of the performance characteristics of our programming languages and our platform(s) hardware, leads these new software engineers to write code that is not only not as sound as a more senior engineer (which is to be expected) but also with much poorer performance characteristics.</p>
<p>This is not a problem with our students however, it is a problem with how they are <em>taught</em>.  I think part of the reason is that it is <em>harder </em>to teach someone a language like assembler or C or even C++ than a managed language like Java or C#.  As thinking about low level concepts like memory and cache management is not easy and concepts like pointers, memory alignment or functions pointers are not intuitive for many students, so I&#8217;d imagine it can be frustrating to teach those classes. And it is <em>easier</em> to teach object orientation in a language like C# or Java than C++ but that mean that we should skip straight to the memory manged high level languages?</p>
<p>So without fundamental knowledge of the basics that experience with lower level languages supply, it is very hard for that student to later write high performance applications without having to go back and learn the basics in their own time.  And I believe writing high performance software is something most software engineers will be required to do even in this Web 2.0 generation.  As anyone who has had to make a website scale to thousands of concurrent users can no doubt atest to the fact that performance is not just for those of us that program the more traditional high performance systems&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/11/20/teaching-students-memory-managment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reading for personal development</title>
		<link>http://www.endlesslycurious.com/2008/10/03/reading-for-career-development/</link>
		<comments>http://www.endlesslycurious.com/2008/10/03/reading-for-career-development/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 08:00:55 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=318</guid>
		<description><![CDATA[Reading books to help develop your career seems to be falling out of fashion of late, especially in Software Engineering where websites, mailing list and blogs are used to fill the gap.  I don&#8217;t think this is a completely healthy trend, as a lot of the best writing I&#8217;ve encountered on general software engineering, projects [...]]]></description>
			<content:encoded><![CDATA[<p>Reading books to help develop your career seems to be falling out of fashion of late, especially in Software Engineering where websites, mailing list and blogs are used to fill the gap.  I don&#8217;t think this is a completely healthy trend, as a lot of the best writing I&#8217;ve encountered on general software engineering, projects and people has been in books, not the internet.  However I have found the internet, blogs and email lists to be infinitely better than books for providing solutions to specific technical problems e.g, how do I parse XML in C# 1.0?</p>
<p>I think this trend away from books has been partially brought about by the production and proliferation of books teaching about programming languages and technical issues which date quickly instead of the software engineering principles or design which have a much longer shelf life.  I think this occurred because although at first it was possible for publishers and writers to keep up with the rate of change in programming languages, environments and technologies, it would seem that for the last few years the rate of change has been greater than the publishers could maintain, with a few exceptions.  This has lead to a flooding of the shelves of bookstores with books on version 1 of language X when version 2 is the latest version and on Office 2003 when Office 2007 is now out.  Online sources are much better suited to keep up with the latest news and developments for language/technologies and to provide up to date examples and tutorials. This does not mean books should be ignored but a lot of people seem to be assuming this.</p>
<p>Books that cover subjects like development methodologies, software design, design patterns, problem solving, testing, people management, planning, running teams and other non technology/language specific areas are a vital way to pass on knowledge and information to those new to industry.  However, the increasing trend of relying on online sources is meaning that a lot of new starts in software engineering have not read the classic texts, unless forced to in university.  By not reading these texts they miss out on learning from those that have gone before them and are thus doomed to repeat the mistakes of the past until they learn the hard, slow and inefficient way.</p>
<p>Part of my desire to start this blog was to have on it a recommended reading page, listing the texts I feel every software engineer regardless of platform, language or methodolgy should read in order to &#8217;stand on the shoulders of giants&#8217; and avoid the bane of our discipline which is reinventing the wheel over and over again.  I am currently working on the first pass of my list of recommended reading and hope to have it posted up in the next week or two.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/10/03/reading-for-career-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reflection Checklist</title>
		<link>http://www.endlesslycurious.com/2008/09/30/reflection-checklist/</link>
		<comments>http://www.endlesslycurious.com/2008/09/30/reflection-checklist/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 08:00:37 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Lists]]></category>
		<category><![CDATA[Reflection]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=365</guid>
		<description><![CDATA[Slight deviation from the normal Tuesday &#38; Thursday visualisations this week, due to OmniGraffle&#8217;s (an excellant Visio substitute) trial version expiring on me so I can&#8217;t do any visualisations until I buy a copy at the weekend.  So this week I&#8217;m going to do some lists instead!
What is the task?

Describe the task.
Describe the desired output [...]]]></description>
			<content:encoded><![CDATA[<p>Slight deviation from the normal Tuesday &amp; Thursday visualisations this week, due to <a href="http://www.omnigroup.com/applications/OmniGraffle/">OmniGraffle</a>&#8217;s (an excellant Visio substitute) trial version expiring on me so I can&#8217;t do any visualisations until I buy a copy at the weekend.  So this week I&#8217;m going to do some lists instead!</p>
<h4>What is the task?</h4>
<ul>
<li>Describe the task.</li>
<li>Describe the desired output of the task.</li>
</ul>
<h4>How are you performing the task?</h4>
<ul>
<li>Describe the steps you take to perform the task.</li>
</ul>
<h4>Could you measure your performance?</h4>
<ul>
<li>Can you think of a metric that would let you benchmark your performance e.g, time taken.</li>
<li>Measure (or estimate) using the metric.</li>
</ul>
<h4>What steps are you performing well?</h4>
<ul>
<li>List the steps you are performing well.</li>
</ul>
<h4>What steps are you not performing well?</h4>
<ul>
<li>List the steps you are not performing well.</li>
</ul>
<h4>How could you improve your performance?</h4>
<ul>
<li>List your ideas to improve each step.</li>
</ul>
<h4>Try your improvement ideas.</h4>
<ul>
<li>List the results of your ideas here, with metrics if possible.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/30/reflection-checklist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reflection for improved performance</title>
		<link>http://www.endlesslycurious.com/2008/09/29/reflection-for-improved-performance/</link>
		<comments>http://www.endlesslycurious.com/2008/09/29/reflection-for-improved-performance/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 08:00:29 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Reflection]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=324</guid>
		<description><![CDATA[Regularly taking time to pause and then review and reflect on how you could improve, and then experimenting based on those thoughts is key to personal improvement and increasing productivity.   This technique has really been highlighted to me since starting to use Agile development methodologies like Scrum where at at the end of each [...]]]></description>
			<content:encoded><![CDATA[<p>Regularly taking time to pause and then review and reflect on how you could improve, and then experimenting based on those thoughts is key to personal improvement and increasing productivity.   This technique has really been highlighted to me since starting to use <a href="http://en.wikipedia.org/wiki/Agile_development">Agile</a> development methodologies like <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> where at at the end of each sprint (short iteration period) a <a href="http://en.wikipedia.org/wiki/Retrospective#Software_engineering">retrospective meeting</a> is held.  These meetings allow those working on the sprint to pause, review and reflect on their performance during that sprint and to discuss how performance could be improved.  The regular retrospective meeting is in my mind one of the most important innovations introduced by Scrum and Agile, as otherwise retrospective activities were limited to once per development cycle after shipping the product.</p>
<p>I think that those short development iterations and regular reflection sessions at the end of each iteration  introduced by Agile/Scrum are perhaps the two components of these methodologies that help drive process improvement the most, but they are perhaps also the easiest to overlook.  It would seem that the natural inclination for most workers (especially when stressed) is to not stop and think about <em>how</em> they are working, which means they do not truly understand their work flow and this limits their ability to improve their performance.</p>
<p>Some of the most productive individuals I&#8217;ve met, or have heard about, are those that regularly take the time to pause and think about <em>how</em> they are working not just about <em>what</em> they are working on and then experiment to improve.  This habit goes against the instinctual urge most of us seem to have when &#8216;busy&#8217; which is to not stop to think about the <em>how</em> as we think we don&#8217;t have the time to spare.  This is a huge misconception, as taking time to pause and think about <em>how</em> we are doing things and <em>how</em> we can improve can yield large gains in terms of increasing productivity and reducing frustration.</p>
<p>Another overlooked aspect of reflection is that it can make a mundane repetitive task more interesting and stimulating by turning it into a personal challenge: can you tune your work flow and improve your performance on a set task?  For example, habit can even be applied to repetitive manual tasks like mowing the lawn: can I mow the loan in a shorter period, where can I save time or remove repetition?</p>
<p>In summary, pausing and reflecting during your working day and then experimenting to improve can help drive a habit of efficiency which will increase your productivity and potentially improve the development process for your whole team, and this is what all development efforts need to suceed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/29/reflection-for-improved-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Note Taking</title>
		<link>http://www.endlesslycurious.com/2008/09/26/note-taking/</link>
		<comments>http://www.endlesslycurious.com/2008/09/26/note-taking/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:00:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Notes]]></category>
		<category><![CDATA[Oragisation]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=249</guid>
		<description><![CDATA[Note taking is something I&#8217;ve touched on before as part of problem solving when stuck, however I believe it is a topic that deserves a post of its own.  Note taking should be a constant activity, most usually I&#8217;ve seen this done with a paper notebook and pen, in fact most jobs I&#8217;ve been in [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-253" title="Microsoft OneNote" src="http://www.endlesslycurious.com/wp-content/uploads/2008/09/onenote.gif" alt="" width="240" height="147" />Note taking is something I&#8217;ve touched on <a href="http://www.endlesslycurious.com/2008/09/10/becoming-unstuck/">before</a> as part of problem solving when stuck, however I believe it is a topic that deserves a post of its own.  Note taking should be a constant activity, most usually I&#8217;ve seen this done with a paper notebook and pen, in fact most jobs I&#8217;ve been in supply these essential tools which suggests note taking is <em>expected</em> for software engineers.  The more stationary <span style="text-decoration: line-through;">obsessed</span> oriented note takers may start to use their own notebooks and pens to suit their preferences and writing style: I favor small ruled <a href="http://www.moleskine.com/index_eng.php">Moleskin</a> notebooks and a <a href="http://www.lamy.com/eng/b2c/vista/012">LAMA fountain pen</a>.  The even more organised amongst us may even use some form of <a href="http://en.wikipedia.org/wiki/Shorthand">shorthand</a> writing to speedup note taking during meetings.</p>
<p><img class="alignleft size-full wp-image-255" title="Omni Outliner" src="http://www.endlesslycurious.com/wp-content/uploads/2008/09/omnioutliner.jpg" alt="" width="240" height="150" />The next step in note taking is to start using note taking software, I was first introduced to this concept by a co-worker using <a href="http://www.omnigroup.com/applications/omnioutliner/">Omni Outliner</a> on his Apple Powerbook on a project to manage his personal notes and thoughts on his work.  I&#8217;ve since started using note taking software in the form of <a href="http://office.microsoft.com/en-us/onenote/default.aspx">Microsoft OneNote</a> at work, <a href="http://www.omnigroup.com/applications/omnioutliner/">Omni Outliner</a> at home on my iMac and the humble Memo application on my Palm Z22 on the go.  You can even use web based note taking software like Google&#8217;s <a href="http://www.google.com/notebook/">Notebook</a> application.</p>
<p>The features that attracted me to note taking software:</p>
<ul>
<li>The ease of organisation possible, its simple to reorganise notes digitally.</li>
<li>The ability to search through all my notes.</li>
<li>Copy&#8217;n'pasting information in many forms e.g., text, pictures, movies etc directly into my notes.</li>
<li>The fact I type faster than I can write!</li>
<li>Built-in spelling and grammar checking.</li>
<li>I don&#8217;t have to worry about losing information due to ink fading or my hand writing being hard to read.</li>
</ul>
<p><img class="alignright size-full wp-image-257" title="Sony ICD-BP100" src="http://www.endlesslycurious.com/wp-content/uploads/2008/09/sonyicd-bp100.jpg" alt="" width="147" height="275" />I must admit I&#8217;m still a relative novice at using note taking software and I&#8217;ve yet to start fully using the more powerful features available. I still tend to write digital notes much like I&#8217;d write them in my note book and then tagging the notes as I see fit.  So my notes are more like a personal blog (or PLOG as I like to think of them).  This helps me record and remember my work and those little details I always seem to forget because I only need them every six months.</p>
<p>The next stage of note taking I want to try is to attempt to improve my notes from meetings, which to date have typically just been writing in a note book but I&#8217;d like to try recording meetings using a digital voice recorder.  This is not to keep the recordings as evidence but to allow me to make better notes after the meeting, as with a recording I can replay the conversation till I grasp it fully without having to bother anyone.  I&#8217;ll be interested to see what the reaction to recording a meeting is, as I guess some folk will be suspicious that I will keep the recording even when I have no intention of doing so.</p>
<p>I&#8217;d also like to start getting organised enough to start writing notes for blog posts before I write the actual posts but so far that has not happened.  My dream is to have an Apple <a href="http://www.apple.com/ca/macbookair/">Macbook Air</a> so I can have Omni Outliner with me at all times which I think would help a lot rather than having to switch between note applications between home and work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/26/note-taking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Explanations</title>
		<link>http://www.endlesslycurious.com/2008/09/17/explanations/</link>
		<comments>http://www.endlesslycurious.com/2008/09/17/explanations/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 08:00:10 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Explaining]]></category>
		<category><![CDATA[Teaching]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=165</guid>
		<description><![CDATA[I recently helped a co-worker explain a new concept to another co-worker, as they were struggling to explain it themselves even though they were experienced working with the technology they wanted to explain.  This started me thinking afterward about the art of explaining something complicated without leaning on the established jargon for that subject, as [...]]]></description>
			<content:encoded><![CDATA[<p>I recently helped a co-worker explain a new concept to another co-worker, as they were struggling to explain it themselves even though they were experienced working with the technology they wanted to explain.  This started me thinking afterward about the art of explaining something complicated without leaning on the established jargon for that subject, as the person you&#8217;re explaining things to is unlikely to know the jargon either.</p>
<p>During university I worked part time as an IT technician, which I think forced me to deal with explaining things to people without technical knowledge of the concept I was explaining. At first I was surprised at how unsuccessful I was at this and that got me thinking about why. Being able to explain something complicated in a manner where someone who has no technical knowledge can understand, is I think a very important skill to have as these sort of explanations will be required often in most sorts of careers.  And often it is those who can communicate most efficiently that succeed more than those that are the most technically proficient, as what use is proficiency or ability if no one can understand you?</p>
<p>The key to becoming good at explanations has a few key parts in my mind:</p>
<ul>
<li><strong>Paraphrasing while learning:</strong> When learning something new, it is highly beneficial to then paraphrase the new information in your own words.  This practice has two benefits: first you will quickly find out if you understand what you&#8217;ve just read and secondly it will get you into the habit of thinking about the information using your own terms rather than just the terms in the texts (which is what you&#8217;d be doing if you simply memorised the text).</li>
<li><strong>Limiting your explanation: </strong>If you&#8217;re anything like me you&#8217;ll want to be as helpful as possible when explaining something, as well as exercise your whole range of knowledge on the topic at hand.  This is actually the worst thing you could do, as if you think back to when you last learned something you&#8217;ll most likely realise you didn&#8217;t learn the whole subject in one sitting but by digesting it a piece at a time.  When you are explaining something you are effectively teaching, which means someone else is learning and that means you need to keep your explanation short and compact in scope to give your student a hope of remembering it.</li>
<li><strong>Paraphrasing to verify learning:</strong> One of the best ways to check someone has understood your explanation is to ask them to paraphrase it back to you in their own words. This is not easy to do if they are not used to it so be patient; if it takes them a few attempts, they will improve with practice.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2008/09/17/explanations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
