<?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>wandercoding.com &#187; Career Related</title>
	<atom:link href="http://www.wandercoding.com/archives/category/career-related/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wandercoding.com</link>
	<description>The Site for Software People and Their Careers</description>
	<lastBuildDate>Wed, 28 Jul 2010 16:01:53 +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>Driven to Distraction</title>
		<link>http://www.wandercoding.com/archives/199</link>
		<comments>http://www.wandercoding.com/archives/199#comments</comments>
		<pubDate>Wed, 28 Jul 2010 16:01:53 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=199</guid>
		<description><![CDATA[I do double duty writing &#8211; software and fiction.  Some days I find myself more productive than others and it&#8217;s usually due to one thing &#8211; my internet connection.  It&#8217;s not what you think, actually.  Most of the time when my connection is good and I have several tabs open in my browser, my productivity [...]]]></description>
			<content:encoded><![CDATA[<p>I do double duty writing &#8211; software and fiction.  Some days I find myself more productive than others and it&#8217;s usually due to one thing &#8211; my internet connection.  It&#8217;s not what you think, actually.  Most of the time when my connection is good and I have several tabs open in my browser, my productivity sucks.  I keep waiting for something interesting to happen: an email from a colleague or friend, a good post on one of the blogs I follow, a good link posted on facebook, etc.</p>
<p>It&#8217;s too easy to while away a spare hour with this crap (let&#8217;s face it, it&#8217;s not a productive use of time.)  I find myself most effective when I shut down my browser.  That way, I can&#8217;t even notice that a new email has arrived (it&#8217;s probably just spam anyway).  No matter what work I&#8217;m doing, if I don&#8217;t need the internet to do it, I&#8217;m probably more productive not even being distracted by it.</p>
<p>A while ago, I had a discussion on the Comments section of <a href="http://www.codinghorror.com" target="_blank">Coding Horror</a> about email.  The issue was about whether to send and read emails versus calling, and this leaked into the issue of checking email all the time.  The person on the other end of the discussion said he wasn&#8217;t distracted by looking at his email because Outlook pops up a little message in the corner of his screen when a new email arrives.  The problem with that is that it still interrupts your flow and writing anything is all about getting into flow.  It takes time to get your brain fully focused on an activity and any interruption, however slight, can keep you from operating at optimal capacity.</p>
<p>If you think you&#8217;re operating at full capacity, try shutting down your browser for a while and working and see if you get more done.  If you don&#8217;t think you&#8217;re focused enough, do the same thing.  I&#8217;ll be your productivity improves.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Computer Science Majors &#8211; Part 1</title>
		<link>http://www.wandercoding.com/archives/193</link>
		<comments>http://www.wandercoding.com/archives/193#comments</comments>
		<pubDate>Tue, 29 Jun 2010 22:16:57 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=193</guid>
		<description><![CDATA[As a computer science major, you have certain advantages over other students.  You have ready access to the technology that&#8217;s used in the industry.  Unlike some types of engineering, you can build worlds entirely inside of the computer that&#8217;s probably sitting on your lap or at least on your desk.
If anything, it should also be [...]]]></description>
			<content:encoded><![CDATA[<p>As a computer science major, you have certain advantages over other students.  You have ready access to the technology that&#8217;s used in the industry.  Unlike some types of engineering, you can build worlds entirely inside of the computer that&#8217;s probably sitting on your lap or at least on your desk.</p>
<p>If anything, it should also be clear that the next billion dollar idea might be only a few days coding away (think Facebook).  That&#8217;s not to say that you&#8217;ll make your fortune in software.  Most of us don&#8217;t become millionaires, but most of us do make a good living and it&#8217;s hard to think of a more flexible, enjoyable one at that.</p>
<p>In school, however, it&#8217;s easy to get lost in the just the coursework that you&#8217;re given and not think about the endgame (getting a job), but in fact, you have many opportunities to make that easier as well.  Each project is an opportunity to put a principal into practice.  Every homework assignment that involves writing code is a chance to practice the art of writing code.</p>
<p>The first step towards your career in software, starting from college, is to think about each class and each project like a something you did on the job.  When it comes time to write a resume for an entry-level software job, yours can stand out as more than a list of classes taken.  Add these projects to your resume and it will look like the resume of someone who has actually done something, which you have.</p>
<p>Next stop:  side projects, internships, summer jobs, and volunteer work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/193/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Breaks and Creativity</title>
		<link>http://www.wandercoding.com/archives/190</link>
		<comments>http://www.wandercoding.com/archives/190#comments</comments>
		<pubDate>Sat, 29 May 2010 14:00:20 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=190</guid>
		<description><![CDATA[
Don’t forget to buy Design, Code, Test, Repeat.  It’s a fun, funny, and helpful read.
In one section of my book, I talk about taking a step away from your desk when you&#8217;re trying to figure out a tricky solution to a problem or are trying to think creatively.  If you don&#8217;t believe me, here&#8217;s an [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5"><img title="dctr" src="../wp-content/uploads/2009/10/dctr.jpg" alt="dctr" width="240" height="240" /></a></p>
<p>Don’t forget to buy <a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5" target="_blank">Design, Code, Test, Repeat</a>.  It’s a fun, funny, and helpful read.</p>
<p>In one section of my book, I talk about taking a step away from your desk when you&#8217;re trying to figure out a tricky solution to a problem or are trying to think creatively.  If you don&#8217;t believe me, here&#8217;s an interesting <a href="http://www.problogger.net/archives/2010/05/09/how-to-make-sure-youre-functioning-at-your-creative-best/">article </a>about different types of thinking.</p>
<p>I solve most of my creative problems and have most of my epiphanies when I&#8217;m not staring at the computer screen.  That&#8217;s not to say that I don&#8217;t come up with good stuff when I&#8217;m actively working &#8211; I do.  But it never ceases to amaze me how many great (well, I think they&#8217;re great, just allow me that) ideas I have when I&#8217;m taking the dog for a walk, taking a shower, or sitting at the dinner table &#8211; anytime I&#8217;m letting my mind wander.</p>
<p>Just yesterday I had an idea for a new project at the dinner table, then I came up with some more ideas related to it when I was watching TV later in the evening.  Next time you have a tough problem, try taking a break and taking the pressure off yourself.  Talk to yourself &#8211; explaining the problem to yourself or someone else can open up these same creative pathways.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/190/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh Yeah?  Prove it!</title>
		<link>http://www.wandercoding.com/archives/187</link>
		<comments>http://www.wandercoding.com/archives/187#comments</comments>
		<pubDate>Wed, 12 May 2010 14:25:58 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=187</guid>
		<description><![CDATA[It&#8217;s been a while since I&#8217;ve interviewed for a job.  The last time was when I was working at Lockheed and wanted to find something closer to home.  I went to a small, local software developer and two guys put me through the ringer with test questions.  At the end of a day of work, [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I&#8217;ve interviewed for a job.  The last time was when I was working at Lockheed and wanted to find something closer to home.  I went to a small, local software developer and two guys put me through the ringer with test questions.  At the end of a day of work, I was tired, uninspiring, not very sharp, and I didn&#8217;t get the job.  Some things are just as well, I suppose.  You won&#8217;t get every job you interview for because you&#8217;re not right for every job.  I probably wasn&#8217;t right for that job anyway.</p>
<p>In my 24 years of software development, I&#8217;ve given and received numerous types of interviews.  From grueling take home tests, on the spot tests, mind puzzles, behavioral interviewing, mindless &#8220;what did you do at your last job&#8221; questions, &#8220;what&#8217;s your greatest weakness&#8221;, etc.  In my experience, they all suck.  Interviewing just plain sucks.  I participated in the hiring of my new manager many years ago.  We put several guys through a two day process, finally chose one, and he still was clueless.  The fact is: interviewing is a crap-shoot.</p>
<p>Your best bet with interviewing is to try a combination of things.  If it&#8217;s for a programmer, then you have them do some programming.  They can do it at home or on paper during the interview, but it should be something that&#8217;s not a trick problem.  The purpose of something like this should simply be to make sure that this person can actually write some code.  Have them design a simple class to do a simple job (some people can code a procedure, but class design is beyond them).</p>
<p>Skip the mind game problems.  They&#8217;re dumb and all they prove is that they can either remember the answer or can figure out a mind game problem.  What color is a newborn African-American baby&#8217;s teeth?  Really?  The answer isn&#8217;t white.  It&#8217;s nothing &#8211; babies don&#8217;t have teeth when they&#8217;re born.</p>
<p>Your job when you&#8217;re interviewing someone is to find out if they can work with you and do the work.  Yes, make them do some coding.  Show them your code and ask them about it.  You might try some pair-programming with them.  Give them a demo of your product and see what their reaction/questions/comments about it are.  Are they engaged?  Interested?  Do they have a clue about your domain?  Can they understand what you&#8217;re talking about?</p>
<p>Talk about their previous work.  Find out what they&#8217;ve worked on &#8211; in detail.  What pieces of a product did they actually code?  In what language?  With what tools?</p>
<p>Finally, remember this is a two-way street.  Don&#8217;t treat your interviewee like a child.  You want them to want to work with you at your company.  I&#8217;ve been on many interviews where companies treat you like they&#8217;re the last hope you have of finding work, rather than courting you, and I&#8217;ve turned down jobs because of it.  Who wants to work for people who seem like they enjoy putting you through a ringer?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/187/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing Coach</title>
		<link>http://www.wandercoding.com/archives/184</link>
		<comments>http://www.wandercoding.com/archives/184#comments</comments>
		<pubDate>Thu, 15 Apr 2010 13:40:39 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=184</guid>
		<description><![CDATA[I chose the title Managing Coach to point out the difference between this type of management and Managing First Class.  You might argue that it&#8217;s a horrible analogy, but let&#8217;s see where it goes.
I&#8217;ve had the pleasure of working with and for some wonderful managers, and conversely the pain and misery of working for bad [...]]]></description>
			<content:encoded><![CDATA[<p>I chose the title Managing Coach to point out the difference between this type of management and Managing First Class.  You might argue that it&#8217;s a horrible analogy, but let&#8217;s see where it goes.</p>
<p>I&#8217;ve had the pleasure of working with and for some wonderful managers, and conversely the pain and misery of working for bad ones.  A First Class manager sits separately from the rest of the crew (they&#8217;re all in cattle class, packed into cubicles, after all).  They hobnob with upper management and periodically make announcements during staff meetings about the status of the flight (or product release).  Then they go back to First Class, have another drink, and work on a presentation or other high-level document.  They have little knowledge of the daily activities of the developers and sometimes have little knowledge of the technology either.</p>
<p>The First Class manager, on the other hand, knows a lot about what&#8217;s going on in the rest of the company &#8211; the role their project plays, deadlines that others are facing, and their relationships to the ones his group is facing.  He&#8217;s able to stay on the radar of other company managers and his superiors.  Because of this, he&#8217;s able to hear about projects that his group might participate in, or that may affect the future of his group.</p>
<p>A Coach manager (there&#8217;s a double meaning to &#8216;Coach&#8217;) has more interaction with the passengers (developers).  He (or she) takes an active role in the day to day activities, providing guidance and inspiration.  He knows what people are working on, what&#8217;s moving and what&#8217;s not moving, and why.  If a developer is stuck, he knows enough to ask some pertinent questions and make a suggestion or two that might get the developer unstuck or walk away himself with a task to remove an obstacle.</p>
<p>Regardless of where a manager sits, it&#8217;s his activities that matter.  Some managers concentrate only on one aspect or another.  The best managers do both.  Just because a manager doesn&#8217;t have extensive knowledge of technology doesn&#8217;t make him useless in being a Coach.  There have been times in my career where my manager could have steered me in the right direction with a very non-technical conversation, if he had taken the time.  I can also remember numerous times when I was a manager, when developers would knock on my door, describe a problem in detail until my mind and eyes glazed over, then have an inspiration, thank me for listening, and leave with a solution in hand.  What role did I play?  Just a sympathetic ear.</p>
<p>You might gather from my last example that availability is a good trait to have.  If your manager is in meetings all the time, they&#8217;re probably a First Class manager (this is not a rule, by any means).  To be an effective development manager, being available to your developers and seeking them out for informal updates can make for a less intimidating and more informative and productive relationship.</p>
<p>If you&#8217;re a manager, think about what you can do to enhance both aspects of your management skills.  If you&#8217;re a developer, show this article to your manager to give him some food for thought.  Even managers need a coach.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/184/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Marketeering</title>
		<link>http://www.wandercoding.com/archives/175</link>
		<comments>http://www.wandercoding.com/archives/175#comments</comments>
		<pubDate>Thu, 04 Mar 2010 14:40:04 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=175</guid>
		<description><![CDATA[Marketing people tend to get a bad rap, especially in software.  Just read a few Dilbert comics about the soulless folks in marketing and you&#8217;ll get a gist of their status.  I&#8217;m not suggesting that it&#8217;s entirely undeserved either, but not all marketing folks are dishonest, horrible people.  On the contrary, I&#8217;ve worked with many [...]]]></description>
			<content:encoded><![CDATA[<p>Marketing people tend to get a bad rap, especially in software.  Just read a few Dilbert comics about the soulless folks in marketing and you&#8217;ll get a gist of their status.  I&#8217;m not suggesting that it&#8217;s entirely undeserved either, but not all marketing folks are dishonest, horrible people.  On the contrary, I&#8217;ve worked with many bright, knowledgeable folks who made a big impact on the company I was working for.</p>
<p>This post will deal mostly with an overview.  There are generally two kinds of marketing: inbound and outbound.  Inbound is the art of determining customer needs and producing products to meet those needs (i.e. taking in information).  Outbound is taking the products that you have and presenting them to the customers in the form of websites, webinars, presentations, brochures, advertising, trial software, etc. (i.e. sending out information).</p>
<p>Ideally, you&#8217;ll have folks at your company that are concerned with both inbound and outbound marketing.  Good inbound marketing is key to producing the products that customers will actually buy.  It should involve conversations with customers, and involve them in the testing of your software in alpha and beta stages of development.  I&#8217;ve always been leery of know-it-all people who come into the company and try to turn the place upside-down without any experience in the domain of the products (i.e. they&#8217;ve got 10 years of marketing experience, but they don&#8217;t know anything about building construction or software that supports it, for example).  That&#8217;s not to say that you shouldn&#8217;t hire someone not familiar with your domain, but you should expect them to, and encourage them to learn about it.  In the absence of this, your products can easily be led down a path of uselessness in the field.  It&#8217;s seriously hard to listen to folks who&#8217;ll pontificate on the direction your software should take when they haven&#8217;t a clue how it&#8217;s really used.  Expecting that your software will create a complete shift in how your customers will do business is a recipe for disaster.  Most companies are like slow-moving barges.  Having them move quickly because you&#8217;ve changed entire processes will likely result in a loss of sales.  When in doubt, <em>ask several customer</em>s.</p>
<p>Good outbound marketing is essential to support sales and must be done at the appropriate level for your software and customers.  For example, if you write highly specialized software that costs thousands of dollars per license and will likely sell only a few copies per year, buying a Super Bowl ad is probably not a good use of your advertising budget.  Of course, the biggest bang for your buck is quality website.  When your customers find you, you save time and money.  Ensure that your site is clean and makes it easy to find out the information a user will want to know.  If possible, allow them to download a trial, preferably fully functioning.  After that, the marketing folks will have to figure out what to spend their money on to best increase awareness of your product and attract customers.  In my experience, huge booths at huge conferences are not cost effective if your software is high cost and long sales time.  For lower cost, easy to justify sales, it might work better.</p>
<p>This column isn&#8217;t the place to do a complete breakdown on marketing.  Besides, I&#8217;m a software guy and you probably are, too.  The point is to arm you will a little knowledge about what your marketing folks are supposed to be doing.  If they&#8217;re not, maybe you can nudge them in the right direction.  It can be hard to see the big picture when you&#8217;re in the middle of a detailed project.  Asking questions about what&#8217;s going on can lead everyone to think harder about the big picture and where the focus of effort should be.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eating Your Own Cooking</title>
		<link>http://www.wandercoding.com/archives/167</link>
		<comments>http://www.wandercoding.com/archives/167#comments</comments>
		<pubDate>Fri, 15 Jan 2010 14:18:29 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=167</guid>
		<description><![CDATA[There&#8217;s nothing like eating your own cooking to tell you how the food is.  Unfortunately, the pride we get from doing it ourselves can sometimes cloud our judgment.  The same thing applies to just about any other human endeavor.  People often have an inflated opinion of themselves and what they have or can accomplish (I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s nothing like eating your own cooking to tell you how the food is.  Unfortunately, the pride we get from doing it ourselves can sometimes cloud our judgment.  The same thing applies to just about any other human endeavor.  People often have an inflated opinion of themselves and what they have or can accomplish (I&#8217;m no exception).  If you need any proof, just watch the first few weeks of American Idol.</p>
<p>Those of us in the software business tend to think that our own software is way better than anyone else&#8217;s.  Of course it is &#8211; you wrote it yourself, didn&#8217;t you?  Unfortunately, your competitors are filled with people just like you.  They&#8217;re probably just as smart as you and have the same pride in their work and their resultant software.  No one is beyond this kind of thinking &#8211; not even <a href="http://www.inc.com/magazine/20091101/does-slow-growth-equal-slow-death.html">Joel Spolsky</a>.  He wrote this a few months ago:</p>
<blockquote><p>I had to wonder. We do have a large competitor in our market that appears to be growing a lot faster than we are. The company is closing big deals with big, enterprise customers. And the wheels are falling off the donkey cart over there as the company stretches to fulfill its obligations. Meanwhile, our product is miles better, and we&#8217;re a well-run company, but it doesn&#8217;t seem to matter. Why?<br />
&#8230;<br />
Step One, I think, is to pluck off our biggest competitors. We&#8217;re pretty certain that we&#8217;ve already built a great product that meets our customers&#8217; needs &#8212; but there are still too many cases where we find out that, for some reason, someone went with the other guy. So that&#8217;s the development team&#8217;s mission for 2010: to eliminate any possible reason that customers might buy our competitors&#8217; junk, just because there is some dinky little feature that they told themselves they absolutely couldn&#8217;t live without. I don&#8217;t think this is going to be very hard, frankly. Developing great software is something I&#8217;m pretty sure we&#8217;re good at.</p></blockquote>
<p>Those are strong words.  &#8220;Competitor&#8217;s junk&#8221;?  That&#8217;s a very common way of looking at your competition and it clouds your judgment because it&#8217;s usually wrong.   &#8220;Pluck off our biggest competitors&#8221;?  If that&#8217;s so easy, why hasn&#8217;t it happened already?  I love Joel&#8217;s blog and admire his goals for his company, but there&#8217;s a lot going on and going wrong here.</p>
<p>The responses to his article were interesting.  One in particular shows how personal our feelings are about our own software:</p>
<blockquote><p>JIRA [a competitive product to Joel's Fogbugz] is a great product. I last used Fogbugz in June 2008, and then moved to a company using JIRA. It&#8217;s a real pleasure to use, which is good, because I use it for hours every day. Fogbugz was not a pleasure to use. Maybe Fogbugz is way better now, but if I were in a position to choose for another company, I&#8217;m pretty sure it would be JIRA all the way.</p></blockquote>
<p>So, how do you get past this? One option is to eat your own cooking and the cooking of others.  Get a copy of your competitor&#8217;s software.  Dive into it and really examine its strengths and weaknesses.  Find out what their customers like about it.  Find out why they didn&#8217;t buy yours.  Your sales and marketing staff is supposed to do this at your company.</p>
<p>On a more personal level, what can you do to improve your software?  Use it yourself.  If you can get a copy of your competitors, use it as well.  What takes less time to get similar tasks done.  How easy is it to do the job?  What bugs do you find?  Are there dead ends?  Are there features missing?  Does it take multiple steps to get a simple job done?  Is there a method that&#8217;s counterintuitive or that requires users to change their way to doing business (this is big roadblock for some people)?</p>
<p>As a solo developer, I have the benefit of being the product designer as well as the coder.  If I don&#8217;t find something easy to do in my products, I change it.  If I can&#8217;t do something in the product, I add a new feature.  If I run across a bug, I fix it.  Note: when you run across a bug in your software, make sure that you either fix it or enter it in the bug database.  It&#8217;s too easy to ignore bugs you live with every day because we developers are more tolerant of our own bugs &#8211; don&#8217;t be.  And don&#8217;t assume because you and everyone else lives with the bug that it&#8217;s in the database unless you check.</p>
<p>Finally, try to be objective.  Stop pretending you love your own software so much and pretend you&#8217;re an end-user working with it for the first time.  Then you&#8217;ll get an idea of why it&#8217;s so good or why it needs improvement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/167/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Community</title>
		<link>http://www.wandercoding.com/archives/164</link>
		<comments>http://www.wandercoding.com/archives/164#comments</comments>
		<pubDate>Tue, 05 Jan 2010 20:11:01 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=164</guid>
		<description><![CDATA[Gads, I&#8217;ve been writing software for a long time.  I started my professional career in 1986, writing LISP on Symbolics machines.  Back then, there was no web (well, not as we know it today) on which you could look up easy answers to coding problems, share toolkits, or converse with other developers (well, there was [...]]]></description>
			<content:encoded><![CDATA[<p>Gads, I&#8217;ve been writing software for a long time.  I started my professional career in 1986, writing LISP on <a href="http://en.wikipedia.org/wiki/Symbolics" target="_blank">Symbolics</a> machines.  Back then, there was no web (well, not as we know it today) on which you could look up easy answers to coding problems, share toolkits, or converse with other developers (well, there was usenet, but it wasn&#8217;t the same world as it is today).</p>
<p>Today, we have a virtual community of developers.  While our companies may compete, it wouldn&#8217;t be unusual for two developers to accidentally help each other by responding to messages on a help board such as <a href="http://stackoverflow.com" target="_blank">Stack Overflow</a>.</p>
<p>Recently I posted a question there that I knew would elicit responses such as, &#8220;Why are you trying to do that?&#8221;  I know what I&#8217;m trying to do might be loony, but it seemed to make sense at the time.  Working alone at home, I don&#8217;t have the same personal networking with my colleagues that I used to have at previous jobs.  Sometimes I miss the interpersonal relationships, the banter, and the ability to bounce a nutty idea off another developer.  Instead, I do web searches and ask questions on forums.  At times, it can even be a little embarrassing to ask a question on a forum, but the fact is, everyone&#8217;s in pretty much the same boat.  Most developers are just like you and me &#8211; nice people, willing to help or give you and hand, and expect the same in return.</p>
<p>It&#8217;s a community of software developers, who write toolkits, utilities, sample code, and free applications that help us all get our work done.  I don&#8217;t know if Richard Stallman is right about all software being free, but I do know that with the free exchange of ideas we all write better software.  A big thanks to my fellow developers around the world.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/164/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Excerpts &#8211; Part 1</title>
		<link>http://www.wandercoding.com/archives/155</link>
		<comments>http://www.wandercoding.com/archives/155#comments</comments>
		<pubDate>Wed, 18 Nov 2009 16:08:05 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=155</guid>
		<description><![CDATA[
Don’t forget to buy Design, Code, Test, Repeat.  It’s a fun, funny, and helpful read.
Some authors are releasing books based on blog entries.  Well, I&#8217;m going to go the other way around.  I&#8217;m going to publish a few blog entries based on my book,  Design, Code, Test, Repeat.  Here are a couple of sections from [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5"><img class="alignnone size-full wp-image-150" title="dctr" src="../wp-content/uploads/2009/10/dctr.jpg" alt="dctr" width="240" height="240" /></a></p>
<p>Don’t forget to buy <a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5" target="_blank">Design, Code, Test, Repeat</a><a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5" target="_blank"></a>.  It’s a fun, funny, and helpful read.</p>
<p>Some authors are releasing books based on blog entries.  Well, I&#8217;m going to go the other way around.  I&#8217;m going to publish a few blog entries based on my book,  <a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5" target="_blank">Design, Code, Test, Repeat</a>.  Here are a couple of sections from Chapter 15:  It Doesn’t Get Any Better Than This – Best Practices.</p>
<p><strong>Dominance and Submission</strong><br />
One of the things a couple of companies did was to use sub-mission documents. When you checked in your code, you filled in a simple form with information about what the code was for, what files and versions were involved, and what bugs you (may have) fixed. This document was checked into the source control system and emailed to your colleagues. Although writing these was somewhat tedious, they were very helpful in seeing what files went together as a bug fix or new code submission. If the build broke or a new bug crept into the system, you might be able to spot what happened by reading through some of these documents. They were also very helpful in tracking who was doing what. Several people would read these after returning from vacation to see what had been going on while they were away. Another benefit was that simply reviewing your sub-mission documents for the week made it easy to write your weekly status report.<br />
These documents were referenced in the bug tracking database and the comments for the files that were checked in. This allowed for easy cross-referencing. If you knew the bug, the file(s), or the submission document, you could trace any desired information from there.<br />
<strong></strong></p>
<p><strong>Put Down the Keyboard and Step Away From the Code!</strong><br />
As your release date gets closer, you’ll likely be pushing to fix all of the bugs in the system. If you’re not using a bug tracking system – and you should be – then you’ll probably be using a common spreadsheet or some other method. All of the bugs in your system should be rated according to their severity and desirability to be fixed before release.<br />
It’s unfortunate, but your software is probably going to ship with some known bugs in it, simply because it needs to get out the door on time. However, just because you have a bug doesn’t mean it should be fixed. First of all, bug fixing time shouldn’t just be a free-for-all. Developers are more likely to spend time fixing the “low-hanging fruit.” These are the easy bugs to fix or the ones in the developer’s own code that they find most embarrassing. You may wish to let them have some time to do that, but then you should really concentrate on the most important bugs – the ones that crash the system and block functionality from working. Towards the very end of the release, only specific bugs should even be permitted to have fixes. This will prevent the “fix one bug, create two more” syndrome from keeping your release from shipping.<br />
Managing this time well gives you the opportunity to truly control the quality of the software you send out and when it gets sent.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/155/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2D Graphics?  What&#8217;s that?</title>
		<link>http://www.wandercoding.com/archives/149</link>
		<comments>http://www.wandercoding.com/archives/149#comments</comments>
		<pubDate>Wed, 21 Oct 2009 13:30:58 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=149</guid>
		<description><![CDATA[Don&#8217;t forget to buy Design, Code, Test, Repeat.  It&#8217;s a fun, funny, and helpful read.
I don&#8217;t see a great need to go into too much background on 2D graphics, because the implementation in hardware frame buffers and display is not of interest to most programmers.  What is interesting when you have to do some programming [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5"><img class="alignnone size-full wp-image-150" title="dctr" src="http://www.wandercoding.com/wp-content/uploads/2009/10/dctr.jpg" alt="dctr" width="240" height="240" /></a>Don&#8217;t forget to buy <a href="http://www.bbotw.com/product.aspx?ISBN=0-7414-5013-5" target="_blank">Design, Code, Test, Repeat</a>.  It&#8217;s a fun, funny, and helpful read.</p>
<p>I don&#8217;t see a great need to go into too much background on 2D graphics, because the implementation in hardware frame buffers and display is not of interest to most programmers.  What is interesting when you have to do some programming is your point of view and other things that you can control easily from a software standpoint.</p>
<p>When you&#8217;re writing code for 2D graphics, you&#8217;re usually starting with a library or graphics environment, C#, Java, OpenGL and C++, DirectX and C++, etc.  I&#8217;m going to further limit this discussion to the C#, Java, and other environment where your drawing area starts with y=0 in the upper left hand corner with y increasing as you go down the screen.  I&#8217;ve seen too many novice programmers try to get some real graphics code written without even a hint of where to go.  I&#8217;m going to keep things somewhat esoteric for this post and start with some basic concepts that might help you if you need to develop some graphics code for a particular application.</p>
<p>Starting with y=0 in the upper left corner is great for text applications when you want to fill the screen and add scroll bars, but for graphs and drawings it stinks.  Wouldn&#8217;t it be more convenient to have y going up, like you learned in grade school?  What about having the origin in the middle of the screen rather than a corner, so you could have negative coordinates handled naturally?  The way to do this is NOT by hacking together a bunch of offsets and monkeying with them until the picture looks good (I learned this the hard way a long time ago).  The proper and ultimately easier way is to use simple transformations to do the job.  The main way to do this is by using a window to viewport transformation.  The idea is to take your world (the stuff you want to see), look at some or all of it (like looking out of a window at the world) and putting that onto a screen (or window on your computer), which we call the viewport.  The viewport is normally defined in normalized device coordinates (referred to as NDC, they go from 0 to 1, rather than 0 to 500, or whatever your viewport size really is).  The NDC are then scaled easily to match your actual viewport size.  There&#8217;s a simple transformation that accomplishes this and there&#8217;s a reasonable explanation here: <a href="www.geocities.com/anjibcs/graphics/Windows-to-viewport.PDF" target="_blank">windows to viewport</a>.  The one thing you&#8217;ll need to add is to negate the y coordinate to make y go up instead of down.</p>
<p>To make your entire world visible in the viewport, you simply increase the size of your window (not the computer window, the window into your world) to the size of the stuff that&#8217;s in your world.  The transformation, then reduces this to the computer&#8217;s viewport and you see everything.  If you want to zoom in, you make the window smaller.  To see other parts of your world when you zoom in, you move the window to the right, left, up, or down.  Graphics programs usually use pan and zoom tools to accomplish these actions.</p>
<p>I&#8217;ll add just a couple more handy concepts to help get you started on the right foot.  Most programs are best off having a set of entities stored in memory.  I know, you&#8217;re thinking, &#8220;duh&#8221;, but I&#8217;ve seen people read files from disk on every display update and it&#8217;s not pretty.  Having a set of entities in memory allows you to quickly loop through them and display them all.  Additionally, you can calculate a bounding box for all of the entities so that you can set the window to zoom to the extents of your world.</p>
<p>There are some other concepts, such as clipping and selection that can come in handy, but that&#8217;s for another day and for them most part, clipping is handled automatically by the graphics engine you&#8217;re using.  Selection is also handled by some engines, too, and if not, it&#8217;s easy to implement.</p>
<p>If there are any concepts that you&#8217;d like more detail on, let me know by sending me an email: bill at wandercoding.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/149/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
