天天看點

怎麼解決問題

程式設計總是會遇到很多問題,你解決問題的、方式反映你的思維方式,你的思維方式決定你的未來,很多事情可以靠經驗解決,思維卻需要不斷的鍛煉。

程式員不僅僅是程式員,他更應該是一個高效的學習者。

以下主要來源于馬士兵老師(很有參考意義):

在程式設計中,每個人都會難免遇到問題,那麼,遇到問題之後,環境配不通,程式調不過,運作不正常,遇見這些惱人的問題的時候,該怎麼辦呢?

首先我要恭喜你,遇見問題,意味着你又有漲經驗的機會了,每解決一個問題,你的JAVA經驗值就應該上升幾百點,問題遇到的越多,知識提升的越快。 但是總是解決不了也是很惱人的,怎麼辦呢? 我一般要求我們的學生都是這樣來進行的。

當你遇到一個問題的時候:

要仔細的觀察錯誤的現象,是的,要仔細

英語是成為一個牛逼程式員的必經之路

有不少同學的手非常快,在編譯一個程式的時候,報了一大堆的錯誤,掃了一眼之後就開始盯着代碼一行一行的找,看清什麼錯誤了嗎?沒有!有的時候安裝軟體出問題了,一個對話框彈出來說出錯了,馬上舉手問老師:“不得了了,出錯了,出錯了”。

“什麼錯誤?”

“還沒看呢?”

這都是典型的不上心的方法!請記住,學習程式設計并不是一件很容易的事情,自己首先要重視,要用心才可以。在開發中,仔細觀察出錯資訊,或者運作不正常的資訊,是你要做的第一件事。讀清楚了,才能在以後的步驟中有的放矢,哭了半天,總要知道哭的是誰才成。

這裡又分三種情況:

A:錯誤資訊讀懂了,那麼請進入2步:要仔細思考問題會出在哪些環節

B:沒讀懂,愣是一點沒看懂,進入第4步吧:google

C:讀了個半懂,有些眉目但是不太能确定,第2步和第4步結合着來。

要仔細思考問題會出在哪些環節(重要)

當你讀懂了一個問題之後,要好好的思考這個問題可能會在哪些環節上出錯。

一輛汽車從總成品線上下來,車門子關不上! 哪錯了?你怎麼查? 當然是順着生産線一站一站的查下來。 程式也是一樣的,也是一系列語句完成後産生的結果。

寫一個網絡程式,總是發現伺服器端列印不出接收的資料,有幾個環節會出錯?仔細分析這個現象的環節:

用戶端産生資料->按“發送”按鈕->發送到伺服器->伺服器接收到後列印

這幾個環節都有可能會出錯:

有可能用戶端根本就沒産生資料,有可能發送按鈕按下去後根本就沒發出去,或者發出去的不是你産生的東西,或者根本就沒連接配接網絡,或者發送出去伺服器沒有接收到,或者接收到之前就列印了等等等等。

學着去這樣仔細的分析程式的環節和這些環節可能會産生的問題,你的經驗值定然會大幅度快速的提升,這樣做很累人,但是一件事情如果做下來一點都不累的話,這個東西還有價值嗎?

在網頁A輸入了一個人的名字,送出到B,首先存儲到資料庫,然後再讀出來,發現亂碼!怎麼辦?當然是分析環節:

客戶輸入->HTTP發送->B接收->存儲到資料庫->讀出->展現到網頁

每個環節都可能出問題,怎麼才能知道哪裡出的問題?繼續往下讀。

如何定位錯誤(重要)

分析清楚有哪些環節之後,下一步就是定位到底什麼環節出錯了

定位有以下三種辦法:

A 列印輸出,比如java的System.out.println(),比如js的alert(),這種辦法常用,必須掌握

B Debug,可以參考我們的視訊《坦克大戰》,詳細講了Eclipse的調試。

C 删掉一部分調試一部分,也就是去掉一部分的功能,做簡化,然後調試剩下的功能,JSP和JavaScript常用。

如果還不行,google吧

還查不出來?恭喜你,你遇到的錯誤是值得認真對待的錯誤,是會影響你學習生涯的錯誤,問一下google或者百度吧。照着下面的方法查檢視。

先精後粗,首先先進行盡量精确的查找,比如一個錯誤,SocketException,你懷疑它是在connect()方法出的問題,那麼當然是選這樣的關鍵詞

java connect SocketException

  1. 先中後英,本着以解決問題為主的想法,練習英文還是先放在一邊吧,首先應該在中文網頁中查詢,還不行的話,搜尋英文的吧。有很多東西就像一層窗戶紙,遠看灰蒙蒙怪唬人的,你壯着膽子一捅,它就破了。閱讀英文的書籍就是如此,不是想象中的那麼困難(甯可在沙場上戰死,也不能被吓死不是嗎)
  2. 資訊篩選,搜尋出來的結果不見得能夠完全比對,建議大家多閱讀前幾頁的搜尋結果,多打開幾個網頁看看,不過,我的經驗是超過3頁一般就沒意義了,是以超過3頁還沒有找到合适的答案,或許應該調整一下關鍵詞,或者放粗整個搜尋的結果了。
  3. 經常的進行知識難點的查詢,如果一個問題牽扯的面比較廣,就幹脆到網上搜尋一些相關的專題,比如“java 亂碼 mysql” “oracle 建立使用者”等等,如果有必要,不要犯懶,勤動手寫一些小小的測試程式,來弄明白知識點的細節。這也是漲知識的重要的途徑。

什麼?還不行?那麼就BBS吧

如果實在還不行,就到BBS上面問一問高手吧。 到哪個BBS上?

google或者百度不就行了麼?關鍵詞“java論壇”“java bbs”

然後在搜尋結果裡好好的看看那些活動頻繁的論壇,以後就是你經常光顧的地方了。CSDN論壇首頁就很不錯。

向别人提問是非常需要技巧的!

曾經有人問我這樣的問題:“請問如何才能學好java呢?”這個要求太泛泛了。還有人給我一段代碼甚至jar包也寄過來,然後說老師的我的代碼中有個錯誤您幫我查查。

我沒有辦法去花大量的時間建立環境去調試一個還不知道存在不存在的錯誤!

還有人在BBS上問這樣的問題:“是否有人能幫我完成一個完整聊天的程式?請幫我寫一個登陸子產品吧!”

這個要求有些過分了,有人幫你做是你的運氣,沒有人幫你是正常反應。

向别人提問,應該首先确定你已經做了自己應該做的事,簡單說是我前面列舉的1,2,3,4步你都作過了,然後再求助于人。不要沒有經過認真思考就草率的向别人提問,自己也不會有長足進步的。

那我該怎麼樣向别人提問呢?

在google或百度搜尋《提問的智慧》,你會找到答案。

在這裡我給出一個連結

!提問的智慧,磨刀不誤砍柴功,先花點時間去閱讀一下吧。

得到别人的回答,要懂得感恩。不需要去寫信感謝,不需要支付費用,不需要那些花言巧語,做到下面這一點就夠了:

當你逐漸成為高手的時候,要回答别人在論壇上提出的問題,有時間有精力的前提之下!