软件工程师10个难以接受的事实


上周末我有机会与一些刚刚获得学位的学生交谈。他们正在追求第一份软件工程师工作。在与他们的交谈中,我了解到他们对这份工作的看法是相当错误的。

这是因为这些新孩子的现实是如此扭曲。他们只看到高薪、远程工作、团队建设和披萨派对。

1)大学不会让你为这份工作做好准备
大学将为您提供一些基础知识,但大多数大学教授的内容与日常工作相距甚远。大多数在大学任教的教授都不是优秀的软件工程师。

其中只有一小部分人甚至担任过软件工程师。此外,大学课程也严重过时。他们落后于软件开发市场的需求多年。

在大学期间你必须付出额外的努力。除了家庭作业和研讨会之外,还可以编写更多项目。做一些志愿服务。了解业务领域,为等待您的工作做好准备。

大多数学生不这样做。他们等到获得文凭后才开始制作自己的作品集。

2)你很少会得到绿地新项目
在大学或新兵训练营中,您会收到很多从头开始编写的较小作业。完全自由地表达自己。您可以实现您学到的所有奇特的东西,例如算法或设计模式。

在日常工作中,您正在处理包含多层和数千行代码的项目。多个人同时从事这些项目。你的自由度有限,你必须适应这个项目。你花在项目上的时间通常是半年到几年。

有时你会花整整一周的时间来修复讨厌的错误。修复只需几行代码。你和你的同事交谈。你们交换有关该项目的信息。您与他们合作以获得您的解决方案的批准。

新项目很少见,而且大多数时间你都在处理现有项目。如果您获得正常项目而不是一些旧的遗留项目,您可以认为自己很幸运。

3) 没有人对你干净的代码表示关心
你可能会忘记你的老板会告诉你:“恭喜你编写了这段优雅而干净的代码,我会给你加薪!”。恰恰相反,没有人关心你的干净代码。

不要误会我的意思,人们会期望你编写出良好且干净的代码。尽管如此,你很少会因此得到任何赞扬。除了有时会审查您的代码的同事之外。

以下循环:

  • 软件工程师编写代码
  • 用户获得新功能
  • 更多用户使用您的产品
  • 公司从产品中获取利润

所以代码只是获取利润的工具。

4)你有时会与无能的人一起工作
人们有偏见,认为只有聪明、有能力的人才能在IT行业工作。尤其是软件开发分支。但这远非事实。

不幸的是,我也有与这类人一起工作的经验。我不得不说,他们很好地考验了我的神经,以至于我花了很多时间思考如何绕过他们的无能。
以下是一些建议:

  • 尽可能地提高效率和生产力,专注于自己而不是他们
  • 尝试其他不涉及该人的选项/解决方案
  • 记录你所做的一切。如果事情出了问题,你就会有他们无能的证据
  • 如果您因该人没有尽职而被屏蔽,请尝试要求其他人解锁您(如果可能)
  • 直接与他们交谈,专业但不刻薄,并告诉他们可以改进什么以及如何改进

5)习惯开几个小时的会议
会议是软件开发工作的重要组成部分。其中有些是好的,但有些只是浪费时间。

每天或每周安排定期会议。其中大多数都没有生产力。他们中的大多数人是由组织他们的人强迫的,因为这是该人正在做的唯一“工作”。

这只是一个空洞的协议,用来证明他们在公司存在的目的。

另一方面,会议也富有成效。这些会议确保团队成员或不同团队之间的信息交换。

大多数软件工程师讨厌会议。但请记住,您的工作还包括公开、主动地就事情进行沟通。

共享信息对于项目的推进至关重要。当您共享信息时,可以帮助其他团队更好地了解您在做什么以及相反的事情。

6)他们会多次询问你的工期估算
商业以数字为中心。每个项目都有其成本,为了计算成本,管理层需要估计构建某个功能需要多长时间。

然后,由软件工程师来评估他们的工作。通常,估计是基于时间的,但有时它们也要求复杂性估计。

在很多情况下,您不知道构建某些东西需要多长时间。您阅读需求,进行一些研究,然后给出一个数字。

后来,当您开始研究该功能时,您会遇到许多在估算时间时没有意识到的问题。然后你需要补偿浪费的部分,并希望不要超过最后期限。

例如,当您的项目经理要求您在星期五之前实现功能 X 时,您不会说“哦,我可以在星期二之前完成它”。相反,你会说:“当然,没问题”。

为什么?

因为如果你承诺在周二之前交付,但遇到一些问题,你将无法履行承诺。相反,如果您接受周五作为截止日期,并在周三之前完成,则可以提前 2 天交付。


7)Bug将是你一生的大敌
你编写的代码越多,你就越意识到代码中的错误无处不在。当你刚开始编程时,你认为你会编写一些东西,它会很好地工作,故事就结束了。

但实际上,这是一个不同的故事。有无数的事情会产生错误:

  • 你自己的代码 - 人类会犯错误,你不应该相信代码可以完美运行。您可以编写测试,但之后可能会由于各种您甚至不知道的原因而出现错误。
  • 3rd 方库 - 这些库也是由像你我这样的软件工程师编写的。始终关注活动以及这些库的更新频率。
  • 硬件故障——软件依赖于硬件。

8)不确定性将成为你的有毒朋友
你尽力而为,但你并不能 100% 确定你能按照预计的时间完成工作。

除此之外,还有无数其他不确定的事情。这里有些例子:

  • 在你的项目中实现一些你从未使用过的东西,例如。3rd party API - 你将如何实现你不熟悉的东西
  • 转移到一个采用新技术的新项目 - 您将思考如何利用您需要学习的东西来提高效率和生产力
  • 搬到新公司 - 您不确定如何适应新员工并与新员工相处
  • 在你需要完成工作的那天报告错误 - 你担心你会超过最后期限
  • 工作保障——经济形势、流行病、战争和其他因素严重影响该行业,导致裁员
  • 技术的演变——你永远不确定明天是否会被人工智能等新技术取代

不确定性的好处是它可以促使你成为一名更好的软件工程师。如果你想继续留在游戏中,就需要改进和学习。


9)脱离工作几乎是不可能的
有时,我会发现自己在思考我的工作、问题和错误。或者明天我应该放松和放松时必须做的事情。

  • 完成工作后我会关掉笔记本电脑
  • 我在手机上设置了安静的时间来处理我的商务电子邮件
  • 我在工作时间后暂停 Slack 通知。我在周末禁用它们。
  • 当我的思绪陷入“思考工作”的循环时,我会尝试立即将其排除。我提醒自己,休息和放松对于提高工作效率非常重要。
  • 下班后我会散步很长时间。有时我会做板球或足球等运动。
  • 我尝试尽可能多地参与社交活动,避免下班后看屏幕。

尽管如此,尽管我每天都在做这些步骤,但我还是失败了很多次。

10) 良好的软技能比良好的技术技能让你获益更多
技术技能是您可以轻松学习的技能。通过不同的项目,您可以了解特定的编程语言。您可以了解它的语法、优点和缺点。这只是一个练习问题。

另一方面,软技能更难提高。进步需要很大的精神力量。你必须做一些你不舒服的事情。

您必须将自己置于可以提高或练习特定软技能的环境中。

例如,沟通是人们总是谈论的一项软技能。假设你公开演讲很糟糕。你必须强迫自己进入可以练习公开演讲的情境。

除了沟通之外,还有其他软技能:

  • 团队合作
  • 学习心态
  • 组织/时间管理
  • 情商/同理心
  • 可接近
  • 坚持/耐心
  • 信心