<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://jrdev.org/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title /><link>http://jrdev.org/cs/blogs/</link><description>Web log of a grunt coder</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Gaming and Programing</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2008/02/26/gaming-and-programing.aspx</link><pubDate>Wed, 27 Feb 2008 01:15:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:13</guid><dc:creator>bleahy</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp; 

&lt;/p&gt;&lt;p&gt;So I&amp;#39;ve been a downer and don&amp;#39;t want to give my reader a bad
impression. ;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;I do love programming and
not all shops are as bad as I&amp;#39;ve experienced.&amp;nbsp;&amp;nbsp;
I&amp;#39;ve been doing this for such a short time that my experience cannot be
a good statistical sample.&amp;nbsp; I hope.&lt;/p&gt;

&lt;p&gt;When I was at DeVry the most common answer to the question
&amp;quot;Why do you want to be a programmer?&amp;quot; was &amp;quot;I want to make games.&amp;quot;&amp;nbsp; The reality is we can&amp;#39;t all be game
developers.&amp;nbsp; However, with the trend in
MMORGS to include extensibility points through open API&amp;#39;s we can scratch
that itch.&lt;/p&gt;

&lt;p&gt;Star Wars Galaxies was the first game I played that had
scripting built in.&amp;nbsp; You couldn&amp;#39;t do any
flow control or logic.&amp;nbsp; But you could set
up sequences of commands to say target an enemy, draw your blaster, do a
special shot, do a combo move off the last shot, stim pack yourself for a
heal.&amp;nbsp; It was not only useful, but it
gave a chance to code for fun.&amp;nbsp; By
writing a few scripts and sharing them with others I felt a real sense of
worth, I was participating in making the game more fun for others.&lt;/p&gt;

&lt;p&gt;A game that I&amp;#39;ve recently been hooked on is EVE Online .&amp;nbsp; CCP exposes character data through web
services, so you can write apps to help manage your character and items while
offline.&amp;nbsp; They also provide data dumps,
sql scripts that include star systems, items, material costs for making stuff...
all very important data if you were going to say, write a line of business
application to manage your Eve Corporation!&amp;nbsp;
There are many open source libraries created by the community, in case
you are foreign to xml, &amp;nbsp;that you can use them
to call the services.&amp;nbsp;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;World of Warcraft takes it in a different direction.&amp;nbsp; &amp;nbsp;Blizzard
exposes an in game API and hosts a LUA runtime.&amp;nbsp;
This allows you to create add ins and they can register for events,
process data, and modify the UI all to make your personal gaming experience
more enjoyable.&amp;nbsp; Using the scripting
language LUA along with xml markup (hmm sounds familiar somehow, scripting and
markup...) you can define your UI and just go with it.&amp;nbsp; Some add-ins are just for fun like printing
&amp;quot;She&amp;#39;s Gonna Blow!&amp;quot; in big red letters on the screen when a dragon is about to
breath fire.&amp;nbsp; Some more advanced add-ins
make the UI better, like allowing you to see ALL your items in one place or a
sort-able list.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;Some guilds (player organizations) require their members to
have certain add-ins to do dungeons, because they are so powerful.&amp;nbsp;&amp;nbsp; A popular one tracks damage done to
creatures, the health of everyone you are near, and a bunch of other stats to
help bridge the limitations of the basic UI.&amp;nbsp;
&amp;nbsp;&amp;nbsp;It knows the special moves of
certain bosses and warns you when you are gonna get pwned.&lt;/p&gt;

&lt;p&gt;Sometimes I can&amp;#39;t get interested in open source projects
regarding developer tools or business apps, but for some reason I get jazzed
about making an add-in playing &amp;quot;Fat Bottom Girls&amp;quot; every time a Female Troll
starts to dance near me or &amp;quot;Another One Bites the Dust&amp;quot; when someone dies.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;It&amp;#39;s such a popular past time of developers that Microsoft
has gone so far as to create a development environment for making World of
Warcraft add-ins.&amp;nbsp; &lt;a href="http://www.codeplex.com/WarcraftAddOnStudio"&gt;No Joke&lt;/a&gt;&amp;nbsp; and the &lt;a href="http://video.msn.com/video.aspx?mkt=en-us&amp;amp;vid=ea9cee2c-6a47-4410-8f2c-2fac0731b8a8"&gt;video&lt;/a&gt;.&amp;nbsp; It is a proof of concept about how extensible
Visual Studio is... but more importantly facilitates FUN!&amp;nbsp; I swear it makes me want to reopen my Warcraft account.&lt;br /&gt;&lt;/p&gt;



