成為專業程式設計師的6個技巧

codeceo發表於2015-10-30

  1.在你責怪別人之前,先檢查自己的程式碼

  先想一想自己的假設和其他人的假設。來自不同供應商的工具可能內建不同的假設,即便是相同的供應商對於不同的工具,其假設也可能不同。

  當其他人正在報告一個你不能重複的問題的時候,去看看他們在做什麼。他們可能會做一些你從來沒有想到過的事情,或者他們的做事順序與你的截然不同。

  我個人的原則是,如果我有一個不能確定的錯誤,那麼我會先考慮是不是編譯器的問題,然後再去檢查堆疊是否損壞。特別是當新增跟蹤程式碼會使得問題移動的話就更要這麼做了。多執行緒問題是bug的另一個來源,有時候令人焦躁得簡直想拔光頭髮,或者直接想摔電腦。當系統是多執行緒的時候,最好傾向於簡單的程式碼。我們不能依賴除錯和單元測試來發現任何一致性的bug,所以設計的簡單性是最重要的。

  所以,在你不分青紅皁白地去責怪編譯器之前,先想一想福爾摩斯的這條建議,“一旦你排除了種種不可能,剩下的不管有多麼難以置信,一定就是真相”。

  2.不斷學習

  我們生活在一個有趣的時代。隨著軟體開發逐漸遍佈全球各地,你會發現有很多人都可以幹你的工作。所以你需要不斷學習以保持競爭力。否則,你就會落伍,停滯不前,直到有一天,這份工作不再需要你,或外包給一些更廉價的勞動力。

  那麼我們能做些什麼?有些僱主很慷慨,會提供培訓以拓寬你的技能。也有的人會說我沒時間或者沒這個資金去接受任何培訓。所以,關鍵是要擺正心態,學習是對自己的負責。

  這裡有一些學習的方法。而且許多資源都可以在網際網路上免費獲取:

  • 閱讀書籍、雜誌、部落格、Twitter feeds和網站。如果你想更深入地瞭解物件,可以考慮新增到郵件列表或新聞組。
  • 如果你真的很想學習某一種技術,那麼就親自動手寫程式碼。
  • 儘量與導師一起工作。雖然你從任何人身上都可以學到一些東西,但是從那些比你更聰明或更有經驗的人身上,你能學到的更多。如果你實在找不到這樣的良師益友,那麼請繼續往下看。
  • 使用虛擬導師。在網路上找你真正喜歡的作者和開發人員,閱讀他們寫的內容。訂閱他們的部落格。
  • 瞭解你使用的框架和庫。知道事物的工作原理,有助於你更好地應用它們。如果你使用的是開源資源,那麼你真的很幸運。使用偵錯程式單步執行程式碼,以檢視內部究竟是怎麼回事。你也可以去看看那些確實比你聰明的人是如何編寫和審查程式碼的。
  • 當你犯了錯誤,修復bug,或者遇到問題的時候,試著去真正理解發生了什麼事情。很有可能其他人已經遇到過同樣的問題,並且釋出在了網上。谷歌搜尋真的很有用。
  • 學習東西還有一個好方法就是所謂的“教學相長”。當別人在傾聽你的言語,並問你問題的同時,你也會學到東西。可以建立使用者組或本地會議。
  • 為自己感興趣語言和技術加入或啟動一個研究小組(模式社群),也可以建立本地的使用者組。
  • 參加會議。如果去不了的話,也可以在網上看,許多會議會將其談話免費釋出到網上。
  • 收聽播客。
  • 曾經對程式碼庫執行過靜態分析工具,又或者檢視下你的IDE警告?瞭解它們報告了什麼,以及其原因。

  當然如果你有《黑客帝國》中Neo那樣的超能力,自然這一切對你而言不過是小菜一碟。但很可惜,我們都是普通人,我們需要時間和精力,以及不斷的努力才能促使自己不斷的學習。不過,你不必成天學習。只要你能有意識地花點時間去學習就可以了,哪怕每天一小時,有總比沒有好。人活著不是為了工作,你還應該有自己的生活。

  3.不要害怕破壞東西

  每個具備行業經驗的程式設計師肯定參與過程式碼庫岌岌可危的專案。系統很糟糕,並且改變這邊總是會破壞另一邊不相關的功能。每次新增模組,程式設計師只能想著儘可能少地改變程式碼,每次釋出都膽戰心驚。這座軟體的摩天大樓隨時有坍塌的可能。之所以改動程式碼會如此傷腦筋是因為系統太糟糕了。但是即使你知道系統出了問題,卻又因為投鼠忌器,而不得不聽之任之。任何一個外科醫生都懂得,傷口要想癒合就必須得切除腐肉。雖然手術會帶來痛苦,但絕對比任傷口發炎潰爛要好。

  不要害怕你的程式碼。沒有人會在乎當你搗鼓程式碼的時候有沒有暫時破壞了什麼東西。只要你做的改變不會讓專案重新回到開始狀態,就不會令人崩潰。投入時間重構,能讓你受益於專案整個生命週期。這樣做還有一個額外的好處是,由於你有過這種處理病危系統的經驗,所以你對它應該如何工作非常內行。要善於應用這些知識,千萬不要反感這些寶貴的財富。重新定義內部介面,重構模組,重構複製貼上程式碼,並通過減少依賴來簡化設計。你可以通過消除特殊情況顯著降低程式碼的複雜性,因為特殊情況往往是因為錯誤的耦合特點導致的。慢慢地從舊結構過渡到新結構,測試一路同行。如果你想要一下子完成一個大的重構,那麼往往會因為各種頻出的問題而考慮中途放棄。

  4.專業程式設計師

  專業程式設計師的一個最重要的特點是有責任心。專業程式設計師會為他們的職業生涯、預算、日程安排承諾、錯誤、技能技巧負責。一個專業的程式設計師不會將責任推卸給別人。

  如果你是專業的,那麼你就需要為自己的職業生涯負責。你有責任去閱讀和學習。你有責任去時刻關注最新的產業和技術。但是許多程式設計師覺得這應該是他們僱主的工作。NO,大錯特錯。想一想醫生?想一想律師?他們都是靠自己來培養和訓練自己的。他們的下班時間多用在了閱讀雜誌報刊上。他們時刻關注著最新的資訊動態。所以,我們也應該如此。你和你僱主之間的關係,已經在僱用合同上作了詳細的說明,簡而言之就是:你的僱主承諾支付你薪酬,而你承諾做好工作。

  專業程式設計師會為他們編寫的程式碼負責。除非他們知道這些程式碼是有效的,否則就不會發布程式碼。現在,好好思考這個問題:如果是你,你會不會在不透徹瞭解程式碼的情況下就直接釋出程式碼?專業程式設計師不希望QA找到任何bug,因為這些程式碼都是經過他測試之後才釋出的。當然,QA依然會發現一些問題,因為沒有一個人是完美的。但作為專業程式設計師,我們的態度應該是讓QA找不到任何缺陷。

  專業程式設計師也是好的團隊成員。他們負責地對待整個團隊的輸出,而不是隻顧自己的工作。他們樂於助人,善於向彼此學習,在需要的時候甚至會鼎力相助,為了專案前仆後繼。

  5.充分利用程式碼分析工具

  測試的價值是程式設計早期階段就灌輸給軟體開發者的一個理念。近年來,單元測試,測試驅動開發和敏捷方法的興起,證實了我們開始注重於在開發週期的各個階段進行測試。但是,測試只是你可以用來提高程式碼質量的許多工具之一。

  回過頭去看,當C語言還是一個新事物的時候,CPU時間和任何型別的儲存都是非常寶貴的。第一個C語言編譯器注意到了這一點,所以選擇了通過去掉一些語義分析,來減少程式碼之間的傳遞次數。這意味著,在編譯時,編譯器檢查到的可能只是可被檢測到的bug中的一小部分。為了彌補這個缺陷,Stephen Johnson寫了一個名為lint的工具——它將從你的程式碼中刪除一些沒有價值的東西——從而實現一些已被它的兄弟C語言編譯器撤掉的靜態分析功能。然而,靜態分析工具卻因為可以給出大範圍的誤報警告和一些沒有必要遵循的靜態文體慣例的警告而倍受讚譽。

  現在的語言、編譯器和靜態分析工具的設計和以前已經大不相同。由於記憶體和CPU時間變得相對比較便宜,因此負擔得起編譯器檢查更多的錯誤。幾乎每一種語言都擁有至少一個工具,用來檢查風格指南的違規行為、常見問題以及一些狡猾的有時候可能很難捕捉到的錯誤,如潛在取消引用空指標。更高階的工具,如C的Splint,以及Python的pylint,是可配置的,這意味著你可以通過命令列開關或在IDE中,使用配置檔案來讓工具選擇放過其中的哪些錯誤和警告。Splint甚至還能讓你在註釋中註解你的程式碼,以便於更好地提示你的程式是如何工作的。

  6.關心程式碼

  優秀程式設計師能寫出好程式碼,這是毋庸置疑的。壞程式設計師……則不能(他們能寫出好程式碼,就不是壞程式設計師了,哈哈)。他們總是在生產其他人不得不消滅的怪獸。你的目標是寫出好程式碼,對不?那麼你應該成為好程式設計師。

  好的程式碼並不是憑空而來的,也不能靠運氣然後恰巧讓你瞎貓碰到死老鼠。為了獲得良好的程式碼,你必須努力的改進。過程是艱難的。但是如果你確實關心程式碼的話,那麼你一定能收穫好程式碼。

  僅靠技術並不能成就好的程式設計。我碰到過一些非常聰明的程式設計師,他們能夠產出令人印象深刻的演算法,能夠熟記語言標準,但卻寫出了最可怕的程式碼。這種程式碼,閱讀起來很痛苦,使用起來很痛苦,修改起來更是令人痛不欲生。我也碰到過一些非常謙遜的程式設計師,因為堅持簡單的程式碼,所以寫出來的程式更優雅,更易於表達他的意思,和他們工作非常愉快。

  基於我多年的軟體生產經驗,我得出的結論是,差強人意的程式設計師和偉大的程式設計師之間的真正區別是:態度。好的程式設計在於專業的方法,以及一種竭盡全力希望寫出最好軟體的期望。

  要成為一個優秀的程式設計師,你必須對自己的程式碼負責,真正關心程式碼——養成積極向上的心態。偉大的程式碼是由大師精心雕琢的,而不是由那些馬虎的程式設計師胡亂寫出來的。

  英文原文:6 Ways to Become a Professional Programmer 翻譯:codeceo

相關文章