20年軟體工程師的20條忠告(下)
20年軟體工程師的20條忠告(上)
11. 資深和資淺工程師的差異,是表達的意見的品質
沒有什麼問題,是比資深工程師對於他們使用的工具或是開發軟體的方法,都沒有任何評論或意見,還來得嚴重。意見是否被認同,這是個人主觀及經驗問題,但 「沒有意見」完全就是等於「認知不足」的表現 。如果你對自己的開發工具,沒有一大堆覺得很讚的設計,也沒有一大堆覺得很糟的體驗可說,那只能說你對這個工具的認識還很不足,你需要用得更深更久一點。身為開發人員,本就要習慣去探索新的程式語言,新的函式庫,甚至是新的思維模型(Paradigm,我覺得”範式”很難懂…😜),然後去表達自己的意見。要提升解決問題的能力,最好的方法就是積極的去觀察及探索,身邊解決問題的人們,所使用的技術或是工具是什麼。
12. 人們並不真的想要創新
人們常說,也很喜歡討論一大堆關於創新的主題,但他們通常追尋的,都是CP值漂亮的,或是新奇原創的解決方案。如果你真的「創新」了什麼東西,改變了人們做事的方式,你能得到的通常都是負面的反饋。所以,如果你真的相信你的創新是有價值的,值得堅持下去的,那就做好長期抗戰的準備吧。
13. 資料的完整性及正確性,是系統中最重要的部分
許多功能強大或完整的系統,它們保證資料完整性及正確性的主要機制,竟然只是「希望」或「預期」它們運作一切順利。也就是說,任何非預期的運作或操作方式,就會產生不完整或不正確的資料。去處理這些壞掉的資料,絕對是系統運作一段夠長的時間後,任何人都不想去碰的惡夢。你一定要記得,資料很容易,也很合理的,一定會活得比你的源碼還要久,所以投入資源去保證資料的品質,讓它們都是有秩序的,”乾淨”的,絕對是一項划算的長期投資。
14. 尋求「技術巨鯊」,而不是「恐龍」
許多人聽過一些舊技術,像COBOL或SQL這類仍在運行的系統中,運行的好好的技術。在日新月異的技術變化環境下,它們不但還活得好好的,而且持續在交付價值。就像在地球環境遭逢巨變的時候,活下來的不是地上霸主恐龍,而是”只能”在海裡生活的鯊魚。除非你有十足,充份且正確的理由,才去考慮是否要用新技術取代他們。
15. 別將謙遜誤解為無知
工程師不善表達,並不代表他們的意見沒有價值。而表達最多,最吵的那些人也不一定代表他們更瞭解用戶。儘量去詢問所有的用戶,任何你身邊的用戶都去問,獲取反饋和建議,你會知道這是多麼重要的一件事。
16. 軟體工程師應該要規律的寫作
軟體工程師不應該只是寫軟體,他們更應該規律性的寫部落格,寫日誌,寫文件,或寫任何能讓他們的溝通能力更精準的東西。寫作有助於釐清問題的本質,也有助於和其他協作對象的溝通,更重要的是,這也能助未來的自己一臂之力。好的寫作能力,是軟體工程師最重要,也必須要精通的技能之一。
17. 儘可能的讓你的流程精實
每個人都已對「敏捷開發」有些概念了,但所謂的「敏捷」,就是要小單位的創建及學習,然後持續迭代及優化。也許你聽過大公司用了什麼技術很讚,或是什麼開源專案的Scrum流程跑得很好,但你唯一要記得的,就是要先儘可能的讓你的流程短小精幹,直到你很清楚為什麼需要更多,才做出改變。
18. 軟體工程師也是人,都需要「擁有感」
如果你將軟體工程師的輸出和工作內容分離,你會發現他們就不那麼關心他們的工作了。為什麼DevOps類的工作會這麼受歡迎,不是因為它解決了控制權傳遞或是效率低下的問題,而是因為這是從頭到尾,對全程負責,能直接交付價值的一種工作。為什麼跨職能的專案團隊工作會受歡迎,因為這種工作的範圍,已擴展到每個人都「擁有」這個專案價值的程度。只要讓有熱情及能力的工作者,對整個軟體的設計,開發,到交付等各個階段負責,讓他們真正「擁有」這個產品的一部分,就會有令人驚喜的回報。
19. 面試無法得知「團隊」感
面試只能用來瞭解求職者的基本背景,以及他擅長的領域在哪裡。想要透過面試去得知,這個求職者是否適合團隊合作,是一個緣木求魚的想法。不論這個求職者技能多好,知識多淵博,都不代表他會是一個好的團隊成員。更何況,也不會有人會在面試的時候告訴你,他會是一個不可靠,防衛性強,很自負,或是絕不會準時出席會議的混蛋。有人會說,透過一些「訊號」可以辨識或推論得知這些缺點,像是若求職者在面試過程中,頻看手錶或直接詢問時間,就代表他們不會考慮來這家公司入職?這完全是胡扯。如果你繼續在面試的時候,用這些無科學根據的瞎猜找人,你只是在把好的求職者給拒於門外而已。
20. 一定要積極主動地,致力於建立更短小精實的系統
許多外力或是建議都會促使我們在系統建置的前期,就把規模建置的更大。不論是預算資源的分配,或是決定哪些功能不予製作,都是為了要建立「最好」或「完美」的系統。但這些外力都只會讓我們「做得太多」,這都是我們要挺身抵抗的。學得越多,經驗越多,你就會知道每個系統都是在不斷的迭代及優化,而不是在一開始就設計到最好。這將會是個讓人驚訝,且難以說服眾人的觀念。