&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=13" width="1" height="1"&gt;</description></item><item><title>Ambition and Folly</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2008/02/24/ambition-and-folly.aspx</link><pubDate>Mon, 25 Feb 2008 05:54:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:12</guid><dc:creator>bleahy</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;In April of 2006 I was desperate to break through from tech
support and testing to development. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; My wife wanted to move to Arizona to be close to family and
was being laid off.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I also wanted to get
out of Ohio after living there my entire life.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;I applied out of state to see what was out there and after a few
phone interviews with a company I took a job in Arizona.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The company made software that runs a school
district.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The product kept track of
students, classes, grades, among other things.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;Very interesting since my wife is a teacher.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;I was placed in a
cubical with an out of date manual to a custom development environment. &lt;span&gt;&amp;nbsp;&lt;/span&gt;The manual examples didn’t work.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Many days the environment &lt;span&gt;&amp;nbsp;&lt;/span&gt;wouldn’t compile.&amp;nbsp; Most of the time the
application didn’t either, bad check-ins from people at 9pm.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Other days the environment threw random
reflection errors.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The actual
application was developed using the company’s own framework.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I would rarely get a straight answer about how
to do anything.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It wasn’t like I could
just look stuff up on MSDN, even though we were using .net 1.1 and C#.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;In my 4 months there no one explained how to
get user input or many of the common interfaces.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In hind sight there was
a lot going on under the hood which has similarities to WPF dependency
properties and command patterns.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Unlike WPF, there was no resource to look up for help.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I was supposed to have a mentor.&lt;span&gt;&amp;nbsp; &lt;/span&gt;But after being ignored too many times I
finally vented all my frustration at him the one time he helped.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It was sometime in my second month.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I was an outsider, I didn’t work 9-10 hour
days and i didn&amp;#39;t worship &amp;quot;the Framework&amp;quot;, *angels singing*.&lt;span&gt; &lt;/span&gt;I knew I wasn’t long for that job.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I just didn’t have the ballz to quit,
especially since I didn’t have a car after moving .&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;An experienced .NET developer was
hired 2 weeks after me.&lt;span&gt;&amp;nbsp; &lt;/span&gt;He quit after a
month on the job.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I should have taken
that as a sign.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Luckily they let me go.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;I was dying slowly there.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I wasn’t
performing.&lt;span&gt;&amp;nbsp; &lt;/span&gt;They were going to let me go
regardless, they had an existing customer drop their product and had missed a
state reporting deadline for two new clients, a feature they already sold.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;I was
agitated they let me go at 8am.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I mean
they could have saved me the taxi ride and $ by talking to me the night before.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I’m still bitter.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; They were really stupid there.&lt;span&gt;&amp;nbsp; &lt;/span&gt;They had a static library, that was mandatory
to use, one of the mandated functions to use instead of a null check was TypeCheck.IsEmpty().&lt;span&gt;&amp;nbsp; &lt;/span&gt;This method was overloaded a million times
and performed the same function as the String.IsNullOrEmpty() method in .NET 2.0.&lt;span&gt;&amp;nbsp; &lt;/span&gt;However it did it for many classes.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;So it would return true if you passed it a
collection and the reference was null or the collection was empty.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is handy in many circumstances, I understand
that.&lt;span&gt;&amp;nbsp; &lt;/span&gt;However it was mandatory to use in
ALL null checks.&lt;span&gt;&amp;nbsp; &lt;/span&gt;So what is wrong with
that?&lt;span&gt;&amp;nbsp; &lt;/span&gt;Seriously… guess.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; So this guy I worked with had a weird bug he couldn’t figure
out.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Sometimes his application would go
in an infinite loop and just retry over and over again.&lt;span&gt;&amp;nbsp; &lt;/span&gt;On his first screen he would process some
student records and put a list in the cache, a hash table.&lt;span&gt;&amp;nbsp; &lt;/span&gt;On the second he would take the list out of
the cache, if the result from the cache was null, it was assumed the user made
it to this page due to error or there was a problem at the earlier page. &lt;span&gt;&amp;nbsp;&lt;/span&gt;So he redirected back to the first
screen.&lt;span&gt;&amp;nbsp; &lt;/span&gt;He was confused why sometimes
the app would just loop, going back and forth from both pages.&lt;span&gt;&amp;nbsp; &lt;/span&gt;So he took out the check.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I tried to explain the check was fine if it
checked for NULL and only null.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Since
the list being empty was a valid scenario, there may just be no students that
met the particular criteria, but a null was a problem.&lt;span&gt;&amp;nbsp; &lt;/span&gt;After 20 minutes of trying to explain the
point, the difference between a reference being null after being pulled out of
a hash table and a valid collection being pulled with no records in it, the
point was dropped.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; They had some weird ideas about floating point numbers, and
doubles.&lt;span&gt;&amp;nbsp; &lt;/span&gt;They used Decimals for
everything. &lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;I once got into a debate,
losing, thought of as an idiot for challenging their views.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I was confused why they didn’t use them.&lt;span&gt;&amp;nbsp; &lt;/span&gt;According to them floats and doubles were
buggy and rounded, at one point I was told “The error is in the cpu”.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Basically
they were trying to explain the problem of precision.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; It’s not a bug in the
cpu or in .net.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;It’s a problem you should have learned about
in jr. high science or math.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Ok, if you take an Astrophysics class it may be
re-explained.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;It’s why you don’t use 3.14 as pi to
calculate the distance of stars.&amp;nbsp;&lt;span&gt; &lt;/span&gt;You need more precision or
your calculations will be off, you are only accurate to (n – 1) decimal places
where n is the least precise number in the calculation.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In some cases you need a lot of decimal
places and accuracy, more than a float or double can hold. &lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;When I understood wtf they were talking about
I was like “Oh, precision, yah that’s an issue with some stuff. Um… &lt;span&gt;&amp;nbsp;&lt;/span&gt;but you can use a double for calculating GPAs”.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; From the msdn documentation : “The &lt;code&gt;&lt;span style="font-size:10pt;line-height:115%;"&gt;double&lt;/span&gt;&lt;/code&gt; type can represent
values ranging from approximately 5.0&amp;nbsp;×&amp;nbsp;10−&lt;sup&gt;324&lt;/sup&gt; to
1.7&amp;nbsp;×&amp;nbsp;10&lt;sup&gt;308&lt;/sup&gt; with a precision of 15-16 digits “. 15 digits
should be enough for a GPA, not enough for distance of stars though.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;I’ve told that story, partially for therapy and mostly to lead
to this point.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Many companies hire Jr. Developers wanting a regular
developer for cheap and have no interest in your training.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you find yourself at one of these places, the
best thing you can do for your career is move on.&amp;nbsp; Programming is a lot like chess: to get better, find someone better then you to kick your azz, repeatedly.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Our industry does not take care of its own.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Our communities do, but the industry doesn’t.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Most of what we do is considered magic by the
people hiring us.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Just talk to a head
hunter, they have no idea.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Being
inexperienced we don’t either.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If we
were doctors or lawyers we would do residency or clerkships to apply our
learning and be guided by experienced people we could look up to.&lt;span&gt;&amp;nbsp; &lt;/span&gt;You would think that seniors would step up
and mentor at a company.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is a
rarity.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Generally learning is on your
own and mentors are found at user groups in 20 min conversations once a month.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;If you’re
desperate for mentoring…&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;so am I.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Are my expectations too high?&lt;span&gt; &amp;nbsp; &lt;/span&gt;Is it really folly to think senior developers
should be teachers?&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=12" width="1" height="1"&gt;</description></item><item><title>Dull knives</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2008/02/20/dull-knives.aspx</link><pubDate>Wed, 20 Feb 2008 17:23:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:11</guid><dc:creator>bleahy</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;

