<?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>Former Slacker &#187; Programming</title>
	<atom:link href="http://formerslacker.com/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://formerslacker.com/blog</link>
	<description>A Journey to Productivity</description>
	<lastBuildDate>Mon, 17 Nov 2008 18:10:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>New Job Part 2: Resume Polishing</title>
		<link>http://formerslacker.com/blog/2008/09/29/new-job-part-2-resume-polishing/</link>
		<comments>http://formerslacker.com/blog/2008/09/29/new-job-part-2-resume-polishing/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 05:33:59 +0000</pubDate>
		<dc:creator>Derek Park</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://formerslacker.com/blog/?p=64</guid>
		<description><![CDATA[After my fiancée and I officially decided to move to Silicon Valley, I found myself in the market for a new programming job.  Before I even looked at any job openings, though, I updated my resume.  I strongly feel that the resume is often the make-or-break factor when applying for jobs.  A [...]]]></description>
			<content:encoded><![CDATA[<p>After my fiancée and I officially decided to move to Silicon Valley, I found myself in the market for a new programming job.  Before I even looked at any job openings, though, I updated my resume.  I strongly feel that the resume is often the make-or-break factor when applying for jobs.  A well-written resume can get attention, which can lead to an interview.  A poorly-written resume will likely get thrown in the trash.</p>
<h4 class="smallbottommargin">Advice</h4>
<p>I spent a lot of time reviewing resume tips (yes, <a href="http://formerslacker.com/blog/2007/02/08/9-resume-tips-that-should-be-screechingly-obvious-but-apparently-arent/">my own</a>, but also <a href="http://www.randsinrepose.com/archives/2007/02/25/a_glimpse_and_a_hook.html">several</a> <a href="http://www.lifeclever.com/give-your-resume-a-face-lift/">others</a>).  I don&#8217;t update my resume very often, but when I do, I always look for advice.  In the end, I actually threw away my original resume and completely rewrote it.  The basic content was the same, but the style was entirely new (and very heavily influenced by resume articles I read).  This took quite a bit of time, but was entirely worth it.  The final product was much higher quality than what I started with.</p>
<p>One really important thing I did was have coworkers, professors, and my fiancée read my resume.  I got some really good feedback from this.  I got a few style pointers, but mostly I got substance advice.  My fiancée pushed me to clarify and expand on my leadership experience.  My coworkers recommended relevant technologies that I should have included.  My academic advisor really pushed me to restructure the resume to make it more appropriate for the industry.  In particular, he had me highlight my skills and work experience.</p>
<h4 class="smallbottommargin">Formatting</h4>
<p>Another thing I would wholeheartedly recommend everyone do is to prepare both a formatted (ahem, PDF) and a plaintext resume.  I used my formatted resume almost everywhere.  However, I did use a plaintext resume for a few places that I  <em>knew</em> were going to strip my resume down to plaintext anyway.  In general, plaintext resumes are not very pretty, but for places that I know are going to strip away the formatting, I would rather provide a plaintext resume of my own creation.  Text extracted from formatted documents is rarely pleasant to read.</p>
<p>I do not, however, recommend using plaintext resumes for most job applications, because they still look like crap.  Use them only when you really have to.  And despite <a href="http://steve-yegge.blogspot.com/2007/09/ten-tips-for-slightly-less-awful-resume.html#text">what Steve Yegge says</a>, you don&#8217;t need to submit a plaintext resume to Google.  I don&#8217;t know why he implies that resumes at Google are stripped of their formatting.  I almost submitted a plaintext resume to Google because of his article.  I&#8217;m glad I didn&#8217;t, though, because the first guy who interviewed me showed up with a printout of my resume exactly as I had formatted it.</p>
<h4 class="smallbottommargin">The Cover Letter</h4>
<p>Every resume I sent was with a custom cover letter.  Form letters look lazy and half-assed, because that&#8217;s what they are.  A custom cover letter indicates at least a little actual interest in the job.  A generic cover letter screams &#8220;bulk mail&#8221;, which in turn yells &#8220;delete me&#8221;.</p>
<p>I also made my cover letters match my resume as closely as possible.  Some of the positions that I applied for were via an online form, and the only place to provide a cover letter was a text box.  For those, I submitted the cover letter in plaintext.  For the rest, I made my cover letters match my resume fonts, margins, etc.  I think this attention to detail is important.  When printed, the cover letter and resume should look as if they came from the same document.  This level of attention to detail may not be strictly necessary, but it definitely won&#8217;t hurt, and it really doesn&#8217;t take much time.  Create a cover letter template and you only have to make it match once.</p>
<p>Oh, and I saved every single cover letter I sent.  This allowed me to lift sentences when writing new cover letters, but it also gave me a lot of examples to read when I had trouble thinking of what to say.  (And I have them saved for the future as well.)  Whenever I had trouble deciding what to put into a new cover letter, I&#8217;d re-read the others, and several ideas would pop into my head.  A little socket work here, a little C++ work there.  Examples are extremely useful for me, even when they are my own.</p>
<p>Once I finished my resume and all those matching cover letters, I started sending them out to interesting positions.  I had planned on talking about that more in this post, but the resume chatter got long enough, so I&#8217;m pushing that off to next time.</p>
<p><em>By the way, if you want a lot of other good tips, read the comments on my <a href="http://formerslacker.com/blog/2007/02/08/9-resume-tips-that-should-be-screechingly-obvious-but-apparently-arent/">resume tips article</a>.  There were a lot of really good tips (as well as a few really bad tips) from the readers.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://formerslacker.com/blog/2008/09/29/new-job-part-2-resume-polishing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Job Part 1: Why Silicon Valley?</title>
		<link>http://formerslacker.com/blog/2008/06/27/new-job-part-1-why-silicon-valley/</link>
		<comments>http://formerslacker.com/blog/2008/06/27/new-job-part-1-why-silicon-valley/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 15:43:23 +0000</pubDate>
		<dc:creator>Derek Park</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://formerslacker.com/blog/?p=63</guid>
		<description><![CDATA[You can call me a software engineer or a software developer.  You can call me a computer scientist.  You can even call me a Technical Yahoo! Software System Development Engineer.  Whatever.  I call myself a programmer, maybe a hacker on self-congratulatory days.
My first programming-related job was working as a systems administrator [...]]]></description>
			<content:encoded><![CDATA[<p>You can call me a software engineer or a software developer.  You can call me a computer scientist.  You can even call me a Technical Yahoo! Software System Development Engineer.  Whatever.  I call myself a programmer, maybe a hacker on self-congratulatory days.</p>
<p>My first programming-related job was working as a systems administrator during my senior year of undergrad studies.  I did a lot of network and computer maintenance that year, but I also had a chance to put together some custom software.  After that, I had a grant as a Master&#8217;s student to develop science and math projects for elementary school students.  As part of this job, I built a new website and database for the grant and all its associated projects.  Most recently, I was developing radar software for a small defense contractor.  This was my first full-time job, and also my first software-only job.  However, it was not a job in a software-only company, and I&#8217;ve decided that&#8217;s where I want to be.</p>
<p>I don&#8217;t want to work for the software division of some company.  I don&#8217;t want to work in network administration.  I definitely don&#8217;t want to be anyone&#8217;s &#8220;computer guy&#8221;.  I want to be a part of a <em>dedicated software firm</em>.</p>
<p>No one can truly thrive without continual learning.  You learn or you fall behind, regardless of what field you are in.  No matter how much you know, no matter how skilled you are, others will eventually surpass you if you don&#8217;t strive to stay ahead.  I know that there are many things I need to learn about building quality software, and I feel that I am likely to learn some of these things best in a dedicated software company.</p>
<p>In a software company, the focus is on the software (or it should be).  That means that there is more attention directed toward software quality, toward software development productivity.  It means that a lot of the management grew out of the developer pool, and should know what it takes to build quality software.  Most importantly, it means that there&#8217;s a wealth of talented and experienced developers to learn from.  I want to know how to built large systems.  I want to learn how hundreds of programmers can work together.  I want to discover how world-class software is grown.  Maybe I could learn these things at a non-software company, but it would certainly be harder.</p>
<p>There are a lot of software firms in the world, but I can tell you one place where most of them are not: Mississippi.  You can probably guess where I used to live.</p>
<p>Since Mississippi has few software firms, it would be rather difficult for me to find my ideal job there.  Besides, neither I nor my fiancée ever planned to live in Mississippi forever.  Neither of us were born or raised in Mississippi, and neither of us have any wish to grow old there.  We were destined to move eventually.</p>
<p>When my fiancée and I started investigating where we <em>should</em> live, we wanted to restrict our search to places that would have abundant jobs for both of us.  She&#8217;s a psychologist.  Most software companies are headquartered in or near large cities.  A luck would have it, most people are also in or near large cities.  Since more people imply more opportunities for psychologists, our fields&#8217; job opportunities overlap best in major cities.  (Funny how most opportunities seem to be where most people are . . . .)</p>
<p>We ranked some of the best cities for both of us, and three options came out on top: Boston, San Diego, and Silicon Valley.  She applied for jobs in those three areas, and we decided we&#8217;d go wherever she got an offer.  In the end, she received offers in both San Diego and Silicon Valley (specifically Palo Alto).  Of those two, Palo Alto appeared to have more of a future for her, as well as more opportunities for me.  That pretty much ended the discussion of where we should live.  She accepted a position in Palo Alto and I began the process of applying for jobs myself.</p>
<p>So, where does a programmer apply for jobs in Silicon Valley?  Lots and <em>lots</em> of places.  I&#8217;ll talk more about that soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://formerslacker.com/blog/2008/06/27/new-job-part-1-why-silicon-valley/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How Quickly Does Programming Knowledge Become Obsolete?</title>
		<link>http://formerslacker.com/blog/2007/03/20/how-quickly-does-programming-knowledge-become-obsolete/</link>
		<comments>http://formerslacker.com/blog/2007/03/20/how-quickly-does-programming-knowledge-become-obsolete/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 15:47:01 +0000</pubDate>
		<dc:creator>Derek Park</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://formerslacker.com/blog/2007/03/20/how-quickly-does-programming-knowledge-become-obsolete/</guid>
		<description><![CDATA[How rapidly does programming knowledge really become out-of-date?  Do things change so frequently that it has become unreasonable to expect programmers to keep up with the pace of technology?  I&#8217;m not so sure the pace is really that fast.
A few days ago, Half Sigma posted an article claiming that a career in programming [...]]]></description>
			<content:encoded><![CDATA[<p>How rapidly does programming knowledge really become out-of-date?  Do things change so frequently that it has become unreasonable to expect programmers to keep up with the pace of technology?  I&#8217;m not so sure the pace is really that fast.</p>
<p>A few days ago, Half Sigma posted an article claiming that a career in programming sucks.  I responded that <a href="http://formerslacker.com/blog/2007/03/12/why-a-career-in-computer-programming-doesnt-suck-a-response/">no, it doesn&#8217;t</a>.  In turn, I got quite a few comments supporting Sigma.  Several of them were centered around Sigma&#8217;s first argument, that programming knowledge becomes obsolete too quickly.</p>
<h4 class="smallbottommargin">Rapid Obsoletion of Programming Knowledge</h4>
<p>In an attempt to prove that programming knowledge has a very short expiration date, it&#8217;s easy &mdash; and common &mdash; to drag out an expired technology (Punchcards, Z80, Turbo Pascal, etc.) and then point at it and say, &#8220;Look! Look!  How does any of that still apply?&#8221;</p>
<p>Quite frankly, if you have to drag out punch cards to make your point, you don&#8217;t have one.  Punch cards died 30 years ago.  If that&#8217;s the best you can do, the computer science field must not be moving very quickly at all.  The Z80 died in the mid-1980s.  Even Turbo Pascal was gone before Windows 95 hit the streets.  Each of those technologies had more than a 10-year lifespan before it became obsolete.  Is it so unreasonable to tell programmers that they need to learn a new technology at least <em>once every ten years</em>?</p>
<blockquote><p><em>Hey, remember when plumbers used to use lead-based solder?  Plumbing knowledge is obsoleted so fast!</em></p></blockquote>
<p>Just like the basics of soldering are partially independent of any specific solder compound, so are the basics of computer science separate from any specific technology.  Punch cards are just a storage medium, like hard disks, so much of the knowledge gained during the punch card era is still relevant.  Similarly, a programmer who has good knowledge of the Z80 should be able to map much of his knowledge to modern processors.  And a skilled programmer who used Turbo Pascal should still be a skilled programmer in a new language, given a brief acclimation period.</p>
<p>If tomorrow morning we all switch to PowerPC computers, programmed in Python, using some funky crystal matrix for storage, my knowledge will not all be obsolete.  Certainly, my knowledge of the more quirky aspects of C++ won&#8217;t be useful anymore, but the basics won&#8217;t have changed.  It&#8217;s still a Von Neumann machine.  Algorithms are still important.  Software design practices are still relevant.</p>
<p>Nothing fundamental really changes very quickly.  The superficial stuff evolves rapidly, but if your knowledge is only superficial, that&#8217;s a different problem altogether.</p>
<h4 class="smallbottommargin">The Example Game, from the Other Side</h4>
<p>If we want to play the &#8220;look at this example&#8221; game, I&#8217;ll just trot out C and the x86 architecture.  Both of those have been around for more than 30 years, and they&#8217;re both still going strong.  They&#8217;ve been around since <em>before I was born</em>, and I still use both <em>every day</em> at work.  Likewise, C++ and IPv4 have both been around for more than 20 years, and show no sign of dying soon.  Even Java and PostgreSQL have been around for 10 years now.</p>
<p>There are many examples of technologies that have been around for more than a decade.  In fact, I challenge anyone to demonstrate a dead technology that was once popular and considered important, which didn&#8217;t last for at least ten years.  I doubt there are very many examples.  I think there&#8217;s a minimum lifespan before anything can really even be considered important, if for no other reason than it takes a while before a given technology becomes well-developed enough to be utilized by business.</p>
<h4 class="smallbottommargin">Knowledge Carry-Over</h4>
<p>Even when particular technologies die, they still influence future technologies, and so the knowledge base doesn&#8217;t disappear or become useless.</p>
<p>Pick any current technology, and you can trace its roots back toward previous technologies.  C# was influenced by Java.  Python was influenced by Lisp.  Ruby was influenced by Python, Smalltalk, and Perl.</p>
<p>Knowledge of any predecessor technology will spill over to the newer technology.  Certainly, not everything remains relevant, but there&#8217;s definitely some knowledge carry-over.  If you&#8217;re skilled with Java, C# is not a huge leap.  Things are different, but not completely alien.  If you&#8217;re comfortable with functional and object-oriented programming, you can pick up Ruby.</p>
<h4 class="smallbottommargin">What Do Employers Want?</h4>
<p>Some commenters argued that employers will only hire programmers who are already skilled in the latest technologies.  I agree that&#8217;s true for some employers.  However, I&#8217;d argue that it&#8217;s not true for most, shouldn&#8217;t be true for any, and won&#8217;t be true for the employers good programmers should want to work for.</p>
<p>Would I hire an experienced Clipper/dBASE programmer for work on an Oracle project?  <em>Yes.</em>  Would I hire a good C++ programmer to work on a C# project?  <em>Yes.</em></p>
<p>Good people are far more valuable than specific knowledge.  Any decent programmer can learn the syntax and APIs.  If you have demonstrated a strong knowledge of database programming, why <em>wouldn&#8217;t</em> your knowledge carry over to Oracle?  If you are a good C++ programmer, why <em>wouldn&#8217;t</em> you be a good C# programmer?  If you cannot move from one language to another, then your knowledge is purely superficial, and <em>you are not a good programmer</em>.</p>
<p>If a potential employer cannot recognize that a good programmer is much more valuable than a mediocre programmer &#8220;skilled&#8221; in the latest buzzwords, then you don&#8217;t want to work there.  You will almost certainly not be treated well, because the employer clearly doesn&#8217;t understand the value of a good programmer.</p>
<p>If your boss doesn&#8217;t want you to learn new technologies, then you&#8217;ve got a bad boss.  Your boss should want, and expect, you to be constantly learning.  What kind of idiot thinks that he&#8217;s hiring programmers with all the knowledge they&#8217;ll ever need?</p>
<h4 class="smallbottommargin">Technology Changes</h4>
<p>You people complaining about the obsoletion of knowledge sound like luddites.  It frankly sounds like you&#8217;re afraid of progress, and unwilling to learn new technologies.  You picked a fast-moving field.  Accept that some of your specific knowledge will be subject to attrition.  Knowing, for example, a particular object-oriented language&#8217;s syntax is transient knowledge.  Understanding how to program using good object-oriented methodologies is not transient.</p>
<p>Expect to learn new technologies.  It&#8217;s part of the field.  Learn them at work, or learn them on your own time.  But don&#8217;t complain to me that your knowledge of Clipper isn&#8217;t useful anymore because the world now uses Oracle.  If you didn&#8217;t learn anything useful while you were using Clipper that would be applicable to Oracle, then you probably didn&#8217;t <em>do</em> anything useful while working with Clipper.</p>
<p>Now, I&#8217;m not going to pretend that the computer science field doesn&#8217;t have any problems.  Certainly it has problems.  <em>Life</em> has problems.  That&#8217;s just the way things are.  But pretending that the problems are insurmountable doesn&#8217;t help anything.  Pretending that technology evolves so fast that no one could possibly keep up long term is just a way of hiding the fact that you aren&#8217;t interested in keeping up.</p>
<p>If you want to switch fields because you can&#8217;t or won&#8217;t keep up with the pace of technology, please do so.  If you find something you love, then that&#8217;s far better than doing something you don&#8217;t care about.  And if you find a field where you knowledge base never needs to evolve, let me know.  I&#8217;ll be sure to pass the news on to others who don&#8217;t want to program anymore.  I have to say though, I can&#8217;t think of a faster way to obsolete all your knowledge than by switching to a different field.</p>
]]></content:encoded>
			<wfw:commentRss>http://formerslacker.com/blog/2007/03/20/how-quickly-does-programming-knowledge-become-obsolete/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
