工程師生涯 30 年:真希望在菜鳥時期就懂得的這些事

在我 30  多年的工程師生涯裡,我學到了不少有用的東西。下面是我這些年積累的經驗精華。我常常想,如果以前能有人在這些經驗上指點一二,我相信我現在會站得更高。

  • 客戶在接觸到產品之後,才會真正明白自己的需求。

這是我在我的第一份工作上面學來的。只有當我們向客戶展示產品的時候,他們才會意識到哪些是必需的。給出一個功能性原型設計,遠比一張長長的文字表格要好。

  • 只要有充足的時間,所有安全防禦系統都將失敗。

資訊安全如今是全世界都在關注的大課題、大挑戰。我們必須時時刻刻積極完善它,因為駭客只要有一次成功,就可以徹底打敗你。

  • 安全防禦是否失敗取決於及早規劃。

假設有駭客會徹底破壞你的防禦系統,那你就得提前做好準備。這樣即便真的讓他們侵入系統,也無法盜取任何有價值的東西,因為你已經對伺服器做好安全設置,比如對資料庫中的內容進行加密,並且為每台有可能遭受攻擊的伺服器進行隔離。記住,再強大的防禦都會有它的薄弱之處,關鍵是要有備無患。

  • 良好的安全防禦系統不要在乎它的費用,因為這是戰略投資;不及格的安全防禦才是被浪費的資源。

在我的職業生涯中,經常聽到有人抱怨說資訊安全是多麼多麼的複雜和昂貴,他們沒有意識到的是,如果防禦失敗,公司將損失的可能不止幾十億美元。為了節約幾塊錢而導致企業破產,這種做法毋庸置疑是非常愚蠢的。

  • 將複雜的東西整理成簡單的很困難,但是要是把複雜的搞得更複雜,那就簡單了。

這一條適用於程式設計、設計和幾乎所有的創造領域中。我一直以來都希望自己的 code 能越容易理解越好。如果你的 code 過於複雜和晦澀,那十之八九它正常運作的可能性很低。我曾非常有幸地見識到有些工程師費盡千辛萬苦,反而讓 code 更難以捉摸。

  • 成功源自於失敗中的學習;失敗則是因為容忍錯誤的橫行。

有很多工程師總是在辯解,說什麼「程式這麼難,犯錯誤很正常了,軟體變得糟糕也是難免」。這種理由聽多了,於是,大家也逐漸接受這些鬼扯的藉口。但是我們作為工程師真的不應該讓這些藉口阻礙我們的進步,應該謹記,錯誤只能犯一次,要吸取教訓。是工程師都會希望自己下一次就能一次搞定 code,但是沒有人是完美的,但至少我們是在朝著這個方向前進的路上。

  • 唯一不變的是變化本身,這是誰都無法改變的法則。

計畫永遠趕不上變化,以為明天的世界和今天一樣,這種想法本身就是愚不可及的。尤其是在程式設計世界裡,沒什麼是永恆的。人不能兩次踏進同一條河裡。

  • 永遠不要停止學習,一旦你停下來,技術的浪頭就會狠狠將你拍死在沙灘上。

作為工程師立於不敗之地唯一方法就是,不斷學習、不斷進步。因為一旦你鬆懈下來,你的所有優勢都將隨風而逝。

  • 整個軟體行業建立在「百家爭鳴」的思想上。

在我的職業生涯中,我看到過很多工程師會對各種事情論辯:預估完成時間、規模大小等等方面,有的人還屢錯屢戰。有些以前被批判為「行不通」的技術,現在卻已經在人們生活中站穩一席之地,並且現今正向著另一個高潮衝刺。

  • 適合你的不一定適合他。

在軟體專案中我們可做的選擇很多很多。有的英明,有的糟糕。但是適合你和你當前情況的選擇可能一點都不適用於其他人。我們經常能聽到別人說自己又在幹什麼偉大的創舉,但是如果他們說什麼這是唯一的好方法時,我會對此嗤之以鼻。

  • 在這個不斷變化的世界中,評估(evaluation)是最為重要的技能。

