多年前我在做技術(shù)支持。因?yàn)檫@些C/C++編譯成的二進(jìn)制文件出的問(wèn)題都很復(fù)雜, 所以當(dāng)年維護(hù)的時(shí)候特別艱難。你們年輕的一代可能并沒(méi)有意識(shí)到這些,不像在VMs中運(yùn)行的現(xiàn)代語(yǔ)言,這些庫(kù)可以完全訪問(wèn)原始的系統(tǒng)內(nèi)存,并且可以用與根本原因相距千里的恐怖的內(nèi)存段異常將整個(gè)服務(wù)器輕易地搞垮,幾乎不給你留下一絲線索。
由于這種復(fù)雜性,我們支持技術(shù)的一個(gè)常見(jiàn)活動(dòng)是集中批評(píng)代碼的缺點(diǎn),不波及代碼的開(kāi)發(fā)者。我當(dāng)然感受到過(guò)沮喪。我的意思是,真的很沮喪。
我花了一段時(shí)間明白了正是這些困難的問(wèn)題促使我學(xué)到了相當(dāng)難的東西。我曾經(jīng)深入的研究過(guò) Microsoft C++的運(yùn)行時(shí)的堆模型,搞明白了緩沖區(qū)越界是如何造成安全漏洞的。我想出多種方法通過(guò)使用調(diào)試器功能去復(fù)制悄悄進(jìn)行的多線程競(jìng)態(tài)條件,并且教自己程序習(xí)語(yǔ)以避免出現(xiàn)這些問(wèn)題。只是沒(méi)有其他的方法可以追捕到生產(chǎn)問(wèn)題。并且我在不就之后很擅長(zhǎng)這些。
既然我回顧了那個(gè)時(shí)候,我想做的只有感謝那些馬虎或者臨時(shí)失效為借口(或者諸如此類的事情)的開(kāi)發(fā)人員,他們給了我去學(xué)習(xí)所有問(wèn)題的機(jī)會(huì)。這是一次很好的經(jīng)歷。不過(guò)還有一個(gè)沒(méi)什么用的,當(dāng)我回顧作為軟件工程師的早年生活覺(jué)得后悔的一件事時(shí),我希望我能夠更樂(lè)在其中。
這是一次很好的經(jīng)歷。不過(guò)還有一個(gè)沒(méi)什么用的,當(dāng)我回顧作為軟件工程師的早年生活覺(jué)得后悔的一件事時(shí),我希望我能夠更樂(lè)在其中。
這也是我如今想知道的事情——我是否仍然漏掉了一些事情?是否有一個(gè)讓軟件工程師生活更好的法測(cè)(最好是一個(gè)算法)?
TDD 和 JUnit的創(chuàng)造者,做了一個(gè)叫做「輕松工作」的不同尋常的演講,在演講中他談?wù)摿俗约憾嗄陙?lái)作為軟件工程師的生活和他一路上學(xué)到的東西。我對(duì)這些很感興趣,因?yàn)槲矣X(jué)得我可能會(huì)為自己作為一個(gè)程序員對(duì)個(gè)人幸福的追求找到一些線索,并且我沒(méi)有失望。
很棒的引言。繼續(xù)讀下去!
什么是放松地工作,它和軟件工程師的生活有什么關(guān)系?
放松地工作就像函數(shù)程序設(shè)計(jì)里的monads :它很難定義,多方面的,無(wú)形的,卻是不可否認(rèn)的真實(shí)的。當(dāng)我們有“我在這可以的,我是誰(shuí),做我在做的事情”的想法時(shí),Beck說(shuō)?!坝刑嗍虑橐?,但是我不可能完成所有的事情”的想法可以免于擔(dān)心、痛苦和躁動(dòng)。這是對(duì)我們自己和同事的信任。平靜的基本意識(shí)是讓我們完全集中注意力在工作上并達(dá)到我們最大的潛能。
我突然想到?jīng)]有優(yōu)秀的管理能力是不能實(shí)現(xiàn)這些事情的。當(dāng)你有合理的截止日期、有用的資源和明確的目標(biāo)你會(huì)覺(jué)得放松。對(duì)此我很感激——Conductor已經(jīng)將它作用在一起。
但是放松地工作的最后是關(guān)于我們:程序員。這些年來(lái),我們養(yǎng)成了習(xí)慣——和我們的同事相互合作的方法,我們?cè)鯓诱J(rèn)識(shí)自己工作等等。有一些比起其他的更有益于放松地工作。例如,Beck呼吁我們保持信任:與我們的經(jīng)理和同事溝通切實(shí)的期望,有責(zé)任感——我們都會(huì)好的;
Beck談?wù)摰疆?dāng)他沒(méi)有得到交流計(jì)劃的延誤和其他問(wèn)題的提示時(shí)會(huì)產(chǎn)生焦慮,而他獲得安逸是當(dāng)他對(duì)于問(wèn)題更開(kāi)放時(shí)。從我個(gè)人經(jīng)驗(yàn)看來(lái),好的開(kāi)發(fā)者傾向于這種有預(yù)見(jiàn)性態(tài)度。
他們能夠傳達(dá)壞消息并且承認(rèn)錯(cuò)誤。這是成熟開(kāi)發(fā)者的標(biāo)志。說(shuō)的好,Kent!
好的開(kāi)發(fā)者應(yīng)該有這種即將到來(lái)的態(tài)度。他們能夠傳達(dá)壞消息并且承認(rèn)錯(cuò)誤。
放松地工作是快樂(lè)的
我們的Conductor有很多有趣的東西:舉幾個(gè)例子,這里有Nerf槍,Bieber-Buscemi(長(zhǎng)篇故事)和可以隨時(shí)取用的桶裝啤酒。這些東西確實(shí)讓Conductor成為工作中古怪有趣的地方。(而且這里真的很棒。)Beck還說(shuō),有比這些更深刻的東西——快樂(lè)。他指出,并不像有趣,是一種短暫感覺(jué),快樂(lè)是一種深層的感情——持久并且非常令人滿足。愉快的工作促成生產(chǎn)效率的提高,更好的形象,當(dāng)然還有快樂(lè)本身。
發(fā)現(xiàn)快樂(lè)是作為程序員旅程的一部分(除了享受快樂(lè),咄?。?。并且它會(huì)在你對(duì)它期待最小時(shí)發(fā)生。Kent Beck說(shuō)你可以和其他人有一個(gè)真正嚴(yán)肅的、充滿沖突的激烈的討論,并且從中得到快樂(lè),即使討論本身并不有趣。Seth, 我們的CEO,可以證明這件事——當(dāng)你加入Conductor,你會(huì)免費(fèi)獲贈(zèng)Fierce Conversations,并且你新的招聘計(jì)劃會(huì)鼓勵(lì)你去練習(xí)使用它們。
Kent Beck說(shuō)你可以和其他人有一個(gè)真正嚴(yán)肅的、充滿沖突的激烈的討論,并且從中得到快樂(lè),即使討論本身并不有趣。
一個(gè)發(fā)現(xiàn)快樂(lè)的很棒的方法是在一個(gè)你可以做自己的地方工作。我曾經(jīng)在一個(gè)公開(kāi)表示不喜歡敏捷方法的公司工作,這使我懊惱不已。當(dāng)時(shí)我的經(jīng)理明確指出不允許工程師和潛在用戶談話,試圖消除“分心”。所有我被允許做的事情只有根據(jù)說(shuō)明書完成特性,他說(shuō)。不能與任何工程外的人談話。這讓我很不開(kāi)心。
因此我們不能為用戶反饋得到任何的官方支持,但是我們圍繞這個(gè)找到很多方法。我們小組和一對(duì)售前和一個(gè)專業(yè)服務(wù)人員交了朋友。我們有頻繁的討論和即興演示。很多好主意出現(xiàn)。浪費(fèi)被消滅在萌芽狀態(tài),精益的風(fēng)格。和一小群未來(lái)的用戶一起工作,我們搭建一些我們知道他們會(huì)發(fā)現(xiàn)有用的東西。我們最后創(chuàng)造出來(lái)的東西看起來(lái)一點(diǎn)也不像最初的說(shuō)明書(充滿感激)。但是,當(dāng)知道我們有多少努力不被認(rèn)可,這仍然是一件苦憂參半的勝利。
最終我要另尋他處,于是我到了Conductor。這真是一個(gè)挑戰(zhàn)。我做的第一件事是上了公司贊助的TDD課程(竟然來(lái)自一個(gè)Kent Beck的前同事)。我有沒(méi)有提到是因?yàn)槲业那耙粋€(gè)工作對(duì)測(cè)試感到氣餒的?沒(méi)錯(cuò)——根據(jù)一些數(shù)學(xué)運(yùn)算,如果你做了較少的測(cè)試相同數(shù)目的鍵入能給你更多特征。讓我重復(fù)一下:我看見(jiàn)了管理人員積極地鼓勵(lì)開(kāi)發(fā)者寫測(cè)試!
但是我在Conductor這里,在XP刷新后,我發(fā)現(xiàn)Conductor是個(gè)你不僅允許并且被鼓勵(lì)去和客戶通話并和你的用戶變得熟悉的地方。這是一個(gè)地方我們經(jīng)常重做并且演示我們工作的地方。我們理所當(dāng)然地得到定期反饋。這里充滿活力,使人振作,讓人精力充沛?,F(xiàn)在這是一個(gè)令人愉快的形勢(shì)變化。工作場(chǎng)所的選擇有很大影響。
這里充滿活力,使人振作,讓人精力充沛。現(xiàn)在這是一個(gè)令人愉快的形勢(shì)變化。工作場(chǎng)所的選擇有很大影響。
放松地工作是隨和的
我提到了在早期當(dāng)我還是一個(gè)支持工程師時(shí)頗受開(kāi)發(fā)者的阻撓。你可以責(zé)備我嗎?當(dāng)他們舒服地坐在他們的椅子上寫代碼的時(shí)候,我查找并修復(fù)他們的漏洞到深夜。他們把東西弄亂而我是那個(gè)走進(jìn)并清理混亂的英雄。戲劇性的。我無(wú)數(shù)次拯救了世界。我認(rèn)為。
Kent Beck記得在他年輕時(shí)有相似的看法。他的建議是避免浪費(fèi)精力在無(wú)根據(jù)的裝腔作勢(shì)。你覺(jué)得編程讓你像一個(gè)英雄和編程讓你有一個(gè)程序是完全不同的,Beck建議。與其把時(shí)間浪費(fèi)在這種滑稽事情上,我們可以做更酷的事情:比如執(zhí)行代碼重構(gòu),寫博客帖子和實(shí)現(xiàn)新的好工具。讓時(shí)間輕松且愉快。“我們喝咖啡吧”Beck建議。有的人把這個(gè)標(biāo)語(yǔ)放在保險(xiǎn)桿貼紙上。
你覺(jué)得編程讓你像一個(gè)英雄和編程讓你有一個(gè)程序是完全不同的,Beck建議。
撿起眾所周知的罐子
“如果你在沙漠里并且看見(jiàn)一個(gè)小罐頭在地上將會(huì)怎么樣?”——beck說(shuō),當(dāng)我們遇到其他人以我們不認(rèn)同的方式工作時(shí)會(huì)回想起這些例子。我們可能會(huì)說(shuō),或許處于失意,或許純粹出于習(xí)慣,“誰(shuí)對(duì)自然這么不尊重把小罐子扔在這……(含糊地嘟囔)”我又有年輕時(shí)我自己做技術(shù)支持時(shí)的畫面。多年來(lái)我見(jiàn)過(guò)了很多眾所周知的小罐子在源代碼中,在那時(shí)我真的是一個(gè)環(huán)保主義者。我沒(méi)有意識(shí)到的是我身上的負(fù)面影響。
由于知道我們想讓事情變得更好,Beck說(shuō)這是我們不伴隨“戲劇性”地?fù)炱鸸拮拥娜说耐昝赖刈匀坏谋磉_(dá)。我們傾向于評(píng)價(jià)別人的工作,他主張,要平等地評(píng)價(jià)我們自己。對(duì)其他人更寬容,相比之下,將會(huì)引導(dǎo)我們變得更能自我寬容,反過(guò)來(lái)開(kāi)啟我們接受更多有挑戰(zhàn)性工作的能力。
對(duì)其他人的不足之處抱有同情心讓我們有更大可能從自己的失敗中學(xué)習(xí),幫助我們成為更好的程序員。下一次在代碼中遇到鐵罐時(shí),“把它撿起來(lái)”,Beck說(shuō)。不要緊。就像這樣。
我們傾向于評(píng)價(jià)別人的工作,他主張,要平等地評(píng)價(jià)我們自己。對(duì)其他人更寬容,相比之下,將會(huì)引導(dǎo)我們變得更能自我寬容,反過(guò)來(lái)開(kāi)啟我們接受更多有挑戰(zhàn)性工作的能力。
在工作上更放松
過(guò)了很長(zhǎng)一段時(shí)間我才認(rèn)識(shí)到作為支持工程師對(duì)我的事業(yè)如何有益,因此我對(duì)Kent Beck放松地工作中的東西很熟悉。我也發(fā)現(xiàn)這個(gè)演講很激勵(lì)人心。
首要的是,可以肯定的是另一個(gè)程序員(我長(zhǎng)時(shí)間的行為榜樣)在他生活中作為軟件工程師有過(guò)類似的經(jīng)歷并且得到類似的結(jié)論。第二,從陷于大部分的機(jī)器和他們沒(méi)感情的語(yǔ)言的忙碌高壓的工作中休息一下是很好的,然后停下片刻去探索人文科學(xué),即使對(duì)我們大部分是內(nèi)向且靦腆的極客,這也是一個(gè)禮物。讀完所有Kent Beck的科技書以后,我為涉及到他是人類并且有人類的想法方面感到開(kāi)心。
-
工程師
+關(guān)注
關(guān)注
59文章
1571瀏覽量
68574 -
程序員
+關(guān)注
關(guān)注
4文章
953瀏覽量
29825
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論