這周讀到三篇部落格文章。把它們串在一塊兒讀,對我們的職業發展非常有教育意義。
一篇是
Thoughtworks前員工Ravi Mohan寫的,《
但是
馬老大,商業編程就是無聊》。Martin Fowler在
一篇文章裡說,編寫企業軟體不光是搗騰資料。並不是只有解決演算法問題,操縱硬體,和應用大量數學才有意思。關心顧客(馬丁所謂的客戶親和力),全力讓自己的軟體為客戶帶來商業利益也是挑戰所在,趣味所存。Ravi在文章裡不以為然,認為不管
Martin Fowler怎麼辯白,商業編程無趣是不爭的事實。不信可以看看人心所向。從來只見有天賦的程式員屁顛屁顛地去開發編譯器,作業系統,TCP/IP stack, 大規模並行系統,高效能伺服器,遊戲引擎等系統級軟體。哪怕優秀的商業軟體程式員也無限渴望去開發系統軟體。相反,從來沒見那個能靠系統開發軟體掙錢的牛程無限嚮往開發商業軟體。這好比柏林圍牆沒倒前,只見東德人拚死衝到西德去,沒見有什麼西德人拚死要到東德去的(憤青們就不用和我爭論東德怎麼好了哈。Ravi自己的例子而已。東德好不好關我P事)。Ravi還說,哪怕
Thoughtworks內部員工也無限嚮往系統編程。每次Thoughtworks討論把生意擴充到嵌入式編程和非其它非企業計算領域時,Thoughtworks的員工們都士氣高漲。然後Ravi引了老憤青Paul Graham的話,
號稱集中精力攻克困難但定義清晰的問題完全是出於自我保護的需要,因為成天解決瑣碎問題不能讓人學到任何東西,只能讓人變蠢。做系統編程給人的滿足感比做瑣碎的商業編程大多了。Ravi進一步談到Martin Fowler其實也承認商業軟體開發遇到的問題太過隨意,很多都是為了滿足客戶莫名其妙的要求,不會帶給程式員成長的機會。他尤其贊同Martin說的“
商業編程的真正挑戰在於找到軟體中能給客戶的生意帶來切實利益的東西。要做到這點,我們需要紮實的行業知識和技術功底。”。可惜的是,大多數商業軟體程式員處於尷尬的境地:論行業知識不如主題專家。論編程技術不如真正的hacker(駭客這個詞已經等同於cracker了,所以我還是用原文)。當然,這種尷尬情況在其它編程領域也存在,但癥狀沒有那麼嚴重。搞笑的是,Ravi說其實Martin算是商業程式員裡比較幸運的,總有機會和牛人們合作,找出他的代碼到底有什麼商業價值,而這和普通的“編碼人”有本質區別。這也是為什麼外包的工作如此無趣的原因:商業方面的分析已經定了。編碼的架構已經定了。承接外包項目的程式員發揮餘地實在有限,更不用說趣味二字了。作者的要點是,要想讓自己的工作變得有趣有意義,要麼就下大力氣變成業務專家。要麼就變成可以玩兒轉系統的編程高手。其實系統編程高手也是業務專家。只不過他們的業務領域恰好和技術領域重合。 第二篇文章是
Reg Braithwaite的一篇文章,《
商業編程沒有那麼難?》。這篇文章同時引了Reganwald另外一篇短文,《
怎麼讓編程變得困難》。Reg在兩篇文章裡都談到了同樣的一個觀點:商業編程從表面上看來都是廣泛而膚淺的。程式員有大量問題要解決,但沒有什麼問題特別深刻。哪怕你用最新的技術都不足以讓普通的商業編程變得更有意義。用Reg的話來說就是用Ruby On Rails編程好比聆聽Jaco Pastorius,什麼人都能幹。只有在複製Jaco的盛宴時才能真正擷取學習經驗。還是以RoR為例。用RoR遠遠不夠(其實不用也無所謂)。仔細研究RoR的代碼,學習怎麼設計自己的DSL才是正道。在《商業編程沒有那麼難?》裡面,Reg舉了三個例子。一個是從信用卡的使用方式即時判斷被使用的信用卡是否被盜。一個是即時卡車調度問題,能針對路礦和遞送要求最佳化卡車路線和發車時間表。還有一個是銷售輔助系統,能學習潛在客戶的特質,協助銷售決定是否跟進。嗯,兩個模式識別和學習問題,一個調度和網路流最佳化問題。都是非常有挑戰性的問題。都可以讓一個普通的商業項目變得趣味十足(當然也能讓我們的壓力陡增)。當然,如果你對每月一張固定的工資單感到滿意,知道自己的工作馬上就要外包給西貢的大學生也能安然入睡,就不用自找麻煩了。作者的要點就是:挑戰不是別人給的,而是在勃勃雄心驅使下,你自己找的。也許以後做每個項目時,我們應該給自己找點有挑戰性的問題,激發自己的潛力。不然做的項目再多,也不過浪費人生。 第三篇文章是XML發明人
Tim Bray的一篇
短文。在Tim的
努力下,JRuby的兩個主程加入了Sun。新聞公布後Tim收到幾乎所有JVM語言作者的詢問,問為啥子Sun獨選了JRuby那倆哥們,能不能給其它JVM語言也提供支援。於是Tim談了JRuby受到重視的原因。首先,沒人要求,沒人給錢的情況下,這倆老大投入大量精力,運用各種技術把半死的JRuby項目盤活了。其次,JRuby背後有活躍的社區(大半因為Rails的風潮)。第三,他們善於交流,到處做報告,做讓人印象深刻的示範,展示項目進展。第四,他們不斷髮放高品質的代碼。每個版本都較上個版本有長足進步。也就是說,他們證明了自己的能力,展示了自己的領導才能,更重要的是他們不斷交出優秀的作品。職業培訓裡常說要想事業順利,要做到兩點,搞出事(make things happen),和搞定事(make things done)。JRuby是個很好的例子。 文章的教育意義很明顯,俺就不用在羅嗦了吧?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1236675