這一點有些人可能並不知道。但是如果你願意認識新事物,看得到他人的努力,比較做事方法之後再擇優使用,那麼不但是你自己,還有你的團隊、你的專案、你的公司,都將受益無窮。 但是很多人對此都不擅長,而很多負責人甚至在這方面表現得非常糟糕。 照著別人說的去做,以及看別人做什麼自己也做什麼,是非常容易的。但是如果要全方位地看問題,再基於自己的需求選擇對應的最佳方向,這就很困難。在軟體業中,做出抉擇是必要的,若你在不得不評估的時候頭腦一片空白,那最終的結果只能是隨機挑一個或者是盲從隨大流。

  • 不管黑貓白貓,能抓到老鼠就是好貓。

只要你的軟體能運作客戶指定的功能,他們才不會關心需要解決哪些問題。系統出問題了、異常情況發生了、硬體壞了,工程師被女朋友甩了、駭客盜帳號了:用戶永遠不會對這些發生興趣。如果發生意外情況,最好能坦誠說出來,但是你最好要能確保這種情況不會持久,因為你總給將最終的產品交給客戶。

  • 客戶的意見決定品質。

無論你設置多少指標、檢查過多少表單、審核多少 code,寫了多少測試:這都不是關鍵,除非客戶自己親眼目睹軟體運作正常。關於 code 品質、性能、設計和可用性,客戶的意見才是決定品質的唯一要素。

  • 對某方面的無知可能會讓你一敗塗地,因為你在這方面毫無經驗。

今日我依舊不斷驚歎,有的同行竟然仍然沒有收集足夠的日誌、崩潰報告和使用資訊來掌控自己的軟體。那些對這方面資訊不屑一顧的傢伙,大多會高估產品的品質。若你不採取措施和記錄結果,渾渾噩噩地混日子,終將會導致你對當前情況一無所知,包括你的客戶。我一直反覆強調,詳細而有用的日誌記錄、程式崩潰跟蹤、評論和意見,反正各種只要能讓我儘快瞭解發生了什麼問題的途徑和方法,都是可行的。不過,我也知道有很多人認為「這種事和工程師有一毛錢的關係嗎?」

  • 總有更好的辦法,但是時間不允許。

評估中最難把握的節點,就什麼時候應該停止腦力激盪開始動工。或許我們會錯過那個更好的方法,但是如果要耗費很長時間,那就不值得了。但是這是很難界定的,不過有時候今天的一個小小的選擇可能會打敗明年那個更佳的選項。Who knows

底下兩點引用自一名行銷人員,他是我以前的同事。有些東西我並不是完全同意,不過也能給予我們不同的角度看問題。

  • 客戶要找愚蠢的。

這是我最喜歡的一句話,這個行銷人員任職於一家顧問公司。他認為,要找那種不懂技術但是有足夠資本揮霍的金主。聰明的人總是會問很多問題;沒錢的人無力購買我們的服務。我很慶倖我是一名工程師,哈哈!

  • 我的工作是欺騙客戶,而你的工作則是支持我。

第二句話來自於同一個行銷人員。他總是喜歡不斷地承諾一些不可能的任務,然後當我們終於嘔心瀝血加班趕工後,他就來收穫我們成功的果實。挑戰的確讓人 exciting,但是每次都是這種不可能的任務未免太痛苦。我的建議是,換一個更好的行銷人員!

(本文獲《碼農網》授權轉載刊登,首圖來源:Travis Isaacs  CC Licensed,未經授權請勿轉載。)

延伸閱讀

我當產品經理學到的 10 件事:不要只講 MVP,談「願景」更容易說服別人
一畢業就進亞馬遜的 23 歲工程師,工作一年他學到最重要的事是:「軟實力」
WeMo Scooter 創辦人暨執行長吳昕霈:關於創業,我在麥肯錫、英特爾工作所學到的事


點關鍵字看更多相關文章: