<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: How To Write A Good Programming Test</title>
	<atom:link href="http://www.doolwind.com/blog/how-to-write-a-good-programming-test/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/</link>
	<description>Pragmatic Thoughts On Game Development</description>
	<lastBuildDate>Fri, 27 Jan 2012 00:53:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: 开发团队招募程序员的六个编程测试技巧 &#124; GamerBoom.com 游戏邦</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-23246</link>
		<dc:creator>开发团队招募程序员的六个编程测试技巧 &#124; GamerBoom.com 游戏邦</dc:creator>
		<pubDate>Tue, 23 Aug 2011 14:25:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-23246</guid>
		<description>[...] cut list of questions that try and find a specific type of programmer (whether good or not). (Source: Doolwind&#8217;s Game Coding Blog)   分享到： QQ空间 新浪微博 开心网 [...]</description>
		<content:encoded><![CDATA[<p>[...] cut list of questions that try and find a specific type of programmer (whether good or not). (Source: Doolwind&#8217;s Game Coding Blog)   分享到： QQ空间 新浪微博 开心网 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sergio</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-412</link>
		<dc:creator>Sergio</dc:creator>
		<pubDate>Tue, 13 Nov 2007 14:19:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-412</guid>
		<description>Hey guys, Alistair is right. In most of cases using friend relationships between classes is a sign of bad design.
Of course by some exceptions like Factory pattern etc.</description>
		<content:encoded><![CDATA[<p>Hey guys, Alistair is right. In most of cases using friend relationships between classes is a sign of bad design.<br />
Of course by some exceptions like Factory pattern etc.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Wilson</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-411</link>
		<dc:creator>Alex Wilson</dc:creator>
		<pubDate>Sun, 16 Sep 2007 06:08:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-411</guid>
		<description>I was looking for a good programming test to save my time not inviting programmers with poor programming skills to the interview. Does anybody knows a PHP similar to interactive Java coding test at http://www.betterprogrammer.com ?</description>
		<content:encoded><![CDATA[<p>I was looking for a good programming test to save my time not inviting programmers with poor programming skills to the interview. Does anybody knows a PHP similar to interactive Java coding test at <a href="http://www.betterprogrammer.com" rel="nofollow">http://www.betterprogrammer.com</a> ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Simon Strandgaard</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-410</link>
		<dc:creator>Simon Strandgaard</dc:creator>
		<pubDate>Mon, 27 Aug 2007 22:45:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-410</guid>
		<description>In my upcoming program (42000 loc), I use friend a few times in the backend, for not exposing too much functionality to the frontend. Friends is really useful with the pimpl ideom.

prompt&gt; grep friend *
facade.h:       friend class Design;
facade.h:       friend class DesignData;
facade.h:       friend class FacadeData;
facade.h:       friend class Facade;
facade.h:       friend class BrickData;
facade.h:       friend class Brick;
facade.h:       friend class Saver;
facade.h:       friend class BrickData;
facade.h:       friend class Design;
facade.h:       friend class DesignData;
facade.h:       friend class Facade;
facade.h:       friend class ParameterData;
facade.h:       friend class FileIO2;
facade.h:       friend class Saver;
facade.h:       friend class Loader;
facade.h:       friend class UpdateParameterEvent;
facade.h:       friend class ColorParameter;
facade.h:       friend class FloatParameter;
facade.h:       friend class InfileParameter;
facade.h:       friend class IntegerParameter;
facade.h:       friend class ItemParameter;
facade.h:       friend class StringParameter;
intern.h:       friend class BrickData;
intern.h:       friend class BrickData;
intern.h:       friend class BrickData;
intern.h:       friend class BrickData;
intern.h:       friend class BrickData;
intern.h:       friend class BrickData;
intern.h:       friend class BrickData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class Saver;
parameter.h:    friend class ParamToXML;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class Design;
parameter.h:    friend class ParameterData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class FloatParameterData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class IntegerParameterData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class ParamEncode;
parameter.h:    friend class ItemParameterData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class ColorParameterData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class InfileParameterData;
parameter.h:    friend class Brick;
parameter.h:    friend class BrickData;
parameter.h:    friend class XMLToParam;
parameter.h:    friend class ParamDecode;
parameter.h:    friend class StringParameterData;
prompt&gt;

People have different skills, some has good understanding of the language, others are architects, others has collaboration skills, and yet other are multitalented. Tests for a specific thing may rule out good people.</description>
		<content:encoded><![CDATA[<p>In my upcoming program (42000 loc), I use friend a few times in the backend, for not exposing too much functionality to the frontend. Friends is really useful with the pimpl ideom.</p>
<p>prompt&gt; grep friend *<br />
facade.h:       friend class Design;<br />
facade.h:       friend class DesignData;<br />
facade.h:       friend class FacadeData;<br />
facade.h:       friend class Facade;<br />
facade.h:       friend class BrickData;<br />
facade.h:       friend class Brick;<br />
facade.h:       friend class Saver;<br />
facade.h:       friend class BrickData;<br />
facade.h:       friend class Design;<br />
facade.h:       friend class DesignData;<br />
facade.h:       friend class Facade;<br />
facade.h:       friend class ParameterData;<br />
facade.h:       friend class FileIO2;<br />
facade.h:       friend class Saver;<br />
facade.h:       friend class Loader;<br />
facade.h:       friend class UpdateParameterEvent;<br />
facade.h:       friend class ColorParameter;<br />
facade.h:       friend class FloatParameter;<br />
facade.h:       friend class InfileParameter;<br />
facade.h:       friend class IntegerParameter;<br />
facade.h:       friend class ItemParameter;<br />
facade.h:       friend class StringParameter;<br />
intern.h:       friend class BrickData;<br />
intern.h:       friend class BrickData;<br />
intern.h:       friend class BrickData;<br />
intern.h:       friend class BrickData;<br />
intern.h:       friend class BrickData;<br />
intern.h:       friend class BrickData;<br />
intern.h:       friend class BrickData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class Saver;<br />
parameter.h:    friend class ParamToXML;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class Design;<br />
parameter.h:    friend class ParameterData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class FloatParameterData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class IntegerParameterData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class ParamEncode;<br />
parameter.h:    friend class ItemParameterData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class ColorParameterData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class InfileParameterData;<br />
parameter.h:    friend class Brick;<br />
parameter.h:    friend class BrickData;<br />
parameter.h:    friend class XMLToParam;<br />
parameter.h:    friend class ParamDecode;<br />
parameter.h:    friend class StringParameterData;<br />
prompt&gt;</p>
<p>People have different skills, some has good understanding of the language, others are architects, others has collaboration skills, and yet other are multitalented. Tests for a specific thing may rule out good people.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mythobeast</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-409</link>
		<dc:creator>Mythobeast</dc:creator>
		<pubDate>Mon, 20 Aug 2007 22:36:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-409</guid>
		<description>I have to agree with the author about Friend classes.  The only time I&#039;ve used Friends in 15 years is when using a specific form of unit testing where each object had a friended object that performed tests on it.  Topics like this are just never used until someone insists it be done a certain way, and by then I figure I can research it.

If you expecting candidates to be experts on aspects of a language that they never use, then you&#039;re looking for people who spend a lot of their research time on things that aren&#039;t usually valuable and you can expect them to spend their programming time the same way.

I&#039;d like to toss in another bit about trick questions.  There are many things that are called &quot;trick questions&quot;, including those for which there are no right answer (e.g. &quot;what&#039;s your worst trait?&quot;).  I think that what he&#039;s talking about are the questions for which the answer is either completely non-intuitive, or for which the intuitive answer is the wrong one.

Of the three, the first is somewhat useful because it can tell you how many interviews the person&#039;s been through.  If they have good answers for numerous of that type, then they&#039;ve been doing a lot of interviewing.  Not that this is meaningful, but it does tell you something.  Also, you get the occasional idiot that lets slip that they have their dead mother in their basement.

The second type is sometimes useful to see how people approach a difficult or insoluable problem, or again to see if they interview a lot or regularly read Mensa magazines.  Lots of time for little benefit, as the author says.

The third type should always be avoided because they&#039;re usually presented as a way of allowing the interviewer to seem smarter than the interviewee.  While we&#039;re at it, any problem presented to the interviewee is bad if it&#039;s geared towards making them look or feel stupid.  You don&#039;t want to create a combative relationship with all of your employees before they get in the door.

Good job, Doolwind.</description>
		<content:encoded><![CDATA[<p>I have to agree with the author about Friend classes.  The only time I&#8217;ve used Friends in 15 years is when using a specific form of unit testing where each object had a friended object that performed tests on it.  Topics like this are just never used until someone insists it be done a certain way, and by then I figure I can research it.</p>
<p>If you expecting candidates to be experts on aspects of a language that they never use, then you&#8217;re looking for people who spend a lot of their research time on things that aren&#8217;t usually valuable and you can expect them to spend their programming time the same way.</p>
<p>I&#8217;d like to toss in another bit about trick questions.  There are many things that are called &#8220;trick questions&#8221;, including those for which there are no right answer (e.g. &#8220;what&#8217;s your worst trait?&#8221;).  I think that what he&#8217;s talking about are the questions for which the answer is either completely non-intuitive, or for which the intuitive answer is the wrong one.</p>
<p>Of the three, the first is somewhat useful because it can tell you how many interviews the person&#8217;s been through.  If they have good answers for numerous of that type, then they&#8217;ve been doing a lot of interviewing.  Not that this is meaningful, but it does tell you something.  Also, you get the occasional idiot that lets slip that they have their dead mother in their basement.</p>
<p>The second type is sometimes useful to see how people approach a difficult or insoluable problem, or again to see if they interview a lot or regularly read Mensa magazines.  Lots of time for little benefit, as the author says.</p>
<p>The third type should always be avoided because they&#8217;re usually presented as a way of allowing the interviewer to seem smarter than the interviewee.  While we&#8217;re at it, any problem presented to the interviewee is bad if it&#8217;s geared towards making them look or feel stupid.  You don&#8217;t want to create a combative relationship with all of your employees before they get in the door.</p>
<p>Good job, Doolwind.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doolwind</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-408</link>
		<dc:creator>Doolwind</dc:creator>
		<pubDate>Tue, 14 Aug 2007 23:24:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-408</guid>
		<description>RohoMech-

Thanks again for your thoughts.  You don&#039;t need to concede your points though :).

I really like to have someone explain the way they are solving a problem, and I enjoy doing it just for myself.  It can be quite interesting to see how different approaches can come to the same conclusion/code.

&quot;I’ll probably be given a task, complete it, and report about how things were done.&quot;

That&#039;s actually a really good idea.  I think that reporting how tasks were completed to other members (particularly senior ones) is a good way of making sure the problems are solved in their most optimal way.  This also encourages the seniors to share some of their knowledge if they&#039;ve solved the same problem slightly differently.</description>
		<content:encoded><![CDATA[<p>RohoMech-</p>
<p>Thanks again for your thoughts.  You don&#8217;t need to concede your points though <img src='http://www.doolwind.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>I really like to have someone explain the way they are solving a problem, and I enjoy doing it just for myself.  It can be quite interesting to see how different approaches can come to the same conclusion/code.</p>
<p>&#8220;I’ll probably be given a task, complete it, and report about how things were done.&#8221;</p>
<p>That&#8217;s actually a really good idea.  I think that reporting how tasks were completed to other members (particularly senior ones) is a good way of making sure the problems are solved in their most optimal way.  This also encourages the seniors to share some of their knowledge if they&#8217;ve solved the same problem slightly differently.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RohoMech</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-407</link>
		<dc:creator>RohoMech</dc:creator>
		<pubDate>Tue, 14 Aug 2007 21:46:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-407</guid>
		<description>Doolwind - np, always happy to contribute to a good post.

#1 - Marking things as friend is sorta important, our libraries would expose a lot of functions then.  As a matter of fact, C# even the notion of Friend Assemblies (which is fantastic for writing Unit tests).

But, as you&#039;re basing this post of your experience, we&#039;re just going to be arguing in circles so I&#039;ll concede the point.

#6 - In terms of this, some of my interviews had lengthy exams.  But few of them actually had me explain my answers.  Explaining what I wrote imo is a great interview approach, because it mirrors how I&#039;ll be coding at work.  I&#039;ll probably be given a task, complete it, and report about how things were done.  But once again, this can vary greatly from job to job, so I&#039;ll concede this as well.</description>
		<content:encoded><![CDATA[<p>Doolwind &#8211; np, always happy to contribute to a good post.</p>
<p>#1 &#8211; Marking things as friend is sorta important, our libraries would expose a lot of functions then.  As a matter of fact, C# even the notion of Friend Assemblies (which is fantastic for writing Unit tests).</p>
<p>But, as you&#8217;re basing this post of your experience, we&#8217;re just going to be arguing in circles so I&#8217;ll concede the point.</p>
<p>#6 &#8211; In terms of this, some of my interviews had lengthy exams.  But few of them actually had me explain my answers.  Explaining what I wrote imo is a great interview approach, because it mirrors how I&#8217;ll be coding at work.  I&#8217;ll probably be given a task, complete it, and report about how things were done.  But once again, this can vary greatly from job to job, so I&#8217;ll concede this as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doolwind</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-406</link>
		<dc:creator>Doolwind</dc:creator>
		<pubDate>Tue, 14 Aug 2007 03:17:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-406</guid>
		<description>RohoMech-

Thanks for you thoughts.

#1 - I&#039;d like to be proven incorrect on this.  It just seems strange that most people I know haven&#039;t used friends before.  If you do use friends, are they one of the most important things you use? If not, would it be better to use a different subject to focus questions on?

#2 - I totally agree that you need programmers to understand code, and that they shouldn&#039;t always rely on the compiler.  Having said that, I don&#039;t think that making a programmer sift through 10-50 lines of code to find an error is the best way to find out if they are a good programmer.

#6 - The main point here is that it&#039;s far easier to figure out thought processes in an interview rather than simply what their answer is to a test.  You can certainly make assumptions about their thought process based on an answer, however trying to gain too much insight into this through a test can be an issue.</description>
		<content:encoded><![CDATA[<p>RohoMech-</p>
<p>Thanks for you thoughts.</p>
<p>#1 &#8211; I&#8217;d like to be proven incorrect on this.  It just seems strange that most people I know haven&#8217;t used friends before.  If you do use friends, are they one of the most important things you use? If not, would it be better to use a different subject to focus questions on?</p>
<p>#2 &#8211; I totally agree that you need programmers to understand code, and that they shouldn&#8217;t always rely on the compiler.  Having said that, I don&#8217;t think that making a programmer sift through 10-50 lines of code to find an error is the best way to find out if they are a good programmer.</p>
<p>#6 &#8211; The main point here is that it&#8217;s far easier to figure out thought processes in an interview rather than simply what their answer is to a test.  You can certainly make assumptions about their thought process based on an answer, however trying to gain too much insight into this through a test can be an issue.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RohoMech</title>
		<link>http://www.doolwind.com/blog/how-to-write-a-good-programming-test/comment-page-1/#comment-405</link>
		<dc:creator>RohoMech</dc:creator>
		<pubDate>Mon, 13 Aug 2007 20:51:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=81#comment-405</guid>
		<description>So, in regards to your &quot;friends&quot; in #1, I think that&#039;s actually a really useful feature.  An example, if you&#039;re writing an engine, you can have &quot;private&quot; functions inside the engine classes by marking the other classes as friends.

I don&#039;t disagree with your point, just your example :-P

#2 I do disagree with, especially for projects which have massive build times...like 20+ minutes, then its great to have coders that know what compiling code looks like :-P  But yea, the trick questions / trivia about the language is usually worthless, but it can indicate how much time the canidate has put into learning the language.

#3,4,5 I think its a great points, especially #4 thanks for the tip!

#6 - That&#039;s what the test is supposed to show anyways right?  How the candidate thinks, and I think your suggestions of using a white-board and having the canidate think out loud are spot on.

Nice post!</description>
		<content:encoded><![CDATA[<p>So, in regards to your &#8220;friends&#8221; in #1, I think that&#8217;s actually a really useful feature.  An example, if you&#8217;re writing an engine, you can have &#8220;private&#8221; functions inside the engine classes by marking the other classes as friends.</p>
<p>I don&#8217;t disagree with your point, just your example <img src='http://www.doolwind.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>#2 I do disagree with, especially for projects which have massive build times&#8230;like 20+ minutes, then its great to have coders that know what compiling code looks like <img src='http://www.doolwind.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />   But yea, the trick questions / trivia about the language is usually worthless, but it can indicate how much time the canidate has put into learning the language.</p>
<p>#3,4,5 I think its a great points, especially #4 thanks for the tip!</p>
<p>#6 &#8211; That&#8217;s what the test is supposed to show anyways right?  How the candidate thinks, and I think your suggestions of using a white-board and having the canidate think out loud are spot on.</p>
<p>Nice post!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

