<?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>codefork.com &#187; work</title>
	<atom:link href="http://codefork.com/blog/index.php/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://codefork.com/blog</link>
	<description>branching out</description>
	<lastBuildDate>Sat, 21 Apr 2012 14:52:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Exercise Mania</title>
		<link>http://codefork.com/blog/index.php/2012/04/21/exercise-mania/</link>
		<comments>http://codefork.com/blog/index.php/2012/04/21/exercise-mania/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 14:50:56 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[culture]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=241</guid>
		<description><![CDATA[My ex-girlfriend&#8217;s mom started doing a jazzercise class in the 80s and hasn&#8217;t stopped since. It&#8217;s a weird thing. Programming exercises can be just as addictive as some forms of well-marketed physical exercise. I have to actively resist writing solutions in Lisp to every silly problem I stumble upon online. But this morning, I came [...]]]></description>
			<content:encoded><![CDATA[<p>My ex-girlfriend&#8217;s mom started doing a <a href="https://en.wikipedia.org/wiki/Jazzercise">jazzercise</a> class in the 80s and hasn&#8217;t stopped since. It&#8217;s a weird thing.</p>
<p>Programming exercises can be just as addictive as some forms of well-marketed physical exercise. I have to actively resist writing solutions in Lisp to every silly problem I stumble upon online. But this morning, I came across <a href="https://news.ycombinator.com/item?id=3871449">this simple one</a> (a blog post from 2007, but that happens on Hacker News) and, for some reason, couldn&#8217;t pass it up:</p>
<blockquote><p>Write a program that prints the numbers from 1 to 100. But for multiples of three print &#8220;Fizz&#8221; instead of the number and for the multiples of five print &#8220;Buzz&#8221;. For numbers which are multiples of both three and five print &#8220;FizzBuzz&#8221;.</p></blockquote>
<p><script src="https://gist.github.com/2437313.js"> </script></p>
<p>It&#8217;s so silly that I guess some folks, like the blogger linked above, have turned it into a problem of &#8220;what&#8217;s the most creative/strange way I can think of to do this?&#8221; Which is interesting and fun in its own right.</p>
<p>What I don&#8217;t understand is the attitude expressed in the original fizzbuzz blog post, <a href="http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/">&#8220;Using FizzBuzz to Find Developers who Grok Coding&#8221;</a>. Does it really matter if it takes someone 5 or 20 minutes to write a solution? (FWIW, I took about 10 mins). A shorter time with such a goofy example means someone &#8220;groks&#8221; coding more than another? Ridiculous. </p>
<p>These types of puzzles are amusing precisely because a lot of real-world development (which is what the vast majority of people who code for a living do) is unfortunately pretty rote, and doesn&#8217;t require a lot of algorithmic thinking. Code monkeys learn to use libraries and frameworks, and spend a lot of time trying to use them correctly and cleanly, in order to implement straightforward requirements. So these exercises are a shift in mindset. In a tiny way, they put you back on the path of engineering. It&#8217;s why people find them interesting to do. It&#8217;s why I&#8217;m reading the Structure and Interpretation of Computer Programs. </p>
<p>Taking a few more minutes might mean you&#8217;re not accustomed to solving such problems every minute of your working life. But that&#8217;s not at all the same as gauging whether someone understands coding or not. That kind of measurement is naive at best.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2012/04/21/exercise-mania/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Emacs an IDE</title>
		<link>http://codefork.com/blog/index.php/2011/12/23/making-emacs-an-ide/</link>
		<comments>http://codefork.com/blog/index.php/2011/12/23/making-emacs-an-ide/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 01:34:43 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[emacs]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=188</guid>
		<description><![CDATA[It&#8217;s that time when bloggers wax introspective about the past year. For me, the major personal revelation in 2011 was re-discovering something very old, and putting it to new use. For me, 2011 was the year of the Emacs IDE. I&#8217;ve been using Emacs, on and off, for close to a decade now. What&#8217;s changed [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s that time when bloggers wax introspective about the past year. For me, the major personal revelation in 2011 was re-discovering something very old, and putting it to new use. For me, 2011 was the year of the Emacs IDE.</p>
<p>I&#8217;ve been using Emacs, on and off, for close to a decade now. What&#8217;s changed is that, in the past few months, I&#8217;ve been writing extensions for it. It started with a simple desire to <a href="http://codefork.com/blog/index.php/2011/09/25/learning-lisp/" title="Learning Lisp">better navigate files</a> in a complex directory hierarchy that followed specific and somewhat convoluted conventions. At first, learning Emacs Lisp was simply a means to an end, but I ended up liking it so much that I started exploring Common Lisp (and more recently, Clojure, since I&#8217;ve worked with Java in the past).</p>
<p>What started as a small task has become a larger project of turning Emacs into an <a href="http://en.wikipedia.org/wiki/Integrated_development_environment" title="Integrated Development Environment">IDE</a>.</p>
<p>To understand this, one needs to know some context about the system I work with. We developers edit tons of XML files and files in other text formats, which all drive our proprietary web application product. We have many command line tools that manipulate these files in various ways; the system was originally designed by folks who followed the UNIX philosophy of building orthogonal tools and chaining them together.</p>
<p>There are pros and cons to this system; for reasons I won&#8217;t get into, I don&#8217;t love it, but it&#8217;s what we work with right now. When I started the job, the vast majority of the developers used screen, vi, and the shell prompt. Typical workflows that involved working with only a few files could be extremely hard to keep track of, and usually required a lot of copying and pasting between screen and/or ssh sessions. Few people seemed to mind, but I found the workflow to contain too much extraneous <a href="http://en.wikipedia.org/wiki/Cognitive_load">cognitive load</a>, and the state of the tools made development very prone to error.</p>
<p>Gradually, I&#8217;ve been integrating our tools into Emacs. Sometimes that simply means binding a key combination to running a diagnostics program and storing the output in a buffer. Sometimes it means accumulating that output for history&#8217;s sake. Sometimes it means parsing program output, processing it in Emacs Lisp, and inserting a result into the current buffer. Sometimes it means running external programs, even GUI applications, and tweaking them a bit to tell Emacs to open specific files you want to look at.</p>
<p>The productivity gains have been amazing. This is no reason to brag: managing several screen sessions with different vi and shell instances wasn&#8217;t exactly hard to improve upon. But Emacs made it fairly painless. Emacs Lisp has proved to be wonderful &#8220;glue&#8221; for integrating existing tools in our environment.</p>
<p>Writing tools that enable you to do other job tasks better is a really interesting experience; I&#8217;ve never done it to such an extensive degree. So far, one other person in my group is using this Emacs IDE, and she has been happy with how much it facilitates her work. Others who swing by my desk for something often watch me work for a moment, and ask, &#8220;how did you do that?! that&#8217;s not vi, is it?&#8221;</p>
<p>Getting more people to switch over means convincing them that the steep learning curve of Emacs is worth the gains of the integration I&#8217;ve done. I&#8217;m not sure how much that will happen, since a big part of it is cultural. But if there aren&#8217;t any more converts, I don&#8217;t really care. The best thing about this ongoing project is that I am the end user. The software I wrote is really for myself. It is something I use intensively every single day. And that makes it all the more gratifying.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2011/12/23/making-emacs-an-ide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Learning Lisp</title>
		<link>http://codefork.com/blog/index.php/2011/09/25/learning-lisp/</link>
		<comments>http://codefork.com/blog/index.php/2011/09/25/learning-lisp/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 01:57:42 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[emacs]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=167</guid>
		<description><![CDATA[For work projects, I often have to jump around a lot of XML files referenced in one another by name. The files follow a strict naming convention, but it&#8217;s one that looks like gibberish to human eyes. Typing them is difficult and prone to error; plus there are so many files in a given project [...]]]></description>
			<content:encoded><![CDATA[<p>For work projects, I often have to jump around a lot of XML files referenced in one another by name. The files follow a strict naming convention, but it&#8217;s one that looks like gibberish to human eyes. Typing them is difficult and prone to error; plus there are so many files in a given project that navigating a visual tree of the directory isn&#8217;t much easier.</p>
<p>So I wrote a small library for Emacs to find and open a file in the directory tree, if the cursor is over a string of text that matches a valid filename in the convention. I&#8217;m embarrassed to admit this took me two full days (a few other functions were in the library too). The only previous exposure to Emacs Lisp I had was tweaking my .emacs file, so I had to learn the language as well as hunt down the right functions to call for what I wanted. The work is paying off: it feels 10x&#8217;s easier to navigate project files now.</p>
<p>I experimented with trying to do this in Komodo Edit, a popular editor among coworkers, but it involved learning Mozilla&#8217;s XUL and Komodo&#8217;s own API, as well as writing javascript (yuck), so I abandoned that effort pretty quickly.</p>
<p>I didn&#8217;t think I would like Lisp, but the experience has been pretty fascinating, and I&#8217;m now making my way through the <a href="http://www.gigamonkeys.com/book/">Practical Common Lisp</a> book by Peter Seibel. It&#8217;s interesting learning a language that&#8217;s half a century old (!), and that&#8217;s influenced so many contemporary languages. One might think that there&#8217;s nothing there worth learning or revisiting, but that is so wrong. In particular, I&#8217;m trying to wrap my head around the power of Lisp macros and the way they allow you to create new syntactic abstractions. The idea of extending the very language itself, rather just adding new functions, is mind-boggling, to say the least. And, from what I understand, it remains fairly unique to Lisp in spite of the flood of new languages in the past few decades.</p>
<p>It&#8217;s disheartening not being able to find much info about who actually uses Lisp anymore, aside from hackers building modules for Emacs. Paul Graham has a cool essay, <a href="http://www.paulgraham.com/avg.html">&#8220;Beating the Averages&#8221;</a>, about using Lisp to build online store software that Yahoo eventually acquired. And ITA software, which makes an airfare search engine that powers the entire travel industry, uses Lisp. But aside from these bits of info, there isn&#8217;t much out there in the way of Lisp &#8220;success stories.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2011/09/25/learning-lisp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tradesmen-Programmers</title>
		<link>http://codefork.com/blog/index.php/2011/07/18/tradesmen-programmers/</link>
		<comments>http://codefork.com/blog/index.php/2011/07/18/tradesmen-programmers/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 04:37:39 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[philosophy]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=163</guid>
		<description><![CDATA[It takes quite a bit of effort to decipher my work history. I&#8217;ve worked on enough diverse software projects that I&#8217;m not a &#8220;junior&#8221; programmer; but because of the time I spent in academia doing non-tech related studies, I don&#8217;t have a substantial enough career history to justify a &#8220;senior&#8221; status. Recruiters and prospective employers [...]]]></description>
			<content:encoded><![CDATA[<p>It takes quite a bit of effort to decipher my work history. I&#8217;ve worked on enough diverse software projects that I&#8217;m not a &#8220;junior&#8221; programmer; but because of the time I spent in academia doing non-tech related studies, I don&#8217;t have a substantial enough career history to justify a &#8220;senior&#8221; status. Recruiters and prospective employers usually lack the patience to make sense of it all. Though my core software development skills are solid, I&#8217;m regarded as a misfit.</p>
<p>Three months ago, I landed a new full-time job. The company is full of highly intelligent oddballs with convoluted, non-linear professional histories&mdash;so I feel like I fit right in. I&#8217;m liking it a lot so far, and I feel lucky to have work in such an awful economy.</p>
<p>It&#8217;s precisely because of my weird background that I often forget exactly how much I know, and what I&#8217;m capable of. It occurred to me recently that I think of programmers as <a href="http://en.wikipedia.org/wiki/Tradesman">tradesmen</a>. Most recent college grads with CS degrees are poorly prepared for real world software development. Genuine knowledge comes from hands-on experiences as &#8220;apprentices&#8221; to seasoned programmers. If you are lucky to work with good people, what you learn is not simply a particular programming language or technology, but a paradigm of core principles that will stay with you for life.</p>
<p>I&#8217;ve been lucky to work under some great &#8220;masters&#8221; of the trade. More than a decade after my first &#8220;real&#8221; programming job, for example, I still use the fundamentals I learned from coworkers on that project: proper object oriented design and modeling, what abstract data types really are and how they&#8217;re useful, the extreme importance of extensibility and maintainability in an &#8220;agile&#8221; world. These things have become such a part of me that I take them for granted.</p>
<p>When I meet or talk to other programmers, I listen carefully to how they talk about things, what concerns they raise, how they approach problems. These are what distinguish the tradesmen-programmers from those whose aim is just to &#8220;get it to work,&#8221; and who inevitably run into all sorts of problems because of that mindset. Tradesmen-programmers have to balance the practical and theoretical aspects of software design in order to create something of quality, in all measures of that word. And this is something that can only be learned through dedication, experience, and open-mindedness, not a degree, certificate, or book.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2011/07/18/tradesmen-programmers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In and Out</title>
		<link>http://codefork.com/blog/index.php/2011/02/13/in-and-out/</link>
		<comments>http://codefork.com/blog/index.php/2011/02/13/in-and-out/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 06:27:37 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[culture]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=146</guid>
		<description><![CDATA[I&#8217;ve taken a hiatus from programming work the last few months in order to do some other things, both paying and non-paying. I did some teaching, spent a lot of time at the bicycle co-op, published some articles in a local periodical, and started a few side projects. It has felt very gratifying and healthy. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve taken a hiatus from programming work the last few months in order to do some other things, both paying and non-paying. I did some teaching, spent a lot of time at the bicycle co-op, published some articles in a local periodical, and started a few side projects. It has felt very gratifying and healthy.</p>
<p>My erratic life nowadays makes me think back to the starry-eyed aspirations to be a professional programmer that I had, say, ten years ago. I have a much more casual relationship to computers these days. Gone is the anxiety of having to prove, both to myself and to the world (including employers), that I am skilled and capable. I don&#8217;t care much anymore for the company of obsessive coders who enjoy religious debates about languages, tools, and best practices. They don&#8217;t seem to realize that in their pursuit of mastery and professionalism, technology is actually controlling them, and not the other way around.</p>
<p>Technology has become truly &#8220;technical&#8221; for me, in the fundamental sense of being a means to an end. I&#8217;ve been writing and tweaking Javascript and PHP recently. I don&#8217;t like them much, but they are decent tools for the specific tasks I am trying to accomplish. And so it goes. Getting back into code has been a Zen-like experience: when I am doing it, I am fully engaged in all the particularities. But when I&#8217;m finished with it, that&#8217;s it. Programming, and software more generally, is instrumental. I dive into it; then I come out. And there is nothing more to it than that.</p>
<p>It is silly to fetishize a hammer when you should be focusing on building the house, but that&#8217;s exactly what a lot of the culture of coding often feels like on blogs, message forums, mailing lists, conference agendas, etc. How silly and ridiculous. One should, of course, be thoughtful about tools, when and how to best use them, and how they can be improved. I do appreciate and value that. But at the end of the day, code is simply code. There is just so much more to life. Remembering that helps us keep sight of the things that code is for in the first place.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2011/02/13/in-and-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bigger! Faster! Stronger! 3 GB in the 2.0 Ghz Macbook</title>
		<link>http://codefork.com/blog/index.php/2010/06/09/bigger-faster-stronge/</link>
		<comments>http://codefork.com/blog/index.php/2010/06/09/bigger-faster-stronge/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 22:32:23 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=138</guid>
		<description><![CDATA[The official Apple specs say that the 2.0Ghz Macbook can take up to 2 GB of memory. There&#8217;s a bit of information on the web&#8211;like this forum posting, for example&#8211;that says you can go up to 3 GB. The system board can address slightly more than 3 GB, so the 2 GB limit is reportedly [...]]]></description>
			<content:encoded><![CDATA[<p>The official Apple specs say that the 2.0Ghz Macbook can take up to 2 GB of memory. There&#8217;s a bit of information on the web&#8211;like this <a href="http://www.mac-forums.com/forums/apple-notebooks/154445-macbook-2-1-can-handle-3-gig-ram.html">forum posting</a>, for example&#8211;that says you can go up to 3 GB. The system board can address slightly more than 3 GB, so the 2 GB limit is reportedly lower than what the hardware is capable of. By chance, I noticed a 2 GB chip for a reasonable $40 on my local craigslist, so I decided to see for myself whether the stories were true.</p>
<p>It seems they are! I&#8217;ve been running the computer for a little over a week now with two chips: a 1 GB module, which had been in there before, and the new 2 GB module. It&#8217;s been put through its paces: on a given work day, I run Eclipse, Firefox, Thunderbird, Colloquy (an irc client), Adium (instant messaging client), Skype (a VoIP client), a java application server in development mode, a mysql server, and emacs, all at once. </p>
<p>The swap size has still been high, typically around ~500 MB, but there are no longer the delays that I used to experience with 2 GB of memory when I had a lot of apps open and switched between them. So far, there have been no problems with stability.</p>
<p>Here&#8217;s a screenshot from System Profiler:</p>
<p><img src="/images/3gb.png" border="1" align="center"/></p>
<p>Note that Apple released two different models with the 2.0 Ghz Core 2 Duo processor. You can find your machine&#8217;s model in System Profiler on the Hardware Overview screen. The 2 GB official limit applies to &#8220;Macbook2,1.&#8221; The later version, &#8220;Macbook3,1&#8243; can take up to 4 GB.</p>
<p>With the additional memory, this machine will hopefully last me another two years.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2010/06/09/bigger-faster-stronge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m Back</title>
		<link>http://codefork.com/blog/index.php/2009/10/09/im-back/</link>
		<comments>http://codefork.com/blog/index.php/2009/10/09/im-back/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 03:26:13 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/?p=129</guid>
		<description><![CDATA[I&#8217;m way overdue for an update! It&#8217;s been nearly a year since I wrote about returning to grad school. So what&#8217;s happened? Well, I didn&#8217;t finish my dissertation. It felt nice to work on my research project again, but after a few months, I fell into the same depressive slump. I don&#8217;t want to go [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m way overdue for an update!</p>
<p>It&#8217;s been nearly a year since I wrote about returning to grad school. So what&#8217;s happened? Well, I didn&#8217;t finish my dissertation. It felt nice to work on my research project again, but after a few months, I fell into the same depressive slump. I don&#8217;t want to go into it here, but it should suffice to say that, for me, the various burdens of academic life far outweigh its advantages. Though it would have been wonderful to get the psychological closure of finishing my degree before moving on to other things, that just hasn&#8217;t been possible. So &#8220;ABD&#8221; I will have to be&#8230;.</p>
<p>There have been a lot of other changes in my life as well. I&#8217;ve moved to West Philadelphia, one of the most remarkable places I have ever lived. I am also writing code again to earn a living. It is a full-time position, and so far, it&#8217;s pretty great. Life is good, for now, anyway.</p>
<p>Working on software again has been sparking a lot of thoughts I haven&#8217;t had the time or energy to blog about, but hopefully that will change.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2009/10/09/im-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lessons Learned</title>
		<link>http://codefork.com/blog/index.php/2008/04/17/lessons-learned/</link>
		<comments>http://codefork.com/blog/index.php/2008/04/17/lessons-learned/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 04:55:07 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/index.php/2008/04/17/lessons-learned/</guid>
		<description><![CDATA[After about 5 months, I&#8217;ve decided that it&#8217;s time to move on to another gig. I&#8217;ve learned a few things, and I&#8217;m posting them here in the hopes that the lessons might be helpful to other programmers and techies-at-large. Working in a small business as the sole do-it-all technology person has its unique challenges. It [...]]]></description>
			<content:encoded><![CDATA[<p>After about 5 months, I&#8217;ve decided that it&#8217;s time to move on to another gig. I&#8217;ve learned a few things, and I&#8217;m posting them here in the hopes that the lessons might be helpful to other programmers and techies-at-large.</p>
<p>Working in a small business as the sole do-it-all technology person has its unique challenges. It can be very fulfilling to be the sole expert and &#8220;enabler,&#8221; if that turns you on. But the flip side is that management might not really understand or care that much about their technology. Is there a reasonable budget for what they&#8217;re trying to accomplish? Do they understand, at a high level, your projects and how they contribute to the mission? Are technology projects considered a burdensome mystery or something valuable and embraced by the company? Question the reasons why there&#8217;s only one tech guy/girl and whether that seems right.</p>
<p>Another thing to assess is whether you can deal with taking over the existing codebase. I&#8217;ve taken over other code before with success, retaining what was good and doing clean up as necessary. At this past gig, things looked reasonably tidy at a first glance, but as time progressed, I realized a ton of abstractions weren&#8217;t in place, and those that did exist didn&#8217;t make sense. Some refactoring might have been interesting to do, but this endeavor wasn&#8217;t valued when I proposed it as a project.</p>
<p>Lastly, I think it&#8217;s important to be wary of promises about the future. Even with the best of intentions, things change quickly at small businesses. The projects I was initially excited about got perpetually deferred for various reasons, and I found myself preoccupied with doing maintenance code fixes, making cosmetic tweaks, performing server administration, and providing support for third party software (which I really don&#8217;t like to do). The company needed these things done, so I did them with as much cheer as I could muster, hoping we&#8217;d eventually get to a place where some solid new development could occur (and I could sneak in some refactoring)&mdash;that&#8217;s what floats my boat. But it became to clear to me that wasn&#8217;t going to happen anytime soon.</p>
<p>So that&#8217;s that. It&#8217;s a shame it didn&#8217;t work out, especially since I actually liked everyone I worked with. At least it&#8217;s an amicable departure, and I hope to be involved in hiring a replacement who might be a better fit for their current needs than I am.</p>
<p>The new gig? Java. Been catching up on it, since it&#8217;s been a few years. Oh, it feels so nice to have package namespaces, real data types, full-featured APIs, and real object-orientedness again. Like coming home.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2008/04/17/lessons-learned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Small Business Subconscious</title>
		<link>http://codefork.com/blog/index.php/2008/04/10/the-small-business-subconscious/</link>
		<comments>http://codefork.com/blog/index.php/2008/04/10/the-small-business-subconscious/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 18:28:04 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/index.php/2008/04/10/the-small-business-subconscious/</guid>
		<description><![CDATA[Small businesses can be challenging places to work. You often have to make do with few resources, play several roles at once, and be flexible enough to deal with loose/nonexistent company organization. If everything magically clicks, as it sometimes does, it can be a beautiful thing. But more often than not, that simply doesn&#8217;t happen. [...]]]></description>
			<content:encoded><![CDATA[<p>Small businesses can be challenging places to work. You often have to make do with few resources, play several roles at once, and be flexible enough to deal with loose/nonexistent company organization. If everything magically clicks, as it sometimes does, it can be a beautiful thing. But more often than not, that simply doesn&#8217;t happen.</p>
<p>As I talked about this with friends who have had similar experiences, they observed that there&#8217;s often a common mistake made in small businesses: since every employee is precious, the organization tries to extract as much value as possible by encouraging everyone to contribute in as many ways as possible. It bills itself as a democracy, as an environment that genuinely listens to its employees.</p>
<p>The problem, of course, is that when people aren&#8217;t in sync about the mission, or about specific project goals, you end up with a frustrating mess of conflicting directions. The business (somewhat desperately?) tries to latch onto everything at once, and there&#8217;s a lack of decisiveness in moving forward. Projects get fragmented. People believe they&#8217;re collaborating but they&#8217;re actually not. Confusion ensues. Little gets done.</p>
<p>Leadership is even more key in small businesses than in larger ones, I&#8217;d wager. Because if you have few resources, you need to choose your projects very carefully, dedicate resources accordingly, and make absolutely sure they go to completion quickly. There&#8217;s not much room for failure. But instead, small businesses seem prone to being wishy-washy. The insidious and tragic  aspect of this is that when projects move at a snail&#8217;s pace or even fail, the accountability falls back on the individuals. Because management failed to lead, it can remain blame-free. It&#8217;s a formula for endless frustration.</p>
<p>In this unfortunate strategy, the small business is structured like the subconscious and its conflicts. Its desire is vague and repressed, and though seemingly absent, it&#8217;s actually very much the motive force for its existence. Like a human being, the small business can&#8217;t decide upon its identity, which remains in flux. And just like a human being, this repressed desire can lash out violently when it isn&#8217;t fulfilled.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2008/04/10/the-small-business-subconscious/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amateur thoughts and ambitions</title>
		<link>http://codefork.com/blog/index.php/2007/12/31/amateur-thoughts-and-ambitions/</link>
		<comments>http://codefork.com/blog/index.php/2007/12/31/amateur-thoughts-and-ambitions/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 00:32:12 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://codefork.com/blog/index.php/2007/12/31/amateur-thoughts-and-ambitions/</guid>
		<description><![CDATA[One of the better things I&#8217;ve stumbled across this past year is Larry Lessig&#8217;s talk, How creativity is being strangled by the law. The piece makes his usual argument that copyright law stifles innovation in the age of new media. Most striking to me, though, was the part where he uses the phrase &#8220;amateur culture.&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>One of the better things I&#8217;ve stumbled across this past year is Larry Lessig&#8217;s talk, <a href="http://www.ted.com/talks/view/id/187">How creativity is being strangled by the law</a>. </p>
<p>The piece makes his usual argument that copyright law stifles innovation in the age of new media. Most striking to me, though, was the part where he uses the phrase &#8220;amateur culture.&#8221; He explains, &#8220;&#8230;I don&#8217;t mean amateurish culture, I mean culture where people produce for the love of what they&#8217;re doing and not for the money.&#8221; He uses the term to describe the activity of &#8220;kids&#8221; (?) creating their own remixes from existing media.</p>
<p>I can remember another amateur culture that&#8217;s now largely disappeared. Back in my teens, modem-based bulletin board systems (BBSes) fostered a rich &#8220;read-write&#8221; culture for amateur programmers. Most of us did not work in technology; after all, the commercial Internet hadn&#8217;t been born yet, so the computing industry was much smaller and more obscure. A career as a programmer seemed like a mysterious and rarefied thing to me back then. The coders you met on BBSes were often people who simply liked to do programming in their spare time.</p>
<p>These systems allowed us to circulate public domain source code for fun games and useful applications written in BASIC, Pascal, C, even assembler. We hacked on existing code to get it to do what we wanted, trying to figure out ways to push the limits of our little 8086 processors and 640K of RAM. We mingled regardless of our level of knowledge, beginners and experts alike. We had friendly user meetings in diners in Brooklyn and Manhattan (I lived in NY at the time), where we chatted about home-grown upgrades and discussed how to link up to the nation-wide discussion networks that existed then.</p>
<p>It was amateur culture at its best: lots of exchange, circulation, and cooperation happened all the time. But it was definitely not amateurish. Many were extremely capable and knowledgeable coders.</p>
<p>Today, there are still people who code just because they enjoy it, but the amateur culture and its community hardly exist anymore. Beginners on web forums are more interested in what they need to know in order to land a job, rather than in coding itself. Even open source projects tend to be dominated by career professionals; read any public mailing list and you&#8217;ll see how unhelpful they often are to amateurs who want to get involved. One reason I like python is that the project makes a genuine effort to connect to the sensibilities of amateurs. But even its forums are littered with snarky individuals.</p>
<p>All of this is largely due, I think, to the ideology of professionalism, which convinces us that having a stable career is the pinnacle of achievement. It damagingly equates amateurs with dilettantes. That&#8217;s why one of the first things we ask in this country when meeting a stranger is, &#8220;So what do you do?&#8221; By which we really mean, &#8220;Tell me what you do for a living so I can know who you are and whether you&#8217;re worth talking to.&#8221;</p>
<p>In 2008, I resolve to be more wary of this ideology and its negative effects. I want to embrace being an amateur in the various things that I do. I want to think less about careers and focus more on how to best spend my time doing what&#8217;s important to me. And I want to find more amateurs to hang out with as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefork.com/blog/index.php/2007/12/31/amateur-thoughts-and-ambitions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

