自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員的成長(zhǎng)從開(kāi)竅開(kāi)始

企業(yè)動(dòng)態(tài)
有時(shí)候即使是很優(yōu)秀的程序員,也會(huì)被一個(gè)低級(jí)錯(cuò)誤困擾,可能會(huì)幾天都解決不了。所以,關(guān)鍵在于,如何找到問(wèn)題。

最近,有兩位Google Maps API的初學(xué)者向我請(qǐng)教他們按照最簡(jiǎn)單例子寫的程序?yàn)槭裁床荒苷5倪\(yùn)行。

其中一位用GTalk跟我交流,我仔細(xì)了看了他的代碼,沒(méi)看出問(wèn)題,把代碼保存在本地,打開(kāi)Firefox的錯(cuò)誤控制臺(tái),用Firefox打開(kāi)他的頁(yè)面。出錯(cuò)的那一行被清晰的顯示出來(lái),我再仔細(xì)端詳那句話,原來(lái)有兩個(gè)應(yīng)該是英文逗號(hào)的地方,寫上了中文逗號(hào)。

另一位,在我的論壇跟我交流他的Google Maps API中遇到的問(wèn)題,我看他代碼的時(shí)候也沒(méi)有馬上發(fā)現(xiàn)問(wèn)題。然而,同樣在用Firefox打開(kāi)后,問(wèn)題很明顯的找到了,原來(lái)是一個(gè)方法openInfoWindow被他寫成OpenInfoWindow了。

在我?guī)椭鷦e人解決的程序調(diào)試問(wèn)題中,這是非常常見(jiàn)的。人人都可能打出中文逗號(hào),人人都可能把大小寫寫錯(cuò)。但是在我?guī)椭麄兘鉀Q問(wèn)題以后,他們總是感慨的說(shuō),謝謝我解決了這個(gè)問(wèn)題,這個(gè)問(wèn)題困擾了他們幾個(gè)小時(shí),甚至是幾天。

這其實(shí)并不是只有初學(xué)者才會(huì)遇到的問(wèn)題,我還幫助過(guò)些有非常豐富經(jīng)驗(yàn)的工程師解決問(wèn)題,有時(shí)候問(wèn)題僅僅出自某個(gè)參數(shù)沒(méi)有傳遞進(jìn)來(lái),或者是拼接字符串的時(shí)候少些了一個(gè)冒號(hào),或者是拼接地址的時(shí)候漏掉了http:。我甚至幫助一些人調(diào)試一些我根本不懂的語(yǔ)言的程序,因?yàn)槎喟氤霈F(xiàn)的問(wèn)題,都和語(yǔ)言特性無(wú)關(guān),不是程序員寫錯(cuò)了字符,就是寫錯(cuò)了邏輯,或者是錯(cuò)誤理解了一個(gè)函數(shù)。

出問(wèn)題是正常的,寫程序是一個(gè)復(fù)雜的邊思考邊打字的過(guò)程,筆誤和一時(shí)糊涂都是難以避免的。程序員一般把這種問(wèn)題叫做低級(jí)問(wèn)題,因?yàn)檫@類問(wèn)題跟你的智商完全無(wú)關(guān),任何人都可能犯。

但是,問(wèn)題在于,有時(shí)候即使是很優(yōu)秀的程序員,也會(huì)被一個(gè)低級(jí)錯(cuò)誤困擾,可能會(huì)幾天都解決不了。所以,關(guān)鍵在于,如何找到問(wèn)題。

遇到問(wèn)題的時(shí)候:

1,不要怨天怨地。出了問(wèn)題,當(dāng)然有可能是系統(tǒng)的bug,API的問(wèn)題,但是那些幾率往往比你犯低級(jí)錯(cuò)誤的幾率要低多了,先從自己身上找原因,是不是自己寫錯(cuò)了。

