感到停滯不前?這4種方法讓你的編程技能更上一層樓
本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)
拿破侖有句名言:“戰(zhàn)爭需要三樣?xùn)|西——錢、錢、更多的錢。”這和編程中需要學(xué)習(xí)的東西異曲同工——編碼、編碼、再編碼。這是唯一提升編程技能的可行方案。
也許這個道理你早就知道了,也許你已經(jīng)當(dāng)了很多年的碼農(nóng)。但總有些時候,你還是會感覺自己停滯不前??赡苁且?yàn)樯硖幱谝粋€沒什么挑戰(zhàn)的長期項(xiàng)目之中,亦或是仍在求職,不知如何從人群中脫穎而出。
總之,你不停地編寫代碼卻收獲甚微。每個項(xiàng)目都是相似的,因此你解決問題的方式也都類似。要想脫離這種惡性循環(huán),你需要跳出思維定勢,勇于挑戰(zhàn)自我。這里有一些建議可以幫助你突破瓶頸。
1.重建現(xiàn)有工具
反饋不足是編碼學(xué)習(xí)的最大阻礙之一。剛開始的時候,這可能不是什么大問題,因?yàn)槟銜玫揭恍┘磿r反饋,比如當(dāng)你想讓你編寫的代碼運(yùn)行時,它不能進(jìn)行正常運(yùn)行。
但越有經(jīng)驗(yàn),你就會面臨越多挑戰(zhàn)。你需要考慮設(shè)計(jì)模式、架構(gòu)、可讀性、性能等等。你會發(fā)現(xiàn)每個問題都有多個解決方案,無從評判你的方案合理與否。
幸運(yùn)的是,有一種方式可直接獲得關(guān)于編碼的反饋或不同視角:通過重建現(xiàn)有程序庫或其他工具。你只需要找到某種工具(優(yōu)先考慮常用工具),并知曉其功能。然后確定其核心功能。仔細(xì)閱讀它的程序說明書,確認(rèn)已經(jīng)掌握其應(yīng)用程序接口。現(xiàn)在,就可以準(zhǔn)備編寫代碼了。
你無需重新創(chuàng)建一切——只需要重建一個或幾個最常見的使用案例。如果進(jìn)展順利,花幾天時間即可完成。完成編碼后,接下來的部分就有趣多了。你要檢查代碼,分析你所做的決定,考慮可能出現(xiàn)的極端案例和漏洞并將其標(biāo)記下來。
然后打開你所重建工具的源代碼,回溯代碼以及同樣問題的解決方案。思考一下,現(xiàn)在方案是否與原方案相似,是否有所改進(jìn),是否處理方式欠妥,以及其中的原因。你要試著理解程序庫代碼背后的決策。
許多程序庫都是由成熟的程序員創(chuàng)建,并由社區(qū)擴(kuò)展。通過檢查其代碼,你會學(xué)到新的模式以及解決問題的新方式。下次再遇到類似問題時,你便會將新知識投入實(shí)踐。
2.結(jié)對編程
結(jié)對編程是一種頗具爭議的方式。這是一種軟件開發(fā)技術(shù),常指兩位程序員共同合作,但僅有一方負(fù)責(zé)編寫代碼,而另一方則負(fù)責(zé)觀察并回顧整體工作。這兩位程序員的角色會進(jìn)行定期調(diào)換。這種方法的缺陷很明顯:只有一位程序員編程,所以軟件創(chuàng)建時間也就更長;但優(yōu)勢便是軟件編寫質(zhì)量會更好。
或許結(jié)對編程對于軟件開發(fā)的好處有待商榷,但其對于學(xué)習(xí)的幫助是顯而易見的。
你編寫代碼時,對方會關(guān)注你的思維模式及思考方式。分析創(chuàng)建代碼的過程,這對你們雙方都是一種挑戰(zhàn)。通過觀察其他人編寫代碼,你會了解到對方的思維模式。你幾乎不大可能與其有著一樣的問題解決方案,所以這是了解另一種看問題角度的絕佳機(jī)會。
結(jié)對編程可能會有一些難度。為了使其更簡單,更高效,你應(yīng)該找一個與你水平相當(dāng)?shù)慕Y(jié)對伙伴。如果他們資歷太淺,你需要單方面不斷對其進(jìn)行指導(dǎo);如果他們技巧太成熟,他們很快就會感到無聊,對一切任務(wù)大包大攬。
3.約束自我
創(chuàng)造力十分難得。一旦習(xí)慣一種解題思路,你甚至都不會考慮替換方案,就像掛了自動擋一樣。程序員不是唯一苦尋創(chuàng)造力的職業(yè)。對于作家來說,創(chuàng)造力更是一個大問題。為了激發(fā)創(chuàng)造力,他們開發(fā)出了一些小技巧。
約束是激發(fā)創(chuàng)造力的最佳技巧之一。對于作家來說,這種約束可能是針對文章的字?jǐn)?shù)(比如用少于十個單詞寫一個故事);也可能是針對單詞的使用(比如文章中不能出現(xiàn)以“S”開頭的單詞)。
作為一名程序員,有無數(shù)方法通過限制自己來獲取創(chuàng)造力,比如:
- 避免一些語言特性(例如,代碼中不出現(xiàn)if和switch語句)。
- 降低數(shù)據(jù)可變性——盡可能使用純函數(shù),甚至可以使用相關(guān)工具,如Immutable來實(shí)現(xiàn)不變性。
- 使用測試驅(qū)動開發(fā)——這是一種強(qiáng)大的技術(shù),可以優(yōu)化你的代碼,促使你改變思維模式。
- 限制時間(例如,給自己三天時間來開發(fā)一款應(yīng)用或參加一場黑客馬拉松)。
約束自我的重點(diǎn)不在于約束,你可以任意選擇自己感興趣的方法,重點(diǎn)在于范式的轉(zhuǎn)變。這種約束會迫使你重新思考基本原理。重新思考,精煉想法,你會收獲成長。
4.編寫技術(shù)文章
長時間的編程工作會讓你覺得自己的工作十分了解。但我敢保證,你并沒有。在寫技術(shù)文章的過程中,你會感到十分震驚,你曾經(jīng)對許多編程方面的事情習(xí)以為常,不經(jīng)思考、一遍又一遍地重復(fù)著同樣的步驟。
當(dāng)以書面形式解釋編程過程時,你會開始考慮你的假設(shè)和方法,質(zhì)疑某些代碼是否是問題的核心,其它代碼是否冗余或過分復(fù)雜。
寫作會使你更加有條理地、批判地思考你所編寫的代碼,將其進(jìn)行重構(gòu)以及簡化,以創(chuàng)作出對其他人有幫助的學(xué)習(xí)材料。
這樣做的意義何在?你在學(xué)習(xí)。表面上看是你在教別人,但其實(shí)是你在不斷學(xué)習(xí)。要想深入地了解一門學(xué)科,沒有比教授他人更有效的方式了。好好利用這一點(diǎn),你將獲得突飛猛進(jìn)的成長!