一個沉重的問題:軟體開發到底還有價值嗎?

weixin_33763244發表於2019-02-18

無論是醫生、老師,還是會計,都很容易讓人理解工作內容,並且這項工作在現實生活中也可以繼續發揮作用,但軟體開發工程師這個崗位實在是不好描述。縱觀國內外不少程式設計師扎堆的論壇,我們總能看到與“軟體開發”相關的討論,不少網友甚至發出質疑:除了工作,軟體開發是無用職業嗎?

近幾年,科班和培訓出身的IT從業人員數量激增,市場幾近飽和,甚至裁員風波不斷,軟體開發工程師彷彿被放在了裁員一線,聲音少,關注度低,偶爾發出一些聲響還可能是負面新聞。如果瞭解這個行業,就一定知道每位軟體開發工程師的成長都實屬不易。

Java工程師、C++工程師、PHP工程師都屬於單一類別,真正的軟體開發工程師比全棧工程師要求還多,除了基礎程式語言(C、C++或者Java),還要了解資料庫、JavaScript、AJAX、Spring等前沿技術,對網路工程和軟體測試等也要有所涉獵。

一般來說,軟體開發工程師既是軟體設計師、軟體架構師,也是一個優秀的程式設計師,可謂是門門武器皆可把玩,標準的高薪技術人才,為什麼總是被爆出悲觀無用論調呢?

軟體開發是無用職業嗎?

國外一位軟體工程師在與眾多同事聊天中總結出一句話:對大多數人而言,軟體工程開發是一個除工作之外無用的職業之一,這項技能在生活中幾乎用不到。不少網友跟帖調侃稱,平時還可以修修電腦、重灌系統、清理電腦垃圾等。調查中,大多數軟體開發工程師不會詳細向家人介紹自己的工作,除非有人刨根問底,也有人曾因為介紹得過於詳細而被家人拉去到處修電腦。

雖然調侃成分居多,但也不免傳遞出一些心酸。實際上,軟體開發工程師在產品生命週期中的作用非常重大,涵蓋需求、設計、開發、修改、釋出等多個環節,生活中也沒有傳說的那麼無趣和無用。很多軟體開發工程師擅長通過編碼解決生活問題,比如編寫一些軟體或小程式自動執行部分重複且複雜的工作;為零售商店編寫網站或者APP,方便使用者選購商品;為家居編寫控制程式以達到智慧目的;編寫簡單的日程提醒軟體,以免忘記重要約會…有業內人士表態,是否有用取決於使用者是否真的需要,只要需要就是軟體開發工程師的價值所在。

此外,在國外一線科技公司工作的軟體開發工程師,比如谷歌、蘋果,薪資水平早已達到年薪100萬人民幣左右。反觀國內,2010年的軟體出口規模達到215億元,軟體從業人員達到72萬人,雖然如此,但人才缺口依舊巨大,尤其是高素質軟體工程人才,極度短缺。

所以,這個崗位不是無用,而是頂尖人才尚未到位。

軟體質量越來越差是開發的鍋嗎?

一個優秀的軟體開發工程師,必須對自己的產品負責。如今,一個手機就可以解決吃飯、休閒、出行、娛樂等各方面需求,只要幾個APP就可以搞定全部,軟體產品越來越多,但真正可以算得上顛覆性創新的東西卻很少,基礎軟體的質量似乎越來越差,這個鍋應該開發背嗎?

在V2EX上,某開發者深夜發表了一篇題為“底層開發價效比越來越低,基礎軟體的質量將會越來越差”的帖子,他表示,前半句是當前事實,後半句則是基於事實對未來的推斷,也就是說,未來,基礎軟體的質量將會越來越差,這又從何說起呢?

他認為,現在的年輕人中只有很小一部分願意去維護和學習前人花費數十年時間,整理出的數千萬行程式碼,基礎軟體的補丁質量在逐年下降。大部分年輕人不願意做“平行世界的守護者”,更加贊同“不重複造輪子”的說法。