&lt;/p&gt;&lt;p class="MsoNormal"&gt;One thing I noticed while working at restaurants was how
weird chefs can be about their knives.&lt;span&gt;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;You can tell who is serious about being a chef by how they treat their
knives.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Many have their own sets, those
that don’t tend to lay claim to the best in the place.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Never ever use a chef’s knife without
asking.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Not if you ever want a good
shift again.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Curious one evening, after seeing the head chef stop in the
middle of a big order and sharpen his blade,&lt;span&gt;&amp;nbsp;
&lt;/span&gt;I asked about the odd behavior.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I
was told simply “dull knives cut fingers”.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;I thought that sharp knives and
clumsiness cut fingers.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;The way you cut
with a dull knife is different from the way you cut with a sharp knife,&lt;span&gt;&amp;nbsp; &lt;/span&gt;if you are used to cutting with one type and
pick up the opposite, you are likely to hurt yourself.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Many times a development shop will not stop to sharpen their
knives.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;They are too busy cutting.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The consequences are not as direct as cutting
a finger.&lt;span&gt;&amp;nbsp; &lt;/span&gt;They appear in slowdowns in
the project, late nights and headaches.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;If your computers are slow, you may cut
corners when debugging or testing.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If
you lack a tool like Code Rush or Visual Studio 2008’s snippets, you may not
use Properties and instead use public Fields to save typing.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The list can go on for ages.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Our jobs (generally) are about automating tasks and
increasing productivity.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Would it not
stand to reason that we should from time to time turn toward our own processes
and try to automate some of those?&lt;/p&gt;

