老司機(jī)跟你講講高效程序員的秘密

最近有剛?cè)腴T學(xué)編程的小伙伴問(wèn)我關(guān)于程序員的情況,我想不如就把自己做程序員的感悟?qū)懗鰜?lái),希望能幫助到還在困惑的小伙伴。

文章可能有點(diǎn)長(zhǎng),如果想只想看干貨,可以跳到后面的小標(biāo)題,找自己感興趣的章節(jié)。

為什么要當(dāng)程序員?

對(duì)于一個(gè)剛?cè)肼殘?chǎng)的人來(lái)說(shuō),程序員是一個(gè)非常不錯(cuò)的職業(yè)。

編程入門不難,就像大多數(shù)的編程書籍,第一個(gè)實(shí)例就是輸出“Hello World”,當(dāng)然你可以將它改成任何你想要的字符串,或者寫上自己的名字,都是很容易的事情。成就感就這樣不太費(fèi)力就獲得了。

到了實(shí)際工作中,你編寫的程序應(yīng)用到了產(chǎn)品上,正是你的努力,讓產(chǎn)品有了生命,鮮活了起來(lái)。如果運(yùn)氣好,產(chǎn)品推廣的很成功,很多用戶買單使用,那一刻你會(huì)很幸喜,原來(lái)我也可以讓這個(gè)世界變得更美好,這就是程序員工作來(lái)帶的價(jià)值感。

美國(guó)心理學(xué)家亞伯拉罕·馬斯洛在1943年在《人類激勵(lì)理論》論文中所提出馬斯洛需求理論。書中將人類需求像階梯一樣從低到高按層次分為五種,分別是:生理需求、安全需求、社交需求、尊重需求和自我實(shí)現(xiàn)。


程序員的工作滿足了這套理論里的最高的需求-自我實(shí)現(xiàn)的需求。還有一個(gè)解釋是,當(dāng)高級(jí)需求被滿足時(shí),可以降低對(duì)低級(jí)需求的渴望。這也是為什么那么多程序員就算是擠地鐵,吃快餐,長(zhǎng)時(shí)間加班,也依舊樂(lè)于自己的工作。

穩(wěn)定的收入是一方面,我覺(jué)得更重要的是工作帶給他們的滿足感。相比其他初級(jí)工作,比如文員,助理。編程能帶來(lái)更快速的反饋,或許一個(gè)月的努力,你就能寫出一個(gè)游戲,而且在過(guò)程中,你自己清楚,目標(biāo)是在一步步的靠近。

隨著工作年數(shù)的增長(zhǎng),除了編程技能更熟練,你的邏輯思考能力也是在不斷的培養(yǎng)和強(qiáng)化。閱讀別人的程序,就是在理解和學(xué)習(xí)作者的邏輯思路。當(dāng)你要自己動(dòng)手寫的時(shí)候,你就需要自己厘清思路,思考邏輯。如果出現(xiàn)邏輯上的漏洞,就是在為自己和同伴埋下一個(gè)坑,遲早你會(huì)需要來(lái)修補(bǔ)這個(gè)坑。就在日復(fù)一日的修修補(bǔ)補(bǔ)中,你的邏輯思考能力是在不斷的被打磨。

絕大多數(shù)的程序員是需要和其他人協(xié)作完成一個(gè)更龐大的系統(tǒng)的。所以程序員的工作不會(huì)僅是編程而已,還需要管理自己的計(jì)劃和目標(biāo),和其他人溝通等等,如果想成為更高效能的程序員,下面這些問(wèn)題或許你應(yīng)該要想想。

如何成為高效的程序員?

1. ?如何設(shè)定目標(biāo)

當(dāng)我們從Boss 那里接手一項(xiàng)任務(wù)時(shí),可能目標(biāo)不一定是清晰的。要完成任務(wù)的是你,所以具體目標(biāo)是需要自己來(lái)設(shè)定。比如:Boss 會(huì)說(shuō):小王,這個(gè)案子接下來(lái)就交給你來(lái)跟了。接下這個(gè)案子,是任務(wù),不是目標(biāo)。而你要做的是,把任務(wù)轉(zhuǎn)化為目標(biāo)。這時(shí)你要做的第一步是,收集信息。和這個(gè)案子相關(guān)的信息,收集的越多越好。

