今年轉(zhuǎn)行開(kāi)始做前端程序員,新入職場(chǎng)公司安排一個(gè)全棧大牛帶我鲤看。
從決定轉(zhuǎn)行起,自學(xué)了大概半年,感覺(jué)還不錯(cuò),比傳統(tǒng)的老師授課模式效果好多了缘揪。在這個(gè)過(guò)程中我領(lǐng)悟了一個(gè)道理:
學(xué)習(xí)說(shuō)到底還是自己的事,有人教自然好,但是主要還是依賴(lài)自己下功夫。
事實(shí)上,今天我還是這么認(rèn)為的,所以當(dāng)初對(duì)于公司的安排我不以為意刨摩。沒(méi)有想到,在三個(gè)月后前輩給了我兩個(gè)意外:
- 他刷新了我對(duì)學(xué)習(xí)編程的認(rèn)識(shí)寺晌。
- 他在我入職三個(gè)月后離職了世吨。
工作已經(jīng)半年了,我在實(shí)踐中不斷反思他說(shuō)過(guò)的話(huà),也逐漸能明白他當(dāng)時(shí)的意思,現(xiàn)在做一下總結(jié)澡刹。
注重實(shí)踐,理解放后面
工作中會(huì)遇到各種難題,然后我去找前輩請(qǐng)教時(shí), 常常本被前輩說(shuō)問(wèn)了一個(gè)錯(cuò)誤的問(wèn)題,并念叨著:“注重實(shí)踐,理解放后面。”學(xué)習(xí)就是對(duì)知識(shí)的理解,為什么要放后面呢?我們來(lái)剖析一下這個(gè)問(wèn)題:
沒(méi)必要討論原理,每個(gè)人的理解不同
所謂的理解,就是對(duì)代碼實(shí)現(xiàn)原理的理解,當(dāng)前代碼實(shí)現(xiàn)邏輯的背后往往還有源碼,而源碼的背后還有更深的源碼,所以原理本身是復(fù)雜且有相對(duì)性的耘婚。因?yàn)檫@種特性,導(dǎo)致了每個(gè)人對(duì)原理的理解是不同的罢浇。對(duì)于這種復(fù)雜且沒(méi)有標(biāo)準(zhǔn)答案的問(wèn)題,討論起來(lái)對(duì)現(xiàn)實(shí)的意義很小,所有沒(méi)有必要討論。若理解是正確的話(huà),可以找到方法來(lái)證明,不需要跟人討論
代碼是可以不會(huì)騙人的,所以相比于跟人討論,不管從效率角度還是不被誤導(dǎo)的角度來(lái)看,用代碼驗(yàn)證理解都是最佳選擇。沒(méi)有足夠的前置知識(shí),無(wú)法談理解
當(dāng)雙方?jīng)]有具備在一個(gè)層次上的相關(guān)的知識(shí)來(lái)談原理, 往往不構(gòu)成交流,只是雞同鴨講,浪費(fèi)時(shí)間嚷闭。關(guān)注解決問(wèn)題的方法才能離真相更近
在不斷遇到問(wèn)題,尋找方法解決問(wèn)題中,自然會(huì)對(duì)代碼產(chǎn)生理解,而這個(gè)理解是不斷變化的,也會(huì)離真相越來(lái)越近攒岛。
重要的是不斷找方法解決問(wèn)題,在這個(gè)過(guò)程中加深理解。小心復(fù)述的陷阱
我一直有一個(gè)復(fù)述的習(xí)慣, 在別人對(duì)我講話(huà)后, 我會(huì)復(fù)述一遍以確定是否理解正確胞锰。通常情況下這個(gè)習(xí)慣有利于提高溝通效率,在某些時(shí)候這個(gè)習(xí)慣也會(huì)有害灾锯。
當(dāng)我們?cè)趶?fù)述的時(shí)候,會(huì)強(qiáng)化自己的記憶,比如大聲朗讀有助于記憶,能被唱出歌詞也跟容易被記住。同樣復(fù)述理解時(shí)會(huì)強(qiáng)化它們?cè)诖竽X中的印象嗅榕。
之前已經(jīng)講了理解是在實(shí)踐中不斷變化的,所以當(dāng)前的理解往往是片面的,而這些片面的理解有可能阻礙我們之后正確得理解代碼顺饮。
所以我們應(yīng)該重視重現(xiàn)方法而不是復(fù)述原理,因?yàn)閺?fù)述原理可能會(huì)強(qiáng)化我們錯(cuò)誤的理解。
經(jīng)驗(yàn)路線(xiàn)和深度路線(xiàn)
程序員在經(jīng)歷過(guò)職場(chǎng)的3年野蠻成長(zhǎng)后,大體會(huì)分化為兩種路線(xiàn):廣度路線(xiàn)和深度路線(xiàn)凌那。
所謂廣度路線(xiàn)就是在有一定基礎(chǔ)后,將更多的精力花在接觸各種不同方面的技術(shù)或工具上兼雄。
所謂深度路線(xiàn)就是將更多的精力投入到進(jìn)一步加深工作領(lǐng)域內(nèi)的知識(shí)和能力中。
在實(shí)踐工作中,我們依賴(lài)的東西很多,單純追求深度路線(xiàn),并不能很好的適應(yīng)不斷變化的 IT 行業(yè)帽蝶。
由于技術(shù)間有很多東西是相通的, 所以在學(xué)習(xí)新技術(shù)的時(shí)候,學(xué)習(xí)效率和掌握水平往往由之前已掌握的技術(shù)深度決定赦肋。而單純追求廣度路線(xiàn),由于深度不夠,所以新技能的能力不足以有效解決工作中的各種問(wèn)題。
總體而已, 深度和廣度需要平衡發(fā)展励稳。
另一方面, 做了幾年的程序員,容易自滿(mǎn),再加上深度路線(xiàn)需要持續(xù)的鉆研和實(shí)踐,且很容易自以為懂了而停滯不前,所以有些程序員再不往深度方向走了佃乘。于是整天嘴里都跑著新名詞,談著架構(gòu),但是不能解決工作中碰到的難題。
避免趕代碼
現(xiàn)在都在追求小步快跑,快速迭代,在加上行業(yè)節(jié)奏快,老板催得緊,所以加班對(duì)程序員來(lái)說(shuō)是家常便飯麦锯。
盡管我們都知道只寫(xiě)自己熟悉的代碼,不學(xué)習(xí),能力提不高,工資也提不高,但是面對(duì) deadline 的壓力,如何能靜心鉆研下代碼的工作原理?
想解決工作和學(xué)習(xí)的平衡問(wèn)題,首先我們的覺(jué)察到自己是否正在趕代碼以完成工作恕稠。
我有每天寫(xiě)日記的習(xí)慣,所以我的自我覺(jué)察方法就是每天寫(xiě)日記時(shí),問(wèn)問(wèn)自己,是否在趕代碼。
趕代碼的標(biāo)準(zhǔn)如下:
直接 Copy&Paste 網(wǎng)上搜索到的代碼,不管其中的邏輯扶欣。
我們經(jīng)常會(huì)引用一些代碼來(lái)解決問(wèn)題,引用本無(wú)可厚非,但是也需要知道插入進(jìn)來(lái)的這段代碼到底是在干嘛,和之前自己的寫(xiě)法有什么不同鹅巍。碰到問(wèn)題, 試各種寫(xiě)法,一旦試成功后就完事了, 不考慮到底幾種寫(xiě)法的區(qū)別。
我這方面比較嚴(yán)重的是 css 代碼, 只是胡亂拼湊各種參數(shù), 而沒(méi)有理解各種參數(shù)的實(shí)際作用料祠。只是單純參考文檔來(lái)寫(xiě),不思考這個(gè)框架或工具的內(nèi)部邏輯骆捧。
比如在學(xué)習(xí)使用一個(gè)框架的時(shí)候,會(huì)在各種demo 的代碼, 這時(shí)需要理解這些代碼的邏輯,而不是改改能用就行了。當(dāng)然不是要深入到源碼去理解,對(duì)于剛開(kāi)始使用的框架,只有大體知道每一塊代碼是干嘛用的就行了髓绽。
在察覺(jué)到自己的趕代碼行為后,還需要深入的思考下自己這么做的原因, 這里列舉下我察覺(jué)后的結(jié)果:
回避難點(diǎn)
當(dāng)代碼中遇到難點(diǎn)時(shí),應(yīng)該試圖弄清楚,而不是單純找個(gè) workgroud 的方法草草了事敛苇。獲得團(tuán)隊(duì)的認(rèn)同
團(tuán)隊(duì)的認(rèn)同感其實(shí)就是信任,首先培養(yǎng)信任是一個(gè)長(zhǎng)期的行為, 其次信任來(lái)自于任務(wù)的妥善完成, 只重視量而不重視質(zhì)的趕代碼行為顯然不是一個(gè)好的信任培養(yǎng)策略。享受做得快的快感
快速寫(xiě)出一堆可以用的代碼確實(shí)很產(chǎn)生快感,但是這種快感只在短期有效顺呕。我們應(yīng)該提高快感品位,做能產(chǎn)生長(zhǎng)期快感的事情枫攀。
先框架還是先語(yǔ)言
我們經(jīng)常會(huì)碰到多看語(yǔ)言書(shū)還是多學(xué)習(xí)框架的選擇題。之前我一直覺(jué)得顯然語(yǔ)言更重要,框架總在不停的出新,而語(yǔ)言的變化性就小得多株茶。
現(xiàn)在發(fā)現(xiàn),對(duì)于程序員新手來(lái)說(shuō),先學(xué)框架更重要来涨。因?yàn)檎莆湛蚣芎笕菀渍业焦ぷ髌脚_(tái),并快速成長(zhǎng)到能為團(tuán)隊(duì)產(chǎn)出。一個(gè)工作平臺(tái)對(duì)新手程序員的成長(zhǎng)至關(guān)重要, 至于語(yǔ)言和代碼能力,可以在之后來(lái)補(bǔ)启盛。
至于技術(shù)的選擇,對(duì)新手來(lái)說(shuō)最好的方式就是跟著項(xiàng)目走,這樣更容易實(shí)踐和成長(zhǎng)蹦掐。技術(shù)和技術(shù)之間有很多是相通的,當(dāng)學(xué)習(xí)到一定深度時(shí),再轉(zhuǎn)而學(xué)習(xí)其他技術(shù)也會(huì)很快技羔。
關(guān)于工具的選擇
我們是生活在“輪子”上的一群人, 整天找輪子,比較輪子,甚至造輪子。程序員界激烈的“編輯器圣戰(zhàn)”,“什么是最好語(yǔ)言”可以看出我們對(duì)輪子的熱愛(ài)卧抗。
但是我們?cè)谡垓v輪子上也浪費(fèi)不少時(shí)間藤滥。總想找到一個(gè)"完美"的輪子,優(yōu)雅地解決我們所有的問(wèn)題,又足夠簡(jiǎn)潔社裆。之后我明白了,關(guān)于輪子的選擇,不用想那么多,也不用討論那么多,更不沒(méi)必要去爭(zhēng)論什么拙绊。
我們只需要多嘗試,然后選個(gè)大體適合自己的就行了。
別磨刀耽誤了砍柴泳秀。
博客和書(shū)
讀書(shū)和看博客是一般擅長(zhǎng)閱讀學(xué)習(xí)的人的常用渠道时呀。那么這兩種方式有什么不同呢?
由于技術(shù)發(fā)展很快,所以書(shū)本的出版往往滯后,所以書(shū)上的有些知識(shí)其實(shí)是過(guò)時(shí)了的。但是作者為了寫(xiě)一本書(shū)會(huì)積累更多,沉淀更久,所以寫(xiě)出來(lái)的東西也會(huì)更有深度和總結(jié)性晶默。
因此我們?nèi)粝爰夹g(shù)進(jìn)階, 掌握核心思想,就應(yīng)該多讀書(shū)谨娜。
與書(shū)本相反,博客更新很快,篇幅很短,所以一些關(guān)于新技術(shù)的討論往往只能在博客里找到。由于篇幅有限,博客的作者只會(huì)針對(duì)一個(gè)點(diǎn)或幾個(gè)點(diǎn)來(lái)闡述, 相比于書(shū)會(huì)顯得淺顯和片面磺陡。
因此我們?nèi)粝肓私庑录夹g(shù)或者快速入門(mén),可以多看看博客趴梢。