- 讀紅巖有感 推薦度:
- 讀《簡愛》有感 推薦度:
- 讀童年有感 推薦度:
- 讀《廉政鏡鑒》有感 推薦度:
- 讀《動物莊園》有感 推薦度:
- 相關(guān)推薦
讀HackersandPainters有感
人類世界還沒有充分領(lǐng)會到程序員的美學(xué),但是Paul Graham卻以生動的文筆與幽默的語言,和著犀利的思想,將這種美帶到了我們面前,超越了時代,Hackers and Painters讀后感。
正是如此。不管你是一個做做紙飛機的業(yè)余愛好者,還是一個在軟件工程的體制內(nèi)謀生的專業(yè)程序員,究其根本,都是從事著創(chuàng)造程序的職業(yè)。我說創(chuàng)造,因為寫程序是需要靈感,需要極大的熱情的--這一點和畫家無異--雖說計算機是精確的、死板的、有條不紊的,但是什么是程序呢?
程序就是告訴別人一個算法中究竟有什么奧義,順帶告訴計算機怎么執(zhí)行看到這種解釋的那一瞬間,我就被這種美給折服了。多么原始而狂放的表現(xiàn)形式!告訴計算機如何執(zhí)行?這種工作交給老實巴交的編譯器大媽(Aunt compiler,虧他想得出來啊…)就好了。這樣解釋的話,程序員不是和畫家很像嗎?所以我就在想,"體制內(nèi)的廢人們在做什么呢?"每天上班打開TFS,干掉屬于自己的幾個Work Items,然后下班,離開"過早設(shè)計"的噩夢。在PG的體系里,他討厭一切的靜態(tài)類型的編程語言,聲稱你用那些語言寫程序的時候,就像"正襟危坐,努力挑選著詞匯想要不激怒那些死板的編譯器"一樣--PG認(rèn)為靜態(tài)類型的語言簡直和學(xué)校里教你如何編程(例如先在紙上寫下來)形成了完美的呼應(yīng),而這樣通常不能產(chǎn)生好的程序,因為他認(rèn)為程序是用來創(chuàng)造思想的,而不是表達一種已經(jīng)存在的思想(這一點我同意,但是為什么他對C語言有那么深的成見?只能說他沒有理解到如何用C來表達思想,或者說叫"隔行如隔山"吧,真是受不了這一批互聯(lián)網(wǎng)時代的腳本小哥們…)--他推崇動態(tài)語言,認(rèn)為可以涂涂改改的鉛筆才是表達思想的最好工具。計算機是死板的,但是操縱計算機的人不能死板地握住鋼筆心里沒底。
也許有人會說,這種方法論完全不適合于"團隊項目",缺少"溝通",但是PG的"不能說的話"讓我明白,有的時候,必要的詞只是一些標(biāo)簽而已,為了在特定的時代攻擊特定的人,人類總是喜歡發(fā)明禁忌的標(biāo)簽--其實他們只是想表達"我不同意"而已--通常的情況下,發(fā)動這樣的言論的人往往處于極權(quán)統(tǒng)治的上層。
PG的團隊,就在他的這種方法的指導(dǎo)下成功了。當(dāng)然,這里所指的合作與溝通,是在嚴(yán)格限定了個人職責(zé),將工程劃分為嚴(yán)格的模塊后才形成的--幾個人一起維護同一份代碼,只會讓這份代碼變成骯臟不堪的雜物堆放間,讀后感《Hackers and Painters讀后感》。只要接口規(guī)定好,不同模塊即使是采用完全不同的語言與通信機制也沒關(guān)系的呀--大概這就是新時代的特點--在互聯(lián)網(wǎng)上寫程序,真的很靈活。
上軟件工程課最大的收獲之一,就是讓我明白了每個企業(yè)都有自己的文化,相互之間有時還水火不容。老師將微軟的文化展現(xiàn)給我們,供我們學(xué)習(xí)參考,讓我們獲益匪淺;但是我們也不能一味地只是獨尊一家之言,每種文化背后都有成功的故事,這種時候好心的成功者就會跳出來謙虛地解釋,他是如何做得不比別人糟糕的。PG這個憤青,在書中對微軟實施了各種諷刺與攻擊,說微軟太笨重,太迂腐(例如"我被告知微軟的員工被建議不要參與開源項目,即使是休息時間也不行。但是大多數(shù)最好的黑客都在參與開源項目。所以實際上這個政策的作用就是使微軟雇不到一流的程序員")。但是書里面也承認(rèn)即使富有創(chuàng)新意識,大膽無畏,一個小公司也是無法與這樣的大公司抗衡的--因為即使你能打得過國王,赤手空拳沖進他的城堡與他一對一決斗也是完全不可能的事情--城堡里的人甚至根本就不會意識到挑戰(zhàn)者的存在--大概這就是大公司的生存之道吧,走增量路線,在自己的地盤上拼命修建防御工事以提防敵人入侵。然而PG也指出了小型起步項目的生存方式--去那些還沒有人修建防御工事的、全新的領(lǐng)域(這種說法和鄒老師課上講的方法完全吻合),在那些地方迅速地成功。
何為迅速?開發(fā)周期是一個重要的因素。PG指出,在互聯(lián)網(wǎng)的時代,"版本號"已經(jīng)漸漸消亡,軟件的更迭升級更像是一個平滑滾動的過程--離開了桌面軟件的"災(zāi)難式分發(fā)方式"(我還依稀記得那張Abelton Live的正版光盤被劃傷的時候我的心情是多么糟糕…),便離開了傳統(tǒng)的'開發(fā)周期--一天升級三四次都沒有問題。關(guān)于Bug,處理的方法也和從前不盡相同--這里特別提一下蘋果的丑事--在新版操作系統(tǒng)發(fā)布的時候,CD/DVD操作功能還沒有完成--他們就這樣把新的操作系統(tǒng)賣出去了!后來用戶不得不自己充當(dāng)修理工的角色,以打補丁的形式補上這個功能…
傳統(tǒng)的方法是--在每一次版本更迭中,加入大量的新Features,然后再把代碼交給QA進行測試。但是這樣到最后頂多也就是得到一個"統(tǒng)計學(xué)上合格"的版本。
有時明明知道某個功能無法使用,但是新的軟件還是照樣被分發(fā)給用戶。
但是在互聯(lián)網(wǎng)上情況就不一樣了--既然不能用,掛出一個頁面來干什么呢?另有一說,說互聯(lián)網(wǎng)時代的最大優(yōu)勢在于用戶全都是Beta版的測試小白,開發(fā)者們再也不用看著一堆Core Dump來猜測用戶到底都干了些什么了。確實,即使有Bug又怎么樣?Bug會在無知用戶的嚴(yán)峻考驗下迅速地暴露出來,迅速地被網(wǎng)站維護人員感知,再迅速地被開發(fā)者消滅掉--所以大部分用戶所看到的軟件都給人一種"毫無漏洞"的感覺--既敏捷,又不失嚴(yán)謹(jǐn)--至少看上去是這樣的--不是很好嗎?這種新時代的開發(fā)周期模式,確實值得"啊~在學(xué)校只學(xué)了C語言啊~什么都不會啊~"這樣的孩子們好好反思--是時候了解一些能跟上時代的東西了,不要試圖以80年代的方法論甚至技術(shù)來賺10年代的錢。
讀完P(guān)G的書,獲益匪淺。黑客的桀驁不遜,小團隊的靈活敏捷,美國式的自由精神,都值得我們好好思考與學(xué)習(xí)。