<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkYAQXo8fyp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172</id><updated>2011-11-27T15:55:40.477-08:00</updated><category term="Noogler" /><category term="Games" /><category term="Microsoft" /><category term="Software Engineering" /><category term="30-day challenge" /><category term="Rants" /><category term="Career" /><category term="BillGates" /><category term="fsyacc" /><category term="F#" /><category term="Best Practices" /><category term="Google" /><category term="GTAC" /><category term="HTML5" /><category term="Testing" /><category term="Narcissism" /><title>a Chris Smith on Software</title><subtitle type="html">I write about software engineering, people skills, and things that I find shiny.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.achrissmith.com/" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/fJQFu" /><feedburner:info uri="blogspot/fjqfu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkQGQXozfyp7ImA9WhRTEEQ.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-3716029992655791813</id><published>2011-10-31T14:58:00.000-07:00</published><updated>2011-10-31T14:58:40.487-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T14:58:40.487-07:00</app:edited><title>On Google's 20% time</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BzGYPXMCzs0_AIZ6i7kYBe5S7Y0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BzGYPXMCzs0_AIZ6i7kYBe5S7Y0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BzGYPXMCzs0_AIZ6i7kYBe5S7Y0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BzGYPXMCzs0_AIZ6i7kYBe5S7Y0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Recently I had a long conversation explaining the ins-and-outs of Google's 20% time, and I figured it would be appropriate to share it&amp;nbsp;publicly.
&lt;br /&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;i&gt;TL;DR: 20% time is awesome and you should get your company to do it.&lt;/i&gt;&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;i&gt;Caveat Emptor: The Google employee handbook defines the company's official policies concerning 20% time. This blog post is my own personal interpretation.&lt;/i&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Back when I was interviewing, I was very suspicious about Google's 20% time. I've heard rumors about products like GMail coming from 20% time. &lt;a href="http://en.wikipedia.org/wiki/Marissa_Mayer"&gt;Marissa Mayer&lt;/a&gt;&amp;nbsp;even quipped that to &lt;a href="http://www.youtube.com/watch?v=soYKFWqVVzg"&gt;half of Google's launches in 2005&lt;/a&gt;&amp;nbsp;came from 20% time efforts.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Seriously!?! If a company spends one-fifth of its time futzing around how can it get anything done?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The truth is that while every Googler has the opportunity to take 20% time to work on whatever they wish, it isn't carte blanche to take Fridays off and &lt;a href="http://view.my360stats.com/A16FCheerleader/"&gt;play X-Box&lt;/a&gt;.&amp;nbsp;Having a 20% project doesn't mean you are responsible for 80% of your job; more like you are volunteering to put in 120% the effort.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
At Google performance is measured by &lt;i&gt;&lt;b&gt;impact&lt;/b&gt;&lt;/i&gt;:&amp;nbsp;benefit to Google and its customers. If an engineer is able to have a big impact, then spending some cycles on a 20% project is no big deal. However, if someone was having difficultly meeting expectations as-is, then contributing to a 20% project would be a poor decision.&lt;br /&gt;
&lt;br /&gt;
In short, the attitude at Google is: "We trust you to do what you think is important with your time."&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;20% Projects in Practice&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Not everybody takes on a 20% project, but those that do usually fall into a few board categories:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;"I have something interesting to do"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Some people use 20% projects to pursue their passions. For example, there are Googlers who teach classes at high schools and colleges. Some have desks, go to PTA/faculty meetings, the whole bit.&lt;br /&gt;
&lt;br /&gt;
Other people spend time organizing projects such as &lt;a href="http://googleblog.blogspot.com/2011/06/googleserve-2011-giving-back-around.html"&gt;GoogleServe&lt;/a&gt; or facilitating classes internally. (I, for example, am proctoring a course titled &lt;i&gt;Having Difficult Conversations&lt;/i&gt;&amp;nbsp;tomorrow to help Googlers, well, have difficult conversations.)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This has negligible impact as far as engineering efforts are concerned, so it's unlikely that teaching &lt;i&gt;Introduction to Algorithms&lt;/i&gt;&amp;nbsp;is going to get someone a promotion. But the people engaged in these types of projects are likely happier and likely more engaged in their work.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;"We could use help" or "Team dating"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Other times, 20% projects are used to describe temporary within the company.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Imagine GMail and Google News and a hypothetical feature. The GMail guys have a great idea -- delivering a daily newspaper to your inbox. That way as soon as you log in you could see the highlights of the past 24 hours.&lt;br /&gt;
&lt;br /&gt;
The Google News folks might be excited to add this feature, but are likely already working on other big projects for the quarter.&lt;br /&gt;
&lt;br /&gt;
Rather than GMail simply waiting the weeks or months it takes for Google News to get to that feature, some GMail engineers might start working on Google News in a 20% capacity to add the changes necessary to support the daily digest scenario.&lt;br /&gt;
&lt;br /&gt;
Of course large teams are more likely to work with one another, but the point is that if you have a good feature to contribute then just add it! 20% contributors are welcome to add features and address low-hanging fruit.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Also, volunteering to work for another team in a 20% capacity is a low-cost way of doing transfers. Rather than interviewing to change groups, an engineer can simply try working with them and see if its a good fit first.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;"I have an itch to scratch"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Occasionally there are problems, sometimes endemic, that nobody has the time or authority to fix. The classic example is the &lt;a href="http://www.stevenlevy.com/index.php/books/in-the-plex"&gt;origin of GMail&lt;/a&gt;. A lot of Googlers were unhappy with the email software and figured they could do better. Rather than waiting for a VP to staff a team and issue a mandate, a few engineers just banded together and started writing code.&lt;br /&gt;
&lt;br /&gt;
A few years later GMail was released&amp;nbsp;publicly&amp;nbsp;and used by&amp;nbsp;millions&amp;nbsp;worldwide.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is the basis for that "Half of Google's launches in 2005" reference. If you see a problem, 20% time gives you the freedom to be proactive and just solve it.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Personal Experiences with 20% Time&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As nice as 20% time sounds, does it really work? Since I've been at Google, I've take advantage of 20% time on a few occasions. Here are my experiences; your mileage may vary.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Project A - Dating an engineering team&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Shortly after I started I wasn't&amp;nbsp;super-excited about the project I was working on, and was really intrigued by Project A. So I met with their tech lead and signed up to do deliver low-hanging fruit that quarter. (Bug fixes, a few independent features, etc.)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The next quarter, I transferred to the other project as my full time responsibility and stuck around on my old project as a 20% project as a transition / finish up remaining work.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Project B - Gathering hard data&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
About a year ago, a lot of people were talking about "&lt;i&gt;creating a death star&lt;/i&gt;" and how easy it would be able to implement one using "&lt;i&gt;lightsaber crystals". &lt;/i&gt;Such a project would be amazingly successful if we added&amp;nbsp;killer features like a "&lt;i&gt;trash compactor inhabited by a &lt;a href="http://starwars.wikia.com/wiki/Dianoga"&gt;Dianoga&lt;/a&gt;&lt;/i&gt;".&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sick of informal meetings, cloud-talk, and brainstorming I started writing code. About two full weeks working full time on my prototype I had a demo. As it turns out&amp;nbsp;"&lt;i&gt;trash compactor inhabited by a&amp;nbsp;&lt;a href="http://starwars.wikia.com/wiki/Dianoga"&gt;Dianoga&lt;/a&gt;&lt;/i&gt;" wasn't as exciting as we hoped and this projects "&lt;a href="http://starwars.wikia.com/wiki/Death_Star_II"&gt;&lt;i&gt;hypermatter reactor core&lt;/i&gt;&lt;/a&gt;" was kind of a deal-breaker. So alas, Google's plans for&amp;nbsp;"&lt;i&gt;creating a death star&lt;/i&gt;" had to be scrapped.&lt;br /&gt;
&lt;br /&gt;
The project didn't have any impact, so it didn't necessarily advance my career any. But the experienced enabled me to learn some new technologies and provide some concrete data points for future experiments.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Project C - Trying to&amp;nbsp;seize&amp;nbsp;an opportunity&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When &lt;a href="http://www.chromeexperiments.com/webgl"&gt;WebGL&lt;/a&gt;&amp;nbsp;was checked into Chrome's experimental branch, I knew that a slick, 3D, social game on &lt;a href="http://plus.google.com/games"&gt;Google+&lt;/a&gt;&amp;nbsp;would be a hit. So I figured I had a few months to come up with a project and cause a big splash when WebGL was finally generally available.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I met with some friends and we started working on the project. We got pretty far on creating a 3D &amp;nbsp;engine, asset management, and so on. But unfortunately we weren't making progress fast enough. In the few months it took us to get a semi-playable demo there already were a glut of existing games ported to WebGL. (&lt;a href="https://chrome.google.com/webstore/detail/ciamkmigckbgfajcieiflmkedohjjohh"&gt;Example 1&lt;/a&gt;, &lt;a href="https://chrome.google.com/webstore/detail/lkpikhjbfbffdblahfidklcohlaeabak"&gt;example 2&lt;/a&gt;,&amp;nbsp;&lt;a href="https://chrome.google.com/webstore/detail/aknpkdffaafgjchaibgeefbgmgeghloj"&gt;example 3&lt;/a&gt;, etc.)&lt;br /&gt;
&lt;br /&gt;
With our small window of opportunity gone -- and the crushing reality of how much of an investment modern games are -- we decided to kill the project.&lt;br /&gt;
&lt;br /&gt;
But again, it was a great learning experience and now there is a game design and prototype there, perhaps only in need of a pivot to be revived! And, had this minor risk had panned out there could have been a huge upside to Google. (Specifically, thousands of man-hours wasted in pursuit of "points".)&lt;br /&gt;
&lt;br /&gt;
So there you have it.&amp;nbsp;In my experiences 20% time hasn't been about zoning out of work, but rather staying engaged and having the freedom to take advantage of opportunities. At Google there is a strong sense of trust between the company and its engineers, and 20% time really&amp;nbsp;exemplifies&amp;nbsp;that&amp;nbsp;phenomenon.&lt;br /&gt;
&lt;h3&gt;





