4 min remaining
0%
教育与技能发展

美丽的疯狂:在软件工程无尽的技能树中导航

深入动态的软件工程世界,在这里,持续学习是关键,角色在语言、框架和技术之间模糊不清。

4 min read
Progress tracked
4 分钟阅读

简而言之:今天成为一名软件工程师意味着要接受无休止的学习节奏。从核心语言和框架到前端复杂性(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!