软件职业建议
介绍
现在我已经退休了,从事了 45 年的软件开发,回顾了我的职业生涯,以下是我在这一路上学到的一些东西,我想可以称之为建议。
忠于人,而不是公司
正如2022-2024年通过裁员让你痛苦地意识到的那样,公司对你并不忠诚,所以你也不应该对他们忠诚。当然,你应该做好你的工作,但你的公司不是你的家人,如果他们试图告诉你这一点,千万不要相信。
如果您应该忠诚于任何人,那就是您的同事或整个团队——但您的忠诚度也只能到此为止。
不要长时间工作
我觉得我的职业生涯相当幸运,因为我从未做过需要长时间工作的工作。除非迫于截止日期,否则不要主动加班。工作之余,要有自己的生活。要用工作质量来证明你的技术实力,而不是工作时间的长短。
高估
当你被迫估算某件事需要多长时间时,首先要确定它可能需要多长时间,然后再添加一些填充。如果遇到不可预见的问题,你就需要额外的时间;如果没有,你就可以提前完成,这会让你看起来不错——或者你可以稍微放松一下。
精通你的技艺
无论你从事软件开发的哪个领域,都要精通它。学习所有相关知识。除了学习编程语言的语法和语义之外,还要通过阅读他人代码、阅读技术博客或观看技术视频来学习技巧;了解编译器如何在机器码级别实际实现语言特性。这将帮助你成为“10 倍速开发者”,并受到追捧。
即使是像 C 这样相对较小的语言,尽管我已经使用 C 超过 35 年,我仍然在学习新技术。
话虽如此,编写代码时不要太“聪明”。除非你能通过性能分析证明某些非常简洁、巧妙的代码实际上性能更高,否则一定要清晰明确。
代码实际上主要是写给别人看的(包括几个月后的你自己),而不是给编译器看的。现在的编译器已经很厉害了,它们通常能把你清晰明确的代码优化成和你那个简洁精巧的版本一模一样的代码。
另一个能帮助你真正学习一门语言的细节和技巧的方法,是尝试以书面形式向他人传授这门语言的某个方面。(这项技巧与小黄鸭调试相关,其工作原理相同。)至少对我来说,为我的博客文章迫使我质疑我所知道的知识,并查找事物的细节,因为我希望做到全面和正确。通常,在这个过程中,我会学到一些东西。
专业化
在用户界面(UI)还是命令行的年代(20 世纪 70 年代到 80 年代中期),只有“程序员”这个称呼。后来,图形用户界面(GUI)出现了(20 世纪 80 年代中期),不知何故,“程序员”变成了“开发人员”(21 世纪初)。与此同时,Web、JavaScript 和 Web 工具包开始流行,开发人员也分为“前端开发人员”和“后端开发人员”。几年后(大约 2008 年),“全栈开发人员”这个称呼开始流行,并且其使用率迅速增长(就像癌症一样)。
最初,“全栈开发者”这个职业并不那么糟糕,因为当时的 Web 技术种类非常有限。如今,可供选择的 Web 技术多达数十种。你可能要花上数年时间才能掌握其中一种。当然,后端技术也在不断发展,只是规模远不及现在。
因此,对我来说,成为一名“全栈开发者”就好比成为一个万事通,什么都精通——重点是“什么都不精通”。“全栈开发者”是软件的全科医生。当然,很多公司喜欢全栈开发者,因为这意味着他们可以雇一个人而不是两个人——但你往往能得到你付出的回报。在我看来,你应该专注于后端或前端。做心脏病专家或皮肤科医生,而不是全科医生。
钱
专攻的一个主要原因是,无论在哪个领域,专才都比通才赚得多。当然,金钱本身并非目标,但金钱能让你内心平静。
如果你在美国,一定要参加公司的401(k)计划,并尽可能多地缴纳。另外,找个好的理财顾问,把更多的钱投资进去。除了极少数例外,靠养老金退休的日子早已一去不复返了。现在的目标就是尽快攒下“他妈的钱”。
如果你现在二三十岁,退休似乎还很遥远;但说真的,尽早开始投资吧。转眼间,你就五六十岁了。虽然我个人没有经历过年龄歧视(据我所知),但据说科技行业普遍存在年龄歧视。
学习 C
诚然,由于我一直只做过后端开发人员,我可能有偏见,但即使你是前端开发人员,也应该学习 C 语言。尽管 C++ 已经基本取代了 C 语言,但学习 C 语言就像学习拉丁语一样——以一种好的方式。正如拉丁语是许多人类语言的根源一样,C 语言也是许多编程语言的根源。
但我指的不仅仅是 C 语言的语法,我指的是用 C 语言完成任务的方法。由于 C 语言非常精简,用 C 语言编程迫使你必须了解机器层面的运作方式。即使你使用更高级的语言编程,这些知识也会对你大有裨益——尤其是在许多高级语言都是用 C 语言实现的情况下。
即使是像 Java 这样的语言也太高级了。我曾经在BEA的一个 Java 编程团队工作过,当时有一段代码运行得非常慢。经过一番调查,我发现有人在调试日志消息中添加了将大量字符串连接在一起的代码。问题是,即使调试日志可能被关闭,并不意味着连接这些字符串的代码没有执行。
虽然在任何语言中都可能犯同样的错误,但+
Java 中用于连接字符串的运算符很容易让人忘记JVM 的底层操作。C 语言甚至没有合适的字符串类型,因此仅仅为了连接字符串就需要你付出更多努力,因此你犯这种错误的可能性要小得多。
受苦的愚人
我从来都不是一个乐于忍受愚蠢行为的人。起初,这偶尔会给我带来麻烦。(这些年来,我慢慢变得成熟了。)尽量保持礼貌和尊重——如果有必要,就笑着忍受。之后,再向你信任的同事或朋友倾诉。
如果有人提倡的想法是考虑不周、不必要或明显愚蠢的,不要直截了当地说他们的想法是考虑不周、不必要或明显愚蠢的,而只需问“这能解决什么问题?”
这个问题是我从贝尔实验室的一位导师史蒂夫·E那里学到的最好的东西之一。我记不清具体的例子了,但我记得我肯定偶尔会兴致勃勃地跟史蒂夫滔滔不绝地谈论某件事——他会插嘴问道:“这能解决什么问题?” 这句话让我停下思考,并迫使我认真思考。当时我很讨厌他这样做,但现在我开始欣赏这种做法的力量。
提问时,不要显得恼怒;相反,要冷静地提问,同时保持沉思和困惑的表情。这会迫使对方为自己的想法辩护(他们无法做到,但希望他们自己最终能意识到自己的想法很愚蠢),同时也能让你摆脱困境,因为你看起来像个傻瓜,因为你不明白他们所谓的“绝妙”想法的含义。
结论
目前就想到这么多了。等我想到其他内容的时候再补充吧。希望这些内容对你有帮助!
文章来源:https://dev.to/pauljlucas/software-career-advice-15d