&lt;p class="MsoNormal"&gt;A simple example: logging.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;If your application has some form of logging, I ask you how
do you go about reading those logs?&lt;span&gt;&amp;nbsp; &lt;/span&gt;Do
you or an administrator have to manually poor through text files in notepad? If
you store the logs in a database, do you have to manually query the DB when
looking for events?&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;You probably have written a log writer that dumps the
information in your format, do you have an equivalent reader?&lt;span&gt;&amp;nbsp; &lt;/span&gt;If not, why not?&lt;span&gt; If the answer is time, I would bet you or your admin have already spent more time with the manual searching than would have been used in writing a tool.&amp;nbsp; &lt;br /&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=11" width="1" height="1"&gt;</description></item><item><title>Simplest thing possible and being simplistic.</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2008/02/16/simplest-thing-possible-and-being-simplistic.aspx</link><pubDate>Sun, 17 Feb 2008 05:42:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:10</guid><dc:creator>bleahy</dc:creator><slash:comments>0</slash:comments><description>&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;When reading xp books and general programming practice books, there is ambiguity and conflicting points on the subject of writing the “simplest” code to get something running.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;“Write the simplest code to get the test to pass”.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Generally the worst code I have seen or written has been with a simplistic mindset.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In other avenues of life the fastest path in getting something done is also the easiest, and the easiest solution is not the usually best.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;It is the same with programming.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Most of the time in life the right thing to do is also the hardest thing to do.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;It is easiest in a CRUD application, using .net in visual studio, to drag and drop and data bind.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If your objective is to view a table or view in a database, then you are fine.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;As long as the application is to be simple, doing a simple thing is no problem.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;There are a few things that turn this simple application into a spaghetti mess.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Business rules for one.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Business rules come in all forms.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It’s these rules your employer hopes that you will capture in requirements and in the software.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;These rules also have a tendency to change.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In education it may be how and what data is to be reported to the State.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In financial applications it could be the algorithm to calculate certain loans.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Where is your business logic?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Did you follow the simple approach and hide the logic among your data binding code?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If a new loan is added or a new required statistic needs to be monitored, how quickly will you be able to implement it?&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I worked on a project that was approached simply, with no thought of the future.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;We were developing a “functioning prototype” as quickly as we could.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;A constant phrase I would hear when suggesting other avenues was, “we don’t have time for that”.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;There was no time to sit and think about the fact that the overall project was to last for a year and that the prototype was the first iteration.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;We were focused only on getting the proto done.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;For the first two months we were very “productive” adding functionality every day.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;However this was an illusion, for most of the features were 85-95% to spec.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;It was that last 15-5% that was going to require fine tuning of the business logic. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Something that was a lot harder to do now that we were committed to a poor design. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;The logic ended up scattered throughout the application, duplicated in many areas.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Sometimes in stored procedures and at worst horribly written string concatenated dynamic queries embedded in a button click event in a form.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Sometimes it could be found in the code behind of an aspx page others in the html markup itself.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Objects were merely property bags passed from one form to another.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It was obvious that the business rules were an afterthought.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;The cliché is “Painting yourself into a corner”.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;There is only so much you hack at the same un thought out mess before it becomes too much to understand, too long to change and dangerous to refactor.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Many times I see this line, “Write the simplest code to …”, used to explain why something is “Over Engineered” or as a justification for writing simplistic code.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;The actual statement “Write the simplest code to get the test to pass”, expects you wrote tests.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;In turn, this presupposes you thought though your problem and your architecture to make it testable.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Having architecture is not “Over Engineering”, its Engineering.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It’s unfortunate because I want to have a good architecture.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I want well factored code.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;However with no guidance on the job, what is a junior to do?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;How do you learn when to use pattern x and when not, when your seniors don’t?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Not to mention groan when you ask.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;I’ve been told many times that I complicate issues or that I complicate problems.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I have dug deep to see if that is the case.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;While I obsess about my code being good enough, my problem isn’t that I over anything.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;What I’ve been taught in school, what I’ve read in books and blogs, and what I hear from experts in person and podcasts all jive.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;They all point to patterns and practices which I want to master.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;My problem is I’ve worked with people who don’t care and take simplistic approaches to every day coding.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;They say things like “Well if I had time I would have ‘done it right’” or “Maybe one day I’ll make that [bit of code] more object oriented”.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;And in these environments it isn’t long that I find myself doing the same.&amp;nbsp; Then I have to make a choice: leave, &amp;nbsp;fight an uphill battle, or live with&amp;nbsp;teh suk.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt 0.5in;TEXT-INDENT:-0.5in;"&gt;&lt;font face="Calibri" size="3"&gt;Not making a decision IS making a decision, a bad one. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;OOP may be an unattainable Ideal, that’s fine.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt 0.5in;TEXT-INDENT:-0.5in;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Excellence (&lt;b&gt;Areté&lt;/b&gt;) is constantly driving toward the Ideal. [Plato]&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=10" width="1" height="1"&gt;</description><category domain="http://jrdev.org/cs/blogs/jr_dev/archive/tags/Advice/default.aspx">Advice</category></item><item><title>Starting your career</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2007/07/03/starting-your-career.aspx</link><pubDate>Tue, 03 Jul 2007 07:55:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:8</guid><dc:creator>bleahy</dc:creator><slash:comments>1</slash:comments><description>&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Unlike some other careers, programming doesn’t have a well defined path. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;You can go in many directions and some lead to dead ends.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;I&amp;#39;ve been given a lot of bad advice as well as some good.&amp;nbsp; This is an &lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-fareast-theme-font:minor-latin;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;accumulation &lt;/span&gt;of the good.&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Object Oriented Programming&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Know and learn to apply the core fundamentals:&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Encapsulation, Inheritance, Encapsulation, Polymorphism, and Encapsulation.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;In school I was told that the main benefit of OOP was code reuse.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;In the workplace it seems that many people don’t apply OOP because cut and paste code reuse is “just fine”.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Some pushback comes from the idea that you will never need to reuse something; that the project you are working on is too unique.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;But is that an excuse to write in a way that prevents reuse? &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;Prevents testing?&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I’ve grown to view OOP as a way to allow code Use. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;The end product of every class should be something that is Usable.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It may not be reused outside of the project, but it can now be used by another developer.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Without the fundamentals of OOP you will be building on a poor foundation, both for your career and the projects you work on.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Caveat: Understand that many of your peers will not be writing good OO code. But then neither will you.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Know your language inside and out&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Or at least try.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Is it static, dynamic, a little of both?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This doesn’t mean memorize your framework, but understand how your language expresses itself.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;How does it handle memory?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;How do you write an event?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Until you can answer these questions, you’ll want to pick up a reference book.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;For C# I recommend O’Reilly’s C# in a Nutshell.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; Mine is well worn with coffee stains.&amp;nbsp; &lt;/span&gt;Having a small understanding of alot advanced concepts goes along way.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Learn your basic framework classes&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;What do you use to retrieve data from a database or an xml document?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;When would you want to use a data reader or a data adapter?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;How do you sort a List of objects?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Know when you want a hash table instead of an array or list.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Build a knowledge base&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;If you don’t know something, know how and where to find it.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It’s better to have the core concepts of&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;what you are trying to do and not know exactly how to do it.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Than it is to know a million ways to not solve the problem.&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font face="Calibri" size="3"&gt;Read… a lot&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;The quickest way to separate you from the herd is to read outside of work. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Read books, read blogs, and read your framework’s documentation. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Code Complete, buy it.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Consider your first year on the job just one more year of college. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Except now you can afford to buy your books new.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If you have a long commute think about getting an mp3 player.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Not all podcasts suck.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Dot Net Rocks! and Hansel Minutes are top notch. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;The desire to learn is greater than having the capacity.&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Join a users group&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Users groups have people that are interested in bettering themselves and their craft.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;You want to surround yourself with people like that and not with slugs.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Meet people and talk about what little you do know.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Also, don’t try to talk above your knowledge level, you won’t fool anyone.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;For a while you will have a lot to gain and little to give back, hopefully that will change over time.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;By teaching someone else you will solidify your own knowledge.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Own your mistakes&lt;/font&gt;&lt;/font&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;We all screw up.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;You will too.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The worst thing you can do is not tell someone you did. &lt;/font&gt;&lt;/p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Stay sane&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;If you find yourself overwhelmed and burning out.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Take a break from programming at home.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=8" width="1" height="1"&gt;</description><category domain="http://jrdev.org/cs/blogs/jr_dev/archive/tags/Advice/default.aspx">Advice</category></item><item><title>Unfactoring</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2007/06/17/unfactoring.aspx</link><pubDate>Sat, 16 Jun 2007 23:48:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:6</guid><dc:creator>bleahy</dc:creator><slash:comments>0</slash:comments><description>&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; In an attempt to be crazy famous, I&amp;#39;ve devised a few tricks and tips to help a senior developer to defend his turf from the Jr. Developer.&amp;nbsp; A guy like me,&amp;nbsp;that is after his job.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;These techniques I call UnFactoring, since they are largely the antithesis of Refactoring(Fowler).&amp;nbsp; Unlike Refactoring, which attempts to reduce complexity in stagnating &amp;quot;Factored&amp;quot; code, unfactoring is ... the opposite.&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:13.5pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:11.0pt;"&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&amp;nbsp;&lt;font size="4"&gt;Stuff Method&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:13.5pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; Whenever you see a method that takes an Interface as a parameter, replace that interface with each and every field from that interface. If you can add one or two extra parameters that are used for control flow you are on your way to a nicely&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;unfactored project.&amp;nbsp; I also suggest adding at least one parameter that is not used.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;"&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; If your method has a return type of an interface or class, replace that with &amp;#39;out&amp;#39; parameter.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Ten to twelve parameters is a good rule of thumb. If you can get away with more, it is preferred to properly disguise the method&amp;#39;s intent.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:13.5pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:11.0pt;"&gt;&lt;strong&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&amp;nbsp;&lt;font size="4"&gt;Collapse Hierarchy&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:13.5pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; Inheritance reduces complexity, if you have few classes that derive from an abstract base.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It may be wise to collapse all the objects into one big one.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Making extensive use of case statements to control the differences in behavior is also a good to make visual static analysis tools unusable.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Collapse Hierarchy will freeze any Jr. Developer in their tracks, forcing them to understand all potential cases of the class.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This technique is useful for adding the rigidity desired to then require the Jr. Developer to modify every case statement.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;The Jr. Developer will have no choice but to run to you for help, thus affirming your station in the company.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;strong&gt;&amp;nbsp;&lt;font size="4"&gt;Remove Cohesion&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="FONT-SIZE:13.5pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; Classes that have methods acting only on their data are too easily understood.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It is instead preferred to have logic that modifies a class to be outside of that class.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Methods such as IsValidNonHolidayDate(); should be removed from a class entirely.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Instead replace every occurrence of the call with the entirety of the method logic.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will help insure that when a bug occurs involving HolidayDates, it must be fixed only by you.&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font face="arial,helvetica,sans-serif" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font face="arial,helvetica,sans-serif" size="4"&gt;&lt;strong&gt;Introduce Coupling&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;strong&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Sometimes decreased coupling occurs after a Jr. Developer has read a new fancy book.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Logic separated into layers can also be combated with Introduce Coupling.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Subtle decoupling occurs when objects and methods rely on interfaces instead of the implementations of objects themselves.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Replace abstractions such as DataSet or ILists&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;with the appropriate UI widget, such as System.Web.UI.WebControls.DataGrid or System.Windows.Forms.ListBox. Make sure to fill the UI widget directly in your data access code.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This will insure that none of your code can be used outside of the specific context in which you wrote it.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;You and only you will then be able to extend that functionality.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;The following were contributed from a friend:&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font size="4"&gt;&amp;nbsp;Obfuscate Intent&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Naming conventions sometimes work against you. If you can, don&amp;#39;t identify member variables in any way different from local variables. That makes the JrDev either spend a LOT of his own time figuring out what is what, or come to you for help.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Use variable names such as x, i, and t extensively. This will pretty much guarantee you that you will work on this module forever, without fear that some whipper-snapper will take over some of your turf.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;If your language is case sensitive make sure not to standardize any capitalization.&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp;Remove Documentation&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif" size="4"&gt;&lt;span&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Don&amp;#39;t comment a thing, and if you&amp;#39;re working on someone else&amp;#39;s module, remove the comments as you go. This coupled with &lt;b&gt;Obfuscate Intent&lt;/b&gt; is very effective. &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;If using C# or Java, make sure not to comment in a way that can be picked up by NDoc, JDoc or any other documentation building tool.&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font size="4"&gt;Hide Easter Egg&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&amp;nbsp;&amp;nbsp; &lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Mask warning messages in your compile with local compiler settings so that the Jr Dev thinks it&amp;#39;s something he&amp;#39;s done and wastes a lot of his development time trying to fix them. Never check in buildable code at the end of your day, especially if a Jr Dev requires it as a dependency. By the time figures it out, sometime after hours, he&amp;#39;ll be too tired to complain.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; Using these techniques will insure the slow the progress of any OOP Developer that joins your team.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Your managers will grow to respect your value over time.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Expect to return from vacation with a raise after you save the day magically.&lt;/span&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=6" width="1" height="1"&gt;</description><category domain="http://jrdev.org/cs/blogs/jr_dev/archive/tags/Sarcasm/default.aspx">Sarcasm</category></item><item><title>Ten ways to make sure your Junior Developers  go running for the door.</title><link>http://jrdev.org/cs/blogs/jr_dev/archive/2007/06/17/ten-ways-to-make-sure-your-junior-developers-go-running-for-the-door.aspx</link><pubDate>Sat, 16 Jun 2007 23:10:00 GMT</pubDate><guid isPermaLink="false">e0100409-eaa7-4e7b-a523-1aa030e49939:5</guid><dc:creator>bleahy</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;1)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your Jr. Developer is interested in a new .Net technology,&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; r&lt;/span&gt;emind him at lunch that Microsoft is ‘teh suk’ and produces only crap.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;2)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your Jr. Developer says the word &amp;quot;Pattern&amp;quot;, ask him what book he read and remind him that book writers are like those who teach.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;3)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;If your Jr. Developer is concerned about a section of code he has inherited being hard to understand,&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; l&lt;/span&gt;ecture him on the need to write better comments.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;4)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your Jr. Developer says the phrase &amp;quot;Cyclomatic Complexity&amp;quot;, remind him he is not in college anymore.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;5)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your Jr. Developer attempts to write a unit test, remind him to &amp;quot;Do it right the first time&amp;quot;.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;6)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your Jr. Developer wishes to use a vacation day to attend a conference, refer to it in house as &amp;quot;Brain Washing&amp;quot;.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;7)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;If your Jr. Developer says the word &amp;quot;Refactor&amp;quot;, &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;ask him &amp;quot;You think you could write it better?”&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;8)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Require everything your Jr. Developer writes to be static.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If a threading problem emerges, blame it on him.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;9)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;When reviewing your Jr. Developers code, if you see an interface or any inheritance, make him rewrite it, &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;this time without &amp;quot;Over complicating&amp;quot; the issue.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="MARGIN:0in 0in 10pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font face="Calibri" size="3"&gt;10)&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Never, under any circumstances, offer help.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Just repeat: &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&amp;quot;You can do it right or get it done.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Get it done&amp;quot;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If he can’t figure out your entire codebase the first week, &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;he&amp;#39;s an idiot.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://jrdev.org/cs/aggbug.aspx?PostID=5" width="1" height="1"&gt;</description><category domain="http://jrdev.org/cs/blogs/jr_dev/archive/tags/Sarcasm/default.aspx">Sarcasm</category></item></channel></rss>