更多的信息會(huì)有助于提供更多角度,更高的視角,它們會(huì)幫助你做出更高效的決策。比如:你收集到客戶3月15日要來(lái)拜訪,那么在制定短期目標(biāo)時(shí),就要將客戶拜訪時(shí)需要的內(nèi)容先完成。所以制定目標(biāo)最關(guān)鍵的是,收集信息。

2. 計(jì)劃趕不上變化

初入職場(chǎng)時(shí),我時(shí)常會(huì)質(zhì)疑boss 讓我列計(jì)劃的必要性,因?yàn)闆](méi)有哪一次是能按照計(jì)劃來(lái)執(zhí)行的。后來(lái)想明白了,我其實(shí)不明白做計(jì)劃的意義。沒(méi)錯(cuò),一般設(shè)定計(jì)劃的初衷是,希望它作為接下來(lái)工作安排的參照。但是,我們最根本的目的其實(shí)是希望更高效的達(dá)成目標(biāo),完成任務(wù)。

有一個(gè)困難是,我們只能根據(jù)當(dāng)前掌握到的信息來(lái)設(shè)定未來(lái)的計(jì)劃,這樣的計(jì)劃是帶著預(yù)判和猜測(cè)的。當(dāng)新的信息加進(jìn)來(lái),而它是會(huì)對(duì)結(jié)果產(chǎn)生影響的,我們就需要重新思考計(jì)劃。所以說(shuō),作計(jì)劃是一個(gè)逐漸完善清晰的過(guò)程,很難做到一次搞定。

比如:開始,我們計(jì)劃用方案A來(lái)實(shí)現(xiàn)目標(biāo),做到一半的時(shí)候,我們產(chǎn)生了新的想法是方案B,而且它能更好的完成任務(wù),這時(shí)我們就需要調(diào)整計(jì)劃,按照方案B來(lái)執(zhí)行。

3. 解決問(wèn)題的策略

程序員的工作中有很大一部分是解Bug,這些Bug 可能是設(shè)計(jì)時(shí)考慮不周導(dǎo)致的,又或者是很多錯(cuò)中復(fù)雜的原因?qū)е碌?。每一個(gè)Bug 都有自己的癥狀。就好像人感冒了癥狀可能是打噴嚏,流鼻涕。Bug 的癥狀也不少,比如功能無(wú)效了,運(yùn)行中斷了,更有嚴(yán)重的當(dāng)機(jī)等等。當(dāng)我們接到問(wèn)題的時(shí)候,被告知的是癥狀,而客戶希望的也是癥狀的解除。但是如果程序員以癥狀解除的目標(biāo)來(lái)解決問(wèn)題,很可能會(huì)埋下隱患。

我想講的是,解除癥狀只是結(jié)果,解Bug的目標(biāo)其實(shí)是找到問(wèn)題的原因。找到原因我們才能知道問(wèn)題的影響究竟有多大,才知道什么樣的solution 才是最優(yōu)的,也能最大程度的考慮去避免side effect。有時(shí)候,我們找到問(wèn)題原因后,甚至?xí)唤膺@個(gè)問(wèn)題??赡芙鉀Q的成本非常高,或者帶來(lái)的side effect 可能比本身的問(wèn)題更嚴(yán)重。

查找問(wèn)題原因的過(guò)程,就像是透過(guò)一個(gè)點(diǎn)的延展,去探索當(dāng)前的系統(tǒng)架構(gòu)和邏輯。在初面對(duì)一個(gè)龐大的系統(tǒng)時(shí),我們最大的困惑往往是不知道從何處開始學(xué)習(xí),開始了解。而出現(xiàn)問(wèn)題正好是一個(gè)契機(jī),一個(gè)切入點(diǎn),如果只是為了解除癥狀,而不去探究問(wèn)題的原因,就相當(dāng)于放棄了深入學(xué)習(xí)的機(jī)會(huì)。而每一次的深入了解,都會(huì)為你日后解決問(wèn)題帶來(lái)幫助。所以面對(duì)問(wèn)題,找原因可能比解決它更有意義。

