Skip to content 跳到章节

💻实务与诀窍

Software Engineer · 写作,测试和维护了管理现代生活的代码——也是最早观看AI将自己的日常工作自动化的职业之一.

一眼看清
指标浓度

格子越深,表示该主题在这项指标上越高。

最近审阅 来源与署名媒体署名方法说明

简短问答

一个软件工程师整天做什么?

大部分时间分写新的代码,在审查期间读别人的代码,修补bug,和队友谈论下一步要建设什么. 会议、规划和指导花费的时间比新来者预期的要多。 高级工程师个人写的代码往往比初级工程师要少,在设计决策,评论和解除对他人的封锁方面花费更多的时间.

我需要计算机科学学位才能成为软件工程师吗?

没有,但它仍然是最常见和最低的防爆路线。 四年制学位教授算法,数据结构和系统概念,在工作上学习费用昂贵. Bootcamp毕业生和自学工程师确实被雇佣,尤其是被较小的公司雇用,但通常需要强大的组合或开源工作来取代证书.

软件工程有AI的风险吗?

部分已经是了。 现代代码编辑器中构建的工具现在为经常使用这些代码的工程师写了很大一部分常规代码——锅炉板,第一稿测试,语言之间的翻译. 更难实现自动化的是决定构建什么,为什么,以及如何塑造一个系统,使它能与真正的用户保持接触和失败。

软件工程师挣多少钱?

它因国家和公司而异。 在美国,年中值约为133 000美元;在德国,约为69 000欧元;在印度,该行业雇用人数最多,全国平均接近900,000美元。 大型技术公司的高级工程师和工作人员工程师,一旦列入股票补偿,可以赚取全国中位数的数倍。

软件工程师,程序员和开发员有什么区别?

在实践中,很少——标题重叠,公司使用时不一致。 "程序员"是最早的术语和强调书写代码;"开发者"在网络和产品公司中很常见;"软件工程师"倾向于应用从旧的工程领域借来的有纪律的流程,测试和设计的想法,用于建设软件. 职务说明很少一致地加以区分。

是否真的需要一个编码面试才能被雇佣?

在大多数已经成立的技术公司,是的:现场或带回家的技术访谈,经常涉及共享文档或白板上的算法问题,仍然是标准过滤器,同时是系统设计回合,用于更高级的角色. 较小的公司和初创企业更可能取代付费的试办项目、投资组合审查或关于过去工作的对话。

打开对比实验室

分享本页

工程师连续打字8小时的形象大多是错误的. 读别人的代码,推理一个没有明显原因的失败,向那些不是工程师的人解释技术权衡,承担着与写新代码一样多的工作——往往更多的是,为过头几年的任何人.

专业内部流传下来的手艺 不太了解要学习哪种语言, 更了解思维习惯: 如何系统地寻找一个错误而不是猜测, 何时离开工作代码, 当删除代码是你整个星期所做的最有价值的事情。

工作要求什么

889074807083
问题分解
88
Debugging
90
System design
74
沟通与合作
80
测试和代码质量
70
Continuous learning
83

问题分解

将一个模糊,大的要求打碎成小的,可独立建造的和可测试的棋子——这种技能最能将生产工程师与那些拖延大任务的人区分开来.

Debugging

系统缩小一个系统在何地和为何行为不当,而不是猜测和改变事物,直到它发生作用.

System design

选择如何将服务,数据和团队分开,这样整个事情可以持续安全地改变多年,而不仅仅是在第一天工作.

沟通与合作

向非工程师解释技术取舍,为审查者写出明确的改动,谈判范围——大多数专业守则的阅读和争论远远超出其写法.

测试和代码质量

写作检查,在用户完成前会捕捉破损的更改,并保持一个代码库足够清晰,让下一个人——常常是同一个工程师,几个月后——能够安全地修改.

Continuous learning

语言,框架和现在的AI工具每隔几年翻一次;工程师在第一个工作高原后就刻意停止学习.

一天的样子

