| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 696 人关注过本帖
标题:關於調試與提問
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:8 
關於調試與提問
論壇基本以提問和解答問題居多。所謂問答,實質就是排查錯誤,修正程序。

先看一段資料,源自《編程珠璣》:
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-10-21 09:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
5.7節,第一段是綱領,是全節的中心思想,每個句號一句話,共四句。

第一句,調試一定是困難的,不單是困難,還是很困難。程序員的日常工作,多是調試程序這樣那樣的毛病,沒有程序是沒有毛病的。
第二句,雖然調試很困難,但總有解決的辦法,而且解決的辦法居然常常是簡單的,這就等於說沒有解決不了的問題(但有解決不完的問題)。
第三句,定義“調試”的概念。最基本的,設計一個測試,用於清理小錯誤,這屬於調試的範疇;程序的有些部分,在某種情景下不能正常工作,需要修補,也屬於調試範疇。
第四句,回應第二句是如何解決第一句問題的,關鍵在於找到確定問題根源的辦法,也就是正確發現問題。後面的示例,都是關於這一點的。

第二段是上面第四句話的展開:調試必須用邏輯,不是亂碰。新手與老手的區別,就是前者盲目亂碰亂猜,而後者是通過邏輯思考定位錯誤方向。然後的兩段兩個例子,是作爲範例,那些例子都證明,不管問題如何詭異,到最後必定能發現那是有原因的、有因果關係。

[此贴子已经被作者于2015-10-21 10:05编辑过]


授人以渔,不授人以鱼。
2015-10-21 09:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
論壇上很多新手提問,就經常犯描述不清的毛病。看看書上第一個例子,坐著和站著,你有跟人說過嗎?坐著是怎麽做動作的,站著是怎麽做動作的,你要跟人說啊。幫助者需要觀察到最詳細的情景,就如別的行業一樣,解決問題必須到現場察看,而不是坐在書齋中光聽人說。網絡求助的弱點,就在于無法看到現場,那麽求助者自己詳細描述現象,就是最重要的,這不用你懂不懂編程,也不是“新手”兩字可以遮過的,最起碼你做人、思考不是新手!很多時候,人家發現你描述不清,或者有些細節需要瞭解,就會追問你,必定有互動的過程,不要以爲別人問你問題是無聊,畢竟你沒遇到過解決方向在那的經驗,而人家問你也必定是有原因的。

扔一堆代碼上來,考別人“有什麽問題”,這種帖,我想咔嚓很久了。一問三不答,十問九不應,那也不是來求學的,絕對是伸手黨,最終你會看到,誰給牠喂了食,就給誰吠一聲,這類人,我會給記下來,從此不再理睬。

[此贴子已经被作者于2015-10-21 10:09编辑过]


授人以渔,不授人以鱼。
2015-10-21 09:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用embed_xuel在2015-10-21 10:17:35的发言:

这样的人,你记得过来吗

多謝老靜,新增了屏蔽人的功能。

授人以渔,不授人以鱼。
2015-10-21 10:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用hellovfp在2015-10-21 14:28:28的发言:

今天你回帖了吗?

回你一個

授人以渔,不授人以鱼。
2015-10-21 15:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
調試,每次“我們關注的衹是問題的一小部分”。

授人以渔,不授人以鱼。
2015-10-21 16:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在系統測試階段找出並修正錯誤,要比開發者自己完成這一工作多付出2倍的努力。而當系統已經交付使用之後找出並修正一個錯誤,要比系統測試階段多付出9倍的努力。因此,請堅持讓開發者進行單元測試吧。
——Larry Bernstein,貝爾通信研究院

不要站著調試程序,那會使得你的耐心減半,你需要的是全神貫注。
——Dave Storer

[此贴子已经被作者于2015-10-21 21:33编辑过]


授人以渔,不授人以鱼。
2015-10-21 21:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用武伟在2015-10-21 20:36:06的发言:

经过这几天的交流,调试必将在我的以后的编程路上占有不可或缺的地位,学会调试也是近期首要熟练掌握的任务中的重中之重。

加油。

記住:沒有別人比你自己更有耐心調試你的程序。所以,自己的工作最好自己做,自己擦屁股最乾净。所謂“授人以漁”,正是基於這個道理。老師不會24小時貼身幫你,就算有人肯幫,也不比你更知道自己的問題,畢竟你寫下這樣的東西當時是怎麽想的,衹要自己最清楚。會調試,就等於有自學能力,有自立解決問題的能力,別人幫你,那能力是別人的,你學不到,恐怕沒幾個人會把這樣的真功夫教給你,“教會徒弟,餓死師傅”,自己研究過後把結論告訴你是可以的,但要告訴你是怎麽得到結論的過程,那可不會,而其實我們最需要學到手,正是這個過程。

授人以渔,不授人以鱼。
2015-10-21 21:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
“修正程序錯誤的第一步是要先重現這個錯誤。”這一點很重要,調試者不怕出現錯誤,但最怕不能百分百重現錯誤!因爲一旦你無法讓錯誤百分百地出現,那意味著很難定位錯誤位置,它到處跑,你追蹤到的可能不是源頭,也就不能真正解決問題,反而會因此引入更多的錯誤、埋下更多的隱患、造成更困難的調試。這個道理,被編程設計理論歸納爲“單一功能衹應用單一函數實現”,所謂“代碼重用”,很大的原因也是爲了這個,衹要錯誤現象百分百重現,那麽毛病肯定在實現這個功能的函數内,而這樣的函數衹會有一個,那麽後面就可以集中精力對付了。這裏很多人寫代碼不是這樣,同樣功能的東西到處都是,大量重複代碼不抽象,因爲抽象代碼比複製黏貼要花費更多的精力、付出更多的努力,爲了追求行雲流水敲擊鍵盤的脊柱快感,他們傾向操練熟一套“算法指法”,可以不經大腦地從指間流瀉而出,旁觀者會覺得此人牛得可以,成百上千行代碼頃刻而就,由此贏得光環甚至金錢(在不懂行的老闆面前這一手很唬人),看看哪些人總是玩牛叉編輯器就知道了。這樣寫出來的程序,交付使用之後,那些開發者就拍拍屁股了,維護是維護人員的事,不行就跳槽,再去禍害別的公司和用戶,熬過三十歲騙夠錢轉行了,反正中國業界流行程序員不過三十歲的説法。事實上,我看現在很多IT產品的確是這樣的,問題多多,也敢交付使用,很多問題用戶一用就發現,而他們自己居然沒發現,那衹能說自己寫程序沒測試、沒調試了。

下面兩篇文章,可以參閲一下:
你每月生产多少行代码  https://bbs.bccn.net/thread-398523-1-1.html
克服敲代码之“痒”    https://bbs.bccn.net/thread-430453-1-1.html

[此贴子已经被作者于2015-10-21 22:44编辑过]


授人以渔,不授人以鱼。
2015-10-21 22:07
快速回复:關於調試與提問
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017943 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved