4 min remaining
0%
教育與技能發展

美麗的瘋狂:導航軟體工程無盡的技能樹

深入軟體工程的動態世界,持續學習是關鍵,角色在語言、框架和技術之間模糊不清。

4 min read
Progress tracked
4 分鐘閱讀

TL:DR:今天成為一名軟體工程師意味著接受不斷學習的快速步伐。從核心語言和框架到前端的複雜性(React、TypeScript)、DevOps實踐(Docker、Ansible)、雲端基礎設施(AWS、Terraform),甚至管理技能——範疇不斷擴展。與建築等高度專業化的領域不同,軟體通常期望個人能涵蓋廣泛的領域,角色之間的界限變得模糊。雖然這很具挑戰性,但這證明了我們領域的動態特性。

導航軟體工程無盡的技能樹

這是我經常思考的事情:在軟體工程的世界中所需的知識速度和廣度。其他大多數職業也是這樣嗎?我有時真的在想。軟體工程師的旅程是持續適應和學習的過程,這是一種獨特的專業「瘋狂」。

坦白說:建立優秀的軟體是非常要求的。你首先需要精通幾種程式語言和基本工具。但這只是入場券。公司理所當然地期望熟悉他們特定的技術棧——也許是Ruby on Rails、Django、Laravel,或完全不同的東西。然後是CSS,這是一個獨立的宇宙,掌握它的感覺似乎永遠無法觸及,即使你學到足夠的知識來應付(同時仍然偶爾會困惑於為什麼佈局會崩潰)。

而JavaScript呢?幾乎無法避免。如果你幸運,可能只是維護舊的應用程式,偶爾加點jQuery。但技術很少靜止不動。

大模糊:全端與DevOps的進入

某天,Facebook的一個團隊開發了React。突然間,集體智慧宣稱這是構建現代軟體介面的「正確」方法。但許多公司,儘管需要這種新方法,卻猶豫不決,不願意與後端團隊一起聘請專職的前端專家。就這樣,「全端工程師」成為了常態。因此,你深入研究React,也許還會加上TypeScript,因為類型至關重要,與Redux一起掙扎於狀態管理(或導航上下文API的複雜性),並配置webpack、esbuild或Rollup等構建工具,以及檢查器和格式化工具。抵抗這一趨勢?可能,但在快速發展的初創公司中卻很困難,因為你可能會成為只精通最新框架的新員工的導師。

但擴展並不止於前端。還記得系統管理員嗎?在過去(現在感覺像是古老的歷史!),他們是基礎設施的守護者,確保伺服器平穩運行,管理數據庫、更新和部署。然後出現了DevOps運動。部分由於效率和成本節約,運營、部署和基礎設施管理的責任開始轉移到工程團隊本身。現在,你需要掌握Docker。即使你的應用程式是一個簡單的二進制檔案,你可能還需要Ansible來進行配置管理,祝你好運導航SystemD的複雜性。

攀登雲端及更遠

我們還沒有到達一半!接下來是雲端——AWS、Azure、GCP。你不能像普通人一樣在GUI中隨意點擊;你需要基礎設施即代碼(IaC)。所以,將Terraform或Pulumi添加到你的學習清單中,以便以程式化方式配置和管理資源。

取得成功,晉升為經理?恭喜!這是一個全新的學科需要學習:估算時間表、委派任務、撰寫規範、進行績效評估、在產品策略會議中有意義地貢獻。除非你的公司已經大幅擴張,否則你可能會在這一切進行的同時,仍然親自參與技術工作。這變得更加瘋狂。我最近看到一位招聘者在尋找一位具備Rails、Hotwire和原生移動開發(iOS/Android)「高級」技能的工程師。為什麼不再加上內核和編譯器開發呢?專業化去哪裡了?

軟體的複雜性在增長,通常是出於良好的原因。但這讓我想到了其他複雜的工作。建造一座房子需要建築師、土木工程師、水管工、電工、磚瓦工、室內設計師、屋頂工、測量師——一整個專家團隊。你不會期望一個人或甚至一小家公司能掌握所有這些技藝。然而,在軟體領域,期望往往偏向於超級多才多藝,而不是深度專業化。也許未來充滿希望。也許AI和大型語言模型的進步最終將使我們能夠從簡單的提示生成複雜的應用程式,處理許多底層的複雜性。這不一定是壞事,讓我們能夠更多地專注於核心問題解決的方面。在那之前,軟體工程師的生活仍然是一段刺激、有時令人不知所措,但總是持續演變的學習旅程。這證明了我們領域的動態性,坦白說,這也是使其如此令人興奮的一部分。持續學習,持續建設!

Where Did Specialization Go?

Software complexity grows, often for good reasons. But it makes me think about other complex undertakings. Building a house involves architects, civil engineers, plumbers, electricians, bricklayers, interior designers, roofers, surveyors – a whole team of specialists. You wouldn't expect one person or even one small company to master all those trades.

Yet, in software, the expectation is often leaning towards hyper-versatility rather than deep specialization.

Perhaps the future holds promise. Maybe advances in AI and LLMs will eventually allow us to generate complex applications from simple prompts, handling much of this underlying complexity. That wouldn't necessarily be a bad thing, allowing us to focus more on the core problem-solving aspects.

Until then, the life of a software engineer remains a thrilling, sometimes overwhelming, but always evolving journey of continuous learning. It's a testament to the dynamism of our field, and frankly, part of what makes it so exciting.

Keep learning, keep building!