多年前我在做技術支持。因為這些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的科技書以后,我為涉及到他是人類并且有人類的想法方面感到開心。
-
工程師
+關注
關注
59文章
1571瀏覽量
68572 -
程序員
+關注
關注
4文章
953瀏覽量
29823
發布評論請先 登錄
相關推薦
評論