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