
有個(gè)小伙伴在微信上問(wèn)我:
我剛工作半年,有時(shí)候?qū)τ贘ava的發(fā)展方向有點(diǎn)迷茫,Java的范圍是在是太廣了,我有時(shí)候會(huì)不知道從哪開(kāi)始入手,我想問(wèn)一下,您有什么好的建議嗎?
我理解這位朋友的問(wèn)題是:工作中該如何發(fā)現(xiàn)自己要學(xué)什么,怎樣構(gòu)建自己的技能樹(shù)。這是一個(gè)非常重要的問(wèn)題,假如你不知道要學(xué)什么,那一旦你工作不那么忙時(shí)就會(huì)覺(jué)得無(wú)聊,只能通過(guò)瀏覽新聞、看小說(shuō)、打游戲等方式消磨時(shí)間消耗自己。這對(duì)自己的成長(zhǎng)和增值非常不利。所以,這次咱就來(lái)聊聊工作中學(xué)什么這個(gè)話題——這也是很多朋友在我訂閱號(hào)“程序視界”里頻繁問(wèn)題的話題。
根據(jù)我的經(jīng)驗(yàn),在開(kāi)發(fā)過(guò)程中,有兩種學(xué)習(xí)策略:一種是橫向拓展,也可以稱之為廣度學(xué)習(xí);一種是縱向深入,也可以稱之為深度學(xué)習(xí)。如果能貫徹這兩種學(xué)習(xí)策略,就會(huì)慢慢形成程序員最理想的技能結(jié)構(gòu)——T型,即在橫向上熟悉足夠多的知識(shí)和技能,在縱向上又精通某一領(lǐng)域。簡(jiǎn)單說(shuō)就是一專多能。
廣度學(xué)習(xí)

以C++語(yǔ)言為例,如果你做網(wǎng)絡(luò)方面的開(kāi)發(fā),就會(huì)遇到選擇哪個(gè)框架的問(wèn)題,libevent、ACE、Asio還是Qt Network?如果你做GUI開(kāi)發(fā),可能會(huì)在Qt、CEF、MFC、wxWidgets、DirectUI之間做個(gè)選擇。
選擇和了解的過(guò)程,是個(gè)人廣度學(xué)習(xí)的過(guò)程。你會(huì)快速了解每一種框架的優(yōu)缺點(diǎn),會(huì)搭建環(huán)境,會(huì)寫(xiě)一些Demo來(lái)對(duì)關(guān)鍵技術(shù)點(diǎn)和需求做驗(yàn)證……最終會(huì)根據(jù)文檔和實(shí)驗(yàn)結(jié)果來(lái)做出實(shí)際的選擇。這個(gè)過(guò)程非常難得,會(huì)快速拓寬個(gè)人的知識(shí)面。建議把每次了解到的技術(shù)框架都記錄下來(lái),有閑暇時(shí)可以進(jìn)一步學(xué)習(xí)。
即便你不是預(yù)研技術(shù)方案的工程師,而是別人定方案你來(lái)開(kāi)發(fā),也可以有意地讓自己經(jīng)歷這個(gè)選擇過(guò)程,只需要問(wèn)自己一個(gè)問(wèn)題即可:為什么用A而不是B或C?
其實(shí)不單單是大的技術(shù)框架選擇,小到某個(gè)頁(yè)面要用的某個(gè)元素,都會(huì)經(jīng)歷選擇的過(guò)程,有心,就可以用這種以點(diǎn)帶面的策略學(xué)習(xí)到更多。
深度學(xué)習(xí)
大多數(shù)時(shí)候我們會(huì)使用一門(mén)語(yǔ)言和一兩種技術(shù)框架進(jìn)行軟件產(chǎn)品的開(kāi)發(fā),此時(shí)就是縱向深入學(xué)習(xí)的好機(jī)會(huì)。
對(duì)技術(shù)框架的學(xué)習(xí),大體分三個(gè)階段:
- 基礎(chǔ)開(kāi)發(fā),主要是了解API、基于API完成應(yīng)用
- 熟悉內(nèi)核及原理,主要是了解框架的設(shè)計(jì)原理,閱讀源碼,洞悉內(nèi)在機(jī)理
- 優(yōu)化框架,主要是針對(duì)框架的已有功能的不足進(jìn)行完善、優(yōu)化,或者使用框架提供的機(jī)制擴(kuò)展框架功能,或者對(duì)框架進(jìn)行定制,讓它適合特定情境
我以Qt為例畫(huà)了張圖,供參考:

很多時(shí)候我們經(jīng)歷了第一個(gè)階段——能夠使用API進(jìn)行簡(jiǎn)單開(kāi)發(fā)——之后就跑別的地方去了(工作需要),然后就把這個(gè)框架撂那里不管了,然后就一直停留在那個(gè)階段。建議有時(shí)間的話梳理下自己用過(guò)的技術(shù),挑出當(dāng)下工作中還在用的那項(xiàng),往深里鉆,去熟悉原理熟悉內(nèi)核,有可能的話,也可以優(yōu)化、擴(kuò)展或定制。惟其如此,才能對(duì)一個(gè)框架真正掌握,才會(huì)有深度,才會(huì)在該項(xiàng)技術(shù)上形成自己的價(jià)值和競(jìng)爭(zhēng)力。
小結(jié)
不管是廣度學(xué)習(xí)還是深度學(xué)習(xí),都是從實(shí)際需要出發(fā)的,是你工作中要用這門(mén)技術(shù)你不得不學(xué)。明白這點(diǎn)非常關(guān)鍵——你要用到某項(xiàng)技術(shù)時(shí)才會(huì)有學(xué)習(xí)的動(dòng)力。所以,最好的學(xué)習(xí)時(shí)機(jī)就是一邊開(kāi)發(fā)一邊學(xué)習(xí),白天上班晚上學(xué)習(xí),周內(nèi)上班周末學(xué)習(xí)——在有明確目標(biāo)時(shí)最有學(xué)習(xí)動(dòng)力,在熱度還未退卻時(shí)學(xué)習(xí)效果最好。
如果你想學(xué)習(xí)與當(dāng)下工作內(nèi)容無(wú)關(guān)的知識(shí)和技能,投資自己的未來(lái)價(jià)值,那最好的辦法是給自己設(shè)計(jì)一個(gè)軟件產(chǎn)品(或者參與到別人的項(xiàng)目中),設(shè)定一個(gè)期限,用你想掌握的技術(shù)去完成它。用不到的知識(shí),等于沒(méi)有,這就是這種說(shuō)法背后的原理。
所以,沒(méi)有需求,要?jiǎng)?chuàng)造需求,沒(méi)有問(wèn)題,要?jiǎng)?chuàng)造問(wèn)題,有了需求和問(wèn)題,學(xué)習(xí)才更有方向感和目的性,才會(huì)有持續(xù)下去的動(dòng)力。如果你能主動(dòng)創(chuàng)造目標(biāo)和需求,那你很快就可以建立自己的技能樹(shù)并讓這棵樹(shù)根深葉茂,你就會(huì)越來(lái)越值錢(qián),也越來(lái)越能賺到更多的錢(qián)。
相關(guān)閱讀:
更多文章請(qǐng)關(guān)注我。