2,要掌握工具。***限度你要會(huì)寫Log,***是Log和調(diào)試器結(jié)合。好 的工具可以大大的提高效率。以前有人跟我說(shuō),Dll不能調(diào)試,我發(fā)現(xiàn)可以;有人說(shuō)多線程不能調(diào)試,我發(fā)現(xiàn)可以;有人說(shuō)COM不能調(diào)試,我發(fā)現(xiàn)可以;有人說(shuō) IE插件不能調(diào)試,我發(fā)現(xiàn)可以;有人說(shuō)OE插件不能調(diào)試,我發(fā)現(xiàn)也可以。當(dāng)然,你確實(shí)會(huì)遇到不能調(diào)試的時(shí)候,當(dāng)年我們做東芝芯片的嵌入程序,一個(gè)組都沒(méi)有 一個(gè)仿真器和調(diào)試器,但是至少可以用Log嘛,無(wú)非是麻煩點(diǎn)。

3,分析問(wèn)題要有邏輯。遇到問(wèn)題可以先把所有的可能性都列出來(lái),然后一個(gè)一個(gè)分析,肯定能找到原因的。

4,要學(xué)會(huì)隔離問(wèn)題。問(wèn)題涉及到的代碼越多,越難以理解,問(wèn)題越難以解決。遇到這樣的情況,可以利用Log或者調(diào)試器,一行代碼一行代碼的給它們洗清嫌疑,這樣很快你就可以找到出問(wèn)題的地方。如果代碼特別長(zhǎng),程序特別復(fù)雜,可以用二分法來(lái)做,效率很高。

5,千萬(wàn)不要懶惰,不要事事求別人。一次復(fù)雜的調(diào)試過(guò)程就像一部偵探劇,如果你有非常好的邏輯性,那這部劇的主角就是福爾摩斯,劇情一定非常精彩。我說(shuō)這個(gè)是有巨大風(fēng)險(xiǎn)的,說(shuō)真的我?guī)腿苏{(diào)東西挺上癮的,很有意思。但是我還是要告訴大家,一次高難度的調(diào)試之后,你的滿足感絕對(duì)不亞于寫了一個(gè)偉大的程序。

要想不遇到問(wèn)題,寫代碼的時(shí)候:

1,要對(duì)寫出來(lái)的代碼負(fù)責(zé)。我很佩服那些寫代碼寫100行都不執(zhí)行一次的 高手,如果他們***不被低級(jí)錯(cuò)誤困擾的話我就更加的佩服了。我寫程序幾乎是寫一行兩行就要執(zhí)行一次,每句話我都要確保執(zhí)行效果跟我的預(yù)期一致。沒(méi)錯(cuò)這樣寫的時(shí)候 可能慢一些,但是調(diào)試的時(shí)候很輕松,我可以很簡(jiǎn)單的確定哪些代碼絕對(duì)沒(méi)有問(wèn)題。所以我寫代碼整體速度比一般人高。很多人學(xué)習(xí)新東西的時(shí)候喜歡把例子抄一遍,運(yùn)行一下,改改,再運(yùn)行。我喜歡一句一句的抄例子,抄一句兩句執(zhí)行一次,這樣可以把例子透徹的理解,而且很難會(huì)遇到出現(xiàn)了問(wèn)題找不到原因的時(shí)候。

2,函數(shù)體功能塊不要過(guò)長(zhǎng)。我認(rèn)為我的智商并不高,我很難接受一個(gè)程序的一個(gè)函數(shù)體或者一個(gè)功能塊超越3屏(當(dāng)然邏輯真的有那么復(fù)雜除外,你會(huì)發(fā)現(xiàn)越是簡(jiǎn)單的邏輯越是容易被人寫的冗長(zhǎng))。很多人對(duì)面向?qū)ο蠖炷茉?,?duì)封裝繼承看起來(lái)駕輕就熟。但是動(dòng)不動(dòng)就寫出來(lái)個(gè)函數(shù)體超長(zhǎng)的程序。這就像寫本書從頭到尾不點(diǎn)句號(hào)一樣,會(huì)累死讀者的。自己看的時(shí)候,估計(jì)也會(huì)被累的喘不過(guò)來(lái)氣。這是我對(duì)基礎(chǔ)教育的微詞所在,他們連教會(huì)學(xué)生寫函數(shù)都沒(méi)教會(huì),雖然表面上他們連面向?qū)ο筮@么高深的東西都教。