&lt;div class="h7 hn " style="background-color: rgba(255, 255, 255, 0.917969); clear: both; padding-bottom: 0px;"&gt;
&lt;/div&gt;
&lt;/h3&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-3716029992655791813?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/P_N3-AOcdJk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/3716029992655791813/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2011/10/on-googles-20-time.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/3716029992655791813?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/3716029992655791813?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/P_N3-AOcdJk/on-googles-20-time.html" title="On Google's 20% time" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.achrissmith.com/2011/10/on-googles-20-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8HSXs4fyp7ImA9WhdXEkk.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-7886444351431259815</id><published>2011-08-22T10:53:00.000-07:00</published><updated>2011-08-24T21:00:38.537-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-24T21:00:38.537-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Career" /><title>What to do when you aren’t getting promoted</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EKJUudZQN7W86EyO-L0CatOPEwI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EKJUudZQN7W86EyO-L0CatOPEwI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EKJUudZQN7W86EyO-L0CatOPEwI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EKJUudZQN7W86EyO-L0CatOPEwI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;Edit: A reader on &lt;a href="https://plus.google.com/100789835272819825640/posts/AHE7bnzsfGB"&gt;Google+&lt;/a&gt; pointed out a pretty serious omission: this post makes no mention of your manager. AKA the person who is tracking whether or not you will actually get that promotion. I'll save my comments on "managing up" for a later post, but in short they play a pretty important role in this process as well.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;For many people, it is nearing annual performance review time. A time when some lucky engineers get promotions -- along with fame and fortune -- while the rest of us are left to languish for another year, slaving away with more responsibilities and fewer perks.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Obviously the tech industry isn’t that cold and gray, but it can seem pretty disappointing when you are feeling ready for a promotion and don’t get it. This post is about the sorts of activities you can do in-between promotion cycles. Rather than, say, sulking.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But first I need to explain what a promotion actually signifies. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Promotions are a recognition of the level of work you are &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;already&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; doing&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. The operative word in that previous sentence is &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;already&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. With the exception of Texas politics, it makes no sense to promote someone into a role they can’t perform. Instead, people should earn the title of “senior” or “principal” when they have already demonstrated that they can successfully perform in that capacity. (This &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;promotion-after-demonstration&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; concept mitigates the impact of ineptitude due to the &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Peter_Principle"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Peter Principle&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.)&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;You might be wondering then, “How can I perform a job if I don’t have the associated title? People won’t listen to me if I’m not an architect!” Let me spill the beans on another secret regarding promotions: &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;a promotion does not give you any more authority than you already have; it may however add &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;credibility&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. If nobody likes your ideas now, they still won’t like them if you have “senior”, “principal”, or even “partner” in your job title.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This revelation leads me to the first thing you should do when seeking a promotion: &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;observe&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If you want to join the people higher up the corporate ladder than you, take a step back and observe them. What do they do well? What are their strengths? Why do people listen to them? &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Occasionally you will find a bozo with a fancy title, but more often than not those people have skills and experiences you can learn from.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Even better, consider putting yourself in their shoes. What strengths do you have that you could be utilizing more? Are there weaknesses you should address?&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If you aren’t sure what the steps are for reaching that next career stage, you should first gather data. Once you have an idea of the work required, go ahead and ask for help. The fancy business-school word for this is &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;networking&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Networking does not mean hanging out in a smoke-filled bar with people &amp;nbsp;you don’t like. Having a good rapport with your coworkers is a form of networking. And taping into that network doesn’t mean asking them for money. It can be something as simple as asking to pair-program a tricky interface, or getting an early code review for something you are working on. Or even something as general as “What should I do when I’m not getting promoted?”&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;There is an immense value in knowing people outside your team, group, company, or even walk of life. You never know when having an extended network will come in handy. Perhaps your team needs to hire someone with a specific skill. Maybe you need to reach out for advice. Or perhaps you just have a crazy idea in need of a home.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Arguably a person’s personal network shouldn’t be linked to whether or not they get a promotion. But since a person’s effectiveness, influence, and impact is tied to their network the two are at the very least correlated.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But how do you go about building a network? As it turns out, people have already solved this problem for you, inviting others just like you to get together to share ideas and experiences. All you need to do is show up! A few quick Google searches can get you info about &lt;/span&gt;&lt;a href="http://lanyrd.com/calendar/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;conferences&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://www.google.com/search?q=your-language+your-city+user+group"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;user groups&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://givecamp.org/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;give camps&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and &lt;/span&gt;&lt;a href="http://startupweekend.org/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;startup weekends&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. All which serve as fantastic opportunities to network.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;And not every conference requires spending several thousand dollars on travel and lodging. There are many local conferences and user groups. These are sometimes harder to find information about -- so it helps to network with developers in your local area.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Even better than going to a conference is presenting at one&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Presenting is much easier than you think and is a great way to build expertise and credibility in a particular area.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This brings us to our third thing to do while you aren’t getting promoted: &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;study&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 18pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Let me take a moment to give you the best tech career advice you will ever hear: &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;don’t do the same thing for 20 years&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. No matter how good you are at your given technology and how much your employer loves you to just do the same thing every day: don’t. In other words, actually get 20-years experience; don’t get the first year’s worth of experience twenty times.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Beyond promotions, if you allow your raw skills to atrophy you are crippling your ability to find a new job and limiting your future opportunities. Constantly incorporating new ideas is a must.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;So where do you go to learn new skills? First, you can start with the many other &lt;/span&gt;&lt;a href="http://news.ycombinator.com/item?id=99426"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;tech-related blogs &lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;out there. But in case you are looking for something meatier, let me first shamelessly plug &lt;/span&gt;&lt;a href="http://www.amazon.com/gp/product/0596153643/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=chrsmiscomuni-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=0596153643"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;my book&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If spending 30-minutes every night reading isn’t for you, consider starting a reading group with some coworkers&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Pick a book (or a paper) and meet every week to discuss a chapter or two. It’s a great way to be accountable for the material as well as start the discussion about how to apply it to your office or work environment.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;However, &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;IMHO the best way to learn is to simply experiment&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. I’ve benefited immensely from Google’s 20% time. For example, I wrote a simple &lt;/span&gt;&lt;a href="http://octorok.achrissmith.com/edit/6001"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;voxel editor in WebGL&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. I never got around to finishing my 3D game, but it was a great opportunity to learn the &lt;/span&gt;&lt;a href="http://code.google.com/closure/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Closure&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and use JavaScript for more than DOM manipulation.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Remember, experimentation doesn’t have to be about what you are working on. Follow your passions!&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Observing, network, and studying may sound a bit overwhelming. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Fortunately my last piece of advice for you promotion seekers is to simply relax&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sometimes the best way to grow is to step away from the keyboard and live your life.&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Perhaps the thing holding you back isn’t your work but rather just how people perceive you&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Would you want to give that guy or girl who is chronically stressed out more responsibilities?&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Your life isn’t actually what happens during the hours you are at a keyboard. And a promotion, no matter how big a raise it entails, won’t alter your life.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Anyways, hopefully you have some ideas to keep you busy for the next few months. If you do end up getting promoted next year because of this advice, feel free to donate part of your fame and/or fortune to me.&lt;/span&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-7886444351431259815?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/hgSjmpnOO-Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/7886444351431259815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2011/08/what-to-do-when-you-arent-getting.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/7886444351431259815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/7886444351431259815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/hgSjmpnOO-Y/what-to-do-when-you-arent-getting.html" title="What to do when you aren’t getting promoted" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.achrissmith.com/2011/08/what-to-do-when-you-arent-getting.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcGRXYzfSp7ImA9WhdSEk8.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-2082717515583719442</id><published>2011-07-20T22:27:00.000-07:00</published><updated>2011-07-20T22:27:04.885-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T22:27:04.885-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Best Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>On the importance of other people’s hard work</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zxo_KIntKiiaMnBmj8jlk0vFXJA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zxo_KIntKiiaMnBmj8jlk0vFXJA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zxo_KIntKiiaMnBmj8jlk0vFXJA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zxo_KIntKiiaMnBmj8jlk0vFXJA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;i&gt;NOTE: As I return from a long&amp;nbsp;hiatus&amp;nbsp;from blogging, please excuse the overly agressive tone of this post. I don't want to disparage any of the teams I worked with at Microsoft, just point out some opportunities we had for getting more done by doing less.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
At the start of the Visual Studio 2008 product cycle I was working on the Indigo Tools team, tasked with adding WCF tooling to Visual Studio. On what would later be known as the “Add Service Reference” dialog, or this guy:&lt;br /&gt;
&lt;br /&gt;
&lt;img height="257" src="https://lh6.googleusercontent.com/z-gUEYEFwZ2MA8yorefoV0pWcggLf0R1EosUA1bx2WP50XAoZoOwEfiy09pZI5gfI3iSFJTtYqJc44oj1AYRBLcbY63h49EbPIAPH8N5ceDeOvw9InE" width="320" /&gt;&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;
The hardest decision we had to make during the product cycle was the very first: how will we implement our feature? We had to choose between two very different approaches.&lt;br /&gt;
&lt;br /&gt;
The first was to build a wrapper on top of the existing WCF tools, specifically&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa347733.aspx"&gt;svcutil.exe&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt; Svcutil.exe did everything users would want from the Add Service Reference dialog and more. So all we would conceivably need to do is add some hooks to the tool and put a UI on top of it.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: transparent;"&gt; The second option was to start from scratch and duplicate the functionality of svcutil.exe. This would mean rewriting the guts of the tool, but make it much easier to integrate into Visual Studio.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: transparent;"&gt; After much debate we went with option B: coding our own thing from scratch. Ultimately we erred on the side of making it easier to integrate into Visual Studio.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: transparent;"&gt; As you can probably tell from the title of this post, in hindsight that was a mistake. Visual Studio doesn’t support nearly as many WCF service types as we would have liked, it&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://devdump.wordpress.com/2009/01/05/dont-use-add-service-reference/%20"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;generates poor code&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt; and has a poor user experience to boot. (Click “Show All Files” in Solution Explorer and just see how much crap is added when adding a service reference.)  &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: transparent;"&gt; The problem was that we did exactly what Joel Spolsky claims is &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt;“&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000069.html%20"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;the single worst strategic mistake that any software company can make&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;”&lt;/span&gt;&lt;/span&gt;, and that is to decide to rewrite code from scratch. Instead of building off of an existing code base and refactoring it to suit our new needs, we instead chose to rewrite the stack from scratch.&lt;br /&gt;
&lt;br /&gt;
Let me expound on the perceived pros and cons of using existing code (EC) or rewriting from scratch and using new code (NC).&lt;br /&gt;
&lt;br /&gt;
The aversion to reusing hypothetical existing code or EC is that it never does quite does exactly what you want it to do. (Because, obviously, if it did you wouldn’t have a problem using it.) EC either doesn’t support the features you need, doesn’t implement them in the way you want, or perhaps is just formatted in a way you don’t like. Also, it would be naive to expect the documentation for EC to be complete, well written, and thorough.&lt;br /&gt;
&lt;br /&gt;
In reality however, EC is actually perfectly fine. (Think about it -- someone used it for something, so it can’t be fundamentally flawed.) The real problem with EC has is that you didn’t write it, and therefore it seems too complicated to work with. But, more on EC later...&lt;br /&gt;
&lt;br /&gt;
Suppose that you bought into the assumption that reusing / refactoring EC was a bad idea. So you instead introduce new code or NC. Hypothetical NC is a well-researched solution, engineered to solve your problem elegantly and efficiently.&lt;br /&gt;
&lt;br /&gt;
Most likely you will start writing NC with lots of unit tests, but even so, eventually bugs will creep in. (Most likely from features NC must support which you didn’t envision.) You will fix these bugs, but leave TODO comments for the larger ones. And of course, since you are busy coding you don’t have any time for real documentation. So you scale back your vision for NC and the second it half-works you forget about NC and move onto the next problem. (Thereby abandoning NC and perpetuating the EC vs. NC struggle.)&lt;br /&gt;
&lt;br /&gt;
NC always seems like a great idea at first, but it runs into the same problems as EC: writing clear code is hard. Documenting code is hard. Finishing code is hard.&lt;br /&gt;
&lt;br /&gt;
My thesis is that reimplementing anything is a waste of time. That’s right, I used the totally bold and flame-bait word "anything".&lt;br /&gt;
&lt;br /&gt;
If you work to improve existing code, then you and the code’s existing developers/users benefit. You fix some bugs, contribute some documentation, and leave the world better than you found it. The word here is &lt;i&gt;synergy&lt;/i&gt; -- everybody wins.&lt;br /&gt;
&lt;br /&gt;
But in the case that you try to go about things on your own, nobody wins. Even if NC has more bells and whistles than EC, the world is worse off. Why?&lt;br /&gt;
&lt;br /&gt;
Because you’ve made an even bigger mess for the next guy. Previously the choice was just between reusing EC and writing NC. Now, they have to chose between EC, NC, and newer code (NC++?).&lt;br /&gt;
&lt;br /&gt;
And, even if this EC, NC, and NC++ situation wasn’t bad enough think of the critical fixes that now need to be made to all the duplicate code in the world. Security updates, breaking library changes, compiler updates, and so on. By introducing new projects you increase the overall cost of housekeeping.&lt;br /&gt;
&lt;br /&gt;
Let me break away from the hypothetical and talk about real examples. Look through these lists and think to yourself: does every one of these contribute something novel to the universe? Or would mankind be better off if the effort spent in creating that new thing had been spent improving the old one? &lt;a href="http://en.wikipedia.org/wiki/Category:Open_source_content_management_systems" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;http://en.wikipedia.org/wiki/Category:Open_source_content_management_systems&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_build_automation_software" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;http://en.wikipedia.org/wiki/List_of_build_automation_software&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/List_of_text_editors" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;http://en.wikipedia.org/wiki/List_of_text_editors&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/List_of_compiler-compilers" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;http://en.wikipedia.org/wiki/List_of_compiler-compilers&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Especially for the text editors list. Is there anything you&amp;nbsp;&lt;a href="http://xkcd.com/378/" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;can’t do&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;in Emacs? What else could you possibly want?&lt;br /&gt;
&lt;br /&gt;
Despite what Richard Stallman and the hippies at the&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://www.fsf.org/" style="font-family: inherit;"&gt;FSF&lt;/a&gt;&lt;/span&gt;&amp;nbsp;tell you, I think the real benefit of&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Free_and_open_source_software" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;FOSS&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;comes form people not having to worry about solved problems.&lt;br /&gt;
&lt;br /&gt;
Certainly licenses, politics, and egos may make it difficult to follow another developer’s lead and work on an existing project. But I urge you to think twice before writing any new code. Ask yourself, has this function already been written in the history of mankind? And if so, how can you take advantage of that and not write that function. Just&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;a href="http://koders.com/default.aspx?s=%22class+Vector2%22&amp;amp;la=Cpp" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;go search for it&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Let me provide a specific example of the benefit of not rewriting code with another Microsoft war story. Fast forward three years from my WCF experience and I’m working on the F# team trying to ship Visual Studio 2010. We were a small and agile team with an immense amount of work to do. But due to Don Syme’s amazing leadership we were able to produce a great v1.0 product on time and with a few more features than we expected.&lt;br /&gt;
&lt;br /&gt;
That is not a typeo. We actually able to ship more language features than we thought we would.&lt;br /&gt;
&lt;br /&gt;
One such feature came in during a weekend Don Syme was in town. The team decided to spend a Saturday afternoon hacking away on the codebase, but rather than just fixing bugs we wanted to add something bigger and meatier. Of all the options we considered, we settled on a new language feature of dynamic support.&lt;br /&gt;
&lt;br /&gt;
One of the big features the C# and VB.NET teams were adding to their compilers for Visual Studio 2010 was support for&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd264736.aspx" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;dynamic types&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It took a team of people -- dev and test -- working on adding this feature to the C# and VB compilers months, and yet we were able to add it to F# in an afternoon*.&lt;br /&gt;
&lt;br /&gt;
How? By simply doing the easy part and reusing all of their hard work.&lt;br /&gt;
&lt;br /&gt;
Implementing these dynamic types in F# required two pieces. First, syntax support for differentiating dynamic calls from regular ones. We did this in F# by adding the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(?)&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(?&amp;lt;-) &lt;/span&gt;operators. Second, you need a runtime binder to determine how dynamic calls get dispatched. (I.e. how to deal with method overloading, name resolution, and so on.)&lt;br /&gt;
&lt;br /&gt;
Adding syntax support for two operators is quite easy, the bulk of the work for adding dynamic support would have been in implementing the F# runtime binder. However, the key observation is that we didn’t actually need to write a new runtime binder. There already was an excellent dynamic method binder for C# which worked just fine.&lt;br /&gt;
&lt;br /&gt;
All users need to do is copy and paste&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;a href="https://gist.github.com/300628" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;this code&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; (by &lt;/span&gt;&lt;a href="http://weblogs.asp.net/Podwysocki/" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Matt Podwysocki&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: inherit; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;) &lt;/span&gt;and you are set. While the corner cases for name/method overloading for F# don’t exactly match up with C#, for 99% of cases you won’t notice.&lt;br /&gt;
&lt;br /&gt;
That, in a nutshell is the importance of leveraging other people’s hard work.&lt;br /&gt;
&lt;br /&gt;
It is easy to get distracted with ‘how’ to implement something, and forget it is ‘what’ you want to enable. It is important to leverage any and all pre-existing work. Not only do you have an opportunity to save time, but you also get to build up on the insights, innovations, and efforts of those before you. This sets you up for long term success, both in terms of maintenance.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-2082717515583719442?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/3Zu0lgekqPg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/2082717515583719442/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2011/07/on-importance-of-other-peoples-hard.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/2082717515583719442?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/2082717515583719442?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/3Zu0lgekqPg/on-importance-of-other-peoples-hard.html" title="On the importance of other people’s hard work" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://blog.achrissmith.com/2011/07/on-importance-of-other-peoples-hard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQBQ3ozfCp7ImA9Wx9QGEk.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-3750560694963047896</id><published>2010-12-31T13:15:00.000-08:00</published><updated>2010-12-31T16:55:52.484-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-31T16:55:52.484-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Narcissism" /><category scheme="http://www.blogger.com/atom/ns#" term="Rants" /><title>putCharacter vs. putPixel and my new blog</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_2PgeTBdrAszBCLJ2xE91pbBivk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_2PgeTBdrAszBCLJ2xE91pbBivk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_2PgeTBdrAszBCLJ2xE91pbBivk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_2PgeTBdrAszBCLJ2xE91pbBivk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;A few years ago, and I regrettably don't even remember the context, &lt;a href="http://tirania.org/blog/"&gt;Miguel de Icaza&lt;/a&gt; quipped that there were two types of programmers in the world: those who used &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; and those who used &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putPixel&lt;/span&gt;&lt;span class="Apple-style-span"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;For the &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmers the end goal is productivity and getting the job done&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"&gt;.  &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmers don't care about the nuts and bolts of how it works, they just want it &lt;i&gt;to&lt;/i&gt; work.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Contrast that with the other type of programmer. &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;putPixel&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmers &lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;b&gt;don't care so much about productivity as they do &lt;i&gt;understanding&lt;/i&gt; how the system works&lt;/b&gt;.&lt;/span&gt;&lt;span class="Apple-style-span"&gt; If you have a good understanding of how to put and read pixel data to the console, putting characters is just a matter of abstraction. However, that understanding never comes cheap. What would have been one line of code, &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putCharacter('x')&lt;/span&gt;&lt;span class="Apple-style-span"&gt;, now becomes a labyrinth of font destriptions, VGA adapter settings, and other low-level nuts and bolts that are hardly documented and seldom intuitive.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Right now you are probably thinking, "There is no way I'm a &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmer. I'm far too &lt;i&gt;{ smart | experienced | hip }&lt;/i&gt;." But you are probably wrong. Unless you are writing a compiler, operating system, or database you are probably using &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt;. I would even go so far to say that if you are using C# then you definitely are a &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmer.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Think about C#/VB.NET's Edit-and-Continue feature. You can write/edit program code &lt;i&gt;while it is running under a debugger&lt;/i&gt;. &lt;b&gt;Features like that don't exist for people who measure twice and cut once&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;But this post isn't about ragging on &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmers. I'll admit that I too was a &lt;/span&gt;&lt;span class="Apple-style-span"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; programmer, &lt;i&gt;and loved it&lt;/i&gt;. In college while my friends were always working on labs until the wee hours of the morning, while I could get by with devoting only an hour at most. My peers were struggling with learning Linux, Emacs, and command-line debugging with GDB. I was doing everything in Visual Studio. I had a IntelliSense, I had a graphical debugger, I had... no need to learn anything.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;The problem with the &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;putCharacter&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt; mentality is that it forces you to be dependent on someone else for their tools or libraries&lt;/b&gt;. This, in my opinion is the danger of using the Microsoft stack. If you never look beyond &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; then you are immediately limited &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;by the functionality it provides. What if you need to print in color? Or a unicode character? If the &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;putCharacter&lt;/span&gt;&lt;span class="Apple-style-span"&gt; system you are using is missing a feature and you aren't willing to resort to&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;putPixel&lt;/span&gt;&lt;span class="Apple-style-span"&gt;, then you are probably screwed.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;Anyways, the real intent of this post was to announce that my blog has moved (yet again) to a permanent home:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;b&gt;&lt;a href="http://blog.achrissmith.com/"&gt;&lt;span class="Apple-style-span"&gt;http://blog.aChrisSmith.com/&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;In my own effort to become less of a putCharacter programmer I've started working on a blogging package of my own. (Called &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;a href="https://github.com/aChrisSmith/GAEB"&gt;GAEB&lt;/a&gt;.) To address your first two concerns:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Yes, it is missing (important) features&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Yes, it has (horrible) bugs&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;But I'm not writing &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;a href="https://github.com/aChrisSmith/GAEB"&gt;GAEB&lt;/a&gt; because I actually care about the blogging software. It's more like &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;learning how to &lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;putPixel&lt;/span&gt;&lt;span class="Apple-style-span"&gt; on my own terms.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-3750560694963047896?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/hLiLVvTtT-g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/3750560694963047896/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/12/on-becoming-jedi.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/3750560694963047896?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/3750560694963047896?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/hLiLVvTtT-g/on-becoming-jedi.html" title="putCharacter vs. putPixel and my new blog" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/12/on-becoming-jedi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ICQXc7cSp7ImA9Wx5VE0k.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-8155382313826883441</id><published>2010-10-05T22:03:00.000-07:00</published><updated>2010-10-05T22:06:00.909-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-05T22:06:00.909-07:00</app:edited><title>30-day challenge for October decided</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X1dF2shE-E_A3Q1fJHRpzQcTWRo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X1dF2shE-E_A3Q1fJHRpzQcTWRo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X1dF2shE-E_A3Q1fJHRpzQcTWRo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X1dF2shE-E_A3Q1fJHRpzQcTWRo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Quick update on the 30-day challenge front. The votes are in and "meditate 10-15 minutes a day" won by a strong margin.  So far, so good. I'll keep you posted with any insights I can gain from my inner-self later this month.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-8155382313826883441?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/0wGCqXY348g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/8155382313826883441/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/10/30-day-challenge-for-october-decided.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/8155382313826883441?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/8155382313826883441?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/0wGCqXY348g/30-day-challenge-for-october-decided.html" title="30-day challenge for October decided" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/10/30-day-challenge-for-october-decided.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04NQ3g6fyp7ImA9Wx5WGEU.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-2651836819790151626</id><published>2010-09-30T14:08:00.000-07:00</published><updated>2010-09-30T16:39:52.617-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-30T16:39:52.617-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="30-day challenge" /><title>September recap and 30 day challenge</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8bIvDrBYj0KQI74OR8EaZeDzFho/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8bIvDrBYj0KQI74OR8EaZeDzFho/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8bIvDrBYj0KQI74OR8EaZeDzFho/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8bIvDrBYj0KQI74OR8EaZeDzFho/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;September has been a bit busy for me and in order to get through October, I'm going to need a little help from you. But first, let me recap.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The month started off with PAX, the &lt;a href="http://www.paxsite.com/paxprime/index.php"&gt;Penny Arcade expo&lt;/a&gt;. It's a conference devoted to all things gaming. For me, I was super excited by two things. First, the news that after a decade's wait I might actually play &lt;a href="http://www.dukenukem.com/"&gt;Duke Nukem Forever&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS4BFmMpI/AAAAAAAAADA/pfL0VY_TJuw/s1600/PAX.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS4BFmMpI/AAAAAAAAADA/pfL0VY_TJuw/s200/PAX.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5522841271613665938" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Second, was the chance to see &lt;a href="http://www.youtube.com/watch?v=v7xME0aFbC4"&gt;Fallout 3: New Vegas&lt;/a&gt;. If you haven't every played the &lt;a href="http://en.wikipedia.org/wiki/Fallout_(series)"&gt;Fallout series&lt;/a&gt; I would highly recommend it. In the picture is my girlfriend posing with a giant T-Rex statue at the New Vegas booth.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The weekend after PAX I was at a &lt;a href="http://www.wizards.com/Magic/Multiverse/"&gt;Magic: The Gathering&lt;/a&gt; tournament. Specifically, the &lt;a href="http://www.wizards.com/magic/magazine/article.aspx?x=mtg/daily/eventcoverage/gppor10/welcome"&gt;Portland Grand Prix&lt;/a&gt;. I am only a casual player of the game, so finishing ~860/1400 wasn't to bad. I did however win a few side draft tournaments.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mLUne4JYvZY/TKURVEb02SI/AAAAAAAAAC4/SKFDRdkIvBc/s1600/MTG.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_mLUne4JYvZY/TKURVEb02SI/AAAAAAAAAC4/SKFDRdkIvBc/s200/MTG.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5522839571705157922" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Pictured is my buddy &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd942829.aspx"&gt;Matt Ellis&lt;/a&gt;, whose wife made the hat. In case you don't play Magic, &lt;a href="http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=190535"&gt;Doom Blade&lt;/a&gt; is a good way to crush noobs and clearly Matt has an unfair psychological advantage due to the hat. (In case you were wondering though, his sealed pool didn't contain a single Doom Blade.)&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next stop was a trip to Japan. It was half vacation half international press tour. For the vacation half I visited a friend who teaches English in &lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=fukushima,+Japan&amp;amp;sll=37.750299,140.467551&amp;amp;sspn=2.844757,4.943848&amp;amp;g=fukushima+prefecture&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Fukushima,+Fukushima+Prefecture,+Japan&amp;amp;ll=37.195331,136.933594&amp;amp;spn=11.454962,19.775391&amp;amp;z=6"&gt;Fukushima&lt;/a&gt;. As a long time student of the Japanese language and culture, I enjoyed a chance to better understand the Japanese way of life. For example, I learned that in Japan everyone does their part. Even dogs are expected to pick up their own poop.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS4rU8aSI/AAAAAAAAADI/2BdHVnDaeqE/s1600/Japan.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS4rU8aSI/AAAAAAAAADI/2BdHVnDaeqE/s200/Japan.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5522841282952325410" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;However, the other half was part of an international press tour. Evidently &lt;a href="http://www.amazon.com/Programming-comprehensive-writing-complex-problems/dp/0596153643"&gt;Programming F#&lt;/a&gt; has been translated to &lt;a href="http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0F-Chris-Smith/dp/4873114667/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1285887472&amp;amp;sr=8-1"&gt;Japanese&lt;/a&gt;! Personally, this is exciting news but it marks an even more important milestone for the language itself.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS5YzJDKI/AAAAAAAAADQ/NbjS2TBlxk4/s1600/100_1488.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS5YzJDKI/AAAAAAAAADQ/NbjS2TBlxk4/s200/100_1488.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5522841295158578338" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;O'Reilly Japan setup a &lt;a href="http://www.oreilly.co.jp/editors/archives/2010/09/report-programming-fsharp-talkevent.html"&gt;talk session&lt;/a&gt; in &lt;a href="http://tech.slashdot.org/story/10/09/26/0141255/A-Video-Guide-To-Akihabara?from=rss"&gt;Akihabara&lt;/a&gt; so I could answer questions and sign copies of the book. The event was a ton of fun, and worth the stress of getting lost in the Tokyo subway system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, that was last week and September still has plenty of more juice!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Currently, I am writing this post this from San Diego where I am at &lt;a href="http://www.sqe.com/starwest/"&gt;StarWest&lt;/a&gt;, a conference about software quality. The reason I am here is to give a talk about Google Test Analytics, the tool my grand boss &lt;a href="http://www.youtube.com/watch?v=Pug_5Tl2UxQ"&gt;Dr. James Whittaker&lt;/a&gt; has been hinting at on the &lt;a href="http://googletesting.blogspot.com/"&gt;Google Testing Blog&lt;/a&gt; for months.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mLUne4JYvZY/TKUXw7lQghI/AAAAAAAAADg/5GJ5vDm-Bgc/s1600/StarWest.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_mLUne4JYvZY/TKUXw7lQghI/AAAAAAAAADg/5GJ5vDm-Bgc/s200/StarWest.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5522846647434904082" style="cursor: pointer; width: 150px; height: 200px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I'll save the explanation of what Google Test Analytics and the "ACC methodology" is for a future, technical blog post. For now you should just know that this is exciting news :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyways, this post isn't actually about chronicling my travels. It's about setting the stage for a far more important fact:&lt;b&gt; I don't have any plans for October.&lt;/b&gt; (Thank God.) No traveling, no work-related deadlines, nothing. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the question becomes them, what will I do with my new found free time? Well, I figured I would blatantly steal an idea from &lt;a href="http://www.mattcutts.com/blog/"&gt;Matt Cutts&lt;/a&gt;, the unofficial Google spokesman, and try out a &lt;a href="http://www.mattcutts.com/blog/type/30-days/"&gt;30-day challenge&lt;/a&gt; for October.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm going to do one thing every day for 30 days in an attempt to somehow better my life. But I need your help to determine what that thing will be. The reason &lt;i&gt;you&lt;/i&gt; need to choose it is about motivation. It's super easy to let myself down. For example I've wanted to lose weight my entire life. But if you, my esteemed readers, ask me to do something then I am on the hook to actually do it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, without further adieu please fill out my &lt;a href="http://www.surveymonkey.com/s/T8PRCB5"&gt;one-question survey&lt;/a&gt; and give me some guidance. In October I'll provide an update for what the challenge is and keep you updated on the progress. Thank you.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;a href="http://www.surveymonkey.com/s/T8PRCB5"&gt;What should I do in October?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-2651836819790151626?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/1Xp4c8uZSM4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/2651836819790151626/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/09/september-recap-and-30-day-challenge.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/2651836819790151626?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/2651836819790151626?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/1Xp4c8uZSM4/september-recap-and-30-day-challenge.html" title="September recap and 30 day challenge" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_mLUne4JYvZY/TKUS4BFmMpI/AAAAAAAAADA/pfL0VY_TJuw/s72-c/PAX.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/09/september-recap-and-30-day-challenge.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUANQXw_fip7ImA9WxFaGEk.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-9194274385146200070</id><published>2010-07-22T17:10:00.000-07:00</published><updated>2010-07-22T18:16:30.246-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-22T18:16:30.246-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>I have been outed! Sorta.</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/29M2BCxF5jTA_q-8QaCmIGaY2ms/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/29M2BCxF5jTA_q-8QaCmIGaY2ms/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/29M2BCxF5jTA_q-8QaCmIGaY2ms/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/29M2BCxF5jTA_q-8QaCmIGaY2ms/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;If you follow the &lt;a href="http://googletesting.blogspot.com/2010/07/there-but-for-grace-of-testing-go-i.html"&gt;Google Testing Blog&lt;/a&gt; you might have read the latest post by Dr. James Whittaker's about '&lt;a href="http://www.google.com/search?hl=en&amp;amp;tbs=nws:1&amp;amp;q=antenna+gate&amp;amp;btnG=Search&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai="&gt;antenna gate&lt;/a&gt;'. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The gist of the post was that Apple missed an important bug -- holding the phone too hard will ruin the antenna signal -- and what the testing community can learn from it. One part of the post of particular interest to me was:&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Risk analysis is so important that we've built an internal tool to help guide testers in performing it. Code-named "Testify" this tool streamlines the process of risk analysis, at least the way we do it at Google. We're working on open-sourcing an early prototype in time for GTAC 2010 (I can hear my team cringing now ... "you promised it &lt;/span&gt;&lt;span style="font-style: italic; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;when&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;?"). &lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;The mention of a mysterious risk analysis tool sounds interesting and I like the humorous anecdote about the team cringing about their newfound deadline. Well, I would have found that humorous if I wasn't on that team. (And too busy writing code for that newfound deadline.)&lt;/div&gt;&lt;div&gt; &lt;/div&gt;I'm one of the people working on that "internal test tool" for performing Risk Analysis, and am especially glad that James outed the tool so I can talk about it publicly. Risk Analysis is an interesting topic that needs to be mentioned more in software testing circles.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my experience a classic mistake testers make is being too focused on finding bugs. That's right, you can be too focused on finding bugs. Because what really matters is answering the following questions:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Is your software ready to ship?&lt;/li&gt;&lt;li&gt;If not now, when?&lt;/li&gt;&lt;li&gt;When it does ship, will it solve the problems it set out to solve?&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;You can find bugs until I'm blue in the face, but systematically finding and removing defects doesn't get you any closer to answering those questions. What matters is understanding &lt;i&gt;where&lt;/i&gt;  you are testing and what areas &lt;i&gt;need&lt;/i&gt; that testing. Polishing the bottom of a banister isn't going to do you any favors.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Risk Analysis is the process of looking at the &lt;i&gt;distribution &lt;/i&gt;of possible outcomes and understanding your acceptable risk. If the worst thing that can happen if component X breaks is that the user gets annoyed, then that might be acceptable. Certainly a $500 phone being rendered inoperable is not an acceptable risk.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Risk Analysis wouldn't have said, "Hey, Apple, make sure holding the phone doesn't impact the signal!" But it would have uncovered that there is a piece of the system that has potentially devastating risk, and therefore needs some more investigation or testing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't think Risk Analysis or tool like Testify will revolutionize the way people develop software, but I do think that if used judiciously they can help prevent the next 'gate'. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-9194274385146200070?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/dOhSPwbnlzI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/9194274385146200070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/07/i-have-been-outed-sorta.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/9194274385146200070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/9194274385146200070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/dOhSPwbnlzI/i-have-been-outed-sorta.html" title="I have been outed! Sorta." /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/07/i-have-been-outed-sorta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEENRXg5cSp7ImA9WxFWFUU.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-5856442519576375059</id><published>2010-06-03T09:42:00.000-07:00</published><updated>2010-06-03T10:38:14.629-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-03T10:38:14.629-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="F#" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>F# active pattern seven-tag limit</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mBFWZTWscEqxnYo2wrkagCCv498/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mBFWZTWscEqxnYo2wrkagCCv498/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mBFWZTWscEqxnYo2wrkagCCv498/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mBFWZTWscEqxnYo2wrkagCCv498/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-style:italic;"&gt;Edit: Corrected a minor technical detail. Thanks &lt;a href="http://james-iry.blogspot.com/"&gt;James&lt;/a&gt; for pointing it out.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This morning on &lt;a href="http://twitter.com/intel_chris/statuses/15332574890"&gt;Twitter&lt;/a&gt; there were some questions about the seemingly arbitrary limit of only seven tags per active pattern. (Active patterns being a really &lt;a href="http://blogs.msdn.com/b/chrsmith/archive/2008/02/21/introduction-to-f_2300_-active-patterns.aspx"&gt;awesome&lt;/a&gt; F# language feature.) While this limit seems unreasonable and arbitrary, I contend that the F# language is working as intended. Let me explain...&lt;br /&gt;&lt;br /&gt;As a tester on the F# team I always took pleasure at finding the capabilities and limits of the compiler. For example, did you know if you are pattern matching against an integer type and have rules for all four billion possibilities the F# compiler stack overflows? Shame, I know. &lt;br /&gt;&lt;br /&gt;Anyways, back when I first learned about active patterns I discovered this seven tag limit right away. Seven? There don't seem to be other restrictions in the language like this; for example, you can have tuples of arbitrary length, and discriminated unions with any number of tags. So why not let active patterns run free?&lt;br /&gt;&lt;br /&gt;One of the perks of working at Microsoft on the F# team is having access to legendary Cambridge researcher Don Syme. So I simply asked about the design.&lt;br /&gt;&lt;br /&gt;To paraphrase his answer to me, "if you need more than seven tags, you are probably doing it wrong." Once he went into the theory behind active patterns I agreed that the limit was reasonable and didn't push for us to change the design. This doesn't mean you can't use active patterns with greater than seven tags, it just means that you need to use a different language construct -- the partial active pattern -- instead.&lt;br /&gt;&lt;br /&gt;So what is this 'theory' behind active patterns? Well, to quickly recap there are several types of active patterns -- single, multi-case, and partial -- and each serves a specific role. The only one where this limit applies is the multi-case scenario.&lt;br /&gt;&lt;br /&gt;Multi-case active patterns are where the active pattern converts the data into one type of a set of different types. So I give you an X and you convert it into an Alpha, Beta, or Gamma. The right way to think about this is partitioning the input space (all possible values of X) into several categories (if X is an Alpha, if X is a Beta, or X is a Gamma). The word 'type' here is used loosely. Alpha, Beta, and Gamma are more like classifiers than actual .NET types.&lt;br /&gt;&lt;br /&gt;For example, I give you an Email Message object and your active pattern returns 'Spam', 'NotImportant', or 'Important'. So then I can pattern match against that email message. For the 'Spam' case I can call 'Delete', for the 'Important' case set the status flag, and so on. You can associate data with each pattern tag too. For example, the 'NotImportant' tag might carry with it a score indicating just how critical it is.&lt;br /&gt;&lt;br /&gt;Once you wrap your head around this, active patterns become super useful and are the best way to clean up unruly pattern matches. The rule of thumb I go by is when I see more than one 'when guard' in a pattern match I create an active pattern.&lt;br /&gt;&lt;br /&gt;However, multi-case active patterns can quickly can get out of hand. Building off of this Email example, what if the active pattern partitioned the input Email into:&lt;br /&gt;&lt;br /&gt;- Spam&lt;br /&gt;- LolCatVideo&lt;br /&gt;- Bill&lt;br /&gt;- FromMom&lt;br /&gt;- FacebookFriendRequest&lt;br /&gt;- TwitterMessage&lt;br /&gt;- FromWork&lt;br /&gt;- SocialCorrespondence&lt;br /&gt;- etc.&lt;br /&gt;&lt;br /&gt;If the input space needs to be partitioned into such granular areas, then you should probably consider breaking down the input some more first. For example, being able to pattern match against 'NotImportant' Emails and use a second active pattern to further classify the email as from Facebook, Twitter, LolCat, and so on. This is exactly the sort of thing that partial active patterns were designed for.&lt;br /&gt;&lt;br /&gt;So there you have it. A solid reason why there is a seven tag limit to active patterns. If you aren't convinced that this limit is reasonable, here are two more, personal, reasons why I like it..&lt;br /&gt;&lt;br /&gt;1. We can always change it later. &lt;br /&gt;It's easy to add features to a programming language and neigh impossible to take them away. So if enough people complain, Microsoft can always increase-or-remove the limit. (In fact, Microsoft loves customer feedback!) The reasons stated above are why the language feature is there in the first place.&lt;br /&gt;&lt;br /&gt;2. I love the compiler telling me to do the right thing.&lt;br /&gt;To go on a mini-rant here, I really hate clever code. Consider this C gem (related to '&lt;a href="http://en.wikipedia.org/wiki/Duff's_device"&gt;Duff's Device&lt;/a&gt;'):&lt;br /&gt;&lt;br /&gt;while (*src++ = *dst++) ;&lt;br /&gt;&lt;br /&gt;That one line of C code is particularly awe-inspiring, it is code like that which made Windows 1.0 through XP so insecure. Nobody should ever write code like that, ever. Even if you claim that that is the only way to get performance, run a profiler and  be proven wrong.&lt;br /&gt;&lt;br /&gt;In my humble opinion, having an active pattern with 8 or 12 tags just seems wrong. Much like having a function taking 8 or 12 parameters. It makes code harder to understand, debug, maintain, and so on. Having the F# compiler slap you on the wrist is just like having that big-ol' long ugly 'mutable' keyword. It's there to help you write better code.&lt;br /&gt;&lt;br /&gt;Limiting active patterns to seven tags is F#'s way of saying too much of a good thing isn't good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-5856442519576375059?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/plIUIbXKR6s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/5856442519576375059/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/06/f-active-pattern-seven-tag-limit.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/5856442519576375059?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/5856442519576375059?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/plIUIbXKR6s/f-active-pattern-seven-tag-limit.html" title="F# active pattern seven-tag limit" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/06/f-active-pattern-seven-tag-limit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUANR3w-fSp7ImA9WxFXE0o.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-8450917455467566934</id><published>2010-05-20T10:47:00.000-07:00</published><updated>2010-05-20T10:49:56.255-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-20T10:49:56.255-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>One month in</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iFwxuhJBP27MUc3jLWs_7ClnrVo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iFwxuhJBP27MUc3jLWs_7ClnrVo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iFwxuhJBP27MUc3jLWs_7ClnrVo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iFwxuhJBP27MUc3jLWs_7ClnrVo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I’ve been a Noogler for a little over three weeks now and I would certainly characterize the experience as intense. It’s not too common to literally relearn everything you know in a month. I would like to share some of the things I’ve learned so far at Google.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Working at Google&lt;/span&gt;&lt;br /&gt;Google’s culture is what makes it so unique, and is absolutely the reason why I left Microsoft. So is the grass as green as I hoped it would be? To be totally honest, yes. It really is that good. I’m sure there will be some bureaucratic bullshit I’ll have to deal with in the future, but I haven’t seen it yet. In speaking to a fellow Noogler, he described Google as a “Geek’s Disney land.” I agree with this statement and would add, “... except you also get paid to ride the rides.”&lt;br /&gt;&lt;br /&gt;Google has a huge focus on individuals and their productivity. As I said in my last post I was given a MacBook Pro on day one. As soon as I found myself needing some headphones I just walkted to the Tech Stop and picked one up. At Google you are given everything you need to be successful, and I really appreciate it.&lt;br /&gt;&lt;br /&gt;Another thing I find surprising -- not really after you think about it -- is how tied into the Internet Google is. Everything is on a wiki, a public Google doc, or simply open source. One thing I never liked about Microsoft was how hard it was to find information. Even if you worked three offices down I’d have no idea what you worked on, where to get the latest build of your product, etc. However, imagine having Google.com wired to your corporate infrastructure. Within a few keystrokes I can find out what other people are working on or who the local expert is for a technology.&lt;br /&gt;&lt;br /&gt;Earlier I said Google wasn’t a transparent company; I was wrong, sort of. For customers, Google is quite opaque until they make a big announcement. However internally Google is crazy-open. Eric Schmit, Google’s CEO, came to the Kirkland office a couple weeks ago and fielded questions about all sorts of sensitive topics: allegations of international espionage and Ninja infiltration by the Chinese government, world-wide privacy ass-plosions due to the Buzz launch, and how Greek financial woes relate to Google. (For the record, I was very impressed with Eric and his answers.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Life in the Trenches&lt;/span&gt;&lt;br /&gt;So in short, live at Google is great. But what is it like actually doing my job? Well, it isn’t all rainbows and ponies, but it’s still fun too. The biggest change for me is the switch to using open source software. Here’s my current setup for the project I work on:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;OS: Linux desktop for dev work and Mac OS X for Twitter&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tools: Eclipse IDE for Java, FireBug for all things HTML&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Frameworks: Google Web Toolkit and Google App Engine&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I’ll be honest with you. I miss Windows 7. I miss being able to press WIN+Left to quickly dock a window to the left side of the screen. I miss being able to use Visual Studio and the F# Interactive window. But, I’m able to get a lot of things done on F/OSS despite it being completely counter-intuitive and difficult to use. C'est la vie.&lt;br /&gt;&lt;br /&gt;On the plus side, I really do like the ‘automated refactoring’ tools of Eclipse. While I dislike how verbose idiomatic Java code can be, the fact I can leverage the IDE to do so many otherwise mundane tasks is a plus.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Future&lt;/span&gt;&lt;br /&gt;Unfortunately I can’t publicly talk about my project until we announce the &lt;span style="font-style:italic;"&gt;Google Space Deathray(tm)&lt;/span&gt; later this fall. However, if you want to speculate what I’m up to I will tell you that my two-boss is (evil genius) Dr. James Whittaker. He’s got a lot of great ideas and hopefully I can put some of them into practice. Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-8450917455467566934?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/EyrODmXmoBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/8450917455467566934/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/05/one-month-in.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/8450917455467566934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/8450917455467566934?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/EyrODmXmoBk/one-month-in.html" title="One month in" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/05/one-month-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YGRXk4eyp7ImA9WxFRE0k.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-6323776571162781846</id><published>2010-04-26T20:55:00.000-07:00</published><updated>2010-04-26T21:05:24.733-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-26T21:05:24.733-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Noogler" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>First Day at Google</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TS8B-2R6NVf0IUyoEHjZprcRUHs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TS8B-2R6NVf0IUyoEHjZprcRUHs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TS8B-2R6NVf0IUyoEHjZprcRUHs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TS8B-2R6NVf0IUyoEHjZprcRUHs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;So I'm a Noogler! (New-Googler) This means several things:&lt;br /&gt;* I get a sexy new laptop, for work of course&lt;br /&gt;* A very sexy &lt;a href="http://www.flickr.com/photos/albill/429691222/"&gt;Noogler hat&lt;/a&gt;&lt;br /&gt;* The proud right to say I work for Google&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mLUne4JYvZY/S9ZhplIU4KI/AAAAAAAAABs/k6uBq-ujPgg/s1600/photo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_mLUne4JYvZY/S9ZhplIU4KI/AAAAAAAAABs/k6uBq-ujPgg/s320/photo.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5464662564830240930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's been quite a busy day with non-stop information overload. But I've finally gotten back to my hotel to reflect upon the day. Here are some initial thoughts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What I like about Google&lt;/span&gt;&lt;br /&gt;Culture. Absolutely and unequivocally Google's culture is their biggest asset and a major reason if why I choose to join the company. I won't say that Microsoft doesn't treat it's employees well, in fact it is rated one of the top places to work at for a reason. However, Google intentionally goes out of its way to make their work environment fun, festive, and most of all, productive.&lt;br /&gt;&lt;br /&gt;There is a lot of trust in the Google environment; people are trusted to do their best work and make the right decisions. During orientation one of the speakers quipped (my wording) "if you bitch about a problem 3 times, it's your problem to take ownership and fix." Being empowered to fix problems as you see them - not pass them off to another team, group, or organization - is huge. And to be honest, it has paid dividends to Google as a company.&lt;br /&gt;&lt;br /&gt;For example, some Google employees a few back didn't like their current Email system. They found it difficult to search their inboxes. So as a 20% project on the side they wrote GMail. They saw a problem and fixed it. A lot of companies will say they support that level of proactivity, but I've never seen a company actually fund it. (Make allowances for 20% time, actually staff people full time on long-term prototypes like GMail or Wave, etc.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What I dislike about Google&lt;/span&gt;&lt;br /&gt;Coming to Google from Microsoft gives me a unique perspective. Microsoft is absolutely not the opaque and faceless company many people make it out to be. If you want to know what's going on at Microsoft, simply check http://blogs.msdn.com/. Microsoft is an incredibly transparent company and really deserves to get more recognition for that.&lt;br /&gt;&lt;br /&gt;Google on the other hand, to me at least, seems much more secretive. Microsoft spends years developing products and so providing a steady stream of information is crucial to stay relevant. Google operates at 'internet speed' and goes dark on products before having a surprise announcement.&lt;br /&gt;&lt;br /&gt;Contrast Microsoft's Oslo / Quadrant / M with Google's Wave.&lt;br /&gt;&lt;br /&gt;I don't want to accuse Google on whole as being as secretive as, say, Apple. However I am not a huge fan of not being able to state directly what I work on. (However, if you do a search for "Google's secret space death ray" you won't be too far off...)&lt;br /&gt;&lt;br /&gt;Also, something I already dislike at Google is writing software for the web. In case you didn't already know, it sucks. Writing desktop applications for Windows was not only easy, but fun. F# is hands down the greatest language on Earth. Moving from C# and Visual Studio to Java and Eclipse is like going from keyboard and Word to pen and paper. ::sigh::&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What I look forward to at Google&lt;/span&gt;&lt;br /&gt;Challenge. Right now there is plenty to learn, lots to do, and a huge, dark cloud of failure on the horizon. I don't know what the next problem I face will be, but I will rest assured that I am empowered to fix it whatever it may be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-6323776571162781846?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/VzWsL11AqbA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/6323776571162781846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/04/first-day-at-google.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/6323776571162781846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/6323776571162781846?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/VzWsL11AqbA/first-day-at-google.html" title="First Day at Google" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_mLUne4JYvZY/S9ZhplIU4KI/AAAAAAAAABs/k6uBq-ujPgg/s72-c/photo.jpg" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/04/first-day-at-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UHSHYzcCp7ImA9WxFSF0Q.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-4594270715248241083</id><published>2010-04-20T12:20:00.001-07:00</published><updated>2010-04-20T12:20:39.888-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-20T12:20:39.888-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fsyacc" /><category scheme="http://www.blogger.com/atom/ns#" term="F#" /><title>FSLex and FSYacc examples updated</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1MU4VSFBmBeAxni9QtH8jVXMJSw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1MU4VSFBmBeAxni9QtH8jVXMJSw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1MU4VSFBmBeAxni9QtH8jVXMJSw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1MU4VSFBmBeAxni9QtH8jVXMJSw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This morning I gave a talk titled &lt;a href="http://www.communityforfsharp.net/april-2010-live-meeting"&gt;Writing a Java to x86 Compiler in F#&lt;/a&gt;, detailing my adventures while in &lt;a href="http://www.cs.washington.edu/education/courses/csep501/08wi/"&gt;CSE P 501&lt;/a&gt;. While I will post the slides and overview here in a few days, I wanted to post an update to my simple FSLex and FSYacc example in the mean time.&lt;/p&gt;  &lt;p&gt;For background on fslex and fsyacc, refer to some earlier blog posts on the subject.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/chrsmith/archive/2008/09/09/msbuild-tasks-for-lex-and-yacc.aspx"&gt;MSBuild tasks for lex and yacc&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/chrsmith/archive/2008/01/28/fsyacc-Sample-on-Code-Gallery.aspx"&gt;FSYacc sample&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx"&gt;FSLex sample&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;While fslex and fsyacc haven’t changed much in the past 18 months, getting things setup has. Here are the current things required to get fslex and fsyacc working as of 4/2010.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=444005fb-e627-4feb-b51d-13d6a3b4b8ed&amp;amp;displayLang=en"&gt;F# CTP v2.0.0.0&lt;/a&gt; or Visual Studio 2010&lt;/li&gt;    &lt;li&gt;&lt;a href="http://fsharppowerpack.codeplex.com/releases/view/40168"&gt;F# PowerPack v1.9.9.9&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Once v2.0.0.0 gets released (in a few days) things will still work but you will have to tweak the project references to PowerPack assemblies.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;When you add the MSBuild targets for the F# PowerPack note that it is &lt;strong&gt;&lt;u&gt;order dependent&lt;/u&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;you must import the F# PowerPack.targets file &lt;strong&gt;&lt;u&gt;after&lt;/u&gt;&lt;/strong&gt; Microsoft.FSharp.targets.&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;e.g:       &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;Import Project=&amp;quot;$(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;lt;!-- These are order dependent. Include Microsoft.FSharp.Targets BEFORE FSharp.PowerPack.Targets!!! --&amp;gt;          &lt;br /&gt;&amp;lt;Import Project=&amp;quot;$(MSBuildExtensionsPath32)\FSharp\1.0\FSharp.PowerPack.targets&amp;quot; /&amp;gt; &lt;/font&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;And that’s it. I’ve attached the updated MiniCalc source code &lt;a href="http://achrissmith.com/files/MiniCalc.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-4594270715248241083?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/adFRyL6ub7U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/4594270715248241083/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/04/fslex-and-fsyacc-examples-updated.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/4594270715248241083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/4594270715248241083?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/adFRyL6ub7U/fslex-and-fsyacc-examples-updated.html" title="FSLex and FSYacc examples updated" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/04/fslex-and-fsyacc-examples-updated.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYDRX05fSp7ImA9WxFSFkk.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-1460289942831644750</id><published>2010-04-18T19:15:00.000-07:00</published><updated>2010-04-18T19:29:34.325-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-18T19:29:34.325-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Narcissism" /><title>Evidently I'm an Authority on Tail Recursion</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ByxyMRW7AiZfnT0xWPxCIIBPrqk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ByxyMRW7AiZfnT0xWPxCIIBPrqk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ByxyMRW7AiZfnT0xWPxCIIBPrqk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ByxyMRW7AiZfnT0xWPxCIIBPrqk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Evidently my post on &lt;a href="http://blogs.msdn.com/chrsmith/archive/2008/08/07/understanding-tail-recursion.aspx"&gt;Tail Recrusion&lt;/a&gt; is the #2 page second only to the entry on Wikipedia. While writing a &lt;a href="http://www.amazon.com/Programming-comprehensive-writing-complex-problems/dp/0596153643"&gt;well reviewed&lt;/a&gt; book on the F# programming language gives me some credibility on the subject of functional programming language topics, I find it a little disconcerting that Google's search algorithm has determined that my blog post is one of the most 'authoritative' descriptions of the subject.&lt;br /&gt;&lt;br /&gt;I don't want to belittle that blog post however, as it is a pretty great write up on tail recursion. What I find interesting however is that it's &lt;span style="font-style:italic;"&gt;my &lt;/span&gt;blog post. Three years ago I had absolutely no idea what tail recursion was. And now, according to the world's best search algorithm, I'm consider somewhat of an expert. (To be clear, in the past three years I have become somewhat of an expert in programming languages.)&lt;br /&gt;&lt;br /&gt;Anyways, as more internet pages get created and updated I'm sure my 'tail recursion authority' will go away. But it does make you wonder what the state of the search index will be a few years from now. Perhaps &lt;a href="http://achrissmith.blogspot.com/2010/03/my-second-meeting-with-bill-gates.html"&gt;this page&lt;/a&gt; will be the top result for "Bill Gates."  One can only hope.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-1460289942831644750?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/SqNP9v3xOPc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/1460289942831644750/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/04/evidently-im-authority-on-tail.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/1460289942831644750?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/1460289942831644750?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/SqNP9v3xOPc/evidently-im-authority-on-tail.html" title="Evidently I'm an Authority on Tail Recursion" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/04/evidently-im-authority-on-tail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EMQXw6fyp7ImA9WxFTE08.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-473923974054938651</id><published>2010-04-03T11:21:00.000-07:00</published><updated>2010-04-03T12:08:00.217-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-03T12:08:00.217-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Games" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><title>Running Quake II in a Browser... Seriously?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OjXx6zjhyUU_CGujfDcSqDQmIAo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OjXx6zjhyUU_CGujfDcSqDQmIAo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OjXx6zjhyUU_CGujfDcSqDQmIAo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OjXx6zjhyUU_CGujfDcSqDQmIAo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Some &lt;strike&gt;robot super engineers sent from the future&lt;/strike&gt; Google employees recently ported Quake II to &lt;a href="http://code.google.com/p/quake2-gwt-port/"&gt;run in the browser&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;object width="370" height="240"&gt;&lt;param name="movie" value="http://www.youtube.com/v/fyfu4OwjUEI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/fyfu4OwjUEI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="370" height="240"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;While &lt;a href="http://www.quakelive.com/#home"&gt;Quake 3&lt;/a&gt; has been 'in the browser' for a few months, this is actually pretty significant. Here is how they did it:&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Quake II was written in highly-optimized C&lt;/li&gt;&lt;li&gt;'The Community' ported it to Java&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt; was used to port Java to JavaScript&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/HTML5"&gt;HTML5 extensions&lt;/a&gt; were used to fill in holes.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Realistically all the Googlers did was #4 and #5, put some Java code into a tool to spit out JavaScript. And then fix bugs in the JavaScript to remove any non-existent API calls. While this certainly took some technical know-how, I wouldn't classify this port as rocket science.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What makes this so significance is that in addition to being straight forward port, note that any computer which could run Quake II back in the day could probably run Windows XP as well. And, Windows XP is still the &lt;a href="http://www.w3schools.com/browsers/browsers_os.asp"&gt;most widely used operating system&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if you can put enough processing power to put an operating system &lt;i&gt;in a frackin webpage&lt;/i&gt; then imagine what's next? We are not talking &lt;a href="http://en.wikipedia.org/wiki/Ajax_(programming)"&gt;AJAX&lt;/a&gt; to add progress bars here; HTML5 is offering a full frame buffer, audio stack, and embedded video. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If this is a glimpse of things to come, I look forward to the future. One small leap for &lt;a href="http://en.wikipedia.org/wiki/Quake_(series)"&gt;the Strogg&lt;/a&gt;, one giant leap for mankind.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-473923974054938651?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/dB-f0LNJk8g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/473923974054938651/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/04/running-quake-ii-in-browser-seriously.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/473923974054938651?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/473923974054938651?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/dB-f0LNJk8g/running-quake-ii-in-browser-seriously.html" title="Running Quake II in a Browser... Seriously?" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/04/running-quake-ii-in-browser-seriously.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YCRno7eip7ImA9WxFTEUg.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-4620114976555260752</id><published>2010-03-31T22:45:00.000-07:00</published><updated>2010-04-01T13:52:47.402-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-01T13:52:47.402-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BillGates" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>My second meeting with Bill Gates</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JNyvXglDWVoP3-wWLFtARxFqqKE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JNyvXglDWVoP3-wWLFtARxFqqKE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JNyvXglDWVoP3-wWLFtARxFqqKE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JNyvXglDWVoP3-wWLFtARxFqqKE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;One thing Google doesn't have is Bill Gates. During my tenure at Microsoft I've not only had a chance to interact with him, I've had a chance to interact with him &lt;b&gt;twice&lt;/b&gt;! That's right. I'm like two steps away from having Billy over to play bridge on the weekends. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My second interaction with Bill Gates was at Tech Fest, an internal conference where Microsoft Research shows off their wares. I was walking around the expo, like you do, when out of the corner of my eye I see &lt;a href="http://www.youtube.com/watch?v=KugiqORzaPs"&gt;Bill-frackin-Gates&lt;/a&gt;! He's just walking around with some technical assistant giving him a guided tour of the show.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most people would freak out and maybe shout OMG SQEEE! I however, decided to play it cool. So I casually turned around - knowing full well that Bill Gates was facing me - and slowly walked forward. There was absolutely no way I was going act different or strange just because Bill Gates was behind me, and coming closer. Of course I was a bit nervous, so I walked a little stiff. To be honest, you wouldn't be incorrect for using the term 'awkward'.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyways, I then I felt someone tap me on the shoulder. Initially I was kind of pissed. I'm like, "Do you know that Bill Gates is behind us? Act cool brother!" I turn around and it wasn't some yahoo, but Bill Gates himself, in the flesh, had it was he who touched my shoulder.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Certainly this was so that he could give me an award. Or tell me how much he appreciates my work testing Visual Studio. Bill Gates probably has a track record of greeting random employees and telling them how awesome they are. Probably.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For a moment, which in my mind lasted a few days, we met eye to eye. And that is when Bill Gates spoke to me. Bill Gates literally spoke directly to me. He said, in his angelic, computer-visionary voice, "Excuse me." &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He and his technical assistant then proceeded to walk around me and continue on through the crowd. I bet he still remembers me. I mean, I was wearing a name tag. He definitely wrote it down in his mind "Chris Smith, remember to give that guy his award." &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well Bill, I waited a few years, but you'll have to find me at a new address.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-4620114976555260752?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/8tMEyZXidu4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/4620114976555260752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/03/my-second-meeting-with-bill-gates.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/4620114976555260752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/4620114976555260752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/8tMEyZXidu4/my-second-meeting-with-bill-gates.html" title="My second meeting with Bill Gates" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/03/my-second-meeting-with-bill-gates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQNSX4ycCp7ImA9WxBaGU8.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-478217835536257539</id><published>2010-03-29T20:53:00.000-07:00</published><updated>2010-03-29T21:13:18.098-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-29T21:13:18.098-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Noogler" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>It's official, I'm going to become a Noogler</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mKJHwNCXc2phM_V6spueFhzVX3A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mKJHwNCXc2phM_V6spueFhzVX3A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mKJHwNCXc2phM_V6spueFhzVX3A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mKJHwNCXc2phM_V6spueFhzVX3A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Today I accepted a job offer from Google. It actually was a very difficult decision. While Google offers quirky perks like free food, an on-site rock wall, and razor scooters in the hall, Microsoft has the distinct advantage of being called 'home'. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My time at Microsoft started as an intern back in 2002, and I've been planting roots in the company ever since. If you hang around anywhere long enough you can see the system for how it really works; and at Microsoft I'd like to say that I am at the top of my game. I know who to ask for help when I needed it. I know what to do when tools or services when down. I know how to get things done quickly, and to get them done right the first time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So why accept a job with Google? Well, it certainly isn't because of the razor scooters. (I'll be frank and say they are not only impractical they are downright annoying!) What brings me to Google is the opportunity for failure, seriously. At Microsoft my career was growing and I was learning new skills each and every day. However, it was becoming too comfortable. Currently I can tell you the top problems facing my group and exactly how to go about addressing them. But, personally, I don't want my career to be about conquering the known. I want to spend my time exploring the unknown.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What Google offers is a chance to help define what the future of software looks like. How does a ubiquitous internet impact the way we interact? Google's mission of making the world's data searchable does much more than provide a platform for displaying ads. It provides a near infinite amount of data to anyone willing to do something with it. There's a lot of power in that, and I look forward to harnessing it towards changing the world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyways, my first day is April 26th. Until then I get to walk around the halls of Microsoft like a ghost, finishing up loose ends, and pass down my ancient wisdom to the next generation. Hopefully I can make things a little more comfortable for those that remain.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-478217835536257539?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/YjpGjedLDgU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/478217835536257539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/03/its-official-im-going-to-become-noogler.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/478217835536257539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/478217835536257539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/YjpGjedLDgU/its-official-im-going-to-become-noogler.html" title="It's official, I'm going to become a Noogler" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/03/its-official-im-going-to-become-noogler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMGSHw_fCp7ImA9WxBbGEo.&quot;"><id>tag:blogger.com,1999:blog-6161996968613825172.post-5585562446390059347</id><published>2010-03-17T17:29:00.000-07:00</published><updated>2010-03-17T17:33:49.244-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-17T17:33:49.244-07:00</app:edited><title>Hello, world!</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4PjZ-EeL_CQZBg_-zR1D6uGaqCk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4PjZ-EeL_CQZBg_-zR1D6uGaqCk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4PjZ-EeL_CQZBg_-zR1D6uGaqCk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4PjZ-EeL_CQZBg_-zR1D6uGaqCk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;What the world needs is another blog, and I am so happy to be bringing it to you. If it weren't for all these people, like me, bitching about their ennui for life you simply wouldn't know just how terrible it is to live these days. Global warming, peak oil, religious persecution - all of these problems pail in comparison to whether or not they had enough mustard for my hotdog today at the cafeteria. (Which, I am pleased to report they did.)&lt;br /&gt;&lt;br /&gt;Anyways, I've setup this blog as a placeholder should I choose to move in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6161996968613825172-5585562446390059347?l=blog.achrissmith.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/fJQFu/~4/_EUf6o0Z0ks" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.achrissmith.com/feeds/5585562446390059347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.achrissmith.com/2010/03/hello-world.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/5585562446390059347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6161996968613825172/posts/default/5585562446390059347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/fJQFu/~3/_EUf6o0Z0ks/hello-world.html" title="Hello, world!" /><author><name>Chris Smith</name><uri>http://www.blogger.com/profile/06380467360289637731</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-r1n32_5Kq4w/Tk7Bi4kuCMI/AAAAAAAAAjk/LM7_fZveKto/s1600/Photo_9846D432-6D49-0D45-EC79-A05C34BB5AEE.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.achrissmith.com/2010/03/hello-world.html</feedburner:origLink></entry></feed>