收件箱、立体和分块深度工作:写入代码Lunch审查、配对和会议调试、部署和总结离时(大多数) 036912151821 24h
  1. 7–9 收件箱、立体和分块

    赶在一夜之间发出警报和信息,然后举行一个简短的站立会议,小组在会上说出它的工作内容和阻碍的内容。

  2. 9–12 深度工作:写入代码

    当今最受保护的区块,理想的做法是取消通知,执行需要持续集中的特征或固定。

  3. 12–13 Lunch

    真正的突破;许多工程师报告说,这是在紧缩中消失的第一件事,也是他们后悔失去的第一件事。

  4. 13–16 审查、配对和会议

    阅读同事的拉拉请求,在难题上配对,以及往往在下午集群的设计或规划会议.

  5. 16–19 调试、部署和总结

    完成和运送一天的零钱, 看着它安全地推出, 留下的笔记明天或任何人在待命一夜。

  6. 19–7 离时(大多数)

    个人时间和睡眠——除非是随时待命的一周,电话警报可以把凌晨3点变成计划外的生产事件.

门道

从业者真正口耳相传的技艺——不是鸡汤。

01

Bisect, don't guess

当一个bug在工作版本和破损版本之间某个地方出现时,二进制搜索历史而不是眼球diff——检查中点,然后重复,直到一个变化被保留下来.

Standard binary-search debugging, automated by Git's bisect command
02

在读代码前读取失败

完整的错误消息,堆栈跟踪和周围的日志行通常已经包含答案;跳跃直达源头,猜想浪费了计算机自由提供给你的一个证据.

Echoed in Brian Kernighan and Rob Pike, The Practice of Programming (1999)
03

让变化变得容易,然后让变化变得容易

当一个特性难于添加时,这通常是一个符号,代码的形状会对其产生错误. 首先重构,没有行为改变,直到特性变成一个小的,明显的diff——然后做diff.

Kent Beck
04

Chesterton's fence

在删除或简化代码之前,一个配置值,或者一个你不明白的支票,找出它放在那里的原因. 这可能是悄悄地保护 防止多年没有发生的失败 正是因为这个原因

G.K. Chesterton, The Thing (1929), adopted as engineering folklore
05

删除代码是进度

已经不存在的代码不能有一个错误,不能混淆下一个读者,并且不需要更新. 清除死路和未使用的特征应与运输特征的方式相同。

Echoed by Jeff Atwood, Coding Horror, 2007 ("the best code is no code at all")
06

橡胶鸭调试

大声解释问题,逐行解释,在请求帮助之前,先向同事甚至无生命的物体解释. 解释它的行为 经常在任何人回答之前 暴露出虫子

The Pragmatic Programmer, Andrew Hunt and David Thomas (1999)

行当的工具

Code editor / IDE

Visual Studio Code和JetBrains的IDES占据主导地位;现在两者都构建了AI辅助的自动完成,并直接聊天进入编辑器.

Git

在Torvalds于2005年撰写之后,版本控制系统几乎使整个行业标准化;没有它,几乎没有船只。

Issue tracker

Jira, Linear 或 GitHub Issues 将积压的bug 和特征变成一个团队可以规划一周或四分之一左右的东西.

CI/CD pipeline

自动系统,在每个变化上建立,测试和部署代码,将神经手动事件的释放变成例行事件.

AI coding assistant

像GitHub Copilot这样的工具现在写了工程师所接受的一大部分线路,将日常工作转向审查和指导而不是打字.

人如何在此失败

恢复驱动的发展

选择时髦的语言,框架或架构,因为它在简历上看起来不错,而不是因为它适合问题,留下了复杂性,下一个团队必须保持.

未读取错误消息

模式匹配一个被记住的固定,而不是读到程序实际报告的内容,这可以燃烧时间追逐错误的事业.

大爆炸重写

刮掉一个工作系统,从头重建它"适当"是一个有名的冒险动作——Netscape的1990年代后期完全重写它的浏览器是一个被广泛引用的例子,它让公司付出了市场领先的代价.

相近职业

不限同一领域,六项评分最接近的职业。

继续探索

继续探索

工程·技术领域的其他职业