JavaRush /Java Blog /Random-TW /讓我們從頭開始或“你好,Java World!”
articles
等級 15

讓我們從頭開始或“你好,Java World!”

在 Random-TW 群組發布
我想以一個乍看之下不尋常的題外話來開始這篇文章。稍後就會清楚具體原因。
讓我們從頭開始吧,或者Hello,Java World! - 1
那麼,讓我們想像一下某人。有人想掌握高山滑雪。為此,他採取了以下步驟:
  • 教師、教科書、手冊等 ——這一切都是惡人所為。您可以自學滑雪。此外,在學校他還學得很好的越野滑雪。因此,來自知識淵博的人的所有建議都會被忽略。

  • 選擇最酷的裝備。不低於專家水平。硬靴子會傷腳。硬質滑雪板需要付出極大的努力才能彎曲,遠遠超出某人的身體素質水平。嗯,等等。

  • 測試賽道是…好吧,比如說,世界盃大迴轉賽段的賽道。這正好適合學習。
  • 以同樣的精神繼續下去。
那麼問題來了。你會怎麼稱呼這個人? 就我個人而言,作為一個熟悉高山滑雪大約20年的人,我會稱他為(這還是很溫和的!)——絕望。用這種方法根本不可能學到任何東西。但這肯定會受傷。而最確定的就是永遠放棄滑雪的想法。我想你會同意我的這個評估。無論如何,我幾乎可以肯定,這個人不會期望有人對他提出任何不愉快的事情。現在讓我們想像另一個人。比如說,讓他成為電腦科學專業的學生。他具有一定的 C++、C#、Pascal 知識。他想學習Java。他的行動:
  • 與他的知識水平(坦白說是零水平)相對應的文學被掃到了一邊。基於對所提及的 C++、C# 和 OOP 理論的稍微熟悉。
  • 採用最強大的程式設計環境。比如說 Eclipse 或 NetBeans。自行完成所有操作,只需按下一個按鈕即可。
  • 作為試用應用程序,我們選擇......好吧,讓我們說聊天。客戶端-伺服器應用程序,客戶端部分採用小程式的形式,伺服器部分是 Web 服務,或最糟糕的情況是 Servlet。正好適合學習。
問題。你會怎麼稱呼這個人? 你知道悖論是什麼嗎?事實是,在這種情況下,公正的評估將會大大減少。儘管事實上情況在所有方面都是相同的。除非第二種情況對健康和生命的影響較不致命。也許這就是問題所在?情況確實非常相似。我用同樣的風格專門描述了它們。奇怪的是:如果第一種情況的荒謬性是顯而易見的,那麼第二種情況就會出現數量驚人的新手開發人員。掌握 Java 從編寫 MIDlet、資料庫用戶端、聊天、建立基於 servlet 的網站開始...您可以繼續很長時間。但這一點仍然是顯而易見的。同時,入門級文學卻被輕蔑地放在一邊。讀這個?大部頭書?是的,我用 C++ 寫已經三年了!(選項以 Pascal 形式提供,甚至以 Visual Basic 形式提供。)而且我了解 OOP!嗯,總的來說。那麼,下一步是什麼?然後是這個:
  • 如何將8位元組數組轉換為long數組?
  • 為什麼會出現這種情況NoClassDefFoundError
  • 為什麼我在 Eclipse 中啟動應用程式 ( NetBeans/IDEA/JBuilder),一切都很好,但如果沒有它java HelloWorld.class,我輸入 ,就會出現錯誤?
  • 為什麼會崩潰ClassNotFoundException
  • 為什麼沒有圖書館?我已經把它放在classes.zip裡面了,但沒用!
  • 為什麼我會建立一個物件數組,但是當我嘗試使用該數組的元素時卻得到了NullPointerException
  • 為什麼……?
  • 為什麼……?
  • 為什麼……?
為什麼為什麼為什麼?但因為 Java 不是 C++ 或 Pascal。而不是 Perl。了解這些語言不僅沒有幫助,還會帶來阻礙。如果只是因為這些語言有完全不同的意識形態。但外表的相似性具有誤導性。當然,所有這些「為什麼」和「如何」在書中都有答案。在最基礎的文學層面。但讀它是懶惰的(選項:羞恥、沒有時間等)。我知道很多由優秀的 C++ 專家轉移到 Java 的刻板印象。最近的一個例子:永遠不應該在建構函式中拋出異常。為什麼?是的,因為在 C++ 中,此類物件的狀態沒有定義。因此,發生內存洩漏。在Java中,由於垃圾收集器的存在,原則上不存在這樣的問題。然而,有些人試圖避免這種情況。只是根據根深蒂固的刻板印象。最糟糕的是,由於這些努力,程式碼變得更加複雜。文法很容易學習。而且完全不夠。語言的意識形態更為重要。為了最有效地掌握它,你應該從頭開始。究竟為什麼以及如何?這是另一個問題。所以。從哪裡開始以及如何開始。這取決於您想要實現的目標。如果你想成為一個熟練的編碼猴子,你幾乎可以從任何事情開始。如果你想成為專業人士,事情就有點複雜了。我的經驗讓我有理由說出以下內容。專業開發人員和「編碼員」之間的區別在於他了解正在發生的事情。他所做的不僅僅是按按鈕。強大的環境是一個很好的幫助。對於那些可以不用它的人。但它往往是那些剛開始使用它的人的唯一工具。如果沒有它,編碼猴子的價值為零。因為沒有按鈕可按。一般來說,按下按鈕可能會採取真正可怕的形式。我的一位同事看到了一個用 Java 寫的產品。安裝說明的開頭是:「從磁碟安裝 JBuilder...」現在這已經是致命的了。如果開發人員在沒有開發環境的情況下無法使產品運行,那麼我不禁想到它是如何編寫的。至少,它是由業餘愛好者寫的。我所說的「了解發生了什麼事」是什麼意思?這意味著一個人必須了解以下內容:
  • 什麼是虛擬機器以及為什麼需要它?
  • 從虛擬機器的角度來看什麼是類別。
  • 什麼是包裹?
  • 什麼是圖書館?
  • 虛擬機器如何尋找和載入類別;什麼是類別載入器以及它是如何運作的;預設有幾個;什麼是類路徑。
