高效程序員的7個技能

最近閱讀到一篇不錯的文章,包括評論部分都有不小的參考價值。於是,將文章翻譯出來與大家分享,並針對部分內容添加了個人的一些看法。以下部分爲正文:

軟件工程師往往會花大量的時間在刷面試題和整理履歷上。但一旦在谷歌、亞馬遜或其他創始公司找到工作,會發現找工作時所學習和準備的技能與實際工作中所使用的技能並不匹配。

PS:這也就是我們所說的“面試造火箭,入職擰螺絲”。

團隊領導總結了七條高效程序員應該擁有的技能,對我們團隊很有啓發,順便也說說我們的看法。下面便是高效程序員的七個技能。

第一:學會如何閱讀其他人的代碼

image

Everyone but you writes terrible code。“除你之外,所有人寫的代碼都很垃圾。”

因此,學會如何閱讀別人的代碼將是一項受益頗多的技能。

不可否認的是,無論之前的開發人員寫的代碼有多糟糕,當你接手項目時,閱讀並領會代碼含義便是你的工作。

學會閱讀別人的代碼有兩個好處。閱讀別人的代碼是一個瞭解什麼是糟糕設計的機會。當閱讀別人的代碼時,可以學到哪些代碼是有效的,哪些代碼是無效的。更重要的是,可以瞭解到什麼樣的代碼更有益於其他開發人員閱讀和維護。

Your code should be so well-designed that it requires no documentation. In fact, you shouldn’t document any of your code if you are a good programmer. This is just a waste of time and you need to spend your time coding and in meetings.

PS:這段的核心思想是“優秀的程序員寫的優秀代碼不需要文檔”,筆者對此不以爲然。無論多麼優秀的代碼,如何能夠自解釋的代碼,必要的註釋或文檔還是必須的。在評論區有大量針對該條建議的批評,其中最有價值的一個說法是:代碼用於展示實現了“什麼”,而註釋用於展示“爲什麼這樣做”。

閱讀他人的代碼,在需要時可以輕鬆進行更新升級。某些情況下也能刷新你的編程經驗。比如,我們曾經將腳本從Powershell轉爲Python,再轉爲Perl。我們在Perl方面的經驗有限,但仍然有足夠的信息可以弄明白它是如何運作的,並進行所需的修改。這源於對代碼和Perl腳本的理解。

第二:保持對壞項目的辨別度

有很多技能需要花時間來學習。其中值得學習的技能之一就是:瞭解哪些項目不值得做,哪些項目很明顯會步履維艱。

大公司往往有很多已經完成或具有影響力的項目。其中,一些項目可能沒有任何商業意義,最起碼對你來說是如此;一些項目又缺乏管理。

當然,這並不意味着當你不贊同某個項目時就切斷對該項目的一切想法。但是,如果項目的參與者都無法說清楚項目最終要做什麼,那麼這個項目肯定就不值得做。

此外,有些項目可能過於關注技術而不是解決方案,以至於從一開始就很明顯不會產生太大的影響。

在獲得這項技能之前(瞭解到底什麼是壞項目),你可能需要做很多壞項目。因此,在職場早期不用花太多時間在每個項目上進行辨別的嘗試。

在職場的某個時刻,總是要有良好的直覺。

PS:這項技能可以用在選擇一個項目或一份工作時,當對所做項目的價值有足夠的判斷,才能獲取更大“贏”的概率。如果沒有選擇權,那就選擇把當前項目做到最好吧。

第三:避免會議

無論你是軟件工程師還是數據科學家,開會都是必要的,因爲你需要與項目經理、用戶和客戶保持一致。但會議有可能突然佔據你的整個日程,這也是爲什麼需要學會避免非必要的會議。或許用“管理”代替“避免”更加合適。參與會議要以驅動決策和幫助推動團隊進度爲目標。

最常見的方法是每天抽出固定兩小時的會議時間。通常,大多數人認爲定期召開會議是比較有效的方法,同時還能把控項目的進度。

另外一種避免會議影響工作進度的方法就是提早到達辦公室。就個人而言,提早到達辦公室,安靜的環境可以更快的解決手頭上的問題。

這對個人工作者而言更爲重要,因爲我們的工作需要專注的時間,且不需要與其他人交談。當然,有時你可能想與其他人一起解決問題,但一旦問題解決,需要做的是立即迴歸工作當中。因爲在工作的過程中,腦海中會有很多相關的思維,一旦頻繁的中斷,很難從上次停下來的地方恢復。

