王媛滿
把一群程序員放在一起很多時候他們并不會互相學(xué)習(xí),只有平時有共同理想,愿意嘮嗑,愿意一起解決難題,愿意聽對方的意見和分享的的一群小伙伴,才會在不知不覺中互相學(xué)習(xí)互相指導(dǎo)。
最近看了一本名字叫《程序開發(fā)心理學(xué)》的“閑書”,收獲滿滿,潤色一下分享給大家。
關(guān)于團(tuán)隊的互相學(xué)習(xí)成長
我們經(jīng)常都會說,要進(jìn)入到一個高手比較多的地方去學(xué)習(xí)。身處一個高手遍地的地方,會發(fā)現(xiàn)人跟人差距就是這么大,而且高手做的事情你一點(diǎn)也插手不上,而且很多情況下也沒法學(xué)習(xí)到什么東西,很多時候高手最厲害的地方在于經(jīng)驗和思維。如果只是在一個項目里邊分工合作,而除了干好自己的事情以外沒什么其他的目標(biāo)了,那么很抱歉,你可能學(xué)不到什么東西。
書中有一段是這么說的:如果一個集體的共同目標(biāo)僅限于產(chǎn)品的層次,那并不見得會促使其中的程序員互相學(xué)習(xí)。而反過來,團(tuán)隊內(nèi)部的成員不僅目標(biāo)一致,而且其目標(biāo)與他們具體開發(fā)的產(chǎn)品毫無關(guān)系,正是在這種目標(biāo)的引導(dǎo)下,團(tuán)隊的成員才會通過互相學(xué)習(xí)共同提高。
就本人的經(jīng)驗來看,大部分程序員在一起工作并不會互相學(xué)習(xí)。如果是導(dǎo)師,那可能會有一些經(jīng)驗的指導(dǎo)。如果是平級,那可能一年下來都不會互相學(xué)習(xí)。就算是經(jīng)常有合作,很大可能性也只會在項目功能接口層面進(jìn)行溝通。一方面是術(shù)業(yè)有專攻其他領(lǐng)域其實挺難去介入的,另外一方面可能思維上就沒想能從A項目、B項目和別人的產(chǎn)出上面學(xué)到什么東西。
但是如果,僅僅是如果,如果所有人都有一個評判標(biāo)準(zhǔn),以及都有一顆想提高自己代碼質(zhì)量的心,會進(jìn)行代碼review。代碼review過程其實是能產(chǎn)生很多東西的,同時也能學(xué)習(xí)到很多東西,但是有個大前提,就是大家的對這個事情本身也感興趣,而不是為了具體的產(chǎn)品。根據(jù)以往的經(jīng)驗,這種事情很快就流于形式,也就是隨便看一看,就算是精心準(zhǔn)備的分享基本也都會被聽眾忽略掉,這就沒什么意義了。但是如果整個團(tuán)隊對分享和代碼review這個事情本身很感興趣,還是能從中進(jìn)行查漏補(bǔ)缺得到非常多的信息。
人類總會本能性地,反對別人對自己的負(fù)面評價。即使面對來自現(xiàn)實難以接受的反面證據(jù),人們也往往會認(rèn)定自己的程序完全正確。
“這不是bug,重啟一下試試?!?/p>
“這不是bug,絕對是使用方式有問題。”
很多時候人類都是會逃避對自己的任何負(fù)面評價的,無論這個評價是不是從很多人的角度看來都無可辯駁,畢竟計算機(jī)不會騙人,它只會做我們告訴它要去做的事情,但是人對它結(jié)果的解讀是帶有主觀性的。一個很好的功能,到了另外的場景可能就是bug。一個很難解決的bug,到了另外一個場景可能就是一個很好的功能。
有這么一個小故事,很久很久以前,我們的程序有一個bug總是找不出來,就是有一段內(nèi)存總是會隨機(jī)性丟失。我們就開始查,拼命查,沒日沒夜地查,程序員走了一波又一波。但是依然都找不到這個問題所在,很是苦惱。突然有一天,咦,有一個地方需要模擬一個場景,就是內(nèi)存隨機(jī)性丟失的場景下對程序進(jìn)行測試。喔吼!這個帶“Bug”的程序比任何人為構(gòu)造出來的內(nèi)存丟失更加隨機(jī)更加可以反映事實,而且在很長一段時間里都非?!胺€(wěn)定”。
現(xiàn)在你還覺得這是一個Bug嗎?
關(guān)于團(tuán)隊的高效
有些主管依然會與高效的程序開發(fā)團(tuán)隊發(fā)生沖突,并進(jìn)而又以各種毫不相干的借口,將這些團(tuán)隊解散。而有些主管雖然還是搞不懂這些團(tuán)隊的運(yùn)行方式,但是他們卻至少懂得應(yīng)該容忍這些團(tuán)隊的存在。
在很多的職場,都會出現(xiàn)這么一個現(xiàn)象就是有其中一個團(tuán)隊效率非常非常高,而且交代的事情也能完成得非常非常好,但是主管看不懂。他不明白為什么這幫人就行,另外一幫人就不行,也不是能力上的問題,因為大家都是同樣標(biāo)準(zhǔn)招進(jìn)來的。
有的主管能很好處理,不理解就不理解,這些事情交給他們就穩(wěn)了,我對他們也愛護(hù)有加就行了。而有的主管則不能,就是希望掌控全局,任何一個小細(xì)節(jié)都不放過,對于這些超出認(rèn)知范圍的事情很是“扎心”,一定要插一手,所以就出現(xiàn)了上邊的情況。
程序開發(fā)的社會效應(yīng)
關(guān)于程序開發(fā)的社會性。比如程序開發(fā)中其中有一個環(huán)節(jié)就是程序員A口頭將信息告訴程序員B,這在以往的運(yùn)行過程中得到了非常好地效果,這時候如果換掉程序員A或者程序員B,都將帶來效率的降低。
很多時候我們都以為我們的程序運(yùn)行都是靠完美的產(chǎn)品設(shè)計,穩(wěn)定的系統(tǒng)流程,全鏈路能Cover住。很遺憾不是這樣的,我們處在的是人類社會,是人類在使用這些東西。只要有人類介入,那絕對存在一些很“迷”的東西。
比如,有一個功能開發(fā)好了,開發(fā)的第一反應(yīng)不是去系統(tǒng)上點(diǎn)一下完成,而是大吼一聲:“測試大佬,我那個Bug修好了你驗收一下”。
又比如,很多程序員都會去找架構(gòu)師聊事情,但是我們又發(fā)現(xiàn)有很多程序員坐在架構(gòu)師旁邊的咖啡小屋那嘰嘰喳喳,所以老板決定把這個咖啡小屋干掉。好了事情來了,架構(gòu)師開始忙不過來,大大小小的事情都找架構(gòu)師解決。原來有這么一個咖啡小屋,大家看起來嘰嘰喳喳的很吵,但是其實大家在等架構(gòu)師空閑的時候,已經(jīng)在咖啡小屋把很多小事情討論完了,或者梳理出了一個比較可行的方案,這樣會節(jié)省架構(gòu)師的時間,也會節(jié)省程序員的時間。
關(guān)于程序員的作息
一個老板看到程序員王鐵蛋早上十點(diǎn)才到,很是不爽,就跟程序員說啊我不管你明天要早點(diǎn)來。(其實程序員昨天晚上才把某個比較緊急的東西加班弄完到深夜)王鐵蛋的反映非常簡單,無非是嚴(yán)格按照工作時間正常地上下班。
還是希望小伙伴們,多去健身房,晚上確實要加班也可以,吃完飯健身完再繼續(xù)加,盡量十二點(diǎn)前睡下,過幾年你會回來感謝我的。
希望你們要克服人類的通病———假裝自己很努力。
關(guān)于民主和集權(quán)的領(lǐng)導(dǎo)模式
民主性集體。由于任務(wù)是全體成員共同承擔(dān)的,同時他們之間存在很多交流,所以當(dāng)某個人離開后,其他的伙伴會根據(jù)需要填補(bǔ)它的空缺。但是反過來也證明,如果有一個新來的,由于組織中并不會給他留出一個特定的位置,所以這樣的團(tuán)隊很難接受新成員。
集權(quán)式集體。任何成員離開后自然就會暴露出任務(wù)分工上的空缺,只有其領(lǐng)導(dǎo)者才擁有必要的信息能夠在剩余的成員中重新進(jìn)行任務(wù)分配。但是如果有新成員加入,手續(xù)會非常簡單,直接去找領(lǐng)導(dǎo)人分配任務(wù),然后交接就好了。
關(guān)于給項目潑冷水的人
會議上一片和諧,大家都對于接下來要完成的事情胸有成竹,開始小聲慶祝除了小喬,嘴上有一點(diǎn)點(diǎn)抿嘴。然而目光尖銳的項目負(fù)責(zé)人憑經(jīng)驗還是察覺到了這個細(xì)節(jié),問小喬:你還有什么問題嗎?
“一切都正常,但還是有一點(diǎn)點(diǎn)小問題?!?/p>
“有多???”
“我的任務(wù)可能需要延遲一點(diǎn)點(diǎn)?!?/p>
“多久?”
“六周?!?/p>
“我想……我的小組也需要這么久”,大喬說道。
“我也需要……”孫尚香、曹丕都順著說道。
這就是剛剛和諧開會的結(jié)果?我們剛剛浪費(fèi)了一個小時在討論什么?
也許,需要有這么一個提出不同聲音的人,來質(zhì)疑這個計劃以及那虛假的和諧,來保證這個項目的正常進(jìn)行,很多開發(fā)對于程序開發(fā)中需要消耗的時間還是過于樂觀,覺得代碼寫完就完事了,又或者是對于項目本身不了解的盲目樂觀,這就是非常非常多情況下項目延期的原因。如果有一個人,指出這些方案的不合理性,又或者是項目時間的不合理性,可能就不會在項目延期的時候互相推諉了。
然而在現(xiàn)實中,這個人經(jīng)常被當(dāng)成噴子,被認(rèn)為是來破壞和諧的人……
關(guān)于天才程序員
優(yōu)秀的程序員是培養(yǎng)出來的,不是天生的。
程序員其實現(xiàn)在都已經(jīng)是一個門檻非常低的職業(yè)了,但是也存在跟數(shù)學(xué)一樣循序漸進(jìn)的過程。要知道A定理,才會覺得B推論理所當(dāng)然。如果不知道A定理,那么“大佬”在說顯然可得B推論的時候,你就會覺得很痛苦,這就是先前知識產(chǎn)生的壁壘。
程序員也是一樣,要知道足夠多、足夠底層的東西,你會發(fā)現(xiàn)現(xiàn)在所有的技術(shù)都只是在層上有一些封裝、拓展和易用上的改進(jìn),所玩的花樣基本都還是幾十年前的理論,沒什么大的變化。所以要像正常學(xué)習(xí)的節(jié)奏,去學(xué)習(xí)、去深究,去交流。當(dāng)然無論是玩耍、游戲還是學(xué)習(xí),只要覺得開心都可以去做,能在學(xué)習(xí)上覺得開心的肯定是少數(shù),畢竟學(xué)習(xí)很多時候都是一件逆人性的事情。但是一旦克服了,恭喜,你已經(jīng)比很多人厲害了。
所以你需要大量的練習(xí)。平時看到喜歡的東西,就去學(xué)就是了,就去練習(xí)就是了,管他什么跨界、什么太難,當(dāng)玩具去玩就是了,再把它總結(jié)出來分享給大家,讓大家挑刺,有一天你很可能也會成為很多人眼中的“天才”。