<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Making the Complex Simple &#187; Interview</title>
	<atom:link href="http://simpleprogrammer.com/category/interview/feed/" rel="self" type="application/rss+xml" />
	<link>http://simpleprogrammer.com</link>
	<description>Software Development from John Sonmez&#039;s Perspective</description>
	<lastBuildDate>Thu, 17 May 2012 13:24:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='simpleprogrammer.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Making the Complex Simple &#187; Interview</title>
		<link>http://simpleprogrammer.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://simpleprogrammer.com/osd.xml" title="Making the Complex Simple" />
	<atom:link rel='hub' href='http://simpleprogrammer.com/?pushpress=hub'/>
		<item>
		<title>Getting Up to BAT: Hiring an Automation Lead</title>
		<link>http://simpleprogrammer.com/2011/02/23/getting-up-to-bat-hiring-an-automation-lead/</link>
		<comments>http://simpleprogrammer.com/2011/02/23/getting-up-to-bat-hiring-an-automation-lead/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 05:03:39 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[BAT]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Interview]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2011/02/23/getting-up-to-bat-hiring-an-automation-lead/</guid>
		<description><![CDATA[This is my first in a series of posts about getting to fully automated blackbox testing, or BAT, as I like to call it. In my last post in the Back to Basics series, I mentioned that I would begin this series with the intent of showing you step by step how to go from [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=1264&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is my first in a series of posts about getting to fully automated blackbox testing, or BAT, as I like to call it.</p>
<p>In my <a href="http://simpleprogrammer.com/2011/02/05/back-to-basics-becoming-bat-man/">last post in the Back to Basics series</a>, I mentioned that I would begin this series with the intent of showing you step by step how to go from no automation to a quality BAT infrastructure.</p>
<p>By the end of this series you should have the information you need to actually get automated testing going in your organization instead of just talking about it.</p>
<p>First stop on this train is hiring an automation lead.</p>
<h2>Don’t doom yourself before you start</h2>
<p>If you think you are going to create BATs, but you are not going to have at least 1 dedicated resource to doing the job of getting this all going, you are probably bound for failure.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/02/doom4.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="DOOM4" border="0" alt="DOOM4" src="http://complextosimple.files.wordpress.com/2011/02/doom4_thumb.jpg?w=474&h=452" width="474" height="452" /></a></p>
<p><strong>Listen up, because this is the single biggest mistake that most organizations make when trying to get BATs up.</strong></p>
<p>This mistake is thinking that you can get your QA team to get this going and you can part time some developers onto the project, but not having a dedicated resource.</p>
<p>Why is this absolutely absurd and you should expect it to fail?&#160; Because, in order to get an infrastructure to support your BATs, you are going to need to basically design and create a testing framework that is tailored to the business domain of your application.</p>
<p>Blah, what?&#160; Ok, in simple terms.&#160; Someone is going to need to design and build an automation framework.</p>
<p>If you think you are just going to buy some tool and use it to record test scripts, you are wrong.&#160; That approach simply is not going to work.&#160; I won’t get into why here, but I have <a href="http://simpleprogrammer.com/2009/12/18/automated-functional-testing-record-or-program/">written on it before in the past</a>, and if you are interested, let me know and I’ll go much more in depth.</p>
<p>Think about this, do you want your QA team, as good as they may be at QA work, designing and building an automation framework?&#160; Give them a few C# or Java classes and have their first real coding work be to design a complex system?</p>
<p>How about a developer who has “real” work and can only devote part time to designing what may end up becoming one of the most important parts of your infrastructure?</p>
<p>It is fine to pull a developer off of the main product and put them in this role until it is up and running, but make no mistake, you need a dedicated resource.</p>
<p>You are going to want to a well designed maintainable automation framework, because the ease of use of that framework will determine how easy or not it is to write automated tests that use that framework.</p>
<h2></h2>
<h2>I recommend getting someone who has done it before</h2>
<p>Why?&#160; Because creating an automation framework is much different than developing your software and it is much different than writing tests.&#160; It really requires a special skill set that is not so easily acquired without the experience of having done this before.</p>
<p>I also think it is fine to use a developer resource, but if you do, you want to try to get a more senior developer to take this role.</p>
<p>Here is a list of some of the skills that I think are important which may also make it much more clear why I am recommending a specialist in this case:</p>
<p><strong>Development of APIs</strong> (In the end the automation framework will be an API that is used to write automated tests.&#160; The better the API is designed, the easier it will be to write tests against it.)</p>
<p><strong>Design of reusable base components</strong> (Much of the framework consists of repeated concepts with different variations for different screens in your application.&#160; As a result, the core of the framework will be a basic design that allows for variation without too much repetition… reuse)</p>
<p><strong>Ability to quickly acquire domain knowledge of the software</strong> (Someone writing an automation framework needs to really understand how the system under test works, so that they can model the framework after it.)</p>
<p><strong>Pragmatism</strong> (Many “accepted” good software designs are actually bad automation framework designs.&#160; Static methods can make an automation framework’s API much more simple to use, especially for non-programmers, but would not be a good design choice in your main product.&#160; A person who designs an automation framework should be pragmatic enough to “break the rules” in order to make the framework easiest to use and maintain.)</p>
<p><strong>Experience or understanding of QA</strong> (It is important to understand the users of the framework, the QA team.&#160; Understanding what kind of tests they will likely write or how they will think will go a long way in coming up with a good framework design.)</p>
<p><strong>Communication skills</strong> (Good BATs read like English.&#160; It is critical to make sure that the person designing the framework facilitates this to make the BATs as useful and understandable as possible.)</p>
<p><strong>HTML / XPath </strong>(This specific skill set is very important for web based products.&#160; Creating an automation framework built on top of one of the web browser drivers will require intimate knowledge of HTML and probably XPath to be able to access attributes and elements on pages in your application.)</p>
<p>I’ve written a few automation frameworks and contributed to the design of several others, and I can tell you that my version 6.0 of an automation framework was much much better than version 1.0.</p>
<p>There are a huge number of patterns that emerge that are unique to this problem domain.&#160; So, I do believe having experience in this area specially is a huge benefit.</p>
<h2></h2>
<h2></h2>
<h2>What does this automation person do?</h2>
<p>We’ll get to more specific in my later posts in this series, but the basic responsibility should be:</p>
<ul>
<li>Figure out the technology and tools to be used</li>
<li>Create the initial automation framework</li>
<li>Create smoke tests for the application under test</li>
<li>Get those smoke tests into some kind of automated build</li>
<li>Train developers and QA in the use of the framework</li>
<li>Drive the adoption of the framework and automation for all features</li>
<li>Set up rules for consistency in writing automated tests</li>
<li>Design of hierarchy and structure of automated tests</li>
</ul>
<p>You want your automation person to be responsible for pushing and driving forward the goal of getting to the point of being able to automate each feature being created with minimal effort.</p>
<p>This is one of those jobs that can actually be “done.”&#160; What I mean by that is you may have the automation lead end up creating the framework, developing it enough to push it out to your development teams and train them to write automated tests along with QA, and you really don’t need an automation lead anymore.</p>
<p>This is great though, because now you have a developer that really knows your product and is a good bridge to QA, or you can keep them improving the framework and overseeing it if you want to go that route.</p>
<p>Bottom line is:</p>
<ol>
<li>Make sure you get a dedicated resource</li>
<li>Make sure that resource can write code and design a framework</li>
<li>Make sure they train everyone else, one person cannot automate your entire application</li>
</ol>
<h6>As always, you can subscribe to this <a href="http://feeds.feedburner.com/MakingTheComplexSimple">RSS feed</a> to follow my posts on Making the Complex Simple.&#160; Feel free to check out <a href="http://elegantcode.com/">ElegantCode.com</a> where I post about the topic of writing elegant code about once a week.&#160; Also, you can follow me on twitter <a href="http://twitter.com/jsonmez">here</a>.</h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1264/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=1264&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2011/02/23/getting-up-to-bat-hiring-an-automation-lead/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/02/doom4_thumb.jpg" medium="image">
			<media:title type="html">DOOM4</media:title>
		</media:content>
	</item>
		<item>
		<title>Solving Problems, You Better Learn How</title>
		<link>http://simpleprogrammer.com/2010/12/22/solving-problems-you-better-learn-how/</link>
		<comments>http://simpleprogrammer.com/2010/12/22/solving-problems-you-better-learn-how/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 19:47:01 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2010/12/22/solving-problems-you-better-learn-how/</guid>
		<description><![CDATA[It is astounding how many developers can write and maintain large enterprise systems dealing with all kinds of complex logic, database access, etc and cannot for the life of them solve a moderately difficult programming problem given in an interview in less than 30 minutes. It is also astounding how many developers that can not [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=1202&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It is astounding how many developers can write and maintain large enterprise systems dealing with all kinds of complex logic, database access, etc and cannot for the life of them solve a moderately difficult programming problem given in an interview in less than 30 minutes.</p>
<p>It is also astounding how many developers that can not write even a single line of code can fail the same problem exactly the same way.</p>
<p>Based on those two statements, your first assumption might be that asking someone to solve a programming problem as part of an interview would be a bad idea, because it isn’t really telling you if they are good and just crumble when asked to do something like this on the spot, or if they can’t program at all.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/12/thinker1-composition5-small2.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="thinker1-composition5-small2" border="0" alt="thinker1-composition5-small2" src="http://complextosimple.files.wordpress.com/2010/12/thinker1-composition5-small2_thumb.jpg?w=486&h=400" width="486" height="400" /></a></p>
<h2></h2>
<h2>Let’s look at some possible numbers to see why this is wrong</h2>
<p>In poker you can use a combination of pot odds and the likely holdings of your opponents to deduce in many situations whether or not you should call a bet.</p>
<p>Pot odds is simply a ratio of how much money is in the pot (what you can win), versus how much it will cost you to call the bet.</p>
<p>For example, if a pot contained $9 and I bet you $1, you would be getting 10:1 odds on your money for a call (you have to risk an additional dollar to potentially win 10.)</p>
<p>So in that example, if you have a better than 10% chance of winning, you are making a profitable play by calling.</p>
<p>I don’t have the exact numbers (actually I am just guessing at them from experience), but here is a realistic estimate:</p>
<ul>
<li>Good programmers – 60% can solve the problems</li>
<li>Great programmers – 90% can solve the problems</li>
<li>Don’t know how to program, lied on my resume – 1% can solve the problems by some sort of divination or black magic, or memorizing sequences of symbols which solve the problem.</li>
</ul>
<p>Given some statistics like this, if you have someone pass this kind of a test, you can calculate the rough probability of which of the three groups they belong to.</p>
<ul>
<li>40% chance they are Good</li>
<li>59.5% chance they are Great</li>
<li>.5% chance they are a black magic practicing witch or warlock</li>
<li>99.5% chance they are either good or great</li>
</ul>
<p>So, even though you may be throwing away some good candidates and some great ones, the chance of you getting someone who doesn’t know how to code at all is almost reduced to nothing.&#160; <strong>This is very important!</strong></p>
<p>Why?&#160; Because if you hire someone who doesn’t know how to code at all, it will cost you a huge amount of money, but if you pass over someone who is great, but still end up getting someone else who is good or great it doesn’t really cost you anything except in the rare case that the great programmer failed out of the test and you ended up hiring a good one instead.</p>
<p>Even still, that is a small loss versus hiring someone who can’t write a lick of code.</p>
<p>I’ve talked about how I think <a href="http://simpleprogrammer.com/2010/10/06/why-hard-interviews-are-good/">having code in an interview is a good thing</a> before, but now the numbers are here to back me up.</p>
<p>More and companies are realizing the truth about this situation and companies like <a href="http://codility.com/">Codility</a> are popping up to offer a service to test candidates for you.</p>
<h2>What this means for you?</h2>
<p>You might not get asked to solve a problem or write code in your next interview, but there is a growing chance that you will.</p>
<p>You may think to yourself, ok even if I bomb the code writing part, I will do great on the rest of the interview and be able to convince them that I know how to write code, besides any company that would toss me out of the running for failing some stupid online test is a company I don’t want to work for anyway.</p>
<p>To that I say a company that doesn’t know how to do math is a company that you don’t want to work for. <strong> If my numbers are anything close to accurate, the mathematical best choice is to almost always throw out someone who fails the coding test.</strong></p>
<p>The simple solution is to learn how to solve these kinds of problems.&#160; Learn how to write an algorithm under pressure in 30 minutes.&#160; It’s not that hard to practice and the skill will help you in many other areas of your career and probably your life in general.</p>
<p>I’ve <a href="http://simpleprogrammer.com/2010/04/02/so-you-want-to-become-a-better-programmer-topcoder/">written before on TopCoder</a> as a great site to practice these kinds of problems, and if you haven’t checked it out that is a great place to start.</p>
<p>Another option is to get the book <a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&amp;tag=makithecompsi-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201657880">Programming Pearls</a>.&#160; It is a bit dated, but has some nice programming problems for you to try to solve.</p>
<p>I’ll follow up this post in the coming weeks with some hints and tips on how to take a programming problem, break it down and finally code it.&#160; Learning how to do this properly can make some of the more difficult algorithm type problems very simple.</p>
<p>So get to it!&#160; Start learning how to solve programming problems.&#160; Reverse strings, sort linked lists, help grandma pick the highest yielding grandsons and a granddaughters to send Christmas cards to!</p>
<p>If you are following my <a href="http://simpleprogrammer.com/back-to-basics-series/">back to basics series</a>, don’t worry, it is still on.&#160; I’ll probably pick back up with it after the holidays.</p>
<h6><strong>As always, you can subscribe to this </strong><a href="http://feeds.feedburner.com/MakingTheComplexSimple"><strong>RSS feed</strong></a><strong> to follow my posts on Making the Complex Simple.&#160; Feel free to check out </strong><a href="http://elegantcode.com/"><strong>ElegantCode.com</strong></a><strong> where I post about the topic of writing elegant code about once a week.&#160; Also, you can follow me on twitter </strong><a href="http://twitter.com/jsonmez"><strong>here</strong></a><strong>.</strong></h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=1202&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/12/22/solving-problems-you-better-learn-how/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/12/thinker1-composition5-small2_thumb.jpg" medium="image">
			<media:title type="html">thinker1-composition5-small2</media:title>
		</media:content>
	</item>
		<item>
		<title>Why Hard Interviews are Good</title>
		<link>http://simpleprogrammer.com/2010/10/06/why-hard-interviews-are-good/</link>
		<comments>http://simpleprogrammer.com/2010/10/06/why-hard-interviews-are-good/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 15:24:09 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Interview]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2010/10/06/why-hard-interviews-are-good/</guid>
		<description><![CDATA[I’ve never understood the shock people have of hiring a programmer and then finding out that he can’t actually write any code or that he completely lied on his resume. This is a very simple problem that can easily be solved, yet not too many hiring managers or developers responsible for doing interviews are willing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=1127&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ve never understood the shock people have of hiring a programmer and then finding out that he can’t actually write any code or that he completely lied on his resume.</p>
<p>This is a very simple problem that can easily be solved, yet not too many hiring managers or developers responsible for doing interviews are willing to do it.</p>
<p>All you have to do is increase the technical difficulty of the interview.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/10/stumped.gif"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="stumped" border="0" alt="stumped" src="http://complextosimple.files.wordpress.com/2010/10/stumped_thumb.gif?w=481&h=529" width="481" height="529" /></a></p>
<h2>But I don’t want to ask hard questions, about a specific technology</h2>
<p>Often I hear the point made that a good programmer can learn any framework or language, so asking difficult C# questions or asking details about EJBs will exclude those candidates prematurely.</p>
<p>While this statement is partially true, I don’t consider it a very good excuse for not asking hard questions.</p>
<p>There are many difficult subject matters in software engineering that exist beyond the domain of a specific language or technology.</p>
<p>You can always ask hard questions about object oriented design, design patterns, or general language constructs.</p>
<p>If you have the resources, you can always tailor the interview questions to the specific skill sets the candidate has indicated on their resume.</p>
<p>The truth is a really good programmer is going to know a lot about a lot of different areas.&#160; A great programmer should also know a lot about some specific areas and languages.</p>
<h2>What if all the candidates fail?</h2>
<p>They all should fail.</p>
<p>Your technical interview should get increasingly harder, until it ultimately results in stumping the candidate.</p>
<p>Make your questions progressively more difficult until you reach an area beyond the knowledge of anyone on your team.&#160; If you ever have a candidate that makes it that far, you know they are an instant hire.</p>
<p>You expect that no one will make it all the way through, and that is good.&#160; It gives you a very real and easy comparison gauge on the different candidates.</p>
<p>Not that you should base your decision on how many interview questions the candidate gets right, but it can definitely provide you a comparison of two candidates that you wouldn’t be able to see without escalating difficulty questions.</p>
<p>For example, if candidate A can only get through the basic questions and candidate B makes it to the expert level questions, that should give you a pretty good idea of their relative talents.</p>
<p>Besides, failing is good.&#160; We all fail every day.&#160; I always want to see what a person is going to do when they don’t know the answer.&#160; Do they have the humility to ask you the answer so that they will know it in the future?&#160; Do they bring up that they will research that area?&#160; Do they blow up and make excuses or try to justify a wrong answer?</p>
<h2>I hate hard interviews, so I don’t want to give them out</h2>
<p>Do you really hate difficult interviews?</p>
<p>Or do you hate pointlessly difficult interviews?&#160; There is a huge difference.</p>
<p>Asking someone to use bit manipulation to reverse a string is stupid and pointless.</p>
<p>In most cases, asking someone to implement a quick sort algorithm is also stupid and pointless.&#160; (Any programmer worth his salt would never trust himself to implement a well known sorting algorithm, and would instead look it up.)</p>
<p>My point is that there is a big difference between asking hard questions and good hard questions.&#160; If you ask relevant hard questions, you are going to quickly turn away the “fakers” and “con artists” and you are actually going to make a good programmer pretty happy.</p>
<p>Nothing I hate worse than walking out of an interview, as the interviewee, feeling like the interviewer didn’t ask me hard enough questions.</p>
<p>I feel like if an interviewer asks me easy questions that anyone should know, I don’t get to demonstrate my real skills and talent.&#160; When I leave an interview, I want the interviewer to think.&#160; “Damn, that guy got almost every single hard question right, no one else was able to do that.”</p>
<p>So in reality, if you ask good hard questions, people won’t resent you for it, they will appreciate it.&#160; It is nice to “slam dunk” a difficult interview, because you know that you likely have the job.&#160; It is not nice to “slam dunk” an easy interview, because it doesn’t give you any confidence that your skillset was noticed at all.</p>
<h2>Don’t forget to have them write code</h2>
<p>Programmers should be able to write code.&#160; In a high stress situation, it might not be pretty, and it might not be absolutely semantically correct, but it should be obvious that the candidate knows how to write code.</p>
<p>The best approach I found is to use a simple programming problem.&#160; A problem that anyone should be able to solve, but can be solved many different ways.</p>
<p>The idea is that the code should be what you are looking for, not if they can solve a difficult logic problem.</p>
<p>I’m pretty happy to say that the company where I work now, TrackAbout, has a pretty difficult interview process which does involve writing code.&#160; I am very happy about this, because I feel that it allows us to hire the best programmer, which allows me to work with the best programmers.</p>
<p>If your company is taking the easy way out of doing technical interviews, you are basically playing the programmer lottery.&#160; It is definitely worth a little more time to ask harder questions and be a lot more confident in your decisions.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=1127&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/10/06/why-hard-interviews-are-good/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/10/stumped_thumb.gif" medium="image">
			<media:title type="html">stumped</media:title>
		</media:content>
	</item>
		<item>
		<title>So You Want to Become a Better Programmer? (TopCoder)</title>
		<link>http://simpleprogrammer.com/2010/04/02/so-you-want-to-become-a-better-programmer-topcoder/</link>
		<comments>http://simpleprogrammer.com/2010/04/02/so-you-want-to-become-a-better-programmer-topcoder/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 18:59:57 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://simpleprogrammer.com/?p=590</guid>
		<description><![CDATA[Let me ask you a question. If you drive your car every day, do you think you are becoming a better driver? Now, let me ask you another question. If you competed in races with your car, frequently, do you think you would be becoming a better driver? Let&#8217;s reflect that paradigm at programming.  Many of us, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=590&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Let me ask you a question.</p>
<p>If you drive your car every day, do you think you are becoming a better driver?</p>
<p>Now, let me ask you another question.</p>
<p>If you competed in races with your car, frequently, do you think you would be becoming a better driver?</p>
<p>Let&#8217;s reflect that paradigm at programming.  Many of us, if we are fortunate, get to write code every day.  Unfortunately, a large amount of the code we write is fairly mundane.  We are rarely writing code in any form of competition.  When you are first starting out , writing code makes you better at writing code.  After time, when you have been writing code for a while, just like driving, you stop making gains.</p>
<p>You may have heard someone say <strong>there is a difference between a programmer with 10 years of experience and a programmer with 1 year of experience 10 times</strong>.</p>
<h2>How to start making gains again</h2>
<p>What I want to talk about today is just one of the ways you can start making gains again in your programming skills.  There are many others, and I have talked about some of them <a href="http://simpleprogrammer.com/2009/12/08/great-developers-are-librarians/">before</a>.  But, today I want to talk about a very specific way I have found to break through the barriers and really improve your programming skills.  Specifically, I want to talk to you about a programming competition that I really enjoy called <a href="http://www.topcoder.com/">TopCoder</a>.</p>
<p>TopCoder is a website that has a nice little competition arena that allows you to compete against other programmers solving some pretty difficult problems.  They have built a web launcher that opens up an IDE where you can view a programming problem and write your code to solve it.  You can solve the problem in any one of their supported languages and get immediate feedback through their system tests.  You can also view other people&#8217;s solutions to the problem and challenge their solutions with your own input.</p>
<p>There are other kinds of competitions on the site, but for what I am talking about you&#8217;ll want to go to the <a href="http://topcoder.com">site</a>, then click on develop, then click on algorithm, and launch arena.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_08-00-03.png"><img class="alignnone size-full wp-image-591" title="SS-2010-04-02_08.00.03" src="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_08-00-03.png?w=500" alt=""   /></a></p>
<p>Once you are in the competition arena, you are brought to a chat lobby, where you can switch to a competition room (if one is currently underway), or to a practice room, where you can practice some of the past competitions.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_07-39-47.png"><img class="alignnone size-full wp-image-592" title="SS-2010-04-02_07.39.47" src="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_07-39-47.png?w=500&h=342" alt="" width="500" height="342" /></a></p>
<p>Once you are in one of the rooms that has problems, you can select a problem to launch the IDE.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_07-40-18.png"><img class="alignnone size-full wp-image-593" title="SS-2010-04-02_07.40.18" src="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_07-40-18.png?w=500&h=371" alt="" width="500" height="371" /></a></p>
<p>There you can type your solution to the problem right there and compile or test your code.  I&#8217;m not going to go into all of the details of how the competition and scoring works here, because I want to focus more one why TopCoder, and other types of training like this are so beneficial.</p>
<h2>Why will this make me a better programmer?</h2>
<p>It is kind of hard to explain why this works so well.  I think one of the major reasons is because we are challenged to solve much more difficult problems than what we usually solve in our day jobs.  When you start solving those problems, the easier problems you encounter on a day-to-day basis seem to get a lot easier.</p>
<p>One thing that really helped me was the ability to see other people&#8217;s solutions to the problem.  When I would finish coding my problem, and look at the other solutions to the problem, I would always find new ways of using some of the base language or library features that had never occurred to me.</p>
<p>When you try to challenge someone else&#8217;s problem, you are forced to read some code that can be very obscure and quickly understand it.</p>
<p>You can also use some plugins to code in your favorite IDE and then have the code mirrored in the TopCoder IDE, but there is a nice gain in mastery of the language that can be had if you choose to use the TopCoder IDE which does not have auto-complete.  (Especially if you ever have to write code on a white-board during an interview.  It can be pretty embarrassing when you are unable to produce the syntax for a simple statement because you are so used to relying on auto-complete.)</p>
<p>You don&#8217;t have to do the competition, you can just do the practice rooms on the site, but I encourage you to try a competition or two.  There is just something about competition that seems to make us better.</p>
<p>Post me some comments if you try this and it helps you or <a href="http://twitter.com/jsonmez">hit me up on twitter</a> @jsonmez.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/590/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=590&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/04/02/so-you-want-to-become-a-better-programmer-topcoder/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_08-00-03.png" medium="image">
			<media:title type="html">SS-2010-04-02_08.00.03</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_07-39-47.png" medium="image">
			<media:title type="html">SS-2010-04-02_07.39.47</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/04/ss-2010-04-02_07-40-18.png" medium="image">
			<media:title type="html">SS-2010-04-02_07.40.18</media:title>
		</media:content>
	</item>
		<item>
		<title>Selling Yourself: How (Part 2)</title>
		<link>http://simpleprogrammer.com/2010/01/13/selling-yourself-how-part-2/</link>
		<comments>http://simpleprogrammer.com/2010/01/13/selling-yourself-how-part-2/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 06:00:01 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Interview]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://simpleprogrammer.com/?p=151</guid>
		<description><![CDATA[See Part 1 Selling Yourself: Why There is a right or good way to market yourself. Selling yourself tastefully takes some practice and thought.  It really is a soft skill that must be acquired and thought about.  It takes some amount of social engineering.  Like all products, the better the product, the easier it is to market. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=151&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://simpleprogrammer.com/2010/01/12/selling-yourself/">See Part 1 Selling Yourself: Why</a></p>
<h2>There is a right or good way to market yourself.</h2>
<p>Selling yourself tastefully takes some practice and thought.  It really is a soft skill that must be acquired and thought about.  It takes some amount of social engineering.  Like all products, the better the product, the easier it is to market.  Here are some tips I find useful for marketing yourself as a professional developer.</p>
<p>1. <strong>Create a weekly report of exactly what work you did each day of the week</strong>. The report should include a brief description of the major and minor accomplishments each day and perhaps a summary or highlight of any major accomplishments you did.  Especially mention mentoring or helping other people.  Send the weekly report voluntarily to your boss and CC your boss&#8217;s boss as an FYI.  I know it&#8217;s a bit difficult to find a good way to CC your boss&#8217;s boss, but try to find a good way to do it that is tasteful.  (For example, something like &#8220;I thought you might also like to receive these weekly reports I am sending out just as a FYI.&#8221; )  The benefit of doing this is two-fold.  First, you will be highlighting all the good work you are doing to your boss and his boss, in a way that isn&#8217;t like &#8220;tooting your own horn.&#8221;  Second, you will provide yourself a documented history of work you accomplished which is useful for reviews, protection against wrongful termination, and resume building.</p>
<p>2. <strong>Update your resumé periodically, and your public profiles, LinkedIn etc.</strong> By keeping your resumé constantly up-to-date, you are ready to find a job quickly if you become unemployed.  This will give you a safety net, which will allow you to feel more comfortable being a professional and sometimes <a href="http://blog.objectmentor.com/articles/2009/12/04/saying-no">saying &#8220;no&#8221;</a>.  In addition, opportunities will come to you when you have your public profiles up-to-date.</p>
<p>3. <a href="http://simpleprogrammer.com/2009/12/08/great-developers-are-librarians/"><strong>Get a library of books and put them up for display</strong></a><strong>.</strong> (Read them, or you are just faking it.)  If you have a mountain of books you have read, but they are sitting in a box at home, they are not marketing you.  When I walk into a developer&#8217;s office and I look at his or her books I can tell many things about them already.  When managers walk by and they see someone with a large number of programming books, it says something to them about your dedication and knowledge.</p>
<p>4. <strong>If you have certifications frame them and put them on your wall, or on your cube.</strong> Yeah, I know it may seem cheesy, and you may get poked fun at a bit.  But take it light-hearted and don&#8217;t brag about the certification, deep down inside the people poking jabs about certs really are feeling threatened they don&#8217;t have certifications.</p>
<p>5. <strong>Help other developers, all the time.</strong> Be they guy that everyone asks their development questions to.  When someone needs help figuring something out, volunteer.  Help train the junior developers.  Doing this will give you a reputation of being knowledgeable and helpful.  Answering questions on <a href="http://stackoverflow.com/">Stackoverflow</a> counts towards this if you have time.</p>
<p>6. <strong>Prepare some power points and offer to give demonstrations or presentations on a project you did, or a new technology or methodology you want to introduce.</strong></p>
<p>7. <strong>Be vocal.</strong> Make sure that you are speaking up.  In meetings, in design sessions, in general have something to say.  Make sure you are not talking for the sake of talking, but contribute information and ideas.  Doing this will help demonstrate your knowledge and critical thinking.</p>
<p>8. <strong>Make occasional visits to the boss. </strong>Make sure you are being seen by management every once in a while and when you do, mention new ideas you have of ways to make your team better or more efficient.  Offer to spearhead the implementation of those ideas.</p>
<p>9. <strong>Take some risks in order to make things better.</strong> Sometimes you have to bet big to win big.  Sometimes you have to do a controversial thing, or not get permission before you do something that will greatly improve development quality or output.  Increasing developer quality through <a href="http://simpleprogrammer.com/2009/12/03/dedicated-developer-tools-teams/">creating developer tools</a> is very valuable and very visible.  Just make sure if you take a risk that if you accomplish it, it will have high returns for the company.  People who do things without permission that are stupid get fired.  People who do things without permission that are brilliant get praised.</p>
<p>The bottom line is if you&#8217;re not selling your self, you&#8217;re selling yourself short.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=151&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/01/13/selling-yourself-how-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>
	</item>
		<item>
		<title>Selling Yourself: Why? (Part 1)</title>
		<link>http://simpleprogrammer.com/2010/01/12/selling-yourself/</link>
		<comments>http://simpleprogrammer.com/2010/01/12/selling-yourself/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 18:00:20 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Interview]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://simpleprogrammer.com/?p=144</guid>
		<description><![CDATA[I know many good developers who are under the impression that they either don&#8217;t have to sell themselves, or selling themselves is wrong, but is that really true? First let me clarify by defining what I mean by &#8220;selling yourself&#8221;.  I don&#8217;t mean &#8220;selling out&#8221;, I mean marketing yourself, what you&#8217;re doing and what your [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=144&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I know many good developers who are under the impression that they either don&#8217;t have to sell themselves, or selling themselves is wrong, but is that really true?</p>
<p>First let me clarify by defining what I mean by &#8220;selling yourself&#8221;.  I don&#8217;t mean &#8220;selling out&#8221;, I mean marketing yourself, what you&#8217;re doing and what your skills are.  Especially to your organization.</p>
<h2><strong>I don&#8217;t need to sell myself, my code speaks for itself.</strong></h2>
<p>Really?  Do you think your pristine code says enough about your skills especially to a non or semi-technical person?  Think back about how many products with fancy UIs beat out excellent products with crappy UIs.  The simple fact of life is that marketing is effective and required.  Imagine creating a really good product and doing no advertising at all because you think that the product speaks for itself.  No one will know about how good it is and no one will buy it.</p>
<p><strong>The only person who can recognize the quality of your code is another developer of equal or greater talent. </strong>Now I realize that someone of lesser skill may be able to recognize that your code is &#8220;good&#8221;, because it is easy for them to read and it looks pretty, but just like a connoisseur of fine wines can distinguish the small differences that really count, it takes a developer of significant talent to recognize excellent code from good or even great code.  Being armed with this knowledge it is easy to see why your code will rarely speak for itself.</p>
<p>As a professional developer you have to consider your audience.  Mostly the people influencing your career in development are not the highly talented developers who can appreciate your code.  In my experience, it is a collective of all developers, project managers, and recruiters.  Because of this audience, you must do more than write good code.  That good code must be seen and the effects of it must also be seen.</p>
<h2>It&#8217;s wrong to sell myself, it is politics, I don&#8217;t do politics, I just write code.</h2>
<p>If it&#8217;s so wrong to do, how come so many of us do it when we are interviewing for a new job?  It&#8217;s like a courtship when they guy is taking the gal out to dinner and buying her flowers and romancing her, but as soon as they get married where did the romance go?  Many of us developers are just like that.  We polish our resumé and go out looking for the job, dressed up in a suit and tie, presenting ourselves as professionals, but then we get the job and we settle in, we turn off the charm.  It&#8217;s not wrong to keep the charm turned on, not only is it not wrong, it&#8217;s expected.</p>
<p>How about the politics of it?  Well yes, there are politics involved in selling yourself, but thinking  you can be a technical person and completely ignore politics is a sure way to dead-end you career.  Most developers want to reduce the amount of political situations they have to deal with, and I agree with that, but trying to ignore the problem to just make it go away is like trying to make a hungry lion go away by closing your eyes.  Even if you are the best hacker in the world people skills are important.  It is my strong opinion that every professional, developer or not, should read <a href="http://www.amazon.com/How-Win-Friends-Influence-People/dp/0671723650">How to Win Friends and Influence People</a>, by Dale Carnegie.</p>
<p>I think there is also a large difference between tasteful marketing of a product or service and offensive or annoying marketing.  Just like the XXX spam mail that shows up in your email unrequested, a developer can market themselves in an unsolicited and annoying way.  On the the other hand&#8230;</p>
<p><strong><a href="http://simpleprogrammer.com/2010/01/13/selling-yourself-how-part-2/">See part two of the series here: Selling Yourself: How</a></strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/144/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/144/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=144&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/01/12/selling-yourself/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>
	</item>
		<item>
		<title>Lambda Extensible FizzBuzz 2.0 With LINQ</title>
		<link>http://simpleprogrammer.com/2009/12/19/lambda-extensible-fizzbuzz-2-0-with-linq/</link>
		<comments>http://simpleprogrammer.com/2009/12/19/lambda-extensible-fizzbuzz-2-0-with-linq/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 06:41:51 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://simpleprogrammer.com/?p=97</guid>
		<description><![CDATA[Many of you have probably heard of the FizzBuzz challenge: Jeff Atwood blogged about it here I think it started from here Anyway, if you don&#8217;t want to click those links and you&#8217;re not familiar with it, is a small programming problem designed to screen someone who can actually write code from someone who pretends [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=97&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Many of you have probably heard of the FizzBuzz challenge:</p>
<p>Jeff Atwood blogged about it <a href="http://http://www.codinghorror.com/blog/archives/000781.html">here</a></p>
<p>I think it started from <a href="http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/">here</a></p>
<p>Anyway, if you don&#8217;t want to click those links and you&#8217;re not familiar with it, is a small programming problem designed to screen someone who can actually write code from someone who pretends to write code.  The problem is:</p>
<blockquote><p>Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”</p></blockquote>
<p>The point is this is a simple problem.  Just simple enough to be interesting.  I actually got asked to solve this problem this week.  I solved it after bumbling through it way more than I should have (I was trying to think of an elegant solution on the spot.)  But it kept bugging me.  I knew there was a solution that I wanted to give it that would make me happy with feelings of maps, function pointers and linq.  Pretty much 3 of my favorite things.  So I thought about it for a bit and here is the solution I came up with (3rd cut.)</p>
<p><pre class="brush: csharp; pad-line-numbers: false;">
        public static void FizzBuzz()
        {
            Dictionary&lt;Func&lt;int, bool&gt;, Func&lt;int, string&gt;&gt; rules = new Dictionary&lt;Func&lt;int, bool&gt;, Func&lt;int, string&gt;&gt;();
            rules.Add(x =&gt; x % 3 == 0, x =&gt; &quot;fizz&quot;);
            rules.Add(x =&gt; x % 5 == 0, x =&gt; &quot;buzz&quot;);
            rules.Add(x =&gt; x % 5 != 0 &amp;&amp; x % 3 != 0, x =&gt; x.ToString());
            rules.Add(x =&gt; true, x =&gt; &quot;\n&quot;);

            var output = from n in Enumerable.Range(1, 100)
                         from f in rules
                         where f.Key(n)
                         select f.Value(n);

            output.ToList().ForEach(x =&gt; Console.Write(x));
        }
</pre></p>
<p>That&#8217;s my crack at it.  If you&#8217;re not familiar with all the C# magic going on here, basically it works like this:</p>
<p>You have a map which maps one lambda expression which defines the rule we are checking for to a second lambda expression which is what string to return if that rule matches.<br />
Then we have a LINQ query that does a Cartesian join on the set of numbers from 1 to 100 and the 4 rules.<br />
Finally, we take the output and for each string we write it out.</p>
<p>The 4th rule in the set makes sure that after evaluating the set of rules for each number a newline gets put in.</p>
<p>It is kind of interesting how thinking about different ways to solve a fairly simple problem can help you think about the tools you have in new ways.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&#038;blog=10597120&#038;post=97&#038;subd=complextosimple&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2009/12/19/lambda-extensible-fizzbuzz-2-0-with-linq/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>
	</item>
	</channel>
</rss>
