如何使用搜索技巧來成為一名高效的程序員
對(duì)于缺乏編程知識(shí)的人來說,完全有可能編寫一個(gè)網(wǎng)頁或小程序。如果在用Google搜索相關(guān)示例時(shí)幸運(yùn)的話,可以搜到現(xiàn)成的代碼。即使是經(jīng)驗(yàn)豐富的程序員,通常也會(huì)為了節(jié)省時(shí)間和精力而在網(wǎng)上搜索解決方案。
如果不借助搜索技術(shù)、網(wǎng)絡(luò)及集體智慧,現(xiàn)代化高效編程是難以想象的。因此,搜索技巧對(duì)高效程序員變得愈發(fā)重要。
現(xiàn)在,我們不需要了解和記住如何解決眾多的編程問題,可以采用搜索技術(shù)。我們正變得更加高效、高生產(chǎn)力,并能夠解決更多的問題。但這是否意味著在構(gòu)建軟件時(shí),擁有好的搜索技巧就足夠了呢?本文將討論,搜索技巧在程序員知識(shí)的形成過程中的作用,以及如何高效使用搜索技巧。
知識(shí)的類型及它在程序員大腦中如何成長。
有三類知識(shí):
概念知識(shí)(為什么、是什么、如果—— 語義上的)
理解軟件系統(tǒng)構(gòu)建過程中的概念、原理、關(guān)系及主要方法。根據(jù)這類知識(shí),能夠找出體系結(jié)構(gòu)或代碼必須按特定方式設(shè)計(jì)的原因,以及從中選擇***設(shè)計(jì)方案的備選方案和邏輯是什么。概念知識(shí),不是指用特定編程語言解決特定問題,而是對(duì)問題的長遠(yuǎn)看法和理解。
1、用途:對(duì)復(fù)雜的開放式問題尋找新的解決方案,并創(chuàng)建穩(wěn)健的軟件系統(tǒng)。
2、收獲:學(xué)習(xí)計(jì)算機(jī)科學(xué)、體系結(jié)構(gòu)以及編程概念,在實(shí)際實(shí)現(xiàn)和經(jīng)驗(yàn)的基礎(chǔ)上,構(gòu)建自己的理論。
實(shí)踐性知識(shí)(如何做 —— 過程中的)
關(guān)于如何解決特定編程問題的知識(shí)。這類知識(shí)不需要深入理解實(shí)現(xiàn)方法選擇過程中隱含的概念及基本原理。搜索技術(shù)在這里最重要,因?yàn)閷?duì)有限的編程語言問題所采取的特定解決方案,搜索能相對(duì)容易的加以共享并說明。
1、用途:用已證實(shí)的和已知的解決方案快速解決問題,而不是每次都重新發(fā)明一種新的方法。
2、收獲:搜索現(xiàn)有的解決方案,通過例子學(xué)習(xí)或提出自己的解決方案并以后對(duì)其重利用。
隱性知識(shí)(專業(yè)知識(shí)、經(jīng)驗(yàn)及直覺)
基于軟件系統(tǒng)實(shí)現(xiàn)過程中所積累的個(gè)人經(jīng)驗(yàn),在大腦中形成的內(nèi)在知識(shí)。通過強(qiáng)大的大腦功能,隱性知識(shí)可以綜合并協(xié)調(diào)其他兩種知識(shí)。這類知識(shí)很難傳授,因?yàn)樗拇蟛糠侄即鎯?chǔ)在我們的潛意識(shí)中。在特定環(huán)境下,它和直覺一同發(fā)揮作用,能夠在經(jīng)驗(yàn)、對(duì)概念性和實(shí)踐性知識(shí)的反饋和評(píng)估的基礎(chǔ)上,制定***決策。
1、用途:利用自己的專長、經(jīng)驗(yàn)及直覺來實(shí)現(xiàn)***解決方案。
2、收獲:構(gòu)建軟件并從結(jié)果中學(xué)習(xí)知識(shí)。
設(shè)計(jì)模式(還有架構(gòu)、領(lǐng)域及其他)是不同類型知識(shí)相結(jié)合的有趣的例子:“如何做”的例子,這些例子中隱含的概念及實(shí)現(xiàn)過程中積累的經(jīng)驗(yàn)。這種知識(shí)的表現(xiàn)方式是模式成功及廣泛應(yīng)用的原因之一。
隨著越來越多的可供使用的實(shí)踐性解決方案和示例出現(xiàn)在網(wǎng)絡(luò)上,人們大腦中的實(shí)踐性知識(shí)的價(jià)值越來越小。我們不需要記住實(shí)踐性知識(shí)?,F(xiàn)在我們能夠處理軟件構(gòu)建過程中幾乎所有可能遇到的常見編程問題。然而,除能夠解決問題的示例或從哪搜索這些示例以外,一名大師級(jí)的程序員還知道更多的知識(shí)。他能夠提出自己的解決方案,制定大部分***決策,并采用***的方式應(yīng)用它們。
此外,很難在網(wǎng)上找到新的、復(fù)雜的、領(lǐng)域性的及特定環(huán)境下的問題的解決方案。而且,對(duì)所有重要的軟件工程,在制定優(yōu)秀解決方案的過程中,都需要高水平的軟件開發(fā)理論、這些理論的應(yīng)用經(jīng)驗(yàn)、對(duì)系統(tǒng)的深入了解、問題空間及環(huán)境等相關(guān)知識(shí)。
因此,在軟件開發(fā)過程中,概念知識(shí)和隱性知識(shí)仍然是非常重要的。在使用搜索技術(shù)時(shí),我們應(yīng)當(dāng)努力擴(kuò)充各種知識(shí),而不是僅僅解決特定問題。隨著解決更高級(jí)問題的能力的提高,你會(huì)取得成功,成為更高效的程序員。
可解決實(shí)際問題的高效搜索
A. 查找
1. 定義——弄清楚要解決什么問題,并以要查找的內(nèi)容為焦點(diǎn)。網(wǎng)絡(luò)上有如此多的有趣的材料,以至于搜索過程能輕易地占掉你全部的工作時(shí)間(和個(gè)人時(shí)間)。
2. 檢索(使用標(biāo)準(zhǔn)的Google、代碼搜索或其他的檢索引擎)—有很多關(guān)于如何高效的使用檢索引擎的建議。
3. 瀏覽結(jié)果(內(nèi)容的質(zhì)量、可信度及專業(yè)技術(shù)的水平;如果資料的可信度過低,無須再看)-> 閱讀 -> 評(píng)估(人力物力、所需工具及函數(shù)庫)
B. 使用
1. 復(fù)制代碼 - 單獨(dú)復(fù)制(針對(duì)這一目的,帶有長釘技術(shù)的顯式單元測試最適合)
2. 清除代碼 - 僅保留最小限度、相關(guān)性代碼,清除解決方案中的其它代碼。
3. 在系統(tǒng)中應(yīng)用代碼。
C. 學(xué)習(xí)
1. 理解——你做了什么及你為什么那樣做——從代碼和實(shí)現(xiàn)中學(xué)習(xí)。
2. 擴(kuò)充知識(shí)——
a. 實(shí)踐性知識(shí):解決問題的特定方法、技巧及風(fēng)格;
b. 概念知識(shí):學(xué)習(xí)新概念、提煉現(xiàn)有的并構(gòu)建自己的概念;
c. 隱性知識(shí):明智地使用并學(xué)習(xí)搜索到的解決方案,經(jīng)驗(yàn)會(huì)自然而然地得到增長。
3. 收集(鏈接、意見、參考文獻(xiàn)、閱讀清單)—任何對(duì)你今后搜索、發(fā)現(xiàn)及學(xué)習(xí)有用的有趣信息。為這些目標(biāo)積累知識(shí)。
你還有其他高效搜索代碼的訣竅嗎?歡迎在評(píng)論或微博中和大家分享。
原文鏈接:http://www.jobbole.com/entry.php/371
【編輯推薦】