3,縮進(jìn)要對(duì)。這點(diǎn)很重要,雖然大部分語(yǔ)言不是像Python那樣用縮進(jìn)來(lái)決定邏輯塊的位置,但是人看到縮進(jìn)的時(shí)候,總是會(huì)以為這些縮進(jìn)位置跟邏輯相關(guān)。尤其是在有大量的ifelse或者for循環(huán)等等的嵌套邏輯的時(shí)候,如果縮進(jìn)錯(cuò)了,可能會(huì)直接讓人把程序的邏輯讀錯(cuò)。所以我拿到別人的代碼,***件事情就是整理縮進(jìn)。我見(jiàn)過(guò)一些比較優(yōu)秀的頁(yè)面工程師,他們會(huì)在div結(jié)束的位置用注釋寫上這個(gè)div的id,這樣層級(jí)關(guān)系就一目了然了。

4,不斷重構(gòu)。隨著程序的不斷修改,有些部分會(huì)不斷的增長(zhǎng),原來(lái)看著清晰的架構(gòu)可能因?yàn)閱?wèn)題的復(fù)雜而慢慢模糊,也可能被修正bug的權(quán)宜之計(jì)弄的面目全非。不信你找一個(gè)經(jīng)過(guò)多次修改的程序看看,是不是滿目瘡痍,是不是都很難認(rèn)出是你自己的作品了。這在多人參與的項(xiàng)目中更加嚴(yán)重,每個(gè)人有不同的代碼風(fēng)格,經(jīng)過(guò)多次雜交后,你肯定認(rèn)不出你的代碼是騾子是馬,還是四不像了。隨著程序的慢慢成長(zhǎng),原來(lái)有些函數(shù)體會(huì)慢慢膨脹,需要拆分;有些原來(lái)簡(jiǎn)單的功能塊四處都需要,應(yīng)該被提煉成函數(shù)或者方法,等等?,F(xiàn)在不重構(gòu),未來(lái)等到代碼復(fù)雜到無(wú)法控制的時(shí)候,重構(gòu)的工作就會(huì)變得更加困難。我見(jiàn)過(guò)***的案例是,一個(gè)幾千行的電子辭典配套聯(lián)機(jī)軟件,經(jīng)過(guò)無(wú)數(shù)次的改版,變成了一個(gè)幾乎無(wú)法維護(hù)的主窗體的cpp有1萬(wàn)8千行的怪物。***經(jīng)過(guò)復(fù)雜的重構(gòu),才變成一個(gè)出新版本只需要新增一個(gè)驅(qū)動(dòng)程序的可以維護(hù)的幾千行的程序。

原文鏈接:http://navy3.blog.sohu.com/85832196.html

【編輯推薦】

  1. 通向程序員之路的捷徑——SCJP
  2. 一個(gè)程序員創(chuàng)業(yè)失敗的教訓(xùn)
  3. 分享研發(fā)小組故事 看程序員六大職業(yè)素養(yǎng)
責(zé)任編輯:張攀 來(lái)源: 搜狐博客
相關(guān)推薦

2015-08-20 09:31:35

2020-05-12 12:52:21

架構(gòu)菜鳥(niǎo)程序員

2015-08-18 15:22:59

程序員成長(zhǎng)階段

2014-10-17 18:31:05

PHP

2017-03-02 09:37:36

PHP程序員成長(zhǎng)規(guī)劃

2019-01-14 08:26:55

程序員團(tuán)隊(duì)職業(yè)

2015-05-29 11:14:31

程序員開(kāi)始看書

2012-08-15 10:47:27

2013-03-28 15:50:37

程序員Java

2014-09-28 15:13:21

程序員代碼行數(shù)

2015-03-19 14:50:27

編程拖拽編程合格程序員

2011-05-11 17:49:12

PHP

2016-09-27 17:29:23

騰訊云小程序微信

2015-04-08 10:57:15

程序員程序員四年經(jīng)歷

2011-12-23 09:16:19

2014-08-13 11:11:58

程序員

2021-07-30 10:41:57

程序員IT互聯(lián)網(wǎng)

2010-10-18 09:59:22

PHP程序員Web開(kāi)發(fā)

2020-04-04 20:59:28

程序員技術(shù)開(kāi)發(fā)

2021-08-16 14:22:19

JetBrainsDevOps
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)