当你成为行业资深人士时,你愿意给后辈提供一些经验吗?最近,一位有着 10 年经验的资深工程师在醉酒后洋洋洒洒写了三千多字,涉及技术、远程工作、职业发展、工作与生活等。正所谓「酒后吐真言」,我们来看 ta 说了些什么吧。
- 我推进职业生涯的最好方式是换公司。
- 技术栈并不重要,因为在我所在的领域中有大约 15 种基本的软件工程模式可以应用。我从事数据工作,这与 webdev 或嵌入式开发不同,但所有领域都有大约 10-20 个核心原则,技术栈只是试图让事情更容易而已,所以不要为此烦恼。
- 人们推荐换工作是有原因的。如果我对一份工作不满意,可能是时候 move on 了。
- 我在之前待过的公司里结交了一些终生的好朋友,但我对公司并没有这样的要求。我在没有和同事建立友谊的地方工作有过非常开心的经历,在交到好朋友的公司也有过不开心的经历。
- 我学会了对我的经理诚实。不是完全诚实,但在工作中尽量做到真实。能发生什么更糟糕的情况呢?被解雇?没关系,我能在两周内找到一份新工作。
- 如果每个季度中,我在凌晨 2 点被紧急喊醒的次数超过一次,那么这意味着出大问题了。我要么解决它,要么退出。
- 优秀经理的品质与优秀工程师有许多共通之处。
- 最开始的时候,我迷恋技术、编程和计算机科学。而现在,我受够了。
- 好的代码是初级工程师也能理解的代码;优秀的代码,连 CS 大一新生都能看懂;而最好的代码是完全没有代码。
- 工程师最被低估的技能是如何写文档。有人请教我怎么写好文档,讲真,如果真的有好的推荐,我会支付课程费用(哪怕需要花很多钱,只要保证我能写好文件)。
- 和上一条类似,写好修改提案是一大技能。
- 几乎所有的 battle(vim vs emacs、mac vs linux 等)都无关紧要,除了……
- 年龄越大,我越欣赏动态语言。
- 如果我发现自己是房间里最聪明的人,那么是时候离开了。
- 我不知道为什么 Web 全栈开发者的工资这么低,他们应该得到 50 万基本年薪。全栈开发者必须了解前端和后端、不同的浏览器如何工作、网络和数据库、缓存、web 和移动端的差异,甚至公司想使用的另一个框架…… 所以为什么 web 开发者的工资这么低?
- 我们应该雇佣更多的实习生,他们很棒。那些精力充沛的小家伙有很多奇思妙想,如果他们能够质疑或提出批评就更好了。我喜欢实习生。
- 不要去见你的偶像。我花了 5000 美元参加我的一位偶像的课程。他很聪明耀眼,但最终我意识到他是在编故事,他和我们其他人一样。
- 技术栈很重要。我刚才说技术栈不重要,但实际上当你听到 Python dev vs C++ dev 时,你想的东西肯定不一样。那是因为某些工具确实很擅长执行某些工作。如果不确定自己想做什么,就写 Java。这种编程语言几乎什么都擅长。
- 有史以来最伟大的编程语言是 lisp,我应该学 lisp。
- 对于初学者来说,最赚钱的编程语言是 SQL。即使只懂 SQL,别的什么都不懂,你也可以赚到钱。薪酬专员?薪资大概 5 万吧。懂 SQL 的薪酬专员?9 万!大公司有组织能力的普通人?4 万美元。有组织能力又会 SQL 的人?请称呼自己为 PM,薪资 15 万美元。
- Tests are important but TDD is a damn cult.
- 测试很重要,但 TDD(测试驱动开发)是该死的邪教。
- 轻松的政府工作并不像人们所说的那样,至少对职业生涯早期到中期的工程师来说是这样。当然,12 万美元薪资还有养老金听起来不错,但你将出卖自己的灵魂去研究机密的专有技术。我很尊重政府工作人员,但说真的,这些地方工程师的平均年龄 50 岁以上是有原因的。此建议不适用于政府承包商。
- 第三方招聘者是水蛭一样的存在。但如果遇到了好的第三方,就认真打好关系,他们可以帮助你的事业发展。
- 期权要么不值钱,要么能让你成为百万富翁。除非工程人员超过 100 人,否则期权可能毫无价值。
- 在家工作就是最好的,但是缺少白板很糟糕。
- 我从来没有在 FAANG 这几家大公司工作过,所以我无从得知自己错过了什么。但是我雇佣过从 FAANG 出来的工程师,他们也不知道自己在做什么。
- 我的自我价值与总薪酬无关,资本不是确定自我价值的好方法。
- 经理的权力比你想象的少。如果你想知道,为什么某某经理不解雇某人,那是因为他们不能。
- 头衔大多不重要。你做了什么,完成了什么,这才是人们关心的。
- 善待每个人。不是因为他们能帮助你的事业,而是因为善良本身就是有回报的。
- 如果我在过去一个月中没有从初级工程师或实习生那里学到什么,那是因为我没有注意到而已。
- 支付课程、书籍、会议费用是值得的。我参加过几次会议,参加过几次付费课程,读过很多书。很值得,我可以更好地假装自己在做着什么。
- 腕管和背部问题不是闹着玩的,现在快花钱买好装备。
- 你知道做软件工程师最大的好处是什么吗?可以和与你想法一样的人见面聊天。不一定是对体育和电视节目有一样的兴趣,而是他们看待问题的方式和你一样。那很酷。
- 科技领域的女性不够多。多么糟糕的行业,这需要改变。我一直试图给我们组织中的女性工程师更多鼓励和帮助,但我不知道自己还能做什么。
- 黑人工程师也一样。
- 我从未真正讨厌一种语言或技术,直到我开始熟悉它。此外,即使我讨厌一项技术,但只要我认为它是好的,我仍会向客户推荐它。
- git 很糟糕,但我别无选择只能使用它,还有 GUI git 工具。
- 由于我从事数据工作,我将给出一个数据相关的经验教训——该死的 pandas。
- 我的工作更容易,因为团队中有半技术分析师。半技术性,表示他们懂编程但不懂软件工程。这是一件幸事,因为如果有些东西对他们来说没有意义,那就意味着它可能设计得不好。我喜欢团队中的分析师,他们比最杰出的工程师对我的帮助更大。
- 暗黑模式非常好,除非你不得不使用 light 模式(如不支持暗黑模式的网页或 app)。
- 我对安全足够了解,然后发现我对安全一无所知。
- 成为一名不错的工程师意味着了解最佳实践,而作为一名高级工程师意味着知道何时打破最佳实践。
- 如果人们试图将责任归咎于一个 bug 或中断,那么是时候 move on 了。
- 很多前进中的公司,尤其是创业公司,都在谈论带上「真实自我」。但如果真实的自己只想看色情片呢?健康的做法是在工作和个人生活之间树立一个屏障。
- 伟大领导力的最好证明是,当我的领导因为我的错误而受挫,我会为她赴汤蹈火。
- 同样,我有幸共事过的最佳领导者尽最大努力倡导我的观点,并跟我解释与我的观点相冲突的其他观点。我正在努力成为他们那样的人。
- 去他妈的副业。如果你喜欢做,太好了!即使我有时间做兼职,我也会忙着在 reddit 网站写醉醺醺的帖子。
- 在某种程度上,算法和数据结构很重要。我没看到药剂师面试考有机化学,我们行业的面试过程有问题。
- 做自己喜欢的事不重要,做自己不讨厌的事更重要。
- 我离产品越近,我就越接近提高收益,此时无论我的工作技术性有多强,我都觉得自己更受重视。即使在成长性最强的公司中也是如此。
- Linux 很重要。
- 我学会了对「大数据」这类模棱两可的流行语保持警惕。什么是「大」数据?我在 Spark 和 Kafka 中处理过每 10 分钟 10000 行的数据流,在 Python 和 MySQL 中进行过每小时 10 亿行的批处理。那些标签可去他妈的吧。
- 不是所有的好工作都在硅谷,但很多都是。
关于编程语言
- 我曾经很讨厌一种编程语言 (C#),直到开始使用。现在我仍然讨厌它,但认为它还是有用的。
- 我开始讨厌一种编程语言 (C#),之后离开又回来了。哇,那种编程语言真的进步了。
- 函数式语言最伟大之处在于函数是最重要的,所有程序员都知道这一点。
一门语言再伟大再优越,人们不使用也没办法。 - 学习一门语言并不难,难的是学习生态系统。
关于同事
- 结对编程很棒,只是要花很多时间,而公司通常不想花这些时间。
与聪明的工程师一起工作让我成为了更好的程序员,与聪明的非技术同事一起工作让我成为了更好的工程师。 - 不要在朝九晚五工作时间之外工作。除非你有一个很棒的项目,且你处于最佳状态。那就太棒了。
关于在家工作
- 如果公司一半员工远程,一半坐班,那么公司需要确定远程人员是否被视为二等公民。如果重大决策是在「饮水机旁」做出的,那么最好努力改变公司文化,或者跳槽到另一家将远程员工视为头等公民的公司。
- 在家工作的第二大缺点是没有白板。
- 在家工作的最主要缺点是很难向同事学习。除非我自信、果断地提出问题,并且公司文化认可远程员工的价值等同于现场员工,否则我认为最好在职业生涯的前 5 年坐班。
关于技术
- 每个人都知道技术一直在变化。过去 10 年中,技术格局发生了巨大变化。但是基本面变化不大,尤其是适用于我这个领域的基本面。
-Hacker news 和 - /r/programming 只对获取一般想法和跟进最新新闻有用,评论几乎一文不值。 - 很多业余爱好者对技术有很强的见解,甚至在「体面的」杂志和博客上发表文章。我需要分辨它们的价值。
关于数据工程
- 我是一名数据工程师,所以我可以给出更具体的、有针对性的建议 / 经验。
- SQL 才是王道。像 MySQL、Postgres、Oracle、SQL Server、SQLite 这样的数据库依然很棒。即使你使用新技术工作,大部分技术还是会迁移。
- 大多数公司不做流媒体,这很难也很复杂。如果你工作 10 年,还不知道如何处理每秒 10k 记录,别担心,你仍然能找到适合的工作。
- Airflow 就是垃圾。
- 机器学习项目极易失败,它们既复杂又难以实现。
- 我们的领域是新的。数据工程没有好书,去「做」就好。
关于生活
- 人们都会死去。你希望你的代码成为遗产吗?如果是的话,那就花很多时间在这上面,因为那是你的遗产!但是如果你像我一样,不希望代码成为遗产,那么不要太在意。
- 好人也写烂代码,聪明人也写烂代码,好的程序员和工程师也写烂代码。不要让代码质量成为你自身价值的因变量。
- 我喜欢技术和编程,因为技术是我的爱好。现在我的爱好就是工作,而工作毁了我的爱好。现在如果我想享受技术,就需要放弃爱好。或者我需要确定技术不再是我的爱好,并找到新的爱好。
其他
- 多年来,我构建了供多个团队和人员使用的大型平台和库。然而出于某种原因,我最引以为豪的代码是我使用的小脚本。
- 我找工作时,创建了 Linkedin 主页。但收到了乱七八糟的回复,就删了。现在我用 Linkedin 寻找其他候选人加入我的公司。一句话,Linkedin 就是一大堆噪音。我觉得它有价值的原因只是,现在我的部分工作就是制造噪音。
- 我变成了自己讨厌的人:在职业生涯中从事技术工作,但在现实生活中回避技术。也许这是因为年纪大了。
- /r/ExperiencedDevs 是一个非常酷的社区。