4. 客戶最需要的是什么?

客戶總是不斷的向我們提出問(wèn)題,解決問(wèn)題是做好客戶支持的核心嗎?當(dāng)然,客戶需要我們幫助他們解決問(wèn)題,可是據(jù)我觀察客戶真正最想要的是放心。

客戶發(fā)了一個(gè)郵件過(guò)來(lái),你立即開始著手處理,想著用最快的速度,保質(zhì)保量的完成任務(wù),解決問(wèn)題。這樣想是沒(méi)錯(cuò),可是問(wèn)題解決總是需要一段時(shí)間的。這段時(shí)間你要怎么辦呢?是埋頭苦干,以最快的速度解決嗎?

不是,更好的做法是盡快的告知客戶,你正在為這個(gè)問(wèn)題努力,并告知客戶可以完成的時(shí)間??蛻羰盏侥愕倪@封郵件,就算問(wèn)題沒(méi)有立刻解決,他也會(huì)放心。當(dāng)你一次次的按照約定,解決問(wèn)題,你在客戶心目中的信任度和口碑就在逐步的上升,以后有問(wèn)題,他都愿意來(lái)找你。因?yàn)檎夷闼判摹?/p>

陌生人之間的協(xié)助之所以困難,因?yàn)楸舜巳狈π湃位A(chǔ)。當(dāng)你不斷的向外建立自己的口碑,就是在形成你的影響力。這對(duì)于你日后的發(fā)展,都是非常有益的。所以解決問(wèn)題不是核心,建立信任才是。

5. 寫文檔輸出的好處,教就是最好的學(xué)。

我有一個(gè)習(xí)慣,要了解一個(gè)新東西時(shí),會(huì)邊看邊記錄,這樣的好處是,讓我更容易在各個(gè)知識(shí)點(diǎn)之間建立聯(lián)系。大腦的工作記憶區(qū)的容量是很小的,30s 前看的東西,很快就忘記了。

有效的學(xué)習(xí)是需要將各知識(shí)點(diǎn)連接起來(lái),才能發(fā)揮效用。記錄就可以彌補(bǔ)工作記憶不夠的問(wèn)題,記錄一個(gè)新知識(shí)點(diǎn)時(shí),可以同時(shí)看看上下知識(shí)點(diǎn)之間存在哪些關(guān)聯(lián),并將這些關(guān)聯(lián)也記錄下來(lái)。等你梳理完一遍后,就可以通過(guò)記錄,再消化一遍。日后需要時(shí),也更方便查找你想要的信息再哪個(gè)部分。

還有一個(gè)更高效的學(xué)習(xí)方法是費(fèi)曼技巧,就是將你學(xué)到的知識(shí)教給別人。看看下面這個(gè)知識(shí)吸收率的金字塔,通過(guò)教別人你才能掌握到知識(shí)的90%。

所以教別人最大的受益人是你自己。

6. 寫郵件的誤區(qū)

寫郵件其是我們平時(shí)工作時(shí)最基本的一件事情,可是我最近才發(fā)現(xiàn),原來(lái)我一直不會(huì)寫郵件。寫郵件是為了把我的想法傳遞出去么?不是,寫郵件的目的是讓收件人理解你的想法。這兩句話的差別是什么?差別是誰(shuí)是你的關(guān)注點(diǎn)。

如果是把我的想法傳遞出去,那么關(guān)注點(diǎn)在我。我把自己想說(shuō)的話,都說(shuō)完就好了,不對(duì)么?不對(duì),我們忽略了一個(gè)問(wèn)題就是,你想說(shuō)的話,別人看懂了么?

你會(huì)說(shuō),看不懂是他的事啊,我的責(zé)任已經(jīng)盡到了。而且他萬(wàn)一看不懂再問(wèn)我唄。可是,如果這件事情,只對(duì)你來(lái)說(shuō)是重要的,收件人其實(shí)是沒(méi)有義務(wù)因?yàn)闆](méi)有聽懂來(lái)問(wèn)你的。這樣郵件就等于白寫了。更多的情況是,你想傳遞的信息對(duì)收件人來(lái)說(shuō)也是重要的,如果你的收件人是一個(gè)Team,上百個(gè)人,沒(méi)有理解的人都來(lái)問(wèn)你,一個(gè)人花1分鐘問(wèn)你,對(duì)他來(lái)說(shuō)影響不大,對(duì)你來(lái)說(shuō),可是上百個(gè)1分鐘呢?是不是想想都覺(jué)得可怕了。

