專家看台 程式設計師的成長從開竅開始

2021-04-24 04:01:15 字數 2279 閱讀 8951

最近,有兩位google maps api的初學者向我請教他們按照最簡單例子寫的程式為什麼不能正常的執行。

其中一位用gtalk跟我交流,我仔細了看了他的**,沒看出問題,把**儲存在本地,開啟firefox的錯誤控制台,用firefox開啟他的頁面。出錯的那一行被清晰的顯示出來,我再仔細端詳那句話,原來有兩個應該是英文逗號的地方,寫上了中文逗號。

另一位,在我的論壇跟我交流他的google maps api中遇到的問題,我看他**的時候也沒有馬上發現問題。然而,同樣在用firefox開啟後,問題很明顯的找到了,原來是乙個方法openinfowindow被他寫成openinfowindow了。

在我幫助別人解決的程式除錯問題中,這是非常常見的。人人都可能打出中文逗號,人人都可能把大小寫寫錯。但是在我幫助他們解決問題以後,他們總是感慨的說,謝謝我解決了這個問題,這個問題困擾了他們幾個小時,甚至是幾天。

這其實並不是只有初學者才會遇到的問題,我還幫助過些有非常豐富經驗的工程師解決問題,有時候問題僅僅出自某個引數沒有傳遞進來,或者是拼接字元 串的時候少些了乙個冒號,或者是拼接位址的時候漏掉了http:。我甚至幫助一些人除錯一些我根本不懂的語言的程式,因為多半出現的問題,都和語言特性無 關,不是程式設計師寫錯了字元,就是寫錯了邏輯,或者是錯誤理解了乙個函式。

出問題是正常的,寫程式是乙個複雜的邊思考邊打字的過程,筆誤和一時糊塗都是難以避免的。程式設計師一般把這種問題叫做低階問題,因為這類問題跟你的智商完全無關,任何人都可能犯。

但是,問題在於,有時候即使是很優秀的程式設計師,也會被乙個低階錯誤困擾,可能會幾天都解決不了。所以,關鍵在於,如何找到問題。

遇到問題的時候:

1,不要怨天怨地。出了問題,當然有可能是系統的bug,api的問題,但是那些機率往往比你犯低階錯誤的機率要低多了,先從自己身上找原因,是不是自己寫錯了。

2,要掌握工具。最低限度你要會寫log,最好是log和偵錯程式結合。好 的工具可以大大的提高效率。以前有人跟我說,dll不能除錯,我發現可以;有人說多執行緒不能除錯,我發現可以;有人說com不能除錯,我發現可以;有人說 ie外掛程式不能除錯,我發現可以;有人說oe外掛程式不能除錯,我發現也可以。當然,你確實會遇到不能除錯的時候,當年我們做東芝晶元的嵌入程式,乙個組都沒有 乙個**器和偵錯程式,但是至少可以用log嘛,無非是麻煩點。

3,分析問題要有邏輯。遇到問題可以先把所有的可能性都列出來,然後乙個乙個分析,肯定能找到原因的。

4,要學會隔離問題。問題涉及到的**越多,越難以理解,問題越難以解決。遇到這樣的情況,可以利用log或者偵錯程式,一行**一行**的給它們洗清嫌疑,這樣很快你就可以找到出問題的地方。如果**特別長,程式特別複雜,可以用二分法來做,效率很高。

要想不遇到問題,寫**的時候:

2,函式體功能塊不要過長。我認為我的智商並不高,我很難接受乙個程式的乙個函式體或者乙個功能塊超越3屏(當然邏輯真的有那麼複雜除外,你會發 現越是簡單的邏輯越是容易被人寫的冗長)。很多人對物件導向耳熟能詳,對封裝繼承看起來駕輕就熟。但是動不動就寫出來個函式體超長的程式。這就像寫本書從 頭到尾不點句號一樣,會累死讀者的。自己看的時候,估計也會被累的喘不過來氣。這是我對基礎教育的微詞所在,他們連教會學生寫函式都沒教會,雖然表面上他 們連物件導向這麼高深的東西都教。

3,縮排要對。這點很重要,雖然大部分語言不是像python那樣用縮進來決定邏輯塊的位置,但是人看到縮排的時候,總是會以為這些縮排位置跟邏 輯相關。尤其是在有大量的ifelse或者for迴圈等等的巢狀邏輯的時候,如果縮排錯了,可能會直接讓人把程式的邏輯讀錯。所以我拿到別人的**,第一 件事情就是整理縮排。我見過一些比較優秀的頁面工程師,他們會在div結束的位置用注釋寫上這個div的id,這樣層級關係就一目了然了。

4,不斷重構。隨著程式的不斷修改,有些部分會不斷的增長,原來看著清晰的架構可能因為問題的複雜而慢慢模糊,也可能被修正bug的權宜之計弄的 面目全非。不信你找乙個經過多次修改的程式看看,是不是滿目瘡痍,是不是都很難認出是你自己的作品了。這在多人參與的專案中更加嚴重,每個人有不同的** 風格,經過多次雜交後,你肯定認不出你的**是騾子是馬,還是四不像了。隨著程式的慢慢成長,原來有些函式體會慢慢膨脹,需要拆分;有些原來簡單的功能塊 四處都需要,應該被提煉成函式或者方法,等等。現在不重構,未來等到**複雜到無法控制的時候,重構的工作就會變得更加困難。我見過最強的案例是,乙個幾 千行的電子辭典配套聯機軟體,經過無數次的改版,變成了乙個幾乎無法維護的主窗體的cpp有1萬8千行的怪物。最後經過複雜的重構,才變成乙個出新版本只 需要新增乙個驅動程式的可以維護的幾千行的程式。

郝培強:銀杏技術諮詢創始合夥人,網名tinyfool,技術方向是全文檢索,搜尋引擎優化,**架構設計等。 銀杏技術諮詢的主要業務是幫助客戶的**改進技術,提高**效能和反應速度,解決門檻性技術問題,從而提高使用者滿意度。

程式設計師的成長從開竅開始

出問題是正常的,寫程式是乙個複雜的邊思考邊打字的過程,筆誤和一時糊塗都是難以避免的。程式設計師一般把這種問題叫做低階問題,因為這類問題跟你的智商完全無關,任何人都可能犯。但是,問題在於,有時候即使是很優秀的程式設計師,也會被乙個低階錯誤困擾,可能會幾天都解決不了。所以,關鍵在於,如何找到問題。遇到問...

程式設計師的成長從開竅開始

原文 程式設計師的成長從開竅開始 最近,有兩位google maps api的初學者向我請教他們按照最簡單例子寫的程式為什麼不能正常的執行。其中一位用gtalk跟我交流,我仔細了看了他的 沒看出問題,把 儲存在本地,開啟firefox的錯誤控制台,用firefox開啟他的頁面。出錯的那一行被清晰的顯...

程式設計師的開始!

程式設計師的資料夾習慣資料夾的檢視方式是 詳細資訊列表 怎麼設定?1 可以在資料夾空白地方 右單擊 檢視 詳細資訊列表 2 在資料夾的選單欄上找到 工具 資料夾選項 檢視 應用到資料夾 確定計算機 電腦 計算機軟體,計算機應用 伺服器 乙個提供服務裝置,提供訪問服務 反饋的服務,該裝置在處理能力 穩...