作为一名软件工程师,并不像我曾经想象的那样光鲜亮丽。我曾被承诺会在一个快节奏、令人兴奋的环境中工作,但现实是,我被困在一个小隔间里,构建一些没有人真正理解或欣赏的复杂系统。如果我有一台时间机器,我会做两件事:警告哈兰贝远离那个孩子,并重返学校成为一名土木工程师,在户外建造大家都钦佩的桥梁和摩天大楼。不幸的是,我还没弄明白如何用JavaScript构建时间机器。
坦白说,我不建议任何人从事软件工程职业。如果你和我一样做出了糟糕的选择,那就要做好迎接一些艰难时刻的准备,就像医生最终会失去病人,飞行员可能会坠机一样。每个软件工程师最终都会遇到合并冲突,而这在整体上还不算最糟的。
软件工程最大的挑战之一就是你不想让你的朋友和家人知道你做什么。为什么?因为你会开始收到来自你叔叔或旧室友的消息,问你是否想一起开发一个应用。那将是一个荒谬的想法,比如马的Uber,或者没有中国元素的TikTok,还只有500美元的预算。
这些信息之所以痛苦,是因为软件工程师通常是内向的人,很难说“不”。你可能会忍不住回复说:“这个想法很棒,但我的收费是每小时300美元。”他们可能会还价到零美元每小时,再加上公司未来可能价值数十亿美元的10%股权。此时,你不如接受这个提议,让他们走开。
当你不在为朋友和家人开发应用时,你应该在做自己的副业项目。这通常涉及使用像AWS这样的云服务。你能收到的最糟糕的信息之一就是云计费警报,告诉你:“嘿,这是AWS。你25美元的预算已经超支了230万美元。”也许你按错了按钮,或者不小心创建了一个无限循环,但关键是不要惊慌。最简单的解决办法?停止使用AWS,假装什么都没发生。如果杰夫·贝佐斯派人找你,只需说你的账户被黑了。也许这会奏效,如果不奏效,至少你可以安慰自己,还有很多人忘记关闭EC2实例。
另一个开发者的噩梦场景是意外删除了生产数据库以及公司所有宝贵的数据。你只是在“prod”和“dev”之间简单地弄错了。当这种事情发生时,简直让人恐惧,但希望你有备份可以恢复。如果没有,那可能是时候开始找新工作了。删除数据库非常简单,只需一行代码即可完成。你可以利用这些知识来对抗系统,比如有人利用SQL注入攻击测速摄像头。
尽管删除数据库很糟糕,但它至少很快就结束了。有些开发者面临更漫长的折磨,比如被分配将一个遗留的AngularJS版本1代码库迁移到Angular 14。之前的开发者是唯一了解代码工作原理的人,但他因年老去世了。现在,你必须破解这个过于复杂、没有任何注释的代码库。这将花费数年时间,当你最终完成时,没人会在意,因为到那时,已经是时候将遗留代码库迁移到2025年新的JavaScript框架了。
说到JavaScript框架,前端开发者最不想听到的消息之一就是又有一个新的、更好的框架被发明了。当你学习一个框架时,你加入了一个部落,这意味着部落外的一切都是危险和糟糕的。通常,你可以创建一个回音室,让自己相信你的框架在任何情况下都是最好的。但总有一天,你可能会相信确实存在一个更好的框架,当那天到来时,你将不得不背弃你的部落,失去许多朋友。作为一名软件工程师,结交新朋友并不容易。
另一个令人沮丧的经历是,当一个非技术人员,比如客户或营销专家,要求你对已经完成的产品进行“一个小小的改动”时。他们可能会说:“我们只需将这个导航栏从顶部移到侧面,这对你来说应该是一个简单的改动。”你不想看起来像个普通开发者,所以你同意了,但这花了20个小时,还修改了800个不同的HTML和CSS文件。然后,就在你提交工作时,那个人又回来,说:“你知道吗?我觉得最初的方式更好,我们还是改回去吧。”
作为一名软件工程师,最重要的技能之一就是有效地使用搜索。这意味着,遇到一个没人解决过的问题,可能是最糟糕的事情之一。当你在Google上搜索错误消息却一无所获时,感觉已经很糟糕了,但更糟糕的情况是,你找到一个10年前的论坛帖子,看到有人遇到了和你一样的问题。当你下拉页面,希望找到详细的解决方案时,却只看到一句“已经修复了,一切正常”,这让你不得不独自解决这个问题。正当你快要解决问题时,收到一个通知,提醒你该参加每日早会了。