當我回想我安逸地做一名工程師的時候……那是最努力工作的時候。—— Kent Beck
多年前我在做技術支援。因為這些C/C++編譯成的二進位制檔案出的問題都很複雜, 所以當年維護的時候特別艱難。你們年輕的一代可能並沒有意識到這些,不像在VMs中執行的現代語言,這些庫可以完全訪問原始的系統記憶體,並且可以用與根本原因相距千里的恐怖的記憶體段異常將整個伺服器輕易地搞垮,幾乎不給你留下一絲線索。
由於這種複雜性,我們支援技術的一個常見活動是集中批評程式碼的缺點,不波及程式碼的開發者。我當然感受到過沮喪。我的意思是,真的很沮喪。
我花了一段時間明白了正是這些困難的問題促使我學到了相當難的東西。我曾經深入的研究過 Microsoft C++的執行時的堆模型,搞明白了緩衝區越界是如何造成安全漏洞的。我想出多種方法通過使用偵錯程式功能去複製悄悄進行的多執行緒競態條件,並且教自己程式習語以避免出現這些問題。只是沒有其他的方法可以追捕到生產問題。並且我在不就之後很擅長這些。
既然我回顧了那個時候,我想做的只有感謝那些馬虎或者臨時失效為藉口(或者諸如此類的事情)的開發人員,他們給了我去學習所有問題的機會。這是一次很好的經歷。不過還有一個沒什麼用的,當我回顧作為軟體工程師的早年生活覺得後悔的一件事時,我希望我能夠更樂在其中。
這是一次很好的經歷。不過還有一個沒什麼用的,當我回顧作為軟體工程師的早年生活覺得後悔的一件事時,我希望我能夠更樂在其中。
這也是我如今想知道的事情——我是否仍然漏掉了一些事情?是否有一個讓軟體工程師生活更好的法測(最好是一個演算法)?
TDD 和 JUnit的創造者,做了一個叫做「輕鬆工作」的不同尋常的演講,在演講中他談論了自己多年來作為軟體工程師的生活和他一路上學到的東西。我對這些很感興趣,因為我覺得我可能會為自己作為一個程式設計師對個人幸福的追求找到一些線索,並且我沒有失望。
很棒的引言。繼續讀下去!
什麼是放鬆地工作,它和軟體工程師的生活有什麼關係?
放鬆地工作就像函式程式設計裡的monads :它很難定義,多方面的,無形的,卻是不可否認的真實的。當我們有“我在這可以的,我是誰,做我在做的事情”的想法時,Beck說。“有太多事情要做,但是我不可能完成所有的事情”的想法可以免於擔心、痛苦和躁動。這是對我們自己和同事的信任。平靜的基本意識是讓我們完全集中注意力在工作上並達到我們最大的潛能。
我突然想到沒有優秀的管理能力是不能實現這些事情的。當你有合理的截止日期、有用的資源和明確的目標你會覺得放鬆。對此我很感激——Conductor已經將它作用在一起。
但是放鬆地工作的最後是關於我們:程式設計師。這些年來,我們養成了習慣——和我們的同事相互合作的方法,我們怎樣認識自己工作等等。有一些比起其他的更有益於放鬆地工作。例如,Beck呼籲我們保持信任:與我們的經理和同事溝通切實的期望,有責任感——我們都會好的;
Beck談論到當他沒有得到交流計劃的延誤和其他問題的提示時會產生焦慮,而他獲得安逸是當他對於問題更開放時。從我個人經驗看來,好的開發者傾向於這種有預見性態度。
他們能夠傳達壞訊息並且承認錯誤。這是成熟開發者的標誌。說的好,Kent!
好的開發者應該有這種即將到來的態度。他們能夠傳達壞訊息並且承認錯誤。
放鬆地工作是快樂的
我們的Conductor有很多有趣的東西:舉幾個例子,這裡有Nerf槍,Bieber-Buscemi(長篇故事)和可以隨時取用的桶裝啤酒。這些東西確實讓Conductor成為工作中古怪有趣的地方。(而且這裡真的很棒。)Beck還說,有比這些更深刻的東西——快樂。他指出,並不像有趣,是一種短暫感覺,快樂是一種深層的感情——持久並且非常令人滿足。愉快的工作促成生產效率的提高,更好的形象,當然還有快樂本身。
發現快樂是作為程式設計師旅程的一部分(除了享受快樂,咄!)。並且它會在你對它期待最小時發生。Kent Beck說你可以和其他人有一個真正嚴肅的、充滿衝突的激烈的討論,並且從中得到快樂,即使討論本身並不有趣。Seth, 我們的CEO,可以證明這件事——當你加入Conductor,你會免費獲贈Fierce Conversations,並且你新的招聘計劃會鼓勵你去練習使用它們。
Kent Beck說你可以和其他人有一個真正嚴肅的、充滿衝突的激烈的討論,並且從中得到快樂,即使討論本身並不有趣。
一個發現快樂的很棒的方法是在一個你可以做自己的地方工作。我曾經在一個公開表示不喜歡敏捷方法的公司工作,這使我懊惱不已。當時我的經理明確指出不允許工程師和潛在使用者談話,試圖消除“分心”。所有我被允許做的事情只有根據說明書完成特性,他說。不能與任何工程外的人談話。這讓我很不開心。
因此我們不能為使用者反饋得到任何的官方支援,但是我們圍繞這個找到很多方法。我們小組和一對售前和一個專業服務人員交了朋友。我們有頻繁的討論和即興演示。很多好主意出現。浪費被消滅在萌芽狀態,精益的風格。和一小群未來的使用者一起工作,我們搭建一些我們知道他們會發現有用的東西。我們最後創造出來的東西看起來一點也不像最初的說明書(充滿感激)。但是,當知道我們有多少努力不被認可,這仍然是一件苦憂參半的勝利。
最終我要另尋他處,於是我到了Conductor。這真是一個挑戰。我做的第一件事是上了公司贊助的TDD課程(竟然來自一個Kent Beck的前同事)。我有沒有提到是因為我的前一個工作對測試感到氣餒的?沒錯——根據一些數學運算,如果你做了較少的測試相同數目的鍵入能給你更多特徵。讓我重複一下:我看見了管理人員積極地鼓勵開發者寫測試!
但是我在Conductor這裡,在XP重新整理後,我發現Conductor是個你不僅允許並且被鼓勵去和客戶通話並和你的使用者變得熟悉的地方。這是一個地方我們經常重做並且演示我們工作的地方。我們理所當然地得到定期反饋。這裡充滿活力,使人振作,讓人精力充沛。現在這是一個令人愉快的形勢變化。工作場所的選擇有很大影響。
這裡充滿活力,使人振作,讓人精力充沛。現在這是一個令人愉快的形勢變化。工作場所的選擇有很大影響。
放鬆地工作是隨和的
我提到了在早期當我還是一個支援工程師時頗受開發者的阻撓。你可以責備我嗎?當他們舒服地坐在他們的椅子上寫程式碼的時候,我查詢並修復他們的漏洞到深夜。他們把東西弄亂而我是那個走進並清理混亂的英雄。戲劇性的。我無數次拯救了世界。我認為。
Kent Beck記得在他年輕時有相似的看法。他的建議是避免浪費精力在無根據的裝腔作勢。你覺得程式設計讓你像一個英雄和程式設計讓你有一個程式是完全不同的,Beck建議。與其把時間浪費在這種滑稽事情上,我們可以做更酷的事情:比如執行程式碼重構,寫部落格帖子和實現新的好工具。讓時間輕鬆且愉快。“我們喝咖啡吧”Beck建議。有的人把這個標語放在保險桿貼紙上。
你覺得程式設計讓你像一個英雄和程式設計讓你有一個程式是完全不同的,Beck建議。
撿起眾所周知的罐子
“如果你在沙漠裡並且看見一個小罐頭在地上將會怎麼樣?”——beck說,當我們遇到其他人以我們不認同的方式工作時會回想起這些例子。我們可能會說,或許處於失意,或許純粹出於習慣,“誰對自然這麼不尊重把小罐子扔在這……(含糊地嘟囔)”我又有年輕時我自己做技術支援時的畫面。多年來我見過了很多眾所周知的小罐子在原始碼中,在那時我真的是一個環保主義者。我沒有意識到的是我身上的負面影響。
由於知道我們想讓事情變得更好,Beck說這是我們不伴隨“戲劇性”地撿起罐子的人的完美地自然的表達。我們傾向於評價別人的工作,他主張,要平等地評價我們自己。對其他人更寬容,相比之下,將會引導我們變得更能自我寬容,反過來開啟我們接受更多有挑戰性工作的能力。
對其他人的不足之處抱有同情心讓我們有更大可能從自己的失敗中學習,幫助我們成為更好的程式設計師。下一次在程式碼中遇到鐵罐時,“把它撿起來”,Beck說。不要緊。就像這樣。
我們傾向於評價別人的工作,他主張,要平等地評價我們自己。對其他人更寬容,相比之下,將會引導我們變得更能自我寬容,反過來開啟我們接受更多有挑戰性工作的能力。
在工作上更放鬆
過了很長一段時間我才認識到作為支援工程師對我的事業如何有益,因此我對Kent Beck放鬆地工作中的東西很熟悉。我也發現這個演講很激勵人心。
首要的是,可以肯定的是另一個程式設計師(我長時間的行為榜樣)在他生活中作為軟體工程師有過類似的經歷並且得到類似的結論。第二,從陷於大部分的機器和他們沒感情的語言的忙碌高壓的工作中休息一下是很好的,然後停下片刻去探索人文科學,即使對我們大部分是內向且靦腆的極客,這也是一個禮物。讀完所有Kent Beck的科技書以後,我為涉及到他是人類並且有人類的想法方面感到開心。