致諸位新程序員:來自Chuck Jazdzewski慈父般的忠告

c85e 5年前發布 | 7K 次閱讀 CentOS 7

覺得這篇文章對新程序員有很強的指導意義,我剛入這行要是看到這篇文章應該會更好,特分享下:

原文發布時間:2006年09月19日上午09點43分

看起來我的兒女們都不適合做程序員。為了不讓這份原本為我的新程序員兒子或女兒準備的慈父般的忠告功虧一簣,我打算把這份忠告強加于你。要是你剛踏上成為一名程序員的旅途,這里的建議也許你的父親告訴過你,如果他也是程序員的話。這是一些我歷經艱辛才習得的東西。

不斷學習:閱讀。參加會議。訂閱期刊。上課。無論做什么都是為了讓你不斷學習,要充分重視學習。了解你可以找到的每種語言。盡你所能去花時間了解任何新的框架、算法、技術、模型、范式。每當往你的工具箱中多添一件工具,都會有助于你更輕松地解決接下來的編程問題。去拜師,即比你強得多的人,然后學會他們可以傳授給你的一切。學無止境。

學會溝通:我經常開玩笑說,作為程序員你能學到的最重要的技能是,如何在白板上畫長方形。溝通對于程序員的工作可謂至關重要。與買家、客戶、用戶、同事、老板、副總裁、首席執行官、董事會成員、風險投資人等各種各樣的人溝通,這些溝通在你職業生涯中的某些時候會變得很重要。學會如何在公共場合下講話。學會如何用英文寫作。學會如何與他人有效溝通。學會如何心平氣和地說服他人,而不要大喊大叫、火冒三丈、抑或驚慌失措。學會如何在演說時不講行話。這樣有助于別人明白你在做什么。學會把事物分解為簡單明了的片斷。學會借助比喻及象征去溝通。學會溝通。

做到可預測:要弄清楚你能以多快的速度愜意編程。要一直等到你明白了某項任務,然后才能預測出你會用多久完成此任務。要將意想不到的情況計算在內。要為假期及休息時間作安排。學會適應你的預測。我會把某項任務分解成若干子任務,并且每個子任務耗時不超過3天(通常都不足 1天),而在此之前我不會認為自己對此問題有了充分認識,因此也就不去預測完成任務會用多久。請遵照這條規則生活,履行承諾,勝過交付。最好是只用10天就交付你承諾需15天完成的工作,而不是用10天才交付你承諾僅需5天的工作。人們依賴于你的預測,而進度安排及計劃也會圍繞著你的預測去組織。盡你所能把預測做到最好,并確保你可以愜意地完成它們,否則你會被要求去履行那些令你難受的預測。你起初并不善于此道;就要請更有經驗的前輩與你一起去彌補、核實你的預測。學著變得更好。做到可預測;因為別人在指望著你。

承認自己的錯誤:你會犯許多錯。你如何處理自己所犯的錯正是他人如何評價你的依據。學會如何說“我錯了。”要是你低估了自己完成某事所用時長,一旦你清楚了這一點就及時告訴大家。要是你弄壞了某個版本,就修復它。要是你弄出了bug,就搞定它。不要否認錯誤,不要為錯誤找借口,不要琢磨如何隱藏錯誤,不要把錯誤歸咎于別人,為改正錯誤做點兒實事兒。要為自己的錯誤負責,否則你重蹈覆轍。

決不讓爛代碼從你的辦公桌上溜走:作為程序員,你的工作就是編寫可工作的代碼,因此當你不確定代碼符合此標準時,決不讓代碼從你的辦公桌上溜走。一旦讓問題代碼從你的辦公桌上溜走,與溜走之前相比,那樣做不僅會令你難堪,而且要找出問題也會更昂貴、更困難。學會愛上單元測試。學會愛上代碼覆蓋率。學會測試自己的代碼勝過付錢給別人去測試代碼。在你簽入代碼后又找到了bug,應該為此覺得難為情。要是買家找到了bug,應該覺得特別難為情。不要指望別人為你找出bug,要靠你自己去找出并修復bug。不要期盼代碼能正常運行。要測試代碼。不要估計代碼能正常運行。要測試代碼。不要抱有任何僥幸心理。就是要測試代碼。如果你尚未測試代碼,那么代碼就無法正常運行;對此你可能心知肚明。不過,即使你用心測試,有些bug還是會從你眼皮底下溜走。雖然你還會犯錯,但是要盡你所能不犯錯。

盡管編程很有趣,不過發布產品才是你的工作:編程很有趣。那是探索的喜悅。那是創造的喜悅。那是成就的喜悅。那是學習的喜悅。看到自己親手完成的作品顯示在屏幕上很有趣。有同事為你的代碼而驚嘆很有趣。有人在公共場合稱贊你的產品、鄰居使用你的產品、以及在媒體上討論你的產品很有趣。編程應該十分有趣,若并非如此,就找出導致編程無趣的問題,然后解決之。可是,發布產品并無樂趣可言。我經常說起,發布一款產品感覺不錯,就像某人不再打你時的那種感覺。你的工作就是完成產品,修復bug,然后發布。要是需要改bug,就改bug。要是需要寫文檔,就寫文檔。要是需要測試代碼,就測試代碼。所有這一切都是發布產品的一部分。編程不會給你帶來報酬,唯有發布產品才會給你帶來報酬。把你的活兒干漂亮。

記住這幾句話,

  • 學無止境。(Never stop learning.)
  • 溝通至關重要。(Communication is critical.)
  • 履行承諾,勝過交付。(Under promise, over deliver.)
  • “我錯了。”("I was wrong.")
  • 要是代碼未經測試,那它就無法正常運行。(If it is not tested it doesn't work.)
  • 編程不是你的工作,發布產品才是。(Programming isn't your job, shipping is.)

原文鏈接

Fatherly Advice To New Programmers

關于作者

Chuck Jazdzewski

Chuck Jazdzewski曾在Borland公司擔任Delphi首席架構師、首席科學家,與Delphi兼.NET之父Anders Hejlsberg并肩作戰。于2004年從Borland公司離職,加入微軟。

轉自:http://www.ituring.com.cn/article/details/18838  圖靈社區

 本文由用戶 c85e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!