學(xué)習(xí)編程的過(guò)程中可能會(huì)遇到“25”個(gè)“坑”,不僅初學(xué)者可能中招,專(zhuān)業(yè)人士有時(shí)也難以逃脫,我自己也毫不例外。
0. 忽視了編程終究是以人為本的。是的,機(jī)器的確會(huì)執(zhí)行你的代碼,但編程是為人們解決問(wèn)題的,將他們的需求轉(zhuǎn)換為由其他人(或你自己線(xiàn)下)讀取,維護(hù)和修改的代碼。
1. 未能花充足的時(shí)間練習(xí)編程。 根據(jù)工作或日程安排,你可能會(huì)花費(fèi)大量時(shí)間在與編程相關(guān)的任務(wù)上,但實(shí)際上這些并非編程本身。
2. 停留在你正在學(xué)習(xí)的某個(gè)技術(shù)的表面。 沾沾自喜于自己掌握了足夠完成任務(wù)的基礎(chǔ)知識(shí),對(duì)技術(shù)的了解卻只流于表面,未有觸及核心內(nèi)容。
3. 在編程學(xué)習(xí)中挑挑揀揀,無(wú)法持之以恒。一開(kāi)始學(xué)習(xí)Rails,半道兒你發(fā)現(xiàn)Phoenix也不錯(cuò),哦,學(xué)點(diǎn)JavaScript吧,這樣就能用Node.js 了......從TJ轉(zhuǎn)到Go然后堅(jiān)持了一陣子......說(shuō)起來(lái)Rust好不好用來(lái)著?
很快,一周內(nèi)你的瀏覽歷史凈是這些東西,“Web開(kāi)發(fā)者還是數(shù)據(jù)科學(xué)家”,“Clojure死了嗎?”,“Clojure 對(duì)比 Elixir”,“Crystal足夠成熟嗎”,“Golang有什么好的架構(gòu)”,“Phoenix 對(duì)比 Buffalo”,以及“Kotlin ”與網(wǎng)頁(yè)開(kāi)發(fā)。
4. 在線(xiàn)閱讀書(shū)籍和觀(guān)看課程,卻不練習(xí)相應(yīng)的技能,因此很快就會(huì)忘記它們。
5. 不關(guān)心基礎(chǔ)知識(shí)。如果沒(méi)有對(duì)象關(guān)系映射(O/R Mapping)的輔助,連最基本的SQL連接都搞不定。
6. 缺乏足夠的耐心或自律來(lái)完成學(xué)習(xí)過(guò)程和掌握任何技術(shù)所需的步驟。 (碼農(nóng)翻身老劉:《學(xué)習(xí)還是要死磕啊》)
7. 疲于應(yīng)付日常編程中的各種問(wèn)題,缺乏繼續(xù)學(xué)習(xí)的長(zhǎng)遠(yuǎn)規(guī)劃安排。
8. 浪費(fèi)太多時(shí)間在各種框架和庫(kù)(如Angular,React和Vue)中進(jìn)行選擇,而不是僅僅認(rèn)準(zhǔn)一個(gè),使用它,并且只有在你真正需要時(shí)才切換其他。 基本上講,一心只想找到能一勞永逸的萬(wàn)能鑰匙,而不愿意先充分利用手頭資源。
9. 無(wú)法認(rèn)識(shí)到現(xiàn)代編程需要多語(yǔ)言協(xié)作的性質(zhì)。 在大多數(shù)領(lǐng)域,期望一種編程語(yǔ)言成為解決所有問(wèn)題的靈丹妙藥是荒誕不經(jīng)的。 同樣,過(guò)于執(zhí)著把自己分類(lèi)成X或Y程序員,而不是"偏愛(ài)X或Y語(yǔ)言的程序員"。
10. 害怕嘗試新技術(shù)。不要只是閱讀某些新興技術(shù)(例如區(qū)塊鏈或聊天機(jī)器人)相關(guān)的文章,而是自己動(dòng)手打開(kāi)虛擬機(jī)試用一下,即使它涉及到你不熟悉的編程語(yǔ)言或API(應(yīng)用程序編程接口)。
11. 自己沒(méi)有先行思考而后再進(jìn)行搜索,谷歌上的確能找到辦法,但是看到別人給出的辦法之后又很懊惱,覺(jué)得自己應(yīng)該能依靠自己的腦子想出來(lái)。
12. 學(xué)習(xí)時(shí)沒(méi)有進(jìn)行許多零碎練習(xí)和開(kāi)展項(xiàng)目。
13. 因害怕被評(píng)判,而不敢與他人分享代碼或讓他人檢查自己的代碼。
14. 不向更有經(jīng)驗(yàn)的開(kāi)發(fā)人員尋求一對(duì)一輔導(dǎo)。
15. 期望在不切實(shí)際的時(shí)間內(nèi)一次學(xué)習(xí)所有東西(例如,一個(gè)月內(nèi)掌握iOS開(kāi)發(fā))。
16. 對(duì)于事業(yè)心強(qiáng)的人而言,不去嘗試那些貌似無(wú)利可圖的有趣項(xiàng)目。
17. 因?yàn)楹ε陆o人以愚蠢或菜鳥(niǎo)的印象(事實(shí)并非如此)而不去發(fā)問(wèn)。
18. 如果在創(chuàng)建程序時(shí)只是將一些類(lèi)庫(kù)粘合在一起,而不是用更復(fù)雜的語(yǔ)言來(lái)寫(xiě)“高級(jí)”算法,就覺(jué)得自己不是真正的程序員。
19. 讓習(xí)得最佳實(shí)踐的欲望阻礙你掌握特定語(yǔ)言或技術(shù)的基礎(chǔ)知識(shí)的能力。 例如,在開(kāi)始創(chuàng)建項(xiàng)目之前,感覺(jué)自己需要了解有關(guān)設(shè)計(jì)模式的整本書(shū)或掌握TDD / BDD。
20. 完美主義。 讓完美成為“足夠好”的敵人。 從不交付任何東西,一直卡在最后階段。 (但保持平衡很重要,所以不要為了交付而交付可怕的破碎軟件。)
21. 與前一點(diǎn)相關(guān),忽略了編程是循序漸進(jìn)的:應(yīng)該先使其工作,然后再讓其變快,再讓代碼簡(jiǎn)潔明了。期待從一開(kāi)始就有一個(gè)絕佳的解決方案是不可能的。
22. 覺(jué)得自己做的不夠好,如果你不是傳統(tǒng)觀(guān)念中“程序員”的形象,那可能就有些不妙——因?yàn)槿绻麤](méi)有與你形象類(lèi)似(比如,女性,少數(shù)族裔等)的成功例子供你參考,你更傾向于覺(jué)得自己“不優(yōu)秀”。這就解釋了女性和少數(shù)族裔在科技界的重要性——他們?yōu)樗颂峁?biāo)桿,增加他們向上的信心和動(dòng)力。
23. 編寫(xiě)代碼并閱讀書(shū)籍學(xué)習(xí)編程,但從不閱讀他人的代碼。Open Source為我們提供了一個(gè)驚人的資源,可以大大促進(jìn)我們對(duì)編程和最佳實(shí)踐的理解。
24. 未能接觸到其他范例或領(lǐng)域。就因?yàn)槟闶蔷W(wǎng)頁(yè)開(kāi)發(fā)人員,就不去了解其他類(lèi)型的開(kāi)發(fā)。就因?yàn)槟阒烂嫦驅(qū)ο蟮木幊?,就不去學(xué)習(xí)函數(shù)式編程。
25. 不教別人你學(xué)到的東西。沒(méi)有什么能比向別人解釋更能鞏固自己所學(xué)。即使只是為了教學(xué)而學(xué)習(xí)也能提高你的學(xué)習(xí)能力。
這樣你就了解了以上25個(gè)陷阱。哦,實(shí)際上是26個(gè),程序員都習(xí)慣從0開(kāi)始的。
結(jié)論
這一切都是想說(shuō):
你已經(jīng)夠好了。你絕對(duì)可以做到。要做的就是當(dāng)心這些陷阱,制定計(jì)劃,投入其中,然后一步步來(lái)。
在學(xué)習(xí)編程(或提高當(dāng)前水平)時(shí),我推薦使用編碼/閱讀/教學(xué)法。 也可以在學(xué)習(xí)中對(duì)一個(gè)實(shí)際的項(xiàng)目和其他小練習(xí)進(jìn)行編碼。 然后閱讀書(shū)籍以及其他人的代碼。 最后,在線(xiàn)或面對(duì)面教授他人你學(xué)到的東西。你不需要成為專(zhuān)家就可以做到這些了。