今年已經是我從事軟體開發行業的第七個年頭,我覺得現在是一個好的時機向一些新入行的軟體工程師分享一些我認為越早知道越好的知識。希望能對您有所啟發。
1. 需求總是會變
也許您已經和團隊成員評估了需求的合理性,並且達成了共識。您胸有成竹的認為產品需求不會再發生改變。但真相是殘酷的,需求總是會因為各種各樣的原因發生變化,例如:
- 您或您的上司有了一個新的想法;
- 產品的目標群體發生了變化;
- 攻克某項技術的成本超出了預期;
您需要意識到,正是因為這殘酷的真相,我們才會有一個對於軟體工程師重要的專業性評判標準:您是否能夠編寫有更好組織性的程式碼。
這就引出了我們下一個主題。
2. 始終以編寫更好組織性程式碼為目標
新手工程師有時候會執著於快速的實現功能,從而編寫出「麵條式」的程式碼,麵條式程式碼是指程式碼一段段連線在一起,然後當程式碼規模到達一定程度後,會突然發現無法移動任何程式碼。任何對程式碼的改動,都將是一場噩夢。
因此新手工程師要比有經驗的工程師更加厭惡需求變動,因為他們需要花更多時間理解和修改程式碼,有時甚至是需要重寫整個模組。
所以,為了節省寶貴的時間,所有的工程師都應該站在更高的層次上,在編寫程式碼前思考程式碼組織問題,我知道一些優秀的框架已經在語法層面上解決這個問題,但您應該在此基礎上做的更好。
更好的程式碼組織意味著:
- 更穩定的應用;
- 更少的 Bug;
- 更清晰的程式碼結構;
- 程式碼能夠更加靈活的變通與擴充套件;
您可以學習一些 MVC 思想,並將其應用在您的軟體開發中。要知道「謀定而後動」在軟體開發領域也是適用的。
3. 程式碼有保質期
相信我,您的程式碼總會過時,隨著您技術水平的增長,功能的不斷迭代,總有一天,您會發現有更好的方式可以組織您現有的程式碼。對於需要長期迭代的產品,放任程式碼過期,就是我們常說的「技術債務」。
優秀的工程師不會給未來的自己或接手的下一任工作者留下太多債務,這事關開發者的責任心和聲譽,需要引起重視。
而且清除技術債務並非只是對產品有好處,在此過程中,您的技術水平也會不斷提高。當您意識到程式碼臨近過期,需要改動時,說明您的技術水平相較於以前已經大大提高了。
處理過期程式碼有兩種方式:
- 重構:即保障功能介面輸入/輸出穩定,但內部結構最佳化的更加易讀,易維護;
- 完全刪了,重頭寫:您很少有機會這麼做,不過當一段程式碼已經沒有人能夠理解,維護成本過於高昂時,這麼做是必要的;
大多數工程師不重視程式碼重構工作,他們不瞭解或不願意為程式碼新增單元測試並定期重構程式碼,這使得他們錯失了寶貴的進步機會。作為新手工程師,您應該儘早意識到程式碼重構的重要性,並盡力勸說您的上級和合作夥伴,在開發計劃中預留程式碼重構的時間。
4. 不要重複造輪子
新手工程師由於在工作初期認領不到有挑戰性的工作,於是傾向於在實現功能模組時,即使有第三方庫或框架可以使用,也會選擇自己去實現。
這一行為的出發點值得肯定,作為工程師,我們都想證明自己的實力,但是優秀工程師的核心能力之一是在於充分調動現有的成熟資源。
很多時候,自己 DIY 的功能模組在健壯性和可靠性上都無法媲美社群成熟的功能模組,貿然使用自己 DIY 的功能模組會為產品新增風險,成熟的開發者應該極力避免。
我建議新手工程師不妨換一種思路,我們都是站在巨人的肩膀上才能看的更遠,與其在工作中花大把時間重複造輪子,不如利用業餘時間研究成熟輪子的優勢,並在工作中發現新的挑戰。
5. 文件是非常重要的
這包含了兩層意思:
- 查閱文件非常重要;
- 撰寫文件非常重要;
新手工程師有時會出於種種原因不願意查閱官方文件,但事實是,查閱官方文件是工程師經常要做的事情。優秀工程師的核心職責是構思如何組織程式碼實現目標功能,並將其付諸實踐,而查閱文件的過程,使我們準確挑選合適「建材」的必備途徑。透過經常查閱文件,某個 API 最終會成為您的長期記憶,您的工作效率也會大大提升。
與查閱文件同樣重要的是撰寫文件,很可惜大多數工程師要麼是重視不足,要麼是無法撰寫易讀的文件。而這兩者對於一份好文件而言是十分重要的。
文件的閱讀者將會是所有對您當下工作感興趣的人,包括未來的自己。對於一個沒有文件或文件沒有及時更新的大型專案而言,下場只有死亡。
請積極撰寫產品或技術文件吧!
6. 如何面對陌生程式碼庫
無論是剛入職一家公司,還是換了一個專案組,我們總是無法避免接手一個陌生的程式碼庫,新手程式設計師往往在此時手足無措,不知道如何開始。
對此我的建議是:
- 執行該應用,嘗試修改一些程式碼,看看程式是如何運作的;
- 分析目錄結構,理解程式碼的組織方式;
- 檢視專案引入的第三方庫,瞭解它們的作用是什麼;
- 對於要修改的核心邏輯,試著畫一個流程圖,搞清楚整個程式的邏輯是什麼;
請務必確保您已經基本掌握了程式碼邏輯,再著手進行改動,否則無疑將增加程式碼的壞味道,您很有可能會在將來某個意料之外的時刻不得不償還債務。
當您打算進入一個程式碼庫,著手新增程式碼時,請務必確保您與原始碼庫的編碼風格保持一致,即使您認為您的程式碼風格更加合理和優雅。
這麼做的好處在於:
- 您的程式碼風格可能並非是最佳的,您在未來可能會對程式碼風格有新的想法;
- 當每個專案的參與者都把自己個性化的程式碼風格帶入程式碼中時,程式碼就會變得越發難以閱讀,也容易讓下一個接手的開發者感到迷惑;
具備一定規模的開發團隊,都會考慮統一程式碼風格,請您務必確保與團隊要求的程式碼風格保持一致。如果您的團隊沒有統一的程式碼風格,那麼就由您來主導建設吧,這正是您表現的好機會!
除此之外,新手開發者應該堅定「我一定能做到」的信念,我可以坦率的告訴您,在 Web 開發世界裡,沒有什麼神秘的魔法,所有的問題最終都可以被解決,無論是軟體開發的新手還是老手,區別只在於解決問題的思路和時間。
這正是軟體開發行業的魅力所在,透過自己的努力解決一個棘手的問題,不僅會為所服務的企業解決問題,還能提升自己的專業水平,讓心靈得到滿足。所以請享受您當下的工作,並勇於解決任何問題。
7. 始終學習,永不止步
軟體開發行業的特點之一便是,您需要透過不斷學習提升自己在市場的競爭力,而程式設計世界也總是會有學不完的思想,技術和產品。
您需要清楚地認識到一個殘酷的事實,在大多數工作環境中,您獲得進步的動力只能來源於自己。很多團隊都沒有完善的培訓機制,也不會為您制定職業發展規劃,團隊成員疲於奔命完成自己的業績或是不感興趣與您討論前沿的技術話題,所以您更需要保持警惕,尋求不斷進步。
請確保您的技術水平總是高於,至少是配的上您的工作年限。否則工作的時間越久,您的市場競爭力會越低。請勇敢的踏出當前的舒適圈。
8. 總結
在本篇文章中,我向您分享了我認為值得剛步入軟體開發行業的新手們需要注意的 7 件事。這些事一些是我希望我在剛入行時有人告訴我的,一些是我從事本行業以來的一些經驗之談,感謝您的閱讀,也期待您在評論區補充您的經驗,讓更多人受益。