1. 程式人生 > >The Pragmatic Programmer:注重實效的程式設計師

The Pragmatic Programmer:注重實效的程式設計師

讀《程式設計師修煉之道:從小工到專家 》馬維達 譯
The Pragmatic Programmer:From Journeyman to Master

《The Pragmatic Programmer》我覺得強調了一個少有的觀點,注重實效,對於追求理想主義,自由主義的程式設計師來說這是很少見的,但讀完之後發現它的確是程式設計師該有的精神。

什麼是實效?
“
這正是注重實效(pragmatism)登場的地方。你不應該侷限於任何特定的技術,而是應該擁有足夠廣博的背景和經驗基礎,
以讓你能在特定情況下選擇好的解決方案。你的背景源自對電腦科學的基本原理的理解,而你的經驗來自廣泛的實際專案。
理論與實踐的結合使你強大起來。
”

來自作者序言

注重實效的程式設計師的特徵
“
如果你是一個注重實效的程式設計師,你就會具有下列特徵中的許多特徵:

	早期的採納者/快速的改編者。你具有技術和技巧上的直覺,你喜愛試驗各種事物。給你一樣新東西,你很快就能把握
	它,並把它與你的知識的其餘部分結合在一起。你的自信出自經驗。

	好奇。你喜歡提問。那很漂亮——你是怎麼做的?你用那個庫時有問題嗎?我聽說的這個BeOS是什麼?符號連結是怎樣
	實現的?你是收集小知識的林鼠(pack rat),每一條小知識都可能會影響今後幾年裡的某項決策。

	批判的思考者。你不會不首先抓住事實而照搬別人的說法。當同事說“因為就該那麼做”或者供應商允諾為你的全部問
	題提供解決方案時,你就會嗅到挑戰的氣息。

	有現實感。你會設法理解你面臨的每個問題的內在本質。這樣的現實主義給了你良好的感知能力:事情有多困難,需要
	多長時間?讓你自己瞭解某個過程會有困難,或是要用一點時間才能完成,能夠給予你堅持不懈的毅力。

	多才多藝。你盡力熟悉廣泛的技術和環境,並且努力工作,以與各種新發展並肩前行。儘管你現在的工作也許只要求你
	成為某方面的專才,你卻總是能夠轉向新的領域和新的挑戰。

我們把最基本的特徵留到了最後。所有注重實效的程式設計師都具有這些特徵。它們基本得足以用提示的方式來陳述:
 
	提示1
 
	Care About Your Craft
	關心你的技藝

   我們覺得,除非你在乎能否漂亮地開發出軟體,否則其他事情都是沒有意義的。

	提示2
 
	Think! About Your Work
	思考!你的工作
”

來自作者序言

我今年以來,幾乎每寫一個專案,都會把它放在GitHub上,一則是讓別人看見,更重要的是它會刺激我時時去更新自己程式碼,因為經常會有issue,使用的技術在不斷更新也會促使自己更新,並且自己東西放在GitHub會經常晃悠在我面前不得不去更新,這是我所期望看到的狀態。持續也是注重實效程式設計師應該做的,持續地做一些小的改進是你取得長足進步的主要原因之一。

該書的作者Andrew Hunt 和David Thomas說,注重實效能讓成為一個更為有效、更為多產的程式設計師。

知識

知識一直在變,知識沒有邊界,需要不斷的學習。作者給我們設定一些目標。

