《卓有成效程式設計師》第一章

hzbook2008發表於2009-03-19

第一章. 簡介


目錄

為什麼要寫一本關於程式設計師生產力的書?

瀏覽器的地址補全

本書包含哪些內容?

第一部分:機制 (生產力法則)

第二部分:實踐 (思想)

如何讀此書?



 SHAPE 《卓有成效程式設計師》第一章


生產率是指在一定的時間內所完成的有效工作量。在同樣的時間內,生產率高的人能比生產率低的人完成更多的有效工作。本書就是講述如何在開發軟體的過程中變得更加高效同時,本書的講述將會跨語言和作業系統:很多技巧的講述都會伴隨多種程式語言的例子,並且跨越三種主要的作業系統,Windows(多個版本),Mac OS X以及 *-nix (Unix或者Linux)

本書討論的是程式設計師個體的生產力,而不是團隊的生產力問題,所以它不會涉及方法論(好吧,可能總會在這裡或那裡談論到一些,但肯定不會深入討論)。同時,本書也不會討論生產力對整個團隊的影響。我的使命,是讓作為個體的程式設計師透過掌握恰當的工具和思想變得更加高效。



為什麼要寫一本關於程式設計師生產力的書?


我是ThoughtWorks的一名員工。作為一家跨國諮詢公司,ThoughtWorks擁有大約1000名僱員,分公司遍佈全球六個國家。因為諮詢工作需要長時間的旅行(特別是在美國),我們公司的員工整體而言相對年輕。記得有一次,在一次公司組織的郊遊活動(當然還有免費的飲料)中,我和一個人力資源部的同事閒談起來。她問我有多大年紀,我告訴了她,她立即恭維地對我說道:哇,你已經老到足夠可以豐富我們公司多樣性了這激起了我的一些思考:原來我已經在軟體開發領域幹了很多年了(莫名的傷感在我的那個年代,計算機甚至還是由煤油驅動的呢)。這些年來,我觀察到一個有趣的現象:軟體開發人員正在變得越來越低效,而不是更加高效。在古老的時代(對於計算機的時代而言,那是20年之前),讓計算機跑起來都是一件非常困難的事情,更不要說編寫程式這些事了。你得是一個足夠聰明的開發人員,才能讓那難以駕馭的機器變得對你有用。如此殘酷的現實,逼迫當時一些非常聰明的人開發出了各種各樣的方法來和難搞的計算機互動。

正是因為這些程式設計師的努力,計算機慢慢地開始變得易用。層出不窮的創新讓計算機使用者的抱怨不再那麼多。這些聰明的傢伙開始為他們所取得的成就慶祝(就像所有其他能讓使用者閉嘴的程式設計師一樣)。然後,一件有趣的事情發生了:對於整整一代程式設計師來說,他們不再需要奇技淫巧,計算機就會乖乖地滿足他們的要求,他們也和普通的計算機使用者一樣,習慣瞭如今易用的計算機。那這有什麼問題呢?畢竟,你不會拒絕提高生產力,對不對?

其實問題的關鍵在於,那些對普通使用者而言能提高其工作效率的東西(比如漂亮的圖形介面,滑鼠,下拉選單等等),對於其他一些人(程式開發者們)來說卻是他們獲得計算機最佳效能的障礙。易用高效在很多時候其實是不相關的。那些在使用圖形介面(好吧,直截了當地說,就是Windows)的過程中長大的程式開發者們,那些老一代聰明人所使用的不僅酷而且高效的技巧一無所知。他們的計算機在大部分時間裡根本不是在,簡直就是在散步。我寫此書,就是為了解決這個問題。

 





瀏覽器的地址補全

 


