向開(kāi)發(fā)人員提供建議的編程心理學(xué)
我之前寫(xiě)過(guò)驶悟,編程有兩個(gè)受眾:CPU 和你的編程伙伴。
還有一些優(yōu)秀的文章惠赫,比如《面向苦難編程》 邑贴,可以幫助你在編程時(shí)調(diào)整目標(biāo)——讓它工作蜂林、讓它漂亮、讓它快速须床,這是那篇文章的建議铐料。
“讓它工作、讓它漂亮、讓它快速”是絕妙的編程建議余赢,也是我從第一次讀它開(kāi)始就一直牢記在心的建議芯义。
編程建議程序首先以 CPU 為目標(biāo)——即“使其工作”。
1 合理的編程建議
然后建議針對(duì)您的編程伙伴妻柒,即必須維護(hù)或查看代碼的人扛拨,讓代碼漂亮。
一旦您的代碼成功滿(mǎn)足其計(jì)算要求举塔,并滿(mǎn)足與我們一起共事的普通人能夠理解的要求绑警,那么,如有必要央渣,我們就可以專(zhuān)心致志地不斷完善它计盒。事實(shí)上, 代碼“漂亮”意味著有可能更容易找到改進(jìn)的機(jī)會(huì)芽丹,因?yàn)樵诖蠖鄶?shù)情況下北启,使代碼“漂亮”意味著更小的、獨(dú)立的函數(shù)拔第,從而使得更易優(yōu)化咕村。
我最近在網(wǎng)上和一位朋友聊天,他提出了一個(gè)問(wèn)題蚊俺,這也反映了我的經(jīng)歷:他的任務(wù)是集成一組代碼懈涛,這些代碼是在沒(méi)有團(tuán)隊(duì)監(jiān)督的情況下創(chuàng)建的。這些代碼缺乏測(cè)試泳猬,并且是獨(dú)立編寫(xiě)的批钠,沒(méi)有遵循與主項(xiàng)目相同的編碼標(biāo)準(zhǔn)。
這是一個(gè)艱難的處境得封。集成這樣的代碼意味著要試圖弄清切入點(diǎn)——這是測(cè)試的職責(zé)——但由于沒(méi)經(jīng)過(guò)測(cè)試埋心,你不得不相信編碼者實(shí)際上滿(mǎn)足了需求,因?yàn)樵诶硐肭榍樾蜗虑好浚瑴y(cè)試也要證明這一點(diǎn)踩窖。
你會(huì)怎么做?你會(huì)給什么編程建議晨横?
2 無(wú)沖突面對(duì)
如我所言洋腮,我遇到過(guò)類(lèi)似情形,雖然我承認(rèn)還可以處理得更好手形,但同時(shí)我也認(rèn)為自己已經(jīng)做得夠好了啥供。
人們不喜歡被面對(duì),面對(duì)什么并不重要库糠。迪特里匣锖·邦霍費(fèi)爾(Dietrich Bonhoeffer)有一個(gè)深刻的洞察涮毫,即個(gè)體可能很愚笨,但群體可能超級(jí)愚笨——更糟糕的是贷屎,抵觸挑戰(zhàn)罢防,抵抗力會(huì)隨著參與人數(shù)的增加而增加。(你可以很容易地改變一個(gè)朋友的想法——但是改變一群七個(gè)人的想法卻難于上青天唉侄。)
所以我所做的就是把自己描繪成一個(gè)受到他們的代碼庫(kù)挑戰(zhàn)的人咒吐。我沒(méi)有評(píng)論實(shí)際代碼或它們有多可怕:我讓自己專(zhuān)注是于學(xué)習(xí)代碼,因?yàn)槲也焕斫馑?/p>
這個(gè)功能的測(cè)試在哪里属划?”我問(wèn)道恬叹,盡管我知道沒(méi)有測(cè)試。畢竟同眯,我可能是錯(cuò)的……問(wèn)測(cè)試在哪里是對(duì)他們的溫和刺激绽昼,以便我能從他們那里有所收獲。
這個(gè)問(wèn)題給了他們很大的回旋余地须蜗。
3 強(qiáng)迫自我反省
他們可以指出測(cè)試在哪里確實(shí)滿(mǎn)足了我的需求硅确;也許我只是沒(méi)看到?(在這種情況下唠粥,不存在測(cè)試疏魏,我知道停做,但這不是重點(diǎn)晤愧。我需要他們考慮可能性。)
他們也可以自己觀察到蛉腌,也許測(cè)試不存在官份,作為交接的要求,也許他們可以寫(xiě)一個(gè)烙丛。
當(dāng)您還沒(méi)有設(shè)計(jì)用于測(cè)試的代碼時(shí)舅巷,測(cè)試很困難,但在您接受代碼之前河咽,這不是您的問(wèn)題钠右,這讓他們有機(jī)會(huì)修改自己對(duì)代碼的理解,而不必在意我對(duì)他們代碼的看法忘蟹。
當(dāng)然飒房,也許你沒(méi)有權(quán)限要求這樣的測(cè)試。在這種情況下媚值,您可能需要向利益相關(guān)者(負(fù)責(zé)交付代碼的人)請(qǐng)求幫助狠毯,并指出未測(cè)試代碼的集成引入了可變的可靠性(即,它是不可靠的褥芒,因?yàn)槟荒芗僭O(shè)它是可靠的)嚼松。
與利益相關(guān)者就可靠性進(jìn)行對(duì)話(huà)可能會(huì)讓您有權(quán)回去進(jìn)行結(jié)構(gòu)和測(cè)試的對(duì)話(huà)。
4 編程建議心理學(xué)
再者說(shuō),這種對(duì)話(huà)完全可以顛倒過(guò)來(lái)献酗。如果他們編寫(xiě)了意大利面條式的代碼并為此感到自豪——誰(shuí)不會(huì)呢寝受?—您會(huì)簡(jiǎn)單地要求他們編寫(xiě)它,以便您的小腦袋可以像理解根據(jù)組織約定編寫(xiě)的代碼一樣容易地理解它罕偎。
“哇羡蛾,那個(gè)243行的函數(shù)太厲害了,就是看不懂锨亏。你能告訴我我們?nèi)绾螌⑺纸獠⒅貥?gòu)為具有更小的函數(shù)和組合嗎痴怨? 而這個(gè)對(duì)“j”的引用,是一個(gè)索引嗎器予?我們能把它命名為它實(shí)際代表的東西嗎浪藻?是窗口句柄嗎? 請(qǐng)幫幫我乾翔,我真的不明白爱葵。”
這是基本的心理學(xué)原理反浓。在某種程度上萌丈,這是一種操縱,但我們每天和每次互動(dòng)都以溫和(希望是善良)的方式操縱人們:當(dāng)我們與人打招呼時(shí)雷则,我們會(huì)微笑辆雾,以觸發(fā)特定的內(nèi)啡肽,我們首先提到好消息(或許不是)創(chuàng)造有利于我們想要的特定心態(tài)月劈。為自己的目的使用人們的思維和感知方式并不奇怪度迂,如果結(jié)果是正面的,那么這樣做也不是壞事猜揪。
不要害怕用心理學(xué)來(lái)幫助你編程惭墓。這可能很難,因?yàn)橛袝r(shí)它意味著你不能對(duì)那些可能真的需要大喊大叫的人大喊大叫——但大喊大叫往往會(huì)適得其反而姐,如果目標(biāo)是富有成效腊凶,那么我們需要考慮如何創(chuàng)造我們的工作環(huán)境,而不是通過(guò)按住別人來(lái)滿(mǎn)足我們的私欲拴念。