“
關於何時以及增加什麼到你的知識資產中,現在你已經擁有了一些指導方針,那麼什麼是獲得智力資本、從而為你的資產
提供資金的最佳方式呢?這裡有一些建議。
 
	每年至少學習一種新語言。不同語言以不同方式解決相同的問題。通過學習若干不同的方法,可以幫助你拓寬你的思
	維,並避免墨守成規。此外,現在學習許多語言已容易了許多,感謝可從網上自由獲取的軟體財富(參見267頁)。
       
	每季度閱讀一本技術書籍。書店裡擺滿了許多書籍,討論與你當前的專案有關的有趣話題。一旦你養成習慣,就一個
	月讀一本書。在你掌握了你正在使用的技術之後,擴寬範圍,閱讀一些與你的專案無關的書籍。
       
	也要閱讀非技術書籍。記住計算機是由人——你在設法滿足其需要的人——使用的,這十分重要。不要忘了等式中人這一
	邊。
       
	上課。在本地的學院或大學、或是將要來臨的下一次會展上尋找有趣的課程。
       
	參加本地使用者組織。不要只是去聽講,而要主動參與。與世隔絕對你的職業生涯來說可能是致命的;打聽一下你們公司
	以外的人都在做什麼。
       
	試驗不同的環境。如果你只在Windows上工作,就在家玩一玩Unix(可自由獲取的Linux就正好)。如果你只用過makefile
	和編輯器,就試一試IDE,反之亦然。
       
	跟上潮流。訂閱商務雜誌和其他期刊(參見262頁的推薦刊物)。選擇所涵蓋的技術與你當前的專案不同的刊物。
       
	上網。想要了解某種新語言或其他技術的各種特性?要了解其他人的相關經驗,瞭解他們使用的特定行話,等等,新聞
	組是一種很好的方式。上網衝浪,查詢論文、商業站點,以及其他任何你可以找到的資訊來源。
 
持續投入十分重要。一旦你熟悉了某種新語言或新技術,繼續前進。學習另一種。
    
是否在某個專案中使用這些技術,或者是否把它們放入你的簡歷,這並不重要。學習的過程將擴充套件你的思維,使你向著新的
可能性和新的做事方式拓展。思想的“異花授粉”(cross-pollination)十分重要;設法把你學到的東西應用到你當前的
專案中。即使你的專案沒有使用該技術,你或許也能借鑑一些想法。例如,熟悉了面向物件,你就會用不同的方式編寫純C程式。

”

來自 5你的知識資產

搜尋引擎搜到的第一個頁面並不意味事最佳選擇,書店裡最顯著的那本書不一定是本好書,所以作者強調在獲取知識時一個人應該保持一種批判性思維,批判地分析你讀到和聽到的,不要被供應商、媒體炒作、或教條左右。要依照你自己的看法和你的專案的情況去對資訊進行分析。

有人說架構師的工作就是解耦,我想這在一定程度上是正確的,生活不會停步不前,我們需要盡一切努力編寫儘可能寬鬆靈活的程式碼,要不然你的程式碼你的作品將馬上過時。建立靈活程式碼的一個關鍵概念就是解除模型(model)和檢視(view)的耦合,我想說MVC(Model-View-Controller)是一個很偉大的發明。

有一個概念,不要靠巧合程式設計。

“
假定Fred接受了一項程式設計任務。他敲入一些程式碼,進行試驗。程式碼好像能工作。他又敲入一些程式碼,進行試驗,程式碼好像還能工
作。在進行了幾周這樣的編碼之後,程式突然停止了工作,Fred花了數小時設法修正它,卻仍然不知道原因何在。他可能會花上
大量時間四處檢查這段程式碼,卻仍然無法修正它。不管他做什麼,程式碼好像就是不能正確工作。

Fred不知道程式碼為什麼失敗,因為他一開始就不知道它為什麼能工作。

”

來自 31靠巧合程式設計

程式設計師就像一個工匠,需要用到各種工具,工具就是手的延伸。君子性非異也,善假於物也。這是作者強調的觀點。

我僅僅說一下我有限的工具。

在所有的工具中,編輯器是最像手的,我經歷過Word,印象筆記,Xcode,Atom,比較了emacs,vim等,最終選用了sublime text,word太複雜,印象筆記在我看來經過網路的東西都是不安全的,xcode根本不是編輯器,atom根sublime最像,但是太慢了,emacs,vim對於我來說不會用,最終選用了利於工程管理,簡單,擴充套件性強的sublime text。

Markdown同樣是一個好的工具。

homebrew則是mac平臺的強大的包管理工具,安裝軟體的神器。

翻牆工具是必備的,一直用紅杏。

Git的工具,SourceTree。

Xcode ,主力Mac平臺IDE。

最後的推薦只能說是狗尾續貂,希望你成為更好的程式設計師。