在這裡舉一個簡單的例子:你每天會訪問多少網站?我們知道大多數網址都以”www.“開頭並以”.com“結束。但很少人知道現在的瀏覽器有一個很方便的快捷鍵:地址補全。地址補全使用熱鍵組合,來為你在瀏覽器位址列中輸入的字串前後分別加上”www.“和”.com“。地址補全功能在不同瀏覽器中的使用會有細微的差別。(注意,地址補全和瀏覽器的自動補全是不同的,現今的瀏覽器也都有自動補全功能。)他們之間的差別在於效率。自動補全功能會到網路中尋找與你輸入的名字相符的站點。如果沒有找到,瀏覽器為它加上字首和字尾,再次嘗試到網路中尋找。如果網速夠快,你可能根本注意不到這個微小的延遲;但這些錯誤的點選累積起來會拖慢整個網路的速度。



Internet Explorer


Internet Explorer (IE)的地址補全功能,使輸入有標準字首和字尾的網址變得更加快捷。使用快捷鍵Ctrl-Enter,瀏覽器中的地址就會分別在前後加上”www.“”.com“


Firefox


indows版的Firefox瀏覽器,它的快捷鍵跟IE一樣。而在Macintosh上,快捷鍵是Apple-EnterFirefox還有一個快捷鍵Alt-Enter,它會給地址加上”.org“字尾,這個快捷鍵在所有支援Firefox的平臺上都一樣。

Firefox還有其他一些似乎很少有人用到,但卻很方便的快捷鍵。比如在Windows下使用快捷鍵Ctrl + <標籤號>或者在OS X下使用快捷鍵:Apple + <標籤號>可以直接跳到某個標籤。

好吧,用上這個快捷鍵,無非在每個頁面上少敲8下鍵盤而已,看起來似乎沒有太多價值。但是,想想看你一天要訪問多少頁面,這每個頁面上的8次擊鍵就會體現出它的價值。這是加速法則的一個很好的例子,我們將會在第2章中詳細介紹這個法則

當然,節省每個頁面上的8次鍵擊,並不是談論這個例子的真正目的。我曾經在所有我認識的開發人員中做過一個非正式的調查,得到的結果是隻有20%的人知道這個快捷鍵。他們都是無可爭議的計算機專家,但他們從來沒有使用這些非常簡單的方法來提高他們的生產力。我的使命,就是改變這樣的現狀




本書包含哪些內容?


 

The Productive Programmer》包含兩部分。第一部分,討論的是生產力的機制,以及一些能使你在軟體開發過程中變得更加高效的工具。第二部分,討論的是一些提高生產力的實踐,以及如何利用你的知識和他人的知識來更快更好地開發軟體。在這兩部分中,你都可能會看到一些你已經瞭解的或者從未接觸的東西。


第一部分:機制(生產力法則)


 

你可以認為此書僅僅是教你如何使用命令列,以及另外一些能讓你變得更加高效的方法的書籍,你確實也可以透過學習這些方法獲得收益。但是,如果你能透過閱讀此書理解為什麼有些方法可以提高生產力,你就擁有了一雙能識別這些方法的慧眼。本書透過創造模式來描述一些東西,從而為這些事物命名:一旦一件東西有了名字,當它被再次看到時就會更容易被認出來。此書的其中一個目標,是定義一系列的生產力法則,來幫助你更好地定義你自己的提高生產力的技術。就像所有的模式一樣,在有了名字之後,它們會被更簡單地識別出來。同樣,知道為什麼一些東西會讓你更加高效,會幫助你更快地識別出其他一些能使你工作得更有效率的東西。

此書會更專注於討論程式設計師的生產力,而不僅僅討論如何更加有效地使用計算機(雖然肯定會有這個副作用)。所以,本書不會涉及很多對於業餘(甚至專業)使用者來說顯而易見的東西(雖然之前的瀏覽器地址補全章節介紹了一個顯而易見的技巧,但那是個例外)。程式設計師是一群特殊的計算機使用者。我們顯然應該比其他使用者更懂得如何讓計算機更加高效地工作,因為我們是最瞭解計算機工作原理的人。本書的大多數內容,講述的是如何透過與計算機互動而使你的工作更加簡單,快速和高效。不過我也會介紹一些唾手可得的提高工作效率的辦法