ETC。等等。這樣的例子還在繼續。請注意,我沒有包含開發人員本身特定的知識。什麼是線程,從 OOP 的角度來看什麼是類,它與物件有何不同,佈局管理器如何運作 - 任何開發人員都應該知道這一切。我列出的所有內容更多的是技術性問題。但事實證明,了解它們對於了解問題所在至關重要。生活中的例子。有一個用於處理 XML 的庫,稱為 xalan。它包含幾個 javax.xml... 套件 - 解析器、轉換器等。這個圖書館很受歡迎。問題是這些相同的套件自版本 1.4 以來就已經存在於 J2SDK 中。問題。如果 xalan 也存在於類別路徑 - 庫中或來自 J2SDK 中,則從庫存取 javax.xml.transform.stream.StreamSource 類別時將載入哪個類別?要回答這個問題,您需要了解類別載入器是如何運作的。我曾經在一個論壇上看到過一場為期四天的討論,最後歸結為這個問題。程式碼無法正確運作,正是因為載入程式沒有取得預期的類別。我在說什麼?事情是這樣的:開發環境越強大,為開發人員做的事情就越多——他需要思考的就越少。這已經是多麼糟糕了。離猴子那麼近。這引出了第一個結論,無論它看起來多麼矛盾:

結論 1.建議在沒有強大環境的情況下開始學習Java。

我不提倡使用記事本等級的編輯器進行寫作。但我這樣做的唯一原因是——它們通常沒有語法突出顯示。這是一件非常方便的事情,而且不會產生負面影響。您可以使用像Notepad++這樣的東西,它理解 Java 語法,順便說一下,它是免費的。例如,我在系統中專門為其註冊了.java 檔案類型。因此,一個具有語法突出顯示和命令行的文本編輯器。兩三天的折磨 - 並理解類路徑是什麼,解釋器是如何啟動的以及一堆其他小事情 - 理解這一點將永遠存在。更遠。我的經驗讓我有理由說,獲取知識以供將來使用是不可能的。從某種意義上說,只有當文學能夠回答問題時才值得閱讀。如果你讀了一本書而沒有提出任何疑問,那麼這些資訊將在一周內消失。我非常清楚這一點,包括我自己的經驗。我曾經開始讀五遍關於 servlet 的書。直到我開始在工作中處理它們之前,這些資訊都沒有被吸收。這絕不是一個孤立的案例。很久以前,大約8-10年前,我讀過以下內容,不幸的是,我不記得作者了:如何教一個人新的程式語言?很簡單。您需要為其提供一種語言、多項任務和最少的文件。然後,幾個月後,當他至少開始用這種語言寫作時,提供全面的文檔。兩週後,人們將像偵探小說一樣讀完它,之後就可以開始工作了。我100%同意這個說法。一方面,兩個月後,所有小問題都會消失。這些問題的答案將獨立獲得,這將大大增加它們的價值。另一方面,明確的問題已經形成,文檔將提供答案。這就引出了第二個結論,它看起來並不比第一個結論更矛盾:

結論2. 建議在沒有教科書的情況下開始學習Java。Java API 文件 + Java 教學 - 這已經足夠了。

