如果穿越到刚从业时,我会给年轻时的自己一个建议——“为你想要实现的目标设定各种各样的目标。只要有正确的计划和愿景,任何目标都不会太大。”

在过去的25年里,我经历了成功和失败。这段旅程令人难忘,因为它让我明白了失败和成功的重要性。每一次成功都贴近我的内心,不断让我更好地理解团队合作和成就感,但每一次失败都为我提供了一种新的创新方式,让我找到非凡的解决方案。
另一个帮助我走到今天的品质是敢于冒险。我从不害怕障碍,寻找具有挑战性的任务,而不是接受我遇到的第一个项目。有意识地走出自己的舒适区,让我比同龄人更快地学会了高级技能。
当我回顾十多年前,有几件事,我希望我应该或不应该做。这些职业建议本可以帮助我避免错误的决定,并以更专注和更快的方式前进。这就是为什么我决定写下我给年轻时的自己的一些建议,以帮助那些刚刚开始软件工程工作的职业旅程的人。
如果我能回到过去,这些是我作为软件工程师会教给年轻的自己的18条建议(上篇仅展示1-9条):
一、乐于提问
作为一名专业人士提出问题可以让你清楚自己的角色、任务,并展示出理想的领导品质。即使你认为那是愚蠢的问题、严重的担忧或一个简单的想法,总是提高你的声量,把你的想法摆出来。需要明白的是,将你的的声音带到工作场所是至关重要的。
在上级眼中,提问意味着:
- 乐于学习:提出问题有利于把办公室等级制度转变为教育体系,从中学到非凡的东西。
- 渴望参与:提出问题并认真倾听回答,表明重视同龄人的见解,并希望在最终确定任何结果之前了解对事情的看法。
- 持续求知:了解他人的思考、工作和行为方式,为创造性的想法和解决方案打开大门。
大多数时候,问相关的问题会激发创新,帮助及早发现风险和挑战。
IT行业的新手,如果不积极主动,很可能不会意识到客户或团队遇到的问题。站在自身角度,依赖通常模式处理挑战很容易,但是当与上司和团队成员一起应对挑战时,可以找到更多元的方法来解决这个问题。
二、保持好奇
好奇心是所有顶级开发人员的关键行为,能够理解“为什么”和“怎么做”的好奇心使开发人员是团队的巨大资产。历史上的大多数突破性发现和发明都是好奇心的结果。
在软件工程工作中,好奇心非常重要,因为它可以帮助领导者及其员工适应不确定的市场条件和外部压力。始终记住,了解业务需求也是必不可少的。
好奇心促使我们对决策进行更深入、更理性的思考,并提出更有创造性的解决方案。
三、在软件工程中应用极简方法
在软件工程中传授极简主义几乎是不可能的。但下面是我简单朴素的极简主义清单:
- 最快的代码是根本不运行的代码。
- 运行更少的SQL查询总是更好的。
- 当功能、工具和框架更少时,复杂性的数量就会减少。
- 过于复杂会浪费时间和金钱。
- 不要浪费时间做无用的事。
- 始终专注于避免复杂性和代码。
- 建立高效团队,而非依赖于工具。
- 清晰地表达项目需求,并定期与其他团队一起工作。
- 工程师必须找到替代方案以避免技术债务。
- 关注复杂细节,比如分析和维护旧代码或开发战略性的方法。
- 软件工程师应该同时管理多个项目。
四、打造自己的品牌
根据一般经验,软件工程师并不会主动推销自己,也不会专注于建立自己的个人品牌。这是因为他们大多数人认为品牌是一项不必要的任务。但是,需要意识到,如果没有个人品牌,软件工程师要获得真正的认可会变得极其困难。

