- 程序員的自我修養(yǎng)
- 陳逸鶴
- 463字
- 2019-01-03 19:57:13
第一章 談職業(yè)生涯
一、寫給年輕程序員的10點(diǎn)啟示
最近,陸續(xù)在51CTO和CSDN上看到好幾篇寫程序員如何成長(zhǎng),如何拿到高薪的文章。文章都很不錯(cuò),一些觀點(diǎn)也很實(shí)用,但整篇文章讀下來,我總覺得意猶未盡,感覺還應(yīng)該再給年輕的程序員們說些什么似的。
其實(shí)我離開正式的程序員崗位(當(dāng)時(shí)我是一名架構(gòu)師)已經(jīng)快3年了,現(xiàn)在我仍然在業(yè)余時(shí)間做一些感興趣的開源或個(gè)人項(xiàng)目。但我發(fā)現(xiàn)恰恰是最近幾年,讓我能夠從不同的角度和視野,對(duì)程序員這個(gè)職業(yè)有了更深入的理解和認(rèn)識(shí)。當(dāng)我成為一名IT管理者時(shí),我從更多的程序員身上看到了他們身上的一些特質(zhì)對(duì)其職業(yè)生涯所產(chǎn)生的影響;當(dāng)我開始自學(xué)設(shè)計(jì),我又從設(shè)計(jì)大師們那里得到很多極具啟發(fā)性的觀點(diǎn),而它們對(duì)程序員們同樣具有很大的價(jià)值;而當(dāng)我開始寫作,每一篇文章完成后與年輕的程序員讀者們進(jìn)行交流的過程中,我的想法和觀點(diǎn)又能得到進(jìn)一步的完善和提升。
因此,我迫不及待地將這些記錄下來,希望從一些不同的角度給予年輕程序員朋友們一些啟發(fā)。
1.正確地認(rèn)識(shí)自己
我聽到過很多用來形容程序員的網(wǎng)絡(luò)詞匯,例如,碼農(nóng)、程序猿、軟件工程師、張江男、屌絲程序員,等等。其中大部分都略帶貶義,有些甚至是程序員們自己發(fā)明出來用于自嘲的。其實(shí)這些稱呼對(duì)你來說并不重要,關(guān)鍵是你自己內(nèi)心中用了哪一個(gè)詞匯來形容自己。當(dāng)你僅僅將自己定位成一個(gè)碼農(nóng),那你可能就是那個(gè)整天用著相同的工具,寫著相似代碼的碼農(nóng);當(dāng)你把自己看作是一個(gè)屌絲程序員的話,那你也可能就是那個(gè)衣食不愁,但整天渾渾噩噩、無所追求的屌絲。
我更愿意用技匠這個(gè)詞來形容程序員,就像我給自己起的花名一樣。程序員應(yīng)該是那些不斷追求更高技術(shù),并有著自己產(chǎn)品夢(mèng)的工匠。當(dāng)你通過對(duì)自己技術(shù)不斷打磨,一次又一次做出那些優(yōu)秀產(chǎn)品的時(shí)候,你會(huì)發(fā)現(xiàn)自己不再是他人口中的碼農(nóng)或是屌絲,而更多被稱為了大師、大神,而受到大家的尊重。
我相信沒有一個(gè)真正的程序員內(nèi)心里會(huì)將自己當(dāng)作碼農(nóng)或?qū)沤z,那么不妨也像我一樣找到一個(gè)能真正反映你內(nèi)心的詞匯來定位你自己,通過努力,你會(huì)慢慢變成你希望的樣子。
2.比一般人更加努力
我曾看到一個(gè)關(guān)于天才與普通人的有趣漫畫(很遺憾我沒能找到原圖,只能用文字進(jìn)行描述)。
漫畫描述1:一個(gè)普通人每天都很努力,他頭頂上顯示的能力槽也在慢慢地增長(zhǎng)。而圖中的另一個(gè)天才,則整天不務(wù)正業(yè),當(dāng)然他頭上的能力槽也幾乎沒有增長(zhǎng)。
漫畫描述2:經(jīng)過了長(zhǎng)時(shí)間的努力,普通人頭頂上的能力槽慢慢接近了滿格,此時(shí)那個(gè)天才醒悟并開始了努力。
漫畫描述3:又過了一段時(shí)間,普通人頭頂上的能力槽終于滿格了,但此時(shí)天才頭頂上的能力槽卻早已爆表,高出了那個(gè)普通人很大一截,那個(gè)努力的普通人只好無奈地抬頭仰望著那位天才。
漫畫描述4:但當(dāng)普通人默默回過頭來,卻驚訝地發(fā)現(xiàn)有更多的人正同樣充滿敬意地仰望著他,因?yàn)榇藭r(shí)的他也早已成為了大多數(shù)人眼中的那個(gè)佼佼者。
這組漫畫非常發(fā)人深省,優(yōu)秀的程序員往往會(huì)被同天才或高智商的人聯(lián)系在一起,但我想告訴你,你周圍所看到的那些天才(身邊的優(yōu)秀程序員)只是在你沒看到的時(shí)候花了更多時(shí)間工作或者學(xué)習(xí)而已,當(dāng)你也堅(jiān)持這么做時(shí),你也會(huì)變得和他們一樣優(yōu)秀。
3.適時(shí)建立個(gè)人權(quán)威
我以前有一個(gè)美國(guó)同事,是個(gè)東歐人,在公司里負(fù)責(zé)一個(gè)非常老舊系統(tǒng)的開發(fā)和維護(hù)工作,用的技術(shù)也是幾乎快被淘汰的Power Builder,因此他在公司里是個(gè)不怎么被重視的人。然而有一天,他突然拿著筆記本電腦敲開了老板辦公室的門,并且給老板展示了一個(gè)非常漂亮而且易用的Web系統(tǒng)。原來他利用業(yè)余時(shí)間自學(xué).NET技術(shù),將他所負(fù)責(zé)的那個(gè)系統(tǒng)整個(gè)重寫了一遍。這個(gè)煥然一新的系統(tǒng)一下子讓老板和整個(gè)公司驚呆了,大家由衷地對(duì)他報(bào)以敬佩之情。不久,他便被提拔為了開發(fā)團(tuán)隊(duì)的負(fù)責(zé)人,而他的那套系統(tǒng)也很快作為公司的拳頭產(chǎn)品推出了。
我經(jīng)常聽到一些程序員抱怨自己的職業(yè)生涯毫無起色,或者在工作了幾年之后就擔(dān)憂自己遇到了瓶頸。其實(shí),造成這些的原因往往是他們已經(jīng)習(xí)慣了聽命于人,而缺少自己的觀點(diǎn)和主張,久而久之便成了那個(gè)在他人眼中可有可無的平庸之人。你不妨也學(xué)一學(xué)我的那位美國(guó)同事,選擇合適的時(shí)機(jī)去表現(xiàn)自己,建立個(gè)人權(quán)威,這能讓其他人看到你的不同之處,并為你在公司或團(tuán)隊(duì)內(nèi)部構(gòu)建起良好的影響力。當(dāng)然,這一切的前提是你通過不斷努力積累了自己的實(shí)力,并在恰當(dāng)?shù)臅r(shí)候去展現(xiàn)它。
4.遵循最佳實(shí)踐
技術(shù)總是在不斷發(fā)展,我們每年都能看到很多新的開發(fā)語(yǔ)言、工具和框架的出現(xiàn),而每隔幾年又會(huì)產(chǎn)生一些大的技術(shù)變革。那么作為程序員,如何才能適應(yīng)這種變化呢?其實(shí),就像每年都會(huì)有新的流行設(shè)計(jì)趨勢(shì),然而設(shè)計(jì)的本質(zhì)和原則卻始終不變一樣。作為一名程序員,你也需要嘗試去理解那些軟件領(lǐng)域最本質(zhì)的東西,而我的建議就是學(xué)習(xí)那些最佳實(shí)踐。
當(dāng)你理解了GOF的那些經(jīng)典設(shè)計(jì)模式,你就會(huì)知道如何使用一個(gè)單例來最有效地實(shí)現(xiàn)一個(gè)Logger組件;當(dāng)你理解了SOA或是最新的微服務(wù)架構(gòu),你就能夠通過架構(gòu)使你的企業(yè)IT治理更加有效;當(dāng)你理解了DEVOPS這種新的運(yùn)維文化和理念,你就能使企業(yè)IT運(yùn)維效率得到顯著提升。此外,你還需要理解在網(wǎng)絡(luò)安全、性能調(diào)優(yōu)、代碼優(yōu)化等各個(gè)方面的最佳實(shí)踐,以使你寫出更高質(zhì)量的代碼、做出更優(yōu)秀的產(chǎn)品。
這些最佳實(shí)踐或由此衍生出來的框架、工具都是那些富有經(jīng)驗(yàn)的程序員通過大量實(shí)踐,總結(jié)出來的最優(yōu)秀的軟件開發(fā)思想。通過理解和對(duì)它們的有效實(shí)踐,能夠讓你站到前人的肩膀之上,對(duì)軟件開發(fā)本身獲得更深入的理解和認(rèn)識(shí)。
5.保持好奇心并樂于探索新的事物
好奇心可能是那些優(yōu)秀程序員與普通程序員之間最顯著的區(qū)別之一。優(yōu)秀程序員們往往不會(huì)滿足于對(duì)手頭工作的認(rèn)識(shí)和理解,他們有很強(qiáng)的意愿去了解那些更深入的東西。比如,他們會(huì)通過研究公司的框架(甚至是更底層的框架)源代碼,去了解它們具體的實(shí)現(xiàn)原理和設(shè)計(jì)思想。這對(duì)提升程序員的技術(shù)深度是非常有幫助的。
另外,優(yōu)秀的程序員們也往往非常樂于探索那些看似與工作無關(guān)的技術(shù)。比如,做后端的程序員去學(xué)習(xí)前端的技能,前端工程師則去學(xué)習(xí)UI設(shè)計(jì),等等,這些雖不會(huì)讓他們成為那一個(gè)領(lǐng)域的專家,但技術(shù)往往是相通的,當(dāng)你在探索這些新鮮事物的同時(shí),你會(huì)發(fā)現(xiàn)你原有的技能也得到了提升。(最近,我在自學(xué)一些簡(jiǎn)單的機(jī)器語(yǔ)言,從中就受到了一些很有價(jià)值的啟發(fā),我也希望能通過幾篇文章來分享給大家)
6.拋開代碼與人溝通
“緊盯著電腦屏幕,不斷敲擊鍵盤,目光有些呆滯。”這可能是程序員給人的印象。而我所看到的那些優(yōu)秀的程序員卻都不是這樣的,他們往往興趣廣泛,并且都非常樂于與人溝通交流。
程序員們很容易會(huì)忽視與人的溝通,這其實(shí)對(duì)他們的職業(yè)生涯發(fā)展是不利的。我很支持那些年輕的程序員們堅(jiān)持去走技術(shù)路線,但這不應(yīng)該成為你排斥與人溝通的理由。你需要與人溝通來獲得他人的幫助;你需要與人溝通來建立良好的工作關(guān)系;當(dāng)你的能力不斷提升,被賦予更多職責(zé)時(shí),你更需要與人溝通來管理好自己的團(tuán)隊(duì),以及與老板或客戶進(jìn)行有效的溝通等。
嘗試離開你的電腦桌去與人溝通,相信我,這會(huì)給你的工作和生活帶來積極的變化。
7.要為優(yōu)秀的人工作
我曾面試過一位優(yōu)秀的UI設(shè)計(jì)師(“技匠”公眾號(hào)中《給年輕程序員的職涯建議》一文中提到的),當(dāng)問到他的離職原因時(shí),他告訴我,當(dāng)他每天聽到他的老板和同事們聊天內(nèi)容的大多是股票、育兒、游戲時(shí),他就下定決心要離職了。
環(huán)境對(duì)一個(gè)人的影響是巨大的,而最可怕的是當(dāng)你身處其中時(shí),很難意識(shí)到你正在變得越來越糟。我之前帶過一些不錯(cuò)的程序員,他們中的一些人去了一些整體氛圍或環(huán)境不是太好的公司。過了一段時(shí)間后,再次與他們碰面聊天時(shí),我發(fā)現(xiàn)他們的思維、觀點(diǎn)相較之前并沒有提升,有些甚至反而退步了。
其實(shí),我并不鼓勵(lì)程序員盲目跳槽,但當(dāng)你發(fā)現(xiàn)所在的環(huán)境和周圍的人已經(jīng)無法讓你獲得提升時(shí),不妨學(xué)一下我提到的那位設(shè)計(jì)師,選擇一個(gè)更好的環(huán)境,盡可能與那些優(yōu)秀的人一起工作。
8.生活、睡眠、旅行
我們時(shí)常聽到關(guān)于程序員因疲勞過度而猝死的新聞,我非常為他們感到惋惜。但這里所反映的一個(gè)問題卻值得深思,那便是程序員不懂得生活。我希望每個(gè)程序員都能明白工作、技術(shù)、寫代碼這些并不是你存在的意義,而生活才是,你需要懂得生活,并且學(xué)會(huì)生活。
?生活:嘗試有節(jié)制和有規(guī)律的生活,程序員生涯絕不是一次沖刺跑,而更像是一場(chǎng)馬拉松。你需要合理規(guī)劃自己的時(shí)間分配(學(xué)習(xí)、閱讀、寫代碼)并持之以恒地去做。另外,不要忽視你的家庭,扮演好你在家庭中的角色,無論你是與父母還是與妻兒住在一起,不要將自己隔離起來,嘗試融入其中,做一個(gè)快樂有愛的程序員。
?睡眠:有很多人覺得睡眠是弱者的表現(xiàn),他們往往會(huì)長(zhǎng)時(shí)間熬夜,其實(shí)我覺得這是一種惡性循環(huán),反而會(huì)使你的工作效率變得更低。充足的睡眠往往能使你更有效率地投入到新一天的工作中,你也會(huì)變得更有創(chuàng)造力。請(qǐng)記住,保證充足的睡眠將使你變得更加強(qiáng)大。
?旅行:去任何一個(gè)新的地方都可以稱之為旅行,旅行不是為了放松,因?yàn)槟阈枰w機(jī)、開車、走路,這些都會(huì)使你產(chǎn)生壓力,但你仍需要去旅行,因?yàn)檫@能讓你發(fā)現(xiàn)和感受新的東西,而這些是從電腦屏幕上無法獲得。
9.相信自己的天賦和創(chuàng)造力
做到以上這些,你已經(jīng)是一名優(yōu)秀的程序員了,但你離杰出還差了一點(diǎn)。你需要依靠你的天賦和創(chuàng)造力,讓你更進(jìn)一步。天賦和創(chuàng)造力絕不是那些天才的專利,每個(gè)人的身上都有屬于他自己的天賦和創(chuàng)造力,但它們也絕不是與生俱來的,你需要在生活中不斷地培養(yǎng)和發(fā)掘它們。下面是我覺得一些行之有效的方法。
?閱讀優(yōu)秀的書籍:好的想法絕不是憑空產(chǎn)生的,嘗試從書中尋找那些能激發(fā)你創(chuàng)意和靈感的優(yōu)秀內(nèi)容。
?記錄和收集:嘗試用一個(gè)小本子,將你轉(zhuǎn)瞬即逝的好想法記錄下來,它們可能并不直接有效,但下一個(gè)更好的想法可能就是從這些你記錄下來的想法中產(chǎn)生的。
?嘗試動(dòng)手:光有好的想法是不夠的,你需要成為一個(gè)有工匠精神的人,通過親自動(dòng)手去嘗試和實(shí)踐,你會(huì)不斷從中得到新的創(chuàng)造力。
如果上面提到的其他建議都對(duì)你無效的話,那么就請(qǐng)堅(jiān)持第2點(diǎn)建議吧“比一般人更加努力”,因?yàn)樗鼘⒊蔀槟阕畲蟮母?jìng)爭(zhēng)優(yōu)勢(shì)。
- 計(jì)算機(jī)組成原理
- 現(xiàn)代信息技術(shù)基礎(chǔ)實(shí)踐教程(微課版)
- 沉浸感:不可錯(cuò)過的虛擬現(xiàn)實(shí)革命
- Protel 99SE常用功能與應(yīng)用實(shí)例精講
- 大學(xué)計(jì)算機(jī):面向?qū)嵺`與創(chuàng)新能力培養(yǎng)
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)項(xiàng)目教程(第2版)
- 計(jì)算機(jī)網(wǎng)絡(luò)簡(jiǎn)明教程
- 大學(xué)計(jì)算機(jī)基礎(chǔ)實(shí)訓(xùn)指導(dǎo)
- 區(qū)塊鏈技術(shù)與應(yīng)用
- 光榮與夢(mèng)想:互聯(lián)網(wǎng)口述系列叢書·劉韻潔篇
- 云計(jì)算安全與隱私
- seo藝術(shù)(第3版)
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第4 版):計(jì)算思維
- Windows Server 2008操作系統(tǒng)項(xiàng)目教程
- 游戲UI設(shè)計(jì):修煉之道