二十年老程序員的二十條心得:面試幾乎沒用,警惕很久沒寫過代碼的“大牛”

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"務必警惕那些已經很久沒寫過代碼、也沒設計過系統的所謂“大牛”。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"站在巨人的肩膀上當然更容易成功,所以我們纔會希望行業前輩能給出一些有意義的建議。今天這些建議來自一位有二十年行業經驗的軟件工程師,他的總結在Hacker News上引發了大量的討論,帖子多天來一直佔據“熱榜”第一。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3e\/3eddd73f66437f3ab48afd5def39a69f.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Justin Etheredge最初在各類小型和初創企業中擔任軟件工程師,之後進入了諮詢行業並開始爲大型企業服務。Justin Etheredge表示過去二十年以來的經歷塑造了他對於軟件的理解,併產生出一些堅定的信念。他把這些信念整理成一份明確的清單,希望能爲大家帶來一點幫助與啓發。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"引起網友激烈討論的二十條建議:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1. 我懂的並不多"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" “你怎麼會不知道什麼是BGP?”“你難道沒聽說過Rust?”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"類似的問題可能每天都會出現在我們面前。沒錯,投身於軟件行業的很多人之所以熱愛這份工作,就是因爲它敦促着我們終身學習。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在軟件領域,無論我們朝哪個方向前進,都有着廣闊的知識空間不斷延伸而且每一天都有所變化。換句話說,這是一份能夠承載我們度過幾十年的職業生涯,而兩位在類似崗位上分別工作了幾十年的人之間也"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"很可能存在巨大的知識差距"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。我們越早意識到這一點,就能越快擺脫“冒充者綜合症”,成爲一個樂於向他人學習、也樂於教導他人的積極分子。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"2. 軟件裏最難的部分,是構建正確的東西"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我知道這種話大家肯定聽過無數遍了,但大多數軟件工程師仍拒不承認,理由是這種說法似乎在貶低他們的工作成果。我個人覺得這樣的心態大可不必,這類表達其實是在突出軟件開發環境中的複雜性與非理性因素,而這些都會加劇我們面臨的挑戰。我們當然可以設計出在技術上最令人印象深刻的東西,但卻沒人願意用——這類困境隨時都會出現。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件設計主要是一種聆聽活動,開發者往往身兼軟件工程師、通靈師乃至人類學家等多重角色。而我們對這種設計能力的每一點投資,無論是引入專業的用戶體驗師還是接受更進一步的自我教育,都能給開發成果帶來巨大提升。畢竟與打磨設計能力相比,開發一款“沒人用”的軟件成本還是太高了、太高太高。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3. 頂尖軟件工程師會像設計師那樣思考"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"偉大的軟件工程師會深入思考代碼成果的用戶體驗。雖然使用的術語或者切入點不同,但無論是對於外部API、編程API、用戶界面、協議還是其他接口,優秀的工程師都會考慮由誰來使用、爲什麼要使用、如何使用以及對用戶來說哪些因素真正重要等。總之,牢記用戶需求才是實現良好體驗的核心所在。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"4. 最好的代碼就是沒有代碼,或者說不需要維護的代碼"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" “程序員就是管編程的”,而且跟其他專業人士一樣,我們也會在自己最擅長的方面犯錯。這是人的本性,沒辦法。大多數軟件工程師編寫出的代碼總是有點錯誤,而且往往無法用非技術方案來解決。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"另外有一種很神奇的現象,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"越是有大量相當成熟的解決方案存在,工程團隊就越是想“重新發明輪子”"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。想表達自我、加快專業成長當然是好事,但還請大家分清場合與需求,過度氾濫的發明慾望恐怕不利於編寫出無需維護的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"5. 軟件是達成目的的手段"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"任何一位軟件工程師的主要工作都是交付價值。但我發現大部分軟件開發者並不理解這一點,能夠將這個理念內化進日常工作的開發者就更少了。但只要能夠完成內化,我們解決問題的方式、看待工具的角度都會有所變化。如果您真心相信軟件要服從於結果,那就一定能找到“真正適合工作的工具”,而這種工具也許壓根就不是軟件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"6. 有時候,你壓根沒時間磨刀"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"都說“磨刀不誤砍柴工”,但刀磨久了反而讓人心浮氣躁、難以投入真正的工作。代碼編寫也是一樣,研究多了容易讓人陷入“分析癱瘓”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一旦出現這種狀況,請馬上給自己設定一個截止日期,之後再探索解決方案。在着手解決問題時,我們很快就能找到思路與線索、引導自己一步步迭代向更好的產出。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"7. 如果沒法理解所有可能性,就設計不出優秀的系統"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這也是我個人一直在努力解決的問題。我的職責變化導致自己距離常規軟件工程任務越來越遠,我發現跟上開發者生態的發展速度越來越難,有時候自己甚至不理解哪些趨勢真正重要。總之,如果不能理解特定生態當中的那些可行性與可用選項,那麼我們根本沒辦法爲所有問題找到合理的解決方案。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"總而言之,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"務必警惕那些已經很久沒寫過代碼、也沒設計過系統的所謂“大牛”"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"8. 每套系統最終都很差勁,要勇於接受這一點"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Bjarne Stroustrup有句名言,“世界上只有兩種語言,人們抱怨的語言和沒人用的語言。”大型系統也是同理。並不存在“正確”的架構,我們永遠無法償還所有技術債務、設計不出完美的界面、也不可能永遠擁有迅如閃電的測試速度。但做不到不代表什麼都不做,這只是一種參考視角。優雅和完美本身就是種終極目標,我們當下的任務就是不斷改進並創造一個更友好的系統環境,保證團隊至少還用得下去、並以可持續的方式交付價值。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"9. 通於探索,不斷追問"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"相信大家都聽過“我們向來這麼處理”之類的鬼話。這時候請關注那些新加入的成員,看看他們在哪裏遇到了問題、又提出了哪些質疑。這些質疑中,是否存在某種有意義的功能訴求?請保證您明確理解他們提出的目標,以及驅動這種功能訴求的原因。如果得不到明確答案,就不斷追問下去、直到弄明白爲止。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"10. 相比於尋找10倍程序員,最好是消除0.1倍程序員"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"10倍程序員就是個愚蠢的笑話。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"沒有任何一個人能在一天之內搞定另一位同樣有能力、工作態度端正而且經驗豐富的程序員需要兩個禮拜才能做完的工作。我只見過10倍代碼量程序員,他們寫出來的bug也是10倍。或者說,10倍程序員唯一的存在可能性,就是身邊有個0.1倍程序員——就是那種浪費時間、不關注反饋、不測試代碼也不考慮極端情況的傢伙……所以相較於尋找神話中的10倍程序員,及時清除團隊中的0.1倍程序員纔是正道。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"11. 高級工程師與初級工程師間的最大區別之一,在於二者形成意見的具體方式"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果某位高級工程師對現有工具或者軟件構建流程沒有任何意見,那我實在是感覺不太正常。我寧願有人能反饋出強烈的批評意見,也不願他們壓根沒有任何意見。只要正在實際使用工具,那大家或多或少會有正面或者負面的批價;對其他語言、庫和範式的應用也是類似的情況。而這種對於工具及技術的評判與探索,往往可以快速提升我們的技能水平。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"12. 人們並不真正想要創新"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"人們經常討論創新,但實際想要的只是更廉價的勝利與新鮮感。如果真正進行創新、改變人們處理工作的方式,那麼對方大概率會給出負面反饋。但如果您真的相信自己的決定代表未來、相信這一切能改善產出,那請做好打一場持久戰、拉鋸戰的準備。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"13. 數據是系統當中最重要的組成部分"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我見過很多以數據完整性作爲主要保障目標的系統。但在這類系統中,任何預期範圍之外的操作都會產生某些“髒”數據,它們會在後續處理中演變爲一場噩夢。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"請記住,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"數據的存在週期往往比代碼庫更長"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",所以請花點精力保持數據的清潔和有序。從長遠來看,這種好習慣必然帶來高回報。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"14. 尋找技術“鯊魚”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"所謂技術“鯊魚”,就是那些長久存在、能夠有效解決問題,所以可以在技術領域的快速變化中倖存下來的技術方案。注意,它們是鯊魚、不是恐龍,所以除非有充分的理由,否則千萬不要輕易更換。這些工具沒什麼特別、也不激動人心,但它們總是穩定有效,能讓人睡個好覺。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"15. 不要把謙虛當成無知"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"很多軟件工程師不愛主動說話,除非問題被推到面前。所以,千萬別以爲別人沒發言就是大家沒意見。有時候,最吵鬧的傢伙反而是我們最不想傾聽的對象。總之,積極與其他人交談,尋求他們的反饋與建議。這招回報很高,一試就靈。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"16. 軟件工程師應該保持寫作的習慣"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"軟件工程師應該定期寫點博客、日記和說明文檔,或者其他能夠保持自己書面溝通技巧的東西。寫作能幫助我們思考問題,也能培養起我們與團隊甚至是未來的自己良好溝通的能力。良好的書面溝通可以說是每一位軟件工程師都必須掌握的重要技能之一。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"17. 讓流程儘可能精簡"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"時至今日,每個人都在說“敏捷”,但敏捷的本質並不複雜——構建小小的單元塊、從中學習、再迭代。如果有人把它弄得更晦澀,那恐怕就是想夾帶私貨。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"換句話說,那些最成功的科技企業或者大型開源項目不會過度吹噓自己的Scrum流程有多棒。大道至簡,精益纔是成功的關鍵。相信你的團隊,他們也會用產出迴應你的信任。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"18. 軟件工程師也是人,也需要找到當家作主的感覺"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果硬要把某人跟他的工作成果分開,那他們也就不關心自己在幹什麼了。也正因爲如此,跨職能團隊以及DevOps理念纔在當下獲得廣泛認同。這不只是要消除無謂的交接與低效率環節,更重要的是讓每個人從頭到尾擁有整個流程,並負責直接交付價值。只要讓一羣充滿激情的工作者完全掌握軟件設計、構建與交付的所有權,他們一定會拿出令人興奮的成果。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"19. 面試在反映開發者水平方面幾乎毫無價值"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"面試的最大作用就是了解對方,主要是對方對於特定專業領域抱有多大的興趣。另一方面,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"面試在反映開發者技術水平方面幾乎毫無價值"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。相信我,無論一個人多聰明、多博學,都不代表對方就真的適合我們的團隊。沒人會在面試中坦言自己不太可靠、暴躁易怒、自負自大或者從來不準時出席會議。爲了拿到工作,每個人都或多或少要粉飾一下自己,而那些能在原則問題上堅持立場的人反而值得尊敬。“永遠不要僱用那些在面試中詢問休息時間的人”,這種鬼話就是純純的放屁!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"20. 始終堅持從小處着眼"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在系統開發當中,種種因素似乎都在推動我們構建起更大的體系。預算分配、難以取捨的功能方案、一舉打造“最佳版本”的願望等等,都會讓剛剛起步的項目快速變得臃腫不堪。請千萬克服自己的衝動,努力通過迭代讓系統從最初的簡單粗糙變得精緻優雅。而且跟很多朋友想象中不同,這也是打造精緻優雅系統的唯一方法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"參考鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.simplethread.com\/20-things-ive-learned-in-my-20-years-as-a-software-engineer\/","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/www.simplethread.com\/20-things-ive-learned-in-my-20-years-as-a-software-engineer\/"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/news.ycombinator.com\/item?id=28797485","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/news.ycombinator.com\/item?id=28797485"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章