1. 程式人生 > >OneCoder愚見 Java初學者如何自學和自己定位解決問題

OneCoder愚見 Java初學者如何自學和自己定位解決問題

今天群裡(Java Coder群:91513074)的朋友,問我該如何看幫助文件,或者說在遇到問題的時候如何解決。希望我能介紹一下我的方法。

這個OneCoder其實沒有資格高談闊論,只能說說個人的習慣和方式。自學和自我解決問題確實是一項非常非常重要的能力,遠比你現在所會的知識重要的多的多,因為,你未知的永遠的無窮的。

關於API文件

經常有朋友求各種API文件,初學者裡最常見的就是要JDKAPI文件。這個OneCoder個人的習慣是,從來不會去下API文件,那個查詢起來也不方便而且也沒有程式碼輔助,而是直接去JDK的原始碼中看註釋,甚至是原始碼。既方便,又直接,又精確,還接近本質。你下的JDK裡,其實都帶有原始碼的,而且預設還是繫結好的。這麼方便,為何不看?

比如,你用到了String類中的subString方法,想知道如何使用。你可以去看所謂的API文件,你也可以直接在你的IDE中點開String類,用ctrl+o搜尋到subString方法。你可以看到他的註釋:

/**
     * Returns a new string that is a substring of this string. The
     * substring begins at the specified <code>beginIndex</code> and
     * extends to the character at index <code>endIndex - 1</code>.
     * Thus the length of the substring is <code>endIndex-beginIndex</code>.
     * <p>
     * Examples:
     * <blockquote><pre>
     * "hamburger".substring(4, 8) returns "urge"
     * "smiles".substring(1, 5) returns "mile"
     * </pre></blockquote>
     *
     * @param      beginIndex   the beginning index, inclusive.
     * @param      endIndex     the ending index, exclusive.
     * @return     the specified substring.
     * @exception  IndexOutOfBoundsException  if the
     *             <code>beginIndex</code> is negative, or
     *             <code>endIndex</code> is larger than the length of
     *             this <code>String</code> object, or
     *             <code>beginIndex</code> is larger than
     *             <code>endIndex</code>.
     */

如果你瞭解,你就會知道,所有的介面的API都是根據這個Javadoc生成的。順便,你還可以看到它的實現,加深你的理解,何樂而不為呢?

public String substring(int beginIndex, int endIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > count) {
            throw new StringIndexOutOfBoundsException
(endIndex); } if (beginIndex > endIndex) { throw new StringIndexOutOfBoundsException(endIndex - beginIndex); } return ((beginIndex == 0) &amp;&amp; (endIndex == count)) ? this : new String(offset + beginIndex, endIndex - beginIndex, value); }

關於搜尋引擎的使用

解決問題最好的辦法,當然是去網上搜索。這裡OneCoder必須要說的是,對於開發人員來說,百度確實不是一個好的搜尋引擎,搜尋出來的東西相關性和有效性都十分有限。這裡,OneCoder必須大力的推薦Google。真的不在一個層次上。你可能會說,Google總是被牆。這個,OneCoder採用了不太通用的做法,那就是常年購買了一個ssh的代理,專門用於訪問google。呵呵:)其實,解決google問題的方法網上還有很多,你也可以去搜索一下。我們可以簡單對比一下兩個搜尋引擎的搜尋效果。

以”Netty 教程”這個搜尋詞為例:

同樣的OneCoder原創的文章,百度排名靠前的確實被採集站惡意採集的轉載文章,而非原創文章。這對於你獲取原始的準確的資訊是有很大影響的。

至於相關性、資訊的前沿性等方面的對比,OneCoder由於一時找不到合適的例子,暫時不做圖例。但是,隨著你慢慢的使用,你會逐漸發現二者的區別。比如,在你搜索一些前沿性的課題的時候,或者一些罕見的錯誤的時候。Google往往能給出你有價值的參考資訊。

關於自我解決問題

這個其實說起來比較抽象。你可能會說,這個是經常積累等等。是,這的確需要經驗,但是那一點一滴經驗又如何去累積呢?難道靠問別人?

既然提到了搜尋引擎,我們就要會用它。好的關鍵字,能讓我更快的接近答案。這裡,OneCoder的愚見是,不要使用一些例如:怎麼辦?為什麼?等無用的字眼,而是輸入關鍵字。尤其是出現異常的時候,你大可以直接將異常的資訊直接粘到搜尋引擎中去搜索。(注意:去掉跟你自己程式碼有關的資訊,只要通用的部分。

比如:今天OneCoder遇到一個Hibernate的異常導致的空指標問題。一時沒有頭緒,遂將所有跟異常資訊和部分堆疊貼上入google,結果就在stackoverflow上,找到非常有價值的資訊,從而解決了問題。

關於StackOverFlow

一個國外非常著名的問答社群,問題包羅永珍,回答都非常的認真友好。OneCoder已經在上面解決了無法問題。當然,不是通過直接提問,而還是Google給我搜到的答案。這裡還得感謝Google。

關於其他

其實OneCoder用到的工具,就這麼簡單。原始碼+Google。除此以外,一個善於總結的善於思考的大腦是更加必不可少的。這就是所謂經驗和知識的積累吧。

決一個問題不是關鍵,關鍵是會解決一類問題,更關鍵的是會獨立解決沒接觸過的問題,這是一種非常重要的能力。我寧願找一個0基礎,但是可以自己動手學會、解決的人,也不需要一個雖然有基礎,但是也僅限於此的人。個人遇見,僅供參考。