如何使用搜尋技巧來成為一名高效的程式設計師

伯樂發表於2013-04-13

編譯:伯樂線上 –牛冬梅

沒有人是完全獨立的孤島,每個人都是整體的一部分。—— 約翰·多恩

對於缺乏程式設計知識的人來說,完全有可能編寫一個網頁或小程式。如果在用Google搜尋相關示例時幸運的話,可以搜到現成的程式碼。即使是經驗豐富的程式設計師,通常也會為了節省時間和精力而在網上搜尋解決方案。

如果不借助搜尋技術、網路及集體智慧,現代化高效程式設計是難以想象的。因此,搜尋技巧對高效程式設計師變得愈發重要。

現在,我們不需要了解和記住如何解決眾多的程式設計問題,可以採用搜尋技術。我們正變得更加高效、高生產力,並能夠解決更多的問題。但這是否意味著在構建軟體時,擁有好的搜尋技巧就足夠了呢?本文將討論,搜尋技巧在程式設計師知識的形成過程中的作用,以及如何高效使用搜尋技巧。

知識的型別及它在程式設計師大腦中如何成長。

有三類知識:

概念知識(為什麼、是什麼、如果—— 語義上的)——理解軟體系統構建過程中的概念、原理、關係及主要方法。根據這類知識,能夠找出體系結構或程式碼必須按特定方式設計的原因,以及從中選擇最佳設計方案的備選方案和邏輯是什麼。概念知識,不是指用特定程式語言解決特定問題,而是對問題的長遠看法和理解。

●用途:對複雜的開放式問題尋找新的解決方案,並建立穩健的軟體系統。

●收穫:學習電腦科學、體系結構以及程式設計概念,在實際實現和經驗的基礎上,構建自己的理論。

 

實踐性知識(如何做 —— 過程中的)—— 關於如何解決特定程式設計問題的知識。這類知識不需要深入理解實現方法選擇過程中隱含的概念及基本原理。搜尋技術在這裡最重要,因為對有限的程式語言問題所採取的特定解決方案,搜尋能相對容易的加以共享並說明。

●用途:用已證實的和已知的解決方案快速解決問題,而不是每次都重新發明一種新的方法。

●收穫:搜尋現有的解決方案,通過例子學習或提出自己的解決方案並以後對其重利用。

 

隱性知識(專業知識、經驗及直覺)——基於軟體系統實現過程中所積累的個人經驗,在大腦中形成的內在知識。通過強大的大腦功能,隱性知識可以綜合並協調其他兩種知識。這類知識很難傳授,因為它的大部分都儲存在我們的潛意識中。在特定環境下,它和直覺一同發揮作用,能夠在經驗、對概念性和實踐性知識的反饋和評估的基礎上,制定最佳決策。

●用途:利用自己的專長、經驗及直覺來實現最佳解決方案。

●收穫:構建軟體並從結果中學習知識。

設計模式(還有架構、領域及其他)是不同型別知識相結合的有趣的例子:“如何做”的例子,這些例子中隱含的概念及實現過程中積累的經驗。這種知識的表現方式是模式成功及廣泛應用的原因之一。

隨著越來越多的可供使用的實踐性解決方案和示例出現在網路上,人們大腦中的實踐性知識的價值越來越小。我們不需要記住實踐性知識。現在我們能夠處理軟體構建過程中幾乎所有可能遇到的常見程式設計問題。然而,除能夠解決問題的示例或從哪搜尋這些示例以外,一名大師級的程式設計師還知道更多的知識。他能夠提出自己的解決方案,制定大部分最佳決策,並採用最好的方式應用它們。此外,很難在網上找到新的、複雜的、領域性的及特定環境下的問題的解決方案。而且,對所有重要的軟體工程,在制定優秀解決方案的過程中,都需要高水平的軟體開發理論、這些理論的應用經驗、對系統的深入瞭解、問題空間及環境等相關知識。

因此,在軟體開發過程中,概念知識和隱性知識仍然是非常重要的。在使用搜尋技術時,我們應當努力擴充各種知識,而不是僅僅解決特定問題。隨著解決更高階問題的能力的提高,你會取得成功,成為更高效的程式設計師。

可解決實際問題的高效搜尋

A. 查詢

1. 定義——弄清楚要解決什麼問題,並以要查詢的內容為焦點。網路上有如此多的有趣的材料,以至於搜尋過程能輕易地佔掉你全部的工作時間(和個人時間)。

2. 檢索(使用標準的Google、程式碼搜尋或其他的檢索引擎)—有很多關於如何高效的使用檢索引擎的建議。

3. 瀏覽結果(內容的質量、可信度及專業技術的水平;如果資料的可信度過低,無須再看)-> 閱讀 -> 評估(人力物力、所需工具及函式庫)

 

B. 使用

1. 複製程式碼 – 單獨複製(針對這一目的,帶有長釘技術的顯式單元測試最適合)

2. 清除程式碼 – 僅保留最小限度、相關性程式碼,清除解決方案中的其它程式碼。

3. 在系統中應用程式碼。

 

C. 學習

1. 理解——你做了什麼及你為什麼那樣做——從程式碼和實現中學習。

2. 擴充知識——
a. 實踐性知識:解決問題的特定方法、技巧及風格;
b. 概念知識:學習新概念、提煉現有的並構建自己的概念;
c. 隱性知識:明智地使用並學習搜尋到的解決方案,經驗會自然而然地得到增長。

3. 收集(連結、意見、參考文獻、閱讀清單)—任何對你今後搜尋、發現及學習有用的有趣資訊。為這些目標積累知識。

你還有其他高效搜尋程式碼的訣竅嗎?歡迎在評論或微博中和大家分享。

 

 

相關文章