天天看點

我是一個網絡應用程式員

 【原文位址】I’m a Web Developer At Heart

http://www.haacked.com/archive/2009/05/07/18616.aspx

【原文發表日期】 Mar 7, 2009

  曾經有一位年輕的程式員寫email問我說如何能成為一個成功的開發人員。我一開始是這樣回答的:

  我不清楚.你為什麼不去問一個成功的開發人員呢?

但而後我想,這樣的回答其實僅僅是機巧有餘,不是麼?我這麼老虛僞地故作謙遜是和誰在故弄玄虛呢?畢竟,“clever hack”這個概念就是以我來命名的(譯注:注意Phil Haack的姓氏),而顯然發明這個詞彙的人還及不上我1/10的魅力,這點從他創造這個詞組的時候故意地漏掉了一個字母a這件事上也更加可見一斑。當然,這個,還隻是發生在我發明了Test-Driven Design,網際網路,以及大家所呼吸的空氣之前的一些小打小鬧。

(對那些幽默了解不能的朋友們,請注意,我并沒有真正發明Test-Drive Design)

  于是我開始仔細考慮這個問題并對自己說:“假設我是一個成功的軟體程式員,那我應該會做哪些事來達到那個目标呢?”然後當我開始思索各種學習提高的方法時,有一件事是顯而易見的,那就是參與一些開源軟體的項目。

  如果說我的職業生涯中有一件事年複一年地使我獲益良多,那就是我參與了很多開源的項目。參與開源項目使我有機會廣泛地接觸各類的問題和技術,而這些問題和技術在日常的工作中我通常不會面對。

  在我進一步進行探讨前,我必須聲明這個文章不是我用來回答年輕的程式員們的問題的文章。不,那樣的文章還是等其他的場合吧。而且我也許會起個陳詞濫調又莫測高深的名字比如:“給年輕的開發者們的一些意見”。我的意思是,這樣的題目是不是聽上去真的既無聊又自大?我對着鏡子嚴肅地說:“拜托你還是冷靜點吧。”不過鏡子裡的那個家夥也許最終還是會這麼來一篇的,沒辦法…

  隻是,這篇不是那樣的文章。相反,這篇與好為人師的話題很不相幹,因為我很擅長一件事,那就是跑題。

  在聊到關于開源軟體的話題時,我很自然地想到了我參與的第一個開源項目 – RSS Bandit (w00t w00t!) RSS Bandit是一個由Dare Obasanjo和Torsten Rendelmann開發的一流的RSS聚合軟體。我那時候才剛剛開始接觸部落格之類的概念,然後一下子就被Dare的直爽而又有深度的部落格以及他的可愛的孩子,RSS Bandit(他現在有一個真正的孩子了,祝賀你,老兄)吸引住了。

  那時候我還沒怎麼做過Windows用戶端的程式開發。我主要是用老版本的ASP以及早期的ASP.NET在開發網絡應用。我于是想通過RSS Bandit來磨練下自己并順便學習一下Winform的開發。Winform這種狀态持續化(stateful)的程式設計模型讓我覺得很新鮮(譯注:因為那時基于HTTP的網絡應用基本都是stateless的,當然後來有了ViewState等等的技術)。這将是很有趣的一個嘗試。

  很多新人程式員接觸一個開源項目時都夢想着自己很立馬開發出引人注目令人驚奇的新功能,由此博得群衆的歡呼喝彩,總統是以以你來命名一個國定假日,而且你所有的敵人都立刻自慚形穢并把他們的孩子改名跟你姓了。

  但一個真正好的貢獻者會收起他/她的驕傲感然後紮紮實實地從一些小事,甚至是瑣事開始做起。比如很多開源項目都很需要很好的幫助文檔,一部分原因也是因為最吸引眼球的是開發那些新的功能于是沒人有興趣來寫那些個勞什子的文檔了。

  我就是這麼開始的。我先開始寫了一篇文章:getting started with RSS Bandit.  Dare注意到了,于是問我願不願意參與完善文檔的建設,我欣然同意了。他給了我送出的權限(我想我應該是Dare和Torsten後第三個有送出權限的人),于是我很努力地編寫各式的文檔。事實上,很多我當年寫的内容仍然在那裡,比如這個我當年用過的巨自戀的程式截圖。; )

  慢慢地,我得到了越來越多的信任,并被允許做一些bug的修正和一些小的功能塊。我負責的第一個主要的功能是實作可配置的鍵盤快捷鍵,還挺不錯。

  (小小逸事一則。我和這兩位在RSS Bandit上合作了多年,但卻從沒有親自面會過Dare一直到剛剛在Las Vegas舉行的今年度的Mix大會上。真的!而我早先在德國于Torsten見過面。)

  (譯注:我和Phil不同,兩年前加入微軟的時候,我就和Dare有過幾面之緣,也和他的group合作過不短的時間。不過我一直都沒有意識到他就是我用過的第一個聚合閱讀器的作者,直到看到Phil的這篇文章,呵呵)

  我那時真的很喜歡RSS Bandit方面的工作,那幾乎成了我的一個愛好,占去了我不多的業餘時間裡的剩餘空閑。我想你可以說RSS Bandit的工作使我免受了洛杉矶街頭流氓團夥的不良影響,當然我也沒試過去加入那些團夥,而估計他們也不會要我。不過漸漸地,我意識到了一些事。盡管起初的那種學習了解狀态持續化程式設計模型的興奮感猶在眼前……

  我意識到我并不喜歡這種模型。

  事實上,我發現這個模式很陌生也很難掌握。我總是遇到一些奇怪的使我腦筋打結的怪問題,比如使用者單擊了一個按鈕後,此按鈕仍然保留了它之前的狀态。那時我就會想,“為什麼我需要手動清除按鈕的狀态呢?為什麼在使用者進行一個動作之後這個狀态不自行消失呢?”我開始意識到我的問題在于我的思維一直還是遁尋着網絡應用程式員的模式,而不是用戶端應用程式員的模式。

  就與一個用戶端程式開發者轉向網絡程式開發時感覺相似(比如網絡程式中,因為狀态不是持續化(stateless)的,是以你必須在響應每個請求後都重設所有控件的狀态),一個此前專注于網絡程式的開發者會發現用戶端程式的開發是一件很費腦筋的事,因為所有的系統狀态都像那個酒吧裡最漂亮的小妞身邊的那個跟屁蟲一樣 ---- 他就是賴在那裡不從你眼前消失。

  于是我才意識到,從骨子裡來說,我其實是一個網絡應用程式員并且我情願Make web, not war(譯注:這個我實在不想翻譯,譯了也沒意思,呵呵,太搞了,你自己看video吧)。是以大概就是在那個時候,我開始了Subtext項目,因為我内心裡還是更希望做一個網絡的應用。最終,我不再使用RSS Bandit,而是轉向了線上的聚合閱讀工具,就是Google Reader(有點諷刺,呵呵),而其中最主要的原因,就是線上的閱讀工具使我可以随時随地看到我訂閱的内容,并且一直保持最近更新的狀态,而我也不需要在每一台新的電腦上進行同步或者安裝一個程式。

  是以說我雖然更喜歡(或者說也許是更習慣于)網絡應用的狀态非持續化的程式設計模式,我同時也為網絡應用本身的狀态持續化的特性所吸引,也即,我所擁有的資料的狀态不是綁定在任何一台特定的終端上的而是存儲在一個無所不在的網絡平台上,而我又可以随時随地地使用這個平台(當然,網絡應用也有它自身的問題和課題,比如網絡服務當機的問題)

  與此同時,我也會不時地抽空關心一下RSS Bandit的最新進展。它确實也有很多Google Reader所沒有的很酷的功能,比如它可以從聚合器用戶端直接通過Comment API來發表評論,還有它可以訂閱需要身份驗證的聚合。而且我覺得Dare正在努力把RSS Bandit引向一個全新的更有競争力的方向。

  所有我說的這些其實隻是想說明,如果你想成為一個更好的程式員,那就找一個你感興趣的開源項目,然後參與進去(比如這個,:) ,因為也許它就會引導你發現自己的本質是何種類型的開發者。就如我所最終了然的,我從内心深處是一個網絡應用的程式員。

繼續閱讀