近幾年互聯(lián)網(wǎng)的發(fā)展越來(lái)越好,在國(guó)外,Java程序員已經(jīng)成為高薪以及穩(wěn)定職業(yè)的代表,雖然國(guó)內(nèi)的有些程序員很苦逼,但是那只是少數(shù),按照國(guó)外的大方向來(lái)看,程序員還是一個(gè)很吃香的職業(yè)。根據(jù)編程語(yǔ)言的流行程度,Java語(yǔ)言排名現(xiàn)在基本是在編程語(yǔ)言排行榜前幾位,既然這么多人選擇了Java開(kāi)發(fā),今天就來(lái)說(shuō)下剛接觸Java編程的學(xué)員要克服的6個(gè)坎,在我們學(xué)習(xí)編程的過(guò)程中,肯定會(huì)遇到很多的困難,僅僅是靠興趣是不足以支撐我們走下去的,所以學(xué)習(xí)一門語(yǔ)言,就要克服6個(gè)坎。
不正確的學(xué)習(xí)動(dòng)機(jī)
不要只是為了編程而學(xué)編程,也不要因?yàn)槁?tīng)說(shuō)它很酷,很劃得來(lái)就來(lái)學(xué)編程。你得因?yàn)橐鉀Q問(wèn)題而學(xué)習(xí)編程,你得因?yàn)橄胍詣?dòng)化和改善生活而學(xué)習(xí)編程,你得因?yàn)橄胍獦?gòu)建應(yīng)用程序以造福社會(huì)來(lái)學(xué)習(xí)編程。
如果你只是喜歡編程,并希望以此作為職業(yè)的話,那么在之后的學(xué)習(xí)過(guò)程中,你可能會(huì)有一種強(qiáng)烈的沖動(dòng)想要放棄。這通常發(fā)生在事情變得艱難,學(xué)習(xí)體驗(yàn)變得痛苦的情況下。這時(shí)你會(huì)告訴自己,你不喜歡編程了,編程操作不適合你,覺(jué)得自己天生就成不了程序員。
這就是為什么你應(yīng)該考慮圍繞著完成項(xiàng)目設(shè)置目標(biāo)的原因。如果你的心里有計(jì)劃,或者你想要解決更高層次的問(wèn)題,那么你可以對(duì)自己說(shuō):“這可能不是一次愉快的經(jīng)歷,但是我真的想要解決這個(gè)大問(wèn)題,所以我一定要克服這個(gè)障礙。”
不知道從什么技術(shù)入手
很多人會(huì)問(wèn):“我應(yīng)該先學(xué)什么編程語(yǔ)言?”之所以會(huì)提出這個(gè)問(wèn)題,是因?yàn)樗麄儾恢雷约簽槭裁匆獙W(xué)習(xí)代碼。
一旦你下定決心去完成一個(gè)特定的項(xiàng)目,那么從什么語(yǔ)言入手這個(gè)問(wèn)題就變成一件很容易的事情:
如果你想構(gòu)建iOSapp,那么你需要學(xué)習(xí)ObjectiveC或Swift。
如果你想構(gòu)建Androidapp,那么你需要學(xué)習(xí)Java。
如果你想構(gòu)建Webapp,那么你需要學(xué)習(xí)JavaScript。
其實(shí)現(xiàn)在我們可以使用JavaScript來(lái)創(chuàng)建任何類型的項(xiàng)目——無(wú)論是簡(jiǎn)單的web和移動(dòng)app,還是高級(jí)的硬件項(xiàng)目。大多數(shù)行業(yè)中都有它的身影:音樂(lè)、醫(yī)療、游戲、時(shí)裝。這種語(yǔ)言非常值得學(xué)習(xí)。
不吸取解決任務(wù)中獲得的經(jīng)驗(yàn)
最好的情況是,你解決了任務(wù)并且結(jié)果證明非常不錯(cuò)。此時(shí),很多人往往就直接開(kāi)展下一個(gè)任務(wù)。但是如果你這樣做的,那么你浪費(fèi)了一個(gè)很好的學(xué)習(xí)機(jī)會(huì)。
希望你能夠用以下問(wèn)題來(lái)挑戰(zhàn)自我,幫助自己成長(zhǎng):
哪些邊界情況會(huì)導(dǎo)致我的代碼失敗?即使現(xiàn)在還沒(méi)有失敗,有哪些應(yīng)用程序狀態(tài)可能會(huì)破壞代碼?
我的代碼是否足夠整潔?對(duì)其他開(kāi)發(fā)人員,甚至是自己而言,代碼是否易于理解和改變?因?yàn)橐院罂赡苄枰恼[藏在這段代碼中的問(wèn)題,或者根據(jù)其他產(chǎn)品規(guī)格改變代碼。
我的方法是比較好的嗎?有沒(méi)有其他選項(xiàng)是我可以選擇使用的?各個(gè)方案的利弊?這任務(wù)是否值得用不同的方式解決?
此模塊與其他模塊是如何交互的?是否會(huì)對(duì)其他模塊造成負(fù)面影響?是否容易被其他模塊影響?
不能學(xué)以致用,以及責(zé)備自己
很快大多數(shù)學(xué)習(xí)者掌握了理論知識(shí),甚至完全可以自己來(lái)解釋某個(gè)代碼片段的工作原理。理論只是概念的有限集合。
習(xí)者碰到的大問(wèn)題在于,實(shí)際應(yīng)用理論來(lái)解決問(wèn)題并編寫(xiě)新代碼的時(shí)候。這中間的差距實(shí)際上就是技能空白。
認(rèn)為自己不夠聰明,或者覺(jué)得自己沒(méi)有天賦。這其實(shí)跟聰明天賦沒(méi)有關(guān)系,你只是需要練習(xí)技能的過(guò)程:
選擇一個(gè)復(fù)雜的項(xiàng)目。理想情況下,這項(xiàng)目得能夠激發(fā)你的興趣。
將這個(gè)任務(wù)分割成既小又獨(dú)立的任務(wù)。例如,“實(shí)現(xiàn)登錄頁(yè)面”是一個(gè)很大的任務(wù)。解決一個(gè)任務(wù)不應(yīng)該超過(guò)20行左右的代碼。下面這些提示有助于成功做到這一點(diǎn):
如果你不能解決這個(gè)任務(wù),那么進(jìn)一步將它分割成更小的任務(wù)。一個(gè)任務(wù)一次不應(yīng)該使用太多的理論概念。
一次專注一項(xiàng)任務(wù),而不是并行解決多任務(wù)。不要跳到下一個(gè)任務(wù),除非你已經(jīng)徹底測(cè)試過(guò)當(dāng)前任務(wù),并確信沒(méi)有問(wèn)題。
如果你不這么做,而此時(shí)應(yīng)用程序又出現(xiàn)了問(wèn)題,那么你就不知道你正在并行解決的多任務(wù)中到底是哪個(gè)出了問(wèn)題,尋找起來(lái)就麻煩多了。
確保自己在開(kāi)始任務(wù)之前知道所有必要的理論知識(shí)。有時(shí)候,你可能不知道需要學(xué)習(xí)什么理論,這很正常,所以你需要向他人尋求幫助:程序員朋友,導(dǎo)師。
最后,你解決了任務(wù)。在解決任務(wù)的過(guò)程中,你可能會(huì)碰到很多問(wèn)題,你需要做的就是吸取教訓(xùn),這也是下面要說(shuō)的要點(diǎn):
解決方案不管用
這是編程中常見(jiàn)的情況,哪怕是那些經(jīng)驗(yàn)豐富的程序員也是如此。你的解決方案之所以不起作用最大的可能是你的代碼中存在著bug。
如何修改?方法是調(diào)試代碼。這也是作為一個(gè)程序員需要學(xué)習(xí)的重要技能之一。這不是可以隨便湊合的事,也不是玩幸運(yùn)猜猜猜游戲。如何尋找bug是有具體步驟的。而且很多書(shū)中都有教這個(gè)技能。
不幸的是,這是很多新手程序員失去動(dòng)力選擇放棄的難關(guān)。很少有課程會(huì)說(shuō)明調(diào)試的重要性。如果你不知道如何正確地調(diào)試,那么它就是不可戰(zhàn)勝無(wú)法攻克的難關(guān)。
很多人擔(dān)心會(huì)花太多時(shí)間用于調(diào)試代碼。這是正常的,在你第一年的編程規(guī)劃中這是不可避免的。
甚至,你還得學(xué)著去喜歡調(diào)試。不妨將此看成是一個(gè)機(jī)會(huì),一個(gè)修改錯(cuò)誤提高編程能力的機(jī)會(huì)。當(dāng)你解決了一個(gè)bug,可以問(wèn)問(wèn)自己這個(gè)問(wèn)題:“我為什么會(huì)犯這種錯(cuò)誤?以后我該如何預(yù)防再犯?”
還有一個(gè)好主意是將找到的bug寫(xiě)成編程日記,方便你總結(jié)和學(xué)習(xí)。
不去應(yīng)用你學(xué)到的理論
這篇文章也是理論知識(shí),除非你能夠?qū)W以致用,否則它是不會(huì)發(fā)揮一絲一毫作用的——多多應(yīng)用,直到它變成潛意思的例行程序。
編程其實(shí)就是通過(guò)形成良好的習(xí)慣來(lái)幫助你解決各種問(wèn)題的過(guò)程。
想要知道更多相關(guān)內(nèi)容關(guān)注“動(dòng)力節(jié)點(diǎn)Java學(xué)院”微信公眾號(hào)獲取,現(xiàn)在報(bào)名學(xué)Java,可免費(fèi)參加動(dòng)力節(jié)點(diǎn)的Java零基礎(chǔ)免費(fèi)試學(xué)班級(jí),親自考察教學(xué)質(zhì)量,針對(duì)不方便前來(lái)的同學(xué),可以在線觀看動(dòng)力節(jié)點(diǎn)Java全套免費(fèi)視頻,趕快學(xué)起來(lái)吧。