第一部分的內容涵括了我所創造的,獲取的,以及透過威逼利誘從朋友那裡得到的,或者從書本里讀到的所有能提高生產力的方法。我的初衷是致力於做一個世界上最好的提高生產力的方法大全。我不知道我是否做到了,但不論如何,你會發現我所收集的這些方法不會讓你失望。

當我開始整理這些絕妙的提高生產力的方法時,我注意到一個個模式開始顯現。看著這些技術,我開始為它們分門別類。最終,我建立了一些關於程式設計師生產力的法則“──嘿嘿,坦白地說,我想不出比這更自命不凡的名字了。這些法則包括加速法則, 專注法則, 自動化法則以及規範性法則,它們描述了一些能讓程式設計師更加高效的實踐。

第二章,加速法則,描述瞭如何透過提高速度來變得更加高效。很明顯,如果一個人在完成某件任務時要比另外一個人速度快,那麼在這件事情上,他肯定比另外一個人更加高效。很顯然的一個例子,就是在本書中會經常提到的數目繁多的鍵盤快捷鍵。啟動應用程式,管理剪貼簿,以及搜尋和導航等,都屬於加速法則的範疇

第三章,專注法則,描述瞭如何透過利用工具和環境的因素,來達到超級生產力的狀態。本章討論瞭如何減少環境中(包括物理和心理的環境)混亂,如何有效地去搜尋,以及如何消除干擾。

透過讓計算機為你完成一些額外的工作,當然會使你更加高效。第四章,自動化法則,描述的就是如何讓計算機為你做更多的工作。每天的工作中要做的很多事情其實都可以(而且應該)讓計算機自動為你完成。這個章節還包括了一些如何讓你的計算機為你工作的例子和策略。

canonicality)其實只是給DRY (Don’t Repeat Yourself)法則起的一個漂亮名字,後者第一次被大力推崇是在Andy HuntDave Thomas的《The Pragmatic Programmer(Addison-Wesley)中。DRY法則建議程式設計師去除重複存在的資訊,為每個資訊建立唯一的存放處。《The Pragmatic Programmer》已經很形象地描述了這個法則,在第五章規範性法則中,我會列舉幾個具體的例子。



第二部分:實踐(方法)


 

作為一個諮詢師,我有很多年軟體開發的經驗。相較於經常會在同一個程式碼庫上工作多年的開發人員,諮詢師的優勢是可以接觸很多不同的專案、不同的方法。當然,我們看到的經常是一些火車殘骸(很少有諮詢師會被叫去修復健康的專案)。我們還可以接觸軟體開發的不同階段:從開始就參與構建,或者在中途提供一些建議,或者在一個專案遭受重創之後才去拯救。隨著閱歷增長,即使是最不專心的人,也會鍛煉出察覺對錯的能力。

我在這些年看到了很多對提高生產力有正面或負面影響的事情,在第二部分中,我為他們做了一些提煉。它們基本上無序地打包在一起(雖然你可能會經常驚訝地發現,同一個想法會在不同的地方出現)。我沒有說這些東西應成為如何提高開發效率的最終綱領,它們只是我所觀察到的一些事情的一個列表。對於所有的可能性而言,這只是其中一個很小的子集。



如何讀此書?


 

本書的兩部分是相互獨立的,所以你可以按任何順序去讀。雖然第二部分的內容因為有點類似於故事體,可能會存在一些沒有預見到的相互聯絡,但是大部分的內容還是無序的,你仍舊可以放心地按照你所喜歡的順序去讀。

 

最後,一個小小的警示:如果對一些基本的命令列操作(管道,重定向等)不夠熟悉,你應該先閱讀一下附錄A。第一部分中的很多竅門和技巧需要依賴於一個環境,附錄A會指導你如何去搭建這個環境。我相信對你來說這不會是件難事。


相關文章