PS:參與會議的確是一件浪費精力和時間的事,而且往往收效甚微。作者建議的提早到辦公室的方法,經個人實踐的確很有效,而且也在一直使用。

第四:熟練使用Git

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mhr0EKOo-1591443103004)(http://www.choupangxia.com/wp-content/uploads/2020/06/skill-2.png)]

對於某些專業的學生來說,天生就會使用Git,他們瞭解Git的每個命令和參數,並且身邊有大量的專業人士。但對於其他人來說,或許在第一份工作中才使用到Git,而且在使用的過程中充滿疑惑。他們從來不敢百分之百確定執行的命令會做些什麼,此時,備忘錄是一個很好的解決方案。

不管你的公司使用哪種存儲庫,正確使用該存儲庫都是非常有幫助的。簡單的pull或commit的操作並不會花費大量的時間,同時避免各類分支或fork操作帶來的衝突問題。此外,如果你經常忘記拉取(pull)最新代碼,合併衝突這件事是不可避免的。

如果你需要存一份Git的命令清單,那就趕緊行動吧,這會讓你的操作更加簡單。

第五:編寫簡單可維護的代碼

image

年輕的軟件工程師已經呈現出一種趨勢:將學到東西一股腦的運用到解決方案中。這種慾望可以很好的幫助大家理解面向對象編程、數據結構、設計模式和新技術,並且能夠在實踐中進行運用。但也會造成不必要的複雜性和過度設計,比如很容易將曾經使用過的解決方案和設計模式運用到當前代碼中。

在複雜的設計理念與簡單的代碼之間需要尋求一個平衡。設計模式和麪向對象的設計可以在大型項目中對代碼進行簡化。但是,當越來越多的流程被抽象化、封裝和黑盒處理,那麼調試(debug)代碼的過程將會便變得越來越困難。

PS:這不就是在說“當你手裏有一把錘子,看什麼都像釘子”一樣嗎?其實大家都會在實踐中會不自覺的犯一些過度設計的錯誤,當學一門新技術時也總想在項目中進行運用和實踐。這對學習新技術來說是非常必要的,但也需權衡是否符合業務場景,畢竟“適合的纔是最好的”。

第六:學會說“NO”和優先級排序

無論你是財務分析師還是軟件工程師,這一條適合任何角色。但是技術角色比較特殊,因爲好像每一個人都需要他們似的。如果你是數據工程師,則可能會被要求做更多的事情,而不僅僅是本職工作。比如,一些團隊需要你提取數據,一些團隊需要儀表板,一些團隊則需要爲其數據科學家提供支持等。

優先級排序和說“不”實際上是兩種不同的技能,但是它們密切相關。確定優先級意味着你只會將時間花費在對公司有重大影響的事情上,而說“不”意味着拒絕處理本該由其他人(或團隊)處理的工作。對於職場中的所有角色來說,它們往往會同時發生。

該項技能的獲得並非易事,當別人向你提出請求時,你很容易不自覺的就去執行了。特別是初入職場,爲了維持關係,不得不去承受大量額外的工作。

在大公司中,總是有無盡的工作等待着去做。此時的關鍵便是該採取什麼樣的措施來應對。

PS:學會說不和優先級排序,無論在工作中和生活中都是非常重要的技能,可以讓你擁有更輕鬆的生活狀態和更高效的工作節奏。

第七:運營設計思維

image

在面試中或學習的過程中很難測試的一個技能就是:思考用戶會如何錯誤的使用軟件。

比如,許多程序都是需要後期升級維護的,這就意味着需要去修改一些高度耦合的代碼。此時,即使簡單的修改,也需要跟蹤和驗證相關對象、方法或API接口的可用性。否則,即使在數據庫中修改一個類型也很容易影響到原有功能。

此項,還包括開發之前對功能邊界的界定和更高層面的設計。

對於新功能模塊的開發,則需要花費更多的時間來思考功能的使用場景。同時,需要考慮如果用戶錯誤地使用功能時該如何進行處理。

編寫代碼並在本地運行是很容易的,一旦部署到生產環境則會出現許多未知異常。在設計時最好要考慮到未來五年中項目的發展情況。

筆者小結

讀讀英文技術文章,學學新思維,學學新技能,同時還能學學英語。空閒時間再把它翻譯一下,結合實踐經驗點評一下,也是一種不錯的學習方法。

原文鏈接:《高效程序員的7個技能


程序新視界

公衆號“程序新視界”,一個讓你軟實力、硬技術同步提升的平臺

微信公衆號:程序新視界

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