聊聊工程師文化與工程師思維

程序員的煩惱是,你永遠無法知道一個程序員在做什麼,直到爲時已晚。


最近看了一片文章,其中工程師思維和文化說的非常好,所以拿來分享下。。。。

模型,我們需要面對的是現實世界的複雜性。保障服務的健康運行,必然有大量的事務性工作,運維或 SRE(網站可靠性工程師)這樣的職業也由此誕生。

事務與工程

但是如果我們停留在事務中不能出來,那麼隨着我們所服務的用戶數量增加,必然需要招聘大量的人員來應對繁重的事務工作。
事務性的工作不會總是讓人不開心,特別是工作不太多的時候。已知的、重複性的工作有一種讓人平靜的功效。完成這些事可以帶來一種滿足感和快速勝利感。事務工作可能是低風險低壓力的活動,有些員工甚至喜歡做這種類型的工作。
但是我們必須清楚,在 SRE 所扮演的角色中,一定數量的事務工作是不可避免的,這其實是任何工程類工作都具有的特點。少量的事務存在不是什麼大問題。但是一旦事務數量變多,就會有害了。如果事務特別繁重,那就應該非常擔憂了。
如果花在工程項目上的時間太少,你的職業發展會變慢,甚至停滯。我們可以鼓勵那些做髒活累活的人,但僅僅限於在這些工作不可避免,並有巨大的正面影響的時候纔會這樣做。沒有人可以通過不停地做髒活累活實現自己的職業發展。

把問題徹底解決

那麼,什麼是工程師思維?
在部分所謂的技術導向型公司,可能存在一些思維慣性,銷售和產品經理會覺得自己沒有話語權,開發工程師會覺得自己的地位高人一等。
對此我其實很反感。推崇技術當然不是個問題,但是所有的健康公司都必然是業務導向的公司,所有的技術人員如果希望有好的職業發展,也必然需要去理解業務。
七牛是推崇工程師文化的,但工程師文化顯然並不是去尊崇工程師這樣的職業。
什麼纔是真正的工程師文化?
從淺層的意義來說,工程師就是要實現業務的自動化。DON’T REPEAT YOURSELF! 某件重複發生的事情只幹一次就好,以後也不需要再重複做。
工程師的自動化思維,所體現的內在邏輯是如何把問題 Close,如何把問題徹底解決掉,而編碼只是一種工具。
在我們日常生活中,很多問題不需要編碼來解決,但是確實需要用 “徹底解決它” 的思維去完成。這種思維不僅限於工程師,同樣適用於所有人。比如,我們開餐廳需要解決服務質量的問題,這一點可能海底撈就解決得很好,但是不一定是用編碼的方式解決。同樣地,假設我們辦線下市場活動,要解決內容質量的問題。怎麼徹底解決它,這是值得深度思考的問題。
很多人會習慣呆在自己的舒適區,習慣於做任務,每天重複相同的作業,這就不符合我們所說的 “工程師文化”。我們需要達到的狀態是,今天干完一件事,明天開啓新的事。
怎麼判斷自己在做新的事情?那就要看我們問題是否解決得夠徹底。
比如我在做新媒體運營,每天寫着不同的公衆號文章,這是否代表我在做新的事情?答案顯然是不一定。要回答這個問題,我們首先需要搞清楚的是,我每天發公衆號文章,是在解決一個什麼樣的問題。如果我們沒有想清楚這一點,那麼我們就不是在 Close 問題,我們只是在做任務而已。
我們的目標顯然不應該是每天發一篇文章。這是在定義一件事務,而不是定義一個目標。把問題定義清楚非常非常重要。清楚了問題,就是設定清楚了我們的目標。然後才能談得上去徹底解決掉它。
從另一個維度看,工程師這種把問題 Close,徹底解決掉的思維,看重的是自己工作內容的長期價值。如果我們只是在做事務,如果我們並沒有在實質性解決一個問題,那麼這件事情的長期價值就是零。
所以本質上,工程師文化也是產品文化,把問題以一種自動化的方式解決。這纔是我們真正應該尊崇的工程師文化。
一個公司各個崗位是彼此協作的團隊,工程師並不是特殊羣體。銷售、技術支持、產品、開發工程師每一個角色都是平等的。每個人都應該秉承工程師精神,把一個個問題 Close,讓它不要再發生。不需要顯得很忙,忙不代表成就,真正的工程師文化應該是推動整個團隊往前走,每個團隊成員都在成長。


系統化思維與批判精神

從更深層次來說,工程師思維是一種系統化的思維。僅僅是編碼和自動化是不夠的,很可能你編碼也只是在實現某種事務性工作,而不是用系統性或者說結構化的方案來解決問題。
真正的工程師會系統化地考慮方案的有效性。他們追求的是用最小化的編碼工作來解決更大範圍的問題。

少就是指數級的多!

現實中,一些工程師經常對於自己編寫的代碼形成一種情感依附,這是人之常情。一些人可能會在你刪除多餘代碼時提出抗議:“如果我們以後需要這個代碼怎麼辦?”“我們爲什麼只是把這些代碼註釋掉,這樣稍後再使用它的時候會更容易嗎?”“爲什麼不增加一個功能開關?”
這些都是糟糕的建議。源代碼管理系統中的回滾其實很容易,但大量的註釋代碼則會造成干擾和混亂,尤其是我們還要繼續演進時。那些由於功能開關沒有啓用而沒有被執行的代碼,更是像一個個定時炸彈一樣等待爆炸。
極端地說,當你指望一個軟件 24 小時不間斷服務時,在某種程度上來說每一行代碼都是負擔。所以 SRE 需要推崇的實踐是保證所有的代碼行都有必須存在的目的。
另外,從軟件工程角度來說,傳統意義上的工程強調的是複製性,但軟件的編碼卻是一項不確定性很強的創新性工作,我們總在不斷迭代出新的技術。所以軟件工程是頗爲複雜的東西,它需要在不確定性和複製性這對兒矛盾中平衡。
所以優秀的工程師還需要有批判精神。經驗當然是有價值的,但過於相信慣例就會抑制創新能力。尋求本源,不迷信慣例和權威。以數據爲指導,從根源出發去系統性解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章