我相信,对年轻的自己来说,建立个人品牌是最重要的建议,因为它可以帮助任何阶段的从业者:从自由开发者到企业家,再到找工作的工程师。包括软件工程师在内的每个人都需要在竞争中脱颖而出,尤其是在就业机会稀缺的新常态下。
软件工程师建立个人品牌的方式:
- 更新领英个人资料:你的LinkedIn个人资料应该包含你简历中的所有信息,甚至更多。信息的显示方式应该告诉招聘人员你值得考虑。
- 持续发布:在个人社交平台上持续发布,保持活跃。当你定期发布内容时,你的关注者会期待你的内容,这将带来高参与度。
- 展示对工作的热情:展现热情并不是非常优秀的候选人的最佳预测指标,但是招聘经理在他们的面试反馈中反复提到这一特点。
五、选择合适的组织
人们通常更关注职位而非关注公司。当申请工作时,需要确保选择好,选择最为合适的公司。
这很重要,因为你将为其提供服务,并与该公司建立联系——即愿景、使命和价值观。如果公司的价值观和你的价值观一致,你所做的工作会给你带来更多的满足感和幸福感。
公司应该投资于你的职业发展。它应该有专注于员工成长的实践,比如小型课程或讲座。
合适的组织也将拥有合适的高智商人才资源。经验丰富的工程师将帮助阅读清晰的代码并深入理解它们由资深同事组成的文化,可以帮助新人分析创新方法和技术决策背后的原因。身边有经验丰富的同事可以大大提高自己的学习效率。
所以,有必要尽量深入地对公司做好了解。不要被公司的网站或基础设施分散注意力,而是要研究他们的产品、服务和客户。对公司、公司使命、愿景和文化了解得越多,也就越了解它将如何影响你的职业发展。
六、成为领域专家
领域专业知识对项目的成功至关重要。获得领域知识的重要性很少被讨论,尤其是与我们对提高技术技能的重视程度相比。成为专业人士对职业发展有意义,并指导你在职业生涯中做出正确的决定。
在组织中,有时只有专家才能挽救某一局面。这就是大多数公司更愿意招聘领域专家而非多面手的原因。
在当前情况下,具有技术背景的领域专家比纯粹的技术专家更受欢迎。领域专家拥有领域知识、相关挑战、领域分类、生态系统和趋势分析等优势。他们对不同的问题或场景有更好的理解。领域专家可以帮助交付灵活、敏捷的应用程序或软件,以帮助公司提高产品的适销性。
七、勇于改变
如果你一直做重复性的工作、解决相同的问题,那工作将变得不那么重要且不具有挑战性。在同一份工作上呆了很长时间可能会让你的简历看起来停滞不前。每24-30个月更换一次角色,以促进职业发展跳槽到新公司或新职位有助于保持自己技能的更新。换工作的另一个重要原因是,你通常只在前几年就能学到最重要的东西,换工作可以发展更广泛的内容。
当然,这不一定意味着一定要换工作,可以是内部轮岗、调岗,这样可以保持简历的更新,让其对雇主更有吸引力,因为这意味着愿意接受新的挑战和机遇。
八、如果当前组织不适合你,那就采取下一步行动
没有人在接受工作的时候会期望它会变成令人失望的事情。一旦得出结论——你的工作已经成为紧张的来源,事情就变得真正严峻起来。
当发现上级不回应你的反馈或者经常因工作而精疲力竭时,就不要因为不称职的雇主而痛苦,也不要害怕在事情不利的时候迅速离开。不要容忍那些不准备对你的成长做任何投入的人。
九、学会在不舒服的情况下保持舒适
“走出你的舒适区。只有当你愿意在尝试新事物时感到尴尬和不舒服,你才能成长。”——Brian Tracy
谨慎行事往往会分散你对成功的注意力,学会在不舒服的情况下保持舒适将有助于个人实现其最高潜能水平。如果不敢跨出第一步,就永远无法成长和达到新的高度。学习新的技能和课程将帮助你度过一生。
走出舒适区的最佳方式之一是明智地冒险。它鼓励你发展高级技能,从长远来看会有所帮助。它还将为你的工作提供更大的主人翁意识和信心。
十、持续学习:提高技能/重新技能的计划
数字世界正高速向前发展,软件工程师不仅要了解自己的技术领域,还要深入了解其他领域知识。为此,持续学习、提高技能/再培训计划是最好的方法。当一个人获得各种技术学科的认证时,他可以更好地理解问题和客户的要求。
持续学习和认证可以帮助工程师展示他们的能力、对专业的承诺,并在专业领域建立专业知识。此外,认证培训和延续主题通常会定期改进,以确保在该领域执业的任何人都能跟上最新的趋势和发展。