隨著市場對產品研發和迭代週期的要求越來越短,各種敏捷開發工具應運而生,與以往相比,同樣的功能只需要很少的特定程式碼就可以實現,軟體開發工程師花費的時間確實變少了,但對效能和使用者體驗的關注也在下降,這也導致大量軟體流入市場,但整體質量卻是在下降。

當然,不少奮鬥在一線的底層開發者對此也表達了不滿,認為國內尚有很多開發者重視基礎軟體質量,並願意更新迭代前人編寫的底層程式碼,只是這個群體的話語權太少,被外界聽到的聲音太弱。

當然,也有網友認為,這也不全是軟體工程師的問題,很多公司在軟體開發過程中往往是需求提了改,改了提,最終開發的產品成了一堆無用程式碼堆積;工期一再壓縮,為了趕時間,大部分軟體開發工程師不得已省去設計時間,自然沒工夫評估專案效益和成本,後果往往是非常痛苦的修改和更新,不同開發者之間的協作也可能影響系統其他功能,導致整個軟體開發流程漏洞百出。

因此,軟體質量好壞不是單純依靠軟體開發工程師就可以解決的,這其中還涉及到多人協作,部門合作等問題,這個鍋全部砸在工程師身上,也是有點痛。

如何避免無用程式碼堆積?

當曾經嚮往的職業變成一日又一日的無用程式碼堆積,多少讓開發者有些心灰意冷,雖然無法保證整個產品質量,但至少可以在程式碼層面下點功夫。無用程式碼堆積這種現象在日常軟體開發中非常普遍,對於需求頻繁被修改的問題,根源在於弄清楚軟體開發的目的是什麼,程式碼有沒有用的最終決定者應該是使用者,如果一段程式碼具備的功能符合使用者需求,具備業務價值,那麼就是有用的。

在軟體開發過程中,需求變更和程式碼修改是很正常的事情,但這個不確定性需要在一定範圍內。對此,最佳的解決方案可能是迭代開發,也叫迭代增量式開發,將整個開發週期分解為若干時間段,每隔一段固定時間就對軟體進行一次小迭代,每迭代幾次就進行一次全面測試和大版本更新,對開發成果進行質量評審,這個過程最重要的是聽取終端使用者的意見,以便及時調整優化,避免無效需求,尤其是決策者拍腦門出來的決定。

開發之前,技術負責人務必準備好相應文件,確定好各工程師的分工,尤其是需要協同完成的部分。另外,團隊儘量抽出時間和精力進行程式碼Review,並以降低程式碼複雜度為目標,如果不同工程師之間的程式碼間經常互相影響,可以考慮讓這類程式設計師負責獨立開發模組,降低對整個專案的影響。

長期以來,測試在國內的重視程度並不夠,一個測試團隊起碼應該有白盒測試、效率測試、單元測試等各類專職人員,不建議在所有功能完成之後才開始測試,最好是完成一個功能就馬上交給測試,測試階段應由測試完全掌握主動權,開發必須尊重測試人員的工作。

歸根結底,軟體開發是一項非常複雜的工作,為了避免過程出錯,很多公司已經摸索並建立了成熟且完整的程式碼編寫規範,包括變數命名規則、層次化設計、類和介面設計,到最後的程式碼Review都很清楚,最重要的不是會寫程式碼,而是學會解決問題,做真正有價值的事情。

毫無疑問,軟體工程開發是一項有價值且極具挑戰的工作,這種價值不僅體現在工作中,很多優秀的軟體產品已經對使用者生活產生影響,這也是很多一線科技公司不可或缺的崗位,但價值到底有多大還要取決於做的人,如果開發者自身技藝不精,很容易弄巧成拙。

參考連結:
https://www.reddit.com/r/EngineeringStudents/comments/4cqg19/software_engineering_what_seems_to_be_useless/
https://www.perlmonks.org/?node_id=405439
https://www.zhihu.com/question/28158159

需求日新月異,挑戰與成就共存,不如來看看國內外一線工程師怎樣應對成長困境。2019年5月6-8日,QCon全球軟體開發大會與您相約北京國際會議中心,超100位國內外資深技術專家,聚焦26+熱門專題,從工程實踐出發,深度剖析技術痛點,助你提升技術視野。

相關文章