很多新手程序員在一開始都是滿懷熱情地投入到編程的學(xué)習(xí),但卻在學(xué)習(xí)過程中處處碰壁,導(dǎo)致放棄。
編程的難點在于邏輯、數(shù)學(xué)、算法,還是模塊、框架、接口的掌握?但這些僅僅是編程語言中的設(shè)計模式,只要你愿意投入時間和精力去學(xué)習(xí),哪怕是通過重復(fù)記憶,也能夠熟練掌握這些知識。它們并非編程的真正難題。
那么,我們?yōu)槭裁磿X得編程難呢?我們又該如何攻克這些難點?我們一起往下看??
一、不知道從什么技術(shù)入手
在編程的世界里,選擇正確的起點往往讓人困惑。許多人在開始學(xué)習(xí)編程時,會問自己:“我應(yīng)該從哪種編程語言開始?”
這個問題的背后,是他們對學(xué)習(xí)編程的目的尚不明確。當(dāng)你有了明確的項目目標(biāo)時,選擇編程語言就變得簡單許多。
如果你想構(gòu)建iOS app,那么你需要學(xué)習(xí)Objective C或Swift。
如果你想構(gòu)建Android app,那么你需要學(xué)習(xí)Java。
如果你想構(gòu)建Web app,那么你需要學(xué)習(xí)JavaScript。
……
如果依然猶豫不決,那么不妨咨詢下某個程序員的意見。一旦你明確了你的項目目標(biāo),那么他就能很快地為你推薦適合你使用的技術(shù)。
實際上,選擇語言的過程風(fēng)險相對較小,因為不同的語言之間往往有許多共通之處,這使得從一種語言過渡到另一種語言變得更加容易。
二、不能學(xué)以致用,以及責(zé)備自己
學(xué)習(xí)過程中,理論知識的學(xué)習(xí)相對容易,但最大問題玩玩出現(xiàn)在應(yīng)用理論來解決問題并編寫新代碼的時候。這中間的差距實際上就是技能空白。
很多人做不出項目,會認(rèn)為自己不夠聰明,或者沒有天賦,其實不是的,你只是需要練習(xí)技能的過程。
三、不吸取解決任務(wù)中獲得的經(jīng)驗教訓(xùn)
如果你順利完成了一項任務(wù),不要急于進(jìn)入下一個,相反,應(yīng)該反思并從中學(xué)習(xí)。這樣才不會浪費一個絕佳的學(xué)習(xí)機(jī)會。
可以多問問自己:代碼是否能夠應(yīng)對邊界情況?它是否足夠整潔,易于理解和維護(hù)?你的解決方案是否最優(yōu)?代碼與其他模塊的交互是否順暢?……
這些反思將幫助你成長。
四、你不知道如何處理一個任務(wù)
當(dāng)你面對一個任務(wù)感到無從下手時,你可能會隨機(jī)地去嘗試,或者從其他地方復(fù)制一些你自己也不明白的代碼。不要這么做,理解你為什么會遇到障礙是解決問題的第一步。
可能是因為理論知識掌握不牢固,或者任務(wù)過于龐大,需要分解為更小的部分,或者你忽略了一些關(guān)鍵概念。無論原因如何,找到它并解決它。
五、你知道如何解決任務(wù),但解決方案不管用
這是編程中最常見的情況,哪怕是那些經(jīng)驗豐富的資深程序員也是如此。你的解決方案之所以不起作用最大的可能是你的代碼中存在著bug。
這時,調(diào)試代碼的能力就顯得至關(guān)重要。很多人擔(dān)心會花太多時間用于調(diào)試代碼。這是正常的,在你第一年的編程規(guī)劃中這是不可避免的。
調(diào)試不僅是修復(fù)bug的過程,也是提高編程技能的重要途徑。
六、不知道如何接受幫助
在學(xué)習(xí)過程中,不要只是被動接受幫助。當(dāng)你從書籍、課程、教程或社區(qū)中獲得幫助時,要深入理解背后的原理和概念。
例如:你在某個問題上花了10小時,最后終于有人提供一個解決方案,你往往會采取“拿來主義”——采納解決方案之后就直接跳到一個任務(wù)中去。千萬別這樣做。
當(dāng)別人提供了解決方案,不要急于應(yīng)用,而是要思考自己的思維過程,了解哪里出了問題,以及如何改進(jìn)。同時,了解他人的解決思路,從中學(xué)習(xí)。
----------
最后,不要忽視將學(xué)到的理論知識應(yīng)用于實踐。編程是通過不斷實踐,形成良好習(xí)慣來解決問題的過程。只有將理論應(yīng)用于實踐,才能真正掌握編程技能。