十一、软件工程简单,然而人复杂
对于软件工程师来说,为了获得成功,了解和理解他们工作的社会方面至关重要。很多时候,人类的工程师没有意识到理解社会方面的价值,而此后这会以某种方式限制职业生涯。
其中一个最大的原因是,很多时候,我们必须与其他人或团队合作,此时的技术技能就不那么重要,而沟通和协作更重要。这就是为什么不仅要关注技术技能,还要与周围的人互动并理解他们,这一点至关重要。
建立你的社交网络“社会结构”是指围绕你并支持你的群体或社区。它可以是你的家人、朋友、同事或邻居。这是一个在你需要的时候为你服务的社区。每一链条中的综合价值观互动方式,决定着这是否是将人与人联系在一起的社会纽带。
社会结构的质量决定了一个人如何有效地构建其组织,以实现包容性、可持续的繁荣。创造一个更强大、更有凝聚力的社会结构的关键不在于创造僵化、不灵活的价值观,而是通过有意识地更新和补充支撑社会结构的有凝聚力的价值观。
十二、寻找一位导师
正确的指导关系可以成为职业发展的有力工具——它可以带来新工作、晋升,甚至更好地平衡工作与生活。
找到导师的最佳方式是了解自己的目标(包括短期和长期)。目标越明确,就越容易找到合适的导师。创建有效且易于实现的目标的原则可以参考SMART:具体、可测量、可实现、相关且有时限。
第二个最好的方法是了解你现有的人际网络。别人对你的工作和能力越了解,就越能有效地指导你。当然,要确保想找的人也有你所需的专业知识。
十三、攻读硕士学位
计算机和信息技术工作岗位预计将增长12%,新增54.62万个工作岗位。硕士学位是职业发展的关键一步,尤其是如果你的专业经验有限,想转行,或者即使已经身处这个行业,但想进入下一个层次。
学位的进修可以让人获得系统思维、商业道德和组织战略方面的经验,将你的战略思维技能提升到一个新的水平。此外,这份终身学历证书也展示自己的专业知识和对该领域的奉献精神,同时还可以扩大专业人脉。
十四、要JOMO而不是FOMO
“害怕错过”(FOMO,fear of missing out)是指可能错过了一段美好的时光,它是一种焦虑或后悔的感觉,伴随着听到一个事件,需要去执行以防错过什么。但好消息是,可以用一种更健康、更快乐的方式来取代对错过的恐惧:错过的喜悦(JOMO,joy of missing out)。
错过的喜悦教会我们正确地点和正确时间的价值。这并不意味着对每一个社会事件或机会说不,而是意味着知道什么时候说是或不是,也即选择的权利。

十五、软件工程伦理
软件开发人员是保护我们关键基础设施不可或缺的一部分。他们的工作是编写对人们生活产生巨大影响的算法。学术和专业协会在为软件工程师制定道德规范方面处于独特的地位,但它们没有那么大的影响力。软件工程师的道德准则不应该看起来像一种代码或注意事项列表。
它应该更像“所有软件开发人员应该自学编程偏见及其潜在危害,检查他们的计划和后续代码等偏差,能够解释他们如何处理这些问题,愿意接受他们的代码审查,要求负责的代码中发现的缺陷可能导致偏见,并解决监督委员会提出的问题。”
十六、选择你的职业:技术管理、产品管理还是人力管理
在解决企业规模扩张的挑战时,有很多不同的思维方式。幸运的是,软件工程师能够接触到各种各样的工作环境,从而能够在正确的轨道上塑造自己的想法,并继续前进。
十七、解决关于动机的迷思
为了解答工作动机的问题,软件工程师需要能够清楚地描绘出他的日常工作如何融入到更大的图景中,以及他是否想知道他们所做的工作是相关的。
第一步是列出你想要实现目标的原因。这就是为什么你需要为自己的目标扎根。此外,要为暂时的挫折或纯粹的疲惫做好准备,但不要把它放在心上,并以充分的决心向前迈进。
十八、花时间于软件工程模式
可观察性:它是一种工具或技术实践,使工程和运维团队能够勤奋地调试他们的系统。它探索了可能没有预先定义或确定的新模式和属性。由于代码在生产环境中可能会有不同的行为,所以在生产环境中发生影响用户的情况下,主动观察发生了什么是很重要的。为了执行真正的系统可观察性,需要对代码进行测试,以生成有助于提出任何新问题的遥测技术。
作为代码进行监控:这是一种使运维团队能够观察和理解其系统不同状态的实践,通常通过预定义的指标、实时更新的仪表板报告来完成。为这些仪表盘提供数据的基础是组装一组预定义的指标或日志,这些指标或日志很重要。
在接下来的18个月里个人会学习了解以下领域:量子计算与Q#、分布式计算、RUST、Tensor Flow、Snowflake、Unity(用于3D建模、AR、VR、MR)、5G。
你可能会想:为什么这些职业建议这么重要?让直属上司满意还不够吗?答案通常是否定的。在成功的旅途中会有一些无法解释的挑战,但当从一开始就朝着正确的方向前进时,就会更容易处理这些挑战,并且比其他挑战行动得更快。
从长远来看,这些职业建议是值得的。