所以寫郵件時(shí),仔細(xì)的思考下,收件人是誰(shuí),他想知道是哪些信息,怎么表達(dá)他才能理解,是否要補(bǔ)充背景知識(shí),甚至包括怎樣排版,都是需要考慮的問(wèn)題。幫大家節(jié)省時(shí)間,其實(shí)就是幫你自己節(jié)省時(shí)間。

還有一點(diǎn),我覺(jué)得也很重要。我們可能被鼓勵(lì)成,把郵件寫的非常詳細(xì),字?jǐn)?shù)越多,越能體現(xiàn)自己的努力??赡躡oss 也會(huì)表?yè)P(yáng)這種現(xiàn)象,郵件寫的長(zhǎng),不管怎樣,至少工作態(tài)度好。我覺(jué)得這樣的情況很可能是寫郵件的人在自嗨,大家的時(shí)間都很寶貴,越是長(zhǎng)的郵件,越少人會(huì)真正看。

7. 遇到超難的問(wèn)題怎么辦?

程序員一定會(huì)遇到難解決的問(wèn)題,下次苦思冥想找不到解決辦法的時(shí)候,可以試試這個(gè)方法。

大腦有兩種思維模式,專注思維和發(fā)散思維。專注思維就像是我們平常解決問(wèn)題,根據(jù)現(xiàn)象和邏輯進(jìn)行推導(dǎo)。當(dāng)我們?cè)趯W⑺季S下,解決不了問(wèn)題的時(shí)候,切換到發(fā)散思維,說(shuō)不定就找到解決問(wèn)題的辦法了。若對(duì)這兩種思維模式有興趣可以去讀下《學(xué)習(xí)之道》這本書。

怎么切換到發(fā)散思維呢?其實(shí)很簡(jiǎn)單,去茶水間喝杯茶,走動(dòng)一下,聽個(gè)純音樂(lè),都可以。就像我們常說(shuō)的換腦子。

還有一種辦法,是將你的問(wèn)題,描述給另一個(gè)人聽,有時(shí)講著講著,你就找到新的辦法了。當(dāng)我們?cè)谙雴?wèn)題的時(shí)候大腦的思維是網(wǎng)狀的,在把思考轉(zhuǎn)化為語(yǔ)言的時(shí)候,其實(shí)是把網(wǎng)狀的思維作線性的連接。當(dāng)大腦的神經(jīng)元被重新線性連接的時(shí)候,你可能會(huì)發(fā)現(xiàn),問(wèn)題的解決方案就在旁邊。所以,有時(shí)候我們找人討論問(wèn)題,并不一定需要?jiǎng)e人給我們解決辦法,最后辦法是自己找到的。關(guān)于這一點(diǎn),我深有感觸。

好好利用發(fā)散思維,它可能讓你解問(wèn)題時(shí)有如神助。

最后祝廣大程序猿&程序媛同胞都能開心工作,享受生活。

既然都看到了這里,那就點(diǎn)個(gè)贊再走吧:D

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 銷售高手、精英團(tuán)隊(duì)培訓(xùn)教程 完整講義 ...
    八戒369閱讀 33,924評(píng)論 10 377
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • 簡(jiǎn)介 在Android日常的開發(fā)過(guò)程中有的項(xiàng)目需要引入第三方的庫(kù),有時(shí)候大家可能會(huì)在libs文件夾下看到mips、...
    ayvytr閱讀 1,869評(píng)論 0 2
  • 記得小的時(shí)候一到夏天,媽媽上班的乒乓球廠為了給工人降溫,每天都會(huì)發(fā)一瓶汽水,媽媽自己都舍不得喝,會(huì)放在包里背...
    Catherin77閱讀 291評(píng)論 0 0

友情鏈接更多精彩內(nèi)容