- 相關推薦
如何學好Java語言編程
決定好想學什么編程語言了嗎,現(xiàn)在就讓我們開始學習吧。所有你需要做的就是打開一本書,然后開始閱讀,是這樣的嗎?不全是這樣的。
learn-first
我會給出學習第一門編程語言的理想方法布局,你不僅應該學習這個布局方法,還應該享受精通它——如果不能掌握的話。
學習第一門編程語言或許是學習編程最困難的事情,但并非一定會這樣。
大多數(shù)程序員——包括我自己 ——通過閱讀一本書嘗試做一些東西出來,遇到挫折難題,然后再重讀并繼續(xù)嘗試的事情,直到終于可以按預期工作。
我將與大家分享的東西來自于教導和訓練軟件開發(fā)人員學習第一門編程語言和提高語言技能的經(jīng)驗。我也加進去了我自己學習語言,如C++,C#和Java的經(jīng)驗。
基本上,在這篇文章中,我將展示給你我做的一些事情——我現(xiàn)在了解的東西——如果我是你,并且現(xiàn)在要去學習第一門編程語言的話。
從看一個正在工作的應用程序開始
大多數(shù)程序員,當他們想學習編程的時候,往往是從一本書開始。
雖然有一些優(yōu)秀的書籍會手把手地教你編程,但我認為最佳的開始是查看一個能實際工作的應用程序的源代碼,然后試著盡可能多地找出正在發(fā)生的事情。這很難。
它會讓人覺得不舒服,但是不要畏懼。要習慣這種不舒服的感覺。這是讓人成長的唯一路徑。
learn-first-01
我想要你做的是選擇一個開源應用程序——最好是流行的,才有可能被精心設計——然后瀏覽它的源代碼。你可以在GitHub上找到大量項目,因此我建議你去那里尋找。
并且,你最好可以下載這些代碼,自己構建并運行這個應用程序——雖然這樣說的話超出了這本書的范圍。如果你有一個朋友可以幫助你做這些事情,那就更棒了。當然沒有,也沒有關系。
重要的是,你要去探索代碼,從而了解編程語言的語法看起來是什么感覺,并試著閱讀代碼看看你能否理解或弄清楚意思。
使用應用程序本身,如果可能的話,這樣你才能夠感覺到代碼和代碼作用之間的關系。
就像我說的,這讓人感到很不舒服。你可能會覺得你看不懂任何東西。
再說一遍,那沒關系。你只需要竭盡全力看看你能夠搞清楚一兩件事是如何工作的,或在代碼中你可以做哪些變動以便于用某種方式改變功能。
此外,大致了解代碼如何命名以及如何被組織的。就像你是一個考古學家試圖了解一些古文明的著作一樣。這樣的開始可以讓你比大多數(shù)不知道將要學習的編程語言是什么樣的程序員要更有目的性。
在沒有開始旅程之前先大致了解當?shù)厍闆r總歸是好的。編程沒什么不同。
找一些好的資源或書籍,大致看一遍
要想在啟航之前,更進一步地了解當?shù)厍闆r,接下來要做的并不是反復閱讀編程書籍,而是挑選一些其他資源——如視頻,文章,或教程——大致看一遍。同樣的,這又讓人覺得有些不舒服,因為很多你看到的內(nèi)容你并不明白它是什么意思。
但是……你需要涉足這個領域。你只要能夠差不多了解這個東西到底有多大,你要學習的是什么以及常見概念是什么就可以了。
這些前提工作在你大概明白要學習什么類型的東西以及概念是如何建立在彼此之上的時候,會收到效果。
learn-first-02
了解如何創(chuàng)建“Hello World”
好的,關于這一點你依然不用“閱讀”或上手編程。
以后會讓你做到想吐的——如果你想的話。(不遵循這些步驟,實際上你也能學習編程語言。)
此時你要做的是盡可能地創(chuàng)建最基本的程序,無論你學習的是什么編程語言。
還記得我們談到過的“如何開發(fā)技術技能”嗎?這正是此處的目標。你想要盡快開始,這樣你就有足夠的信心和知識學以致用。
你所要開始的一個非常基本的程序叫“Hello World”。大多數(shù)編程書籍一開始都會讓你去創(chuàng)建一個“Hello World”程序,這通常指的是輸出“Hello World”到屏幕上。
這可能并不需要太多關于編程語言的知識,但是需要熟悉并測試用來構建和運行程序所需的基本工具鏈。
如果你正在閱讀有關編程語言的書,那么書中應該包含一個“Hello World”程序便于你創(chuàng)建。
如果沒有,那就谷歌搜索“Hello World +你的編程語言”。馬上就能找到例子。通過創(chuàng)建“Hello World”程序,你還可以學到該編程語言程序的基本結構。
學習基本構造,并用真正的問題測試
如果你使用相應的書籍或某種形式的教程學習編程語言,那么現(xiàn)在你可以通過它們來學習了。
此時,你會覺得正在閱讀的書或上的課程并沒有你剛開始認為的那么神秘。
現(xiàn)在你要做的是熟悉所學編程語言的每個基本結構,然后使用這些構造編寫一些代碼。
你需要盡可能實際地嘗試和思考將所學的東西與問題和應用程序聯(lián)系起來,當你將技能應用到實際問題的時候,這樣才能更好地理解和記住這些知識。
learn-first-03
下面是大多數(shù)編程語言所包含的一些基本結構:
能夠輸出到屏幕上
基本的數(shù)學能力
作為一個變量存儲信息
組織代碼成函數(shù),方法,或模塊
調(diào)用函數(shù)或方法
布爾邏輯評估的性能
分支條件語句(if / else)
循環(huán)語句
下面是一些好消息。
一旦你了解這些基本結構并知道如何使用它們,你就具備了語言的基礎知識。是的,語法可能不同,但這是編程的核心。你可能會花費大量時間在這個階段。
用你自己的方式去做,一次一個地去學習編程語言的結構,并通過實際編寫一些代碼來應用每個結構。如果你采取的是自己的方式,那么你需要確定結構是什么以及學習的順序。
如果你正在閱讀書籍或?qū)W習教程(最好是多本書籍和多個教程),那么具體路徑應該已經(jīng)呈現(xiàn)在你眼前,甚至有一些例子和挑戰(zhàn)任務。盡量確保明白你正在學習的內(nèi)容以及如何應用它們。
現(xiàn)在可以回去看看你第一步看的源代碼了,看看你能明白多少。
知道語言功能和庫之間的區(qū)別
經(jīng)常絆倒初級程序員的一件事——尤其是今天的編程語言——是知道語言的部分是什么,以及語言自帶的標準庫的部分是什么。
通常情況下,區(qū)別不是很清楚,因為,習慣上看,你會非常頻繁地使用標準庫編寫代碼。
沒關系。你需要了解所學編程語言的編程約定,但你應該特別小心地去嘗試并指出實際語言部分以及常用于語言的庫的部分。
這似乎有點雞蛋里面挑骨頭,但我認為這很重要,因為它可以擼順此刻在你腦中雜亂無章一塌糊涂的語法,并幫助你更有意義地分類和組織。
你會明白,對于大多數(shù)編程語言,語言的實際部分本身并不是很大,并且比較容易學,但標準庫很大,用你的方式了解它們相對而言要困難得多。
現(xiàn)在的編程,比起說是做語言絕對的專家,更多的是關于知道如何使用庫和框架。這就是為什么這種區(qū)別顯得重要的原因之一。
通過認識到哪些并非語言的一部分,而是庫的一部分,并了解如何查找?guī)靵硗瓿上鄳Z言中的常見任務,你會成為一個更好的程序員。
審查現(xiàn)有代碼,理解每一行代碼的意思
此時,你應該已經(jīng)熟悉所有所學編程語言的主要概念,并在實際例子中用過大多數(shù)編程語言功能。
learn-first-04
你對語言本身和與語言結合使用的庫之間的差異也有了深入了解。但你對編程語言可能仍然覺得沒有那么舒服,或者你實際上還不懂。
這是一個你感覺自己可以理解所有一切是如何工作的階段,但卻不知道如何把它們放在一起,寫出一個真正的應用程序。許多初級程序員往往會因此而停留在這個階段,感到沮喪,覺得他們永遠成不了一個真正的程序員。
脫離這個困境并確保在知識上不會有欠缺的最好方法之一是,查看現(xiàn)有的代碼,一行一行地,確保你能準確理解每一行和每一個聲明在代碼中是做什么用的。(即使你有時不知道原因,知道具體的過程依然是一種進步。)
這里的現(xiàn)有代碼可以用你在第一步時看的項目的源代碼里面隨機的項目文件。打開一個文件并仔細檢查文件中的每一行代碼,確保你知道它到底是做什么的。
如果你不明白——話說會有很多東西你都不明白——那就花一些時間思考一下,仔細查看你不明白的地方。有點乏味。甚至可能是枯燥的,但是值得。
當你到達一個你覺得你可以讀懂任意一行代碼并理解它做什么的階段——同樣的,知道為什么在此時也并沒有那么重要——說明你已經(jīng)做好了繼續(xù)前進的準備。
構建東西,構建很多東西
現(xiàn)在是時候真正開始使用編程語言了。
此時,你已經(jīng)能寫一些小程序了,使用大部分的語言特性,但只有真正實際去構建應用程序,你才能更深刻地感受編程語言。
learn-first-05
挑幾個小項目——別太大——然后構建應用程序。
不要太雄心勃勃,要知道一口吃不成個大胖子,所以在這個階段不要試圖做任何相關于平臺或UI密集的東西。最好你的應用程序只輸出文本到屏幕上,并暫時只從鍵盤中接受輸入。
目的是為了建立專注于使用編程語言和標準庫的簡單應用,不要額外添加針對于平臺功能的框架——接下來會涉及這方面。
這樣做可以幫助你增加使用編程語言的信心,并了解為了完成目標你需要使用什么樣的語言構造。
下面是一些幫助你開始的簡單的項目點子:
創(chuàng)建一個解決數(shù)學問題的程序,從用戶獲取輸入。
創(chuàng)造一個可選擇冒險類型的程序,從用戶輸入來確定接下來會發(fā)生什么。
創(chuàng)建一個非常簡單的基于文本的冒險游戲,用戶可以發(fā)出命令來拾起對象,在房間移動等。
創(chuàng)建一個能夠從一個文本文件中讀取輸入并輸出寫入到不同文本文件的程序。
創(chuàng)建一個聊天機器人,能和用戶交流,假裝是人或給出幽默的回復。
應用編程語言到特定技術或平臺
到了這個時候,你主要學習了關于在封閉條件下如何使用編程語言。
這是有意的,因為你需要在增加環(huán)境和用于構建真正應用程序所需框架這些額外的復雜性之前,了解并熟悉編程語言本身和它的標準庫。
為了用編程語言創(chuàng)造一些有用的東西,你需要應用語言到特定的技術或平臺。
所以,這個時候,你需要確定幾個可以完成的需要在特定平臺上使用編程語言的小項目。
舉個例子,假設你正在學習Java。到現(xiàn)在為止,你會編寫Java代碼,代碼可工作在任意Java可運行的平臺上,因為你大多數(shù)時間會使用標準庫,并且只會輸入和輸出到屏幕或文件。
此時,你可能會決定使用Java來構建一個Android應用程序。你需要學習如何構建Android應用程序以及有關Android框架的知識。 但是,由于你已經(jīng)熟悉Java,所以就沒有必要一次性學習大量的東西。
當然,你可以一起學習Android和Java,事實上,我做了一個Pluralsight課程來教授如何做到這一點——但為了實際掌握語言并且避免混淆,從平臺或技術獨立語言,然后再結合它們可能會容易得多。
現(xiàn)在,你用編程語言來發(fā)展特定和專業(yè)技能,在找工作時會很有用。
選擇任何你想要使用的任何平臺或技術,用這些平臺或技術來創(chuàng)建一些小的應用程序。
我還建議你在這個時候最好還是只專注于單個技術或平臺。以后你總能學到更多。
通過這種專攻的方式,你不僅可以了解你需要學習的東西,還能讓你更深刻地了解知識和掌握特定技術,而這能讓你更有自信,大大提高你的技能的市場化能力。
解決困難的算法問題以便于更好地掌握語言
到現(xiàn)在為止,你對你所學的編程語言應該感覺舒服多了。
你已經(jīng)對它知之甚深,并且已經(jīng)在各種不同的應用程序中使用過了。
你應該有了一個應用技能的特定技術或平臺,并且使用此技術來創(chuàng)建基本的應用程序感覺已經(jīng)趁手和舒服多了。
盡管如此,你可能還是不覺得你掌握了這種編程語言。
不要擔心;這也是正常的。
learn-first-06
當我第一次學習C ++的時候,我記得即使在我知道關于語言的一切,并且已經(jīng)用這種編程語言實際創(chuàng)建了多個應用程序,甚至還被聘為一個編寫C ++代碼的開發(fā)人員的時候,我仍然不覺得我真正掌握了這門編程語言。
我覺得我是一個很好的C ++程序員,但并非是偉大的。我真的很想提升我的C ++技能,但我不知道怎么辦。然后,我發(fā)現(xiàn)了這個叫TopCoder的編碼競賽網(wǎng)站。
每個星期,那里都會有一系列新的編程挑戰(zhàn),你可以和其他的程序員一起比賽著解決一些相當困難的算法問題。起初我怕極了。我甚至連最簡單的問題也解決不了。
我去看其他人的解決方案,我不知道他們是如何想出這個解決方案的,也不知道他們的代碼是如何工作的。他們用著一種我萬萬沒有想到的方式使用C ++代碼。但后來,隨著時間的推移,隨著我鍥而不舍地去嘗試解決問題,以及看別人是如何解決問題的,我漸漸成長起來了……一點一點,越來越優(yōu)秀。
我發(fā)現(xiàn)了解決某些類型問題的模式。我開始真正了解如何利用我以前忽略了的C ++特性。我學會了如何高效地使用標準庫和語言功能以及數(shù)據(jù)結構來解決復雜的問題。我變得不僅擅長于C+ +,而且非常出色。我終于覺得自己貌似掌握了這門編程語言。這就是我要你做的。
你不必去TopCoder參與競爭,有很多你可以練習解決算法類型編程問題的地方。
對于這類問題,我已經(jīng)提到了一個很好的資源,還有一些是:
這些問題一開始你解決起來會覺得極其困難,沒有關系。本來就是這樣的。
你會發(fā)現(xiàn),隨著時間的推移,你會開始認識到,只有屈指可數(shù)的一些問題類型,并且你能立馬指出如何解決這些問題。
起初,你毫無頭緒,不知道該做什么,就像我說的,沒關系——只要繼續(xù)努力即可。
另外,不要忘了去看看其他人是如何解決這些讓你疲于應對的問題的。嘗試著去理解為什么他們要用這樣的方式去解決特定的問題。
這是我用于學習如何解決這類問題的最佳途徑之一。
我會看看TopCoder上頂級程序員的解決方案,從中我學到了很多東西。
一旦你可以用你所學的編程語言解決這些類型的編程問題,那么你不僅相當接近于掌握語言,而且通過編碼面試將會成為一件輕而易舉的事情,因為其他的候選人碰到問題只能汗流浹背,自愧不如。
即使是寫一本書也一個相當大的事業(yè),我很高興能踏上這個旅程。
我希望你能和我在這條道路上一起前行。
【如何學好Java語言編程】相關文章:
Java語言的編程特點03-18
Java編程語言應用的行業(yè)05-28
Java語言編程基礎知識06-16
沒有英語基礎怎么學好java語言08-04
如何自學PHP編程語言07-28
如何學習C語言編程10-28
java編程基礎07-26
淺談如何學好C語言09-03
Java編程語言初學者入門課程07-04
java教程之Java編程基礎09-12