Java API 文件是必須的。我強烈建議將其保存在本機磁碟上。你必須聯絡她不只一次,不是兩次,甚至十次。就我個人而言,我沒有一天不去那裡。我還建議將 Java 教程保留在本地。這是完全替代教科書的入門級資訊。然而,那裡有相當數量的東西。我必須說,在我工作中不涉及的領域,我仍然為自己找到了新的東西。讀太多書是不好的。只要沒有請求,就沒有回應。讀一點書也是不好的。中庸之道在哪裡?我遵守這條規則:我一直閱讀,直到我開始覺得我已經收到了問題的答案。90% 的情況並非如此。但此時此刻,最好停下來,自己繼續。最初的動力已經收到,獨立解決問題會帶來更多。當然,一段時間後,學習文學是值得的。但同樣,對於入門文學。即使這一切看起來都是廢話,也值得閱讀最初的章節。我幾乎可以保證你至少會學到一些新東西。這件事後來可能會變得極為重要。好的。我們似乎已經想好要寫什麼了。怎麼寫-也是。但我該寫什麼呢?記住這篇文章的開頭。我應該從編寫即時通訊系統開始嗎?當然,選擇權在於您。在我看來,這不值得。任務越複雜,出現的問題就越多。在沒有經驗的情況下,這麼多的問題會給人一種無法解決的感覺,進而產生一種自卑、愚蠢等感覺。最終,這可能會導致「讓它見鬼去吧…」的決定並停止學習語言。那些。與所需的效果完全相反。這與其說是 Java 的特徵,不如說是學習過程本身的特徵。但由於某種原因,他們在教授程式設計時忘記了這一點。同時,與在旅程一開始就放棄的宏偉系統相比,完成一個小任務可以帶來更大的滿足感和更多的知識。因此得出第三個結論: 結論 3。建議從適合您目前 Java 知識水平的任務開始學習 Java。 你不應該在一級方程式賽車上開始學習駕駛,你不應該在世界盃賽道上開始學習高山滑雪。同樣,你不應該透過寫龐大的東西來開始掌握 Java。我明白,雄心壯志是需要付出努力的。但在這種情況下,它們是沒有根據的。你的野心越不合理,成為專業人士的機會就越少。奇怪的是,學習方面的一個顯著現像是各種論壇。如果你明智地使用它們。明智地 - 這意味著你需要做相反的事情,而不是像平常那樣。也就是說,不是提出問題,而是回答問題。任何你有力量到達的地方。如果你認為我自己知道一切,那你就大錯特錯了。是的,我知道很多。但有些地方是我從未遇過的。或者我有,但很少。我實踐中的一個典型例子是使用憑證:程式碼簽署、安全連線等。1998年,當我寫論文時,我就這樣做了,但從那時起一切都發生了很大的變化。多年來,我累積了一些疑問。我甚至開始閱讀一些文學作品。但是,正如我上面所說,你無法獲得未來使用的知識。它就像一根撬棍——從一隻耳朵進去,從另一隻耳朵出來。除了頭上破了一個洞之外,沒有任何結果。這種情況一直持續到最近,有人在論壇上提出了與 tomcat 進行 SSL 連線的問題。出現了一些問題。只有這個問題促使我深入研究。如果有請求,就會有回應。我不僅找出了這個人的問題所在,而且還發現了許多其他有用的信息。我終於明白證書是如何運作的了。相應的文章在計劃中。這種情況經常發生。例如,我經常使用 GUI。直到論壇上有人提問,我才了解了TextLayout的一些功能。在提出這個問題之前,我對他們一無所知。同樣的,我最近發現原來JButton也將html解釋為自己的header。在此之前,我以為只有JLabel可以做到這一點。這再次感謝論壇。事實證明:我們回答問題越多,我們學到的東西就越多。這就是為什麼我不同意流行的觀點,如果一個人坐在論壇上,那麼他就什麼都不做。這還遠不清楚,主要取決於此人出現在論壇上的確切原因。他主要做什麼——提問或回答。事實上,你甚至可以問。但也很明智。不要要求解決方案(尤其是附言“請知道的人給出答案,不要提問!”,我前幾天就遇到了!),而是相反,再次要求設置運動方向。初學者很難理解在哪裡挖掘,這是完全可以理解的,因為他根本缺乏經驗。這不是人的錯,甚至不是問題。這可以。每個人都經歷過這件事。包括我在內。對我個人來說,一個人想要學習一些東西更重要。不僅得到答案,只是參加程式實驗五分鐘後就忘記了。我總是會告訴你運動的方向。如果我自己認識他的話。即使我不知道,至少我可以猜測。我當然也會找答案。但我可能永遠不會給出直接答案——至少,我不記得了。順便說一句,正是因為這個,我離開了其中一個論壇。當我開始問引導性問題時,他們異口同聲地向我解釋說,他們的習慣是簡單地回答。透過我的問題,我可以走得更遠。考慮到論壇的水平還有待提高,尤其要感謝這種做法!– 我決定不再浪費時間了。因此,選擇一個您喜歡的論壇即可開始。順便說一下,這個網站的出現正是因為其中一個論壇得益。在那裡交談了一段時間後,我累積了一份最常提出的主題列表,並意識到這樣一個網站將會受到歡迎。事情就這樣發生了。幾乎所有的文章都是在論壇上的一些討論之後寫的。或遵循我也定期進行的通信。結果是什麼?工作,工作,再工作。在初始階段你允許自己為自己做的事情越多,你獲得的知識就越少。而走向專業化的道路也就越長。但只有你可以選擇你想成為的人——無意識地按按鈕的猴子或專業人士。只有你自己選擇實現這個或那個目標的道路。第一種方式很明確。我試圖展示第二個。你們的行動,先生們! 原始來源連結:讓我們從頭開始或“Hello, Java World!”
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION