发布于 2026-01-06 2 阅读
0

给初级开发人员的 11 条 Realpolitik 职业建议

给初级开发人员的 11 条 Realpolitik 职业建议

几周前就把这篇文章发布在我的博客上了。如果你感兴趣,我大约每周都会在daedtech.com上发布新内容。

如果你关注我多年(并且读了标题),你可能会想:“埃里克,你这个伪君子。”

但我们先别急着跟其他人讲这些内幕消息。以后有的是时间解释为什么我尽管不喜欢“初级开发人员”这个词,还是称他们为“初级开发人员” 。

所以,给我一根绳子让我上吊吧,敬请期待我对那些即将踏入编程生涯的人的建议。

这篇文章是什么,又不是什么

我今天想在这里分享一些技巧。但如果我写一篇名为“给初级开发人员的技巧”的文章,根据我随意编造的数字,我将成为第 79,667 个写过这个标题文章的人。

这些建议包括:

  • 要谦逊。
  • 养成记录开发日志的习惯,把犯的错误写下来以便从中吸取教训。
  • 阅读知名开发者撰写的备受好评的书籍。
  • 学习沟通技巧

抱歉,我得停下来了。无意冒犯写过这些东西的人(可能也包括我自己)。但我光是敲出这些稻草人论点就让我自己都觉得无聊透顶。

所以我不会写那篇文章。我保证。

相反,这篇文章将包含本博客和我的书的读者们所认为的我的个人观点,这种观点通常在极度愤世嫉俗和冷酷务实之间,具体取决于你的观点。

如果你还没读过我的文章,不妨看看我对企业层级的定义,以便理解我为什么把组织中的人描述为实用主义者、理想主义者和机会主义者。这或许有助于你理解我的观点,因为根据定义,我把所谓的“初级”开发人员(比如说行业经验不足两年的人)归类为理想主义者。

这关键的两年将决定你是会继续做理想主义者,还是会从理想主义者变成务实主义者,或者放弃理想变成务实主义者,又或者……好吧,我们还是别考虑那些投机分子了。那些初露锋芒的企业投机分子和那些寻求初级开发人员建议的人,他们的交集大概是空集。

给初级开发人员的职业发展建议

如果你正准备投身编程事业,首先,恭喜你。

说真的,你选择了一条收入丰厚且在我看来非常有趣的道路。我一直觉得职业编程就是“别人付钱让我解谜”。

作为一名所谓的初级开发人员(或有志成为初级开发人员的人),你大致是通过以下两条道路之一走上这条道路的:

  • 计算机科学或相关专业应届毕业生,正在寻找第一份企业工作。
  • 你拥有专业经验,但正在进行职业转型,或许会借助职业训练营的帮助。

所以,要么你站在俱乐部外面,倚着天鹅绒绳,急切地窥视着里面的风云人物;要么保安刚刚挥手让你进去,你心里想着:“保持冷静,保持冷静!”

你为了这一刻已经等待和努力了很久。用夜店来比喻太轻描淡写了,因为你不会花几个月甚至几年的时间去排队等着进夜店。(我的意思是,至少我是这么认为的——我去任何叫“夜店”的地方的日子都已经是遥远的回忆了,我得把车停在路边才能追上。)

你很感激能找到第一份工作,并被真正的软件开发人员群体接纳。我明白,你的热情很有感染力,我为你感到高兴。

但不要让这种兴奋蒙蔽了你的双眼。因为它会,而且对大多数人来说确实如此。

为了理解我的意思,我们来看看具体技巧。

1. 尽量避免选择职位名称为“初级开发人员”或类似字样的工作。

我写的那篇文章(我在引言里也附上了链接)的标题是《初级开发人员:你(几乎)永远不应该接受的头衔》。剧透一下:“几乎”指的是当你不得不付房租,别无选择的时候。

我已经专门写过一篇博文详细阐述这个问题,你可以去看看,所以这里我就不赘述了。简单来说,“初级”在你的职称中相当于“试用期”的同义词。作为正式职称,当雇主给你贴上这个标签时,他们实际上是在说:“我不信任这个人能胜任工作,在你被认可之前,你也不应该信任他。”

把这么大的权力让渡给雇主,实在太不公平了。

如果你唯一能找到的工作(或者你真正喜欢的工作)就包含这个职位,那我不会劝你放弃。但我建议你把它看作是相当于他们没有医疗保险或者支付的薪水低于市场水平。

有很多工作的入门级职位名称就是类似“软件工程师”之类的。如果可以的话,就找一份这样的工作吧。

2. 高级开发人员:信任,但要核实

说到那些应该只在小学或中学使用的头衔,我们来聊聊高年级的吧。我记得,在我找到第一份入门级工作的时候——那还是美国内战时期——我对那家公司的软件专家们简直崇拜得五体投地。

我工作才一周,而他们当中有些人已经工作了20年甚至更久。哇!

现在回想起来,那些人的确是软件专家。我确实从他们身上学到了很多,至今我仍然心存感激。

但他们是编程界的皇室成员吗?当然不是。

他们出色地完成了工作。但我那近乎狂热的钦佩之情,更多地反映了我自己的想法,而不是对他们的赞赏。

这种错位的崇拜发生在一个资深开发人员确实很擅长本职工作的公司里。但在很多地方并非如此——那些所谓的资深开发人员实际上只是我所说的“专家级新手”

所以,作为职场新人,你要意识到你很有可能从资深工程师那里学到很多东西。但是,无论如何,千万不要以为他们完美无缺。他们当然也会犯错,甚至可能存在很多缺陷。

3. 在大家都还期望你提供帮助的时候,尽可能多地寻求帮助

说到高年级学生和初中生之间的关系(记住我们实际上讨论的不是高中),你要明白,人们会期望你问很多问题。他们甚至会鼓励你这样做。

但这种情况不会永远持续到你的职业生涯结束。

就我个人而言,无论是作为管理者还是员工,我都认为每个人都应该多问问题。但这篇文章是关于现实政治的建议,遗憾的是,并非所有人都这么想。事实上,相当一部分员工将提问和寻求帮助视为软弱的表现。

作为一名“初级开发人员”,你在办公室政治中本来就处于弱势地位。所以,要充分利用这一点,尽可能多地提问,寻求尽可能多的帮助。

向团队中的每个人征求意见,包括所有问题。请其他人帮你审查代码,并与你结对编程。如果你在设计模式、框架或架构概念方面遇到困难,请其他人帮你用白板演示。

他人的帮助极其宝贵,而且以后不会总是像现在这样便宜。所以,尽量批量购买。

4. 要明白,软件行业的组织结构图比其他任何组织结构图都要……奇怪得多。

软件行业的人似乎特别喜欢给自己排名。我们这个群体普遍认为,整个软件行业,包括两千万人,完全可以按照“编程水平最差”到“编程水平最高”的顺序排列。这大概跟你在 Stack Overflow 上的声誉有关(后面会提到游戏化机制)。

因此,企业已经演变成一种困惑地站在一旁,试图逗我们开心。这是什么意思呢?

想想看,公司的组织架构图上,其他个人贡献者可能只有两层“级别”。你是“销售员”或“高级销售员”。你是“社交媒体达人”或“高级社交媒体达人”。再往上,你很可能就属于管理层了。

但软件工程师呢?切!

你们有软件工程师 I、软件工程师 II、软件工程师 III、软件工程师 IV 和软件工程师 V。然后,当我们把所有《洛奇》电影里的桥段都模仿完了,我们就从高级软件工程师 I、高级软件工程师 II、首席软件工程师 I、首席软件工程师 II 等重新开始。

软件行业的组织架构图可以深达十层,甚至包含十个独立贡献者职位,而且丝毫没有讽刺意味。此外,它们还囊括了企业界唯一一个“我们不招人”的职位。

所以,你要明白,你进入组织架构图时,就如同进入了一个充满自我挫败感和怪异现象的深渊。

5. 用论据和证据来支持你的观点

换个话题,我们来聊聊如何脱颖而出,最终获得晋升。或者,即便不能晋升,至少也要聊聊如何用你的观点和建议赢得认可。

具体来说,要像高中辩论俱乐部那样,习惯于运用论据和证据来支持自己的观点。

如果你参加的代码审查足够多,你就会习惯于重复论证,以及房间里声音最大的人“赢得”争论。

  • 制表符还是空格?
  • 约定还是配置?
  • 要不要采用TDD?

很多时候,团队会用“我在这里待了 20 年,我说了算”或者“和史蒂夫争论让我生不如死,所以就用空格吧”来解决这些问题。

你不可能总是赢,但你绝对可以改善讨论氛围,让天平向你倾斜。你只需要学会如何论证自己的观点。

寻找与你观点一致的专家意见、书籍和白皮书(如果观点不一致,则修正你的观点)。尽可能构建原型来验证你的观点。进行时间测试或设计实验来证明你的正确性。

总的来说,要学会用“这里有一些文章支持我的观点,顺便说一句,我做了一个概念验证,证明我是对的”来反驳源源不断的意见。

6. 对虚荣指标和职业游戏化保持高度警惕

还记得我之前半开玩笑地建议我们可以根据 Stack Overflow 得分给地球上所有程序员排名吗?嗯,Stack Overflow 就是一个很好的例子,它体现了我们行业中一把非常非常锋利的双刃剑:游戏化。

你有 15 万 Stack Overflow 积分吗?太棒了!真了不起!有了这些积分再加 2 美元,你就能在加油站买到一瓶汽水了!

除了以上两美元,你还可以添加以下一些东西,帮助你买到原本就能负担得起的同款汽水:

  • 过去 365 天每天都向 Github 提交代码,赢得了“铁杆程序员”的称号。
  • 在 20 个用户组和会议上发表演讲,并在您所在的地区获得 JFK 演讲奖。
  • 在过去的 52 周里,每周都在社区网站上写一篇博客文章,获得了沃尔特·克朗凯特徽章。
  • 你的雇主真诚地感谢你每周工作 50 小时而不是 40 小时。

获得认可的感觉很好,这一点毋庸置疑。

但我们软件行业有一种独特而令人遗憾的倾向,那就是把这些东西本身当作目标,而不是实现目标的手段。我在这篇博客里多次谈到这一点,但如果你打算去做一件需要投入大量时间、精力、劳动和奉献的事情,问问自己为什么要这样做。不要陷入毫无意义的竞争,也不要为了蝇头小利而去做。

7. 无论是整个软件行业还是你的公司,都不是精英统治,因为精英统治根本不存在。

既然我们都在戳破软件行业吹嘘的那些奇奇怪怪的泡沫(就像戳破丑陋的小丑作品一样),那就顺便聊聊这个行业奉行精英主义的说法吧。如果GigantiCorp雇佣了某人并支付更高的薪水,那么这个人就是有才华的。如果GigantiCorp支付的薪水更低,或者根本不雇佣这个人,那么这个人就不是那么有才华的。

一个热衷于用分数、徽章等等来提升自身排名的行业,显然预设了这种排名是合理的。提高你的所有分数,学习算法和数据结构,在面试中脱颖而出,投入额外的时间,程序员排名的宇宙之神就会觉得应该奖励你。对吧?

不,其实不是。

作为一个行业,我们甚至无法就“优秀代码”的定义达成共识,更遑论制定客观的评估方法。我们口口声声说要奖励绩效,但实际上我们提拔的大多只是那些熬到被解雇为止的人。

我们对行业内几乎所有事情都存在分歧,但我们都一致认为,我们基本的人才评估机制——招聘——已经失效了

所以,认为精通编程就能获得晋升和荣誉的想法?嗯,未必如此。

8. 有些结果比其他结果更好,但对于“好的代码”究竟意味着什么,甚至没有人能达成共识,更遑论真正做到了。

让我们深入探讨一下我在上一节中提到的关于优秀代码的内容。我们一起浏览一下定义“优秀代码”的文章,看看它们在引入“优秀代码”的概念时是如何阐述的。

我链接的第一个搜索结果含糊其辞地将其定义为这样:

首先想到的是 可维护性——如果其他开发者无法理解、维护和扩展,那肯定不好。然后,其他因素也浮现在脑海中: 效率、 优雅性 (简洁、正确地使用语言结构和环境功能)、 模块化、良好的 面向对象设计……

不错,伙计。它可以有很多种解释。我们来看看第二条,确保大家都同意。

我们经常讨论编写我们认为好的代码所依据的原则——测试驱动开发、面向对象编程、  SOLID原则、  DRY原则、迪米特法则——等等。

不错!这和第一个结果的词项完全不同。我们来看看第三个结果,以决出胜负:

好的代码结构合理,如图所示。对于试图理解代码的人来说,代码块的起始和结束位置应该一目了然,这样代码库的逻辑就清晰明了,易于理解。

太好了——看来我们在这方面达成了一致!

如果你没听出来,我这话里带了不少讽刺意味。去谷歌搜一下“好的代码”,你会发现搜索结果完全没有一点重合之处。

这并不是说“好的代码”是一种虚无主义的相对主义泥潭。

更新耗时越短越好。修改时不易出错的代码比容易出错的代码要好。用更少的代码完成同样的功能也比用更多代码要好。

但你不要抱有“好代码”存在某种普遍定义的想法。这大多只是人们基于大量零散的实践经验和少量的实证研究而对你指手画脚而已。

9. 不要盲目学习技术——要有计划

哦,这真是个好例子!你有没有在社区网站上看到过有人说:“我要学习{语言/框架/范式},让自己变得更全面?”

我曾经就是那样的人。既是读到这句话的人,也是说这句话的人。我记得有一次发推文说:“我这周末要学F#!”

但是,请听我的,不要学我(以前)的做法。不要仅仅因为某个技术栈/技术/语言/框架就去学它。

哦,我知道。人们很容易会想,“但是行业正在朝着那个方向发展,而且现在人人都懂科技。这其实就是对我未来的投资。”

不,不是的。请相信我。

现在,我想我该开始学习F#了。

— Erik Dietrich ( @daedtech ) 2013年2月12日

我大概用过 10 种编程语言进行专业编程。如果再加上持久化介质、框架等等,我的经验之丰富简直无法用语言来概括。

我从中受益了吗?当然,我想在某种程度上是的。

但是,我学到的每一项新知识都能让我成为更优秀的程序员吗?我拥有如此丰富的智慧和远见,仅仅是因为我用过 Python(一种包含大量空格的语言)和 C/C++/C#/Java/Perl/汇编/Visual Basic/PHP/Ruby/Javascript(这些语言不包含空格)进行编程吗?我是否因为“哇,如果空格在语言中也算作标记呢——简直醍醐灌顶!”这样的顿悟而获得如此大的启发?

学习新技术当然没有 错 。但这样做也并不一定 正确 

随着职业生涯的推进,你会发现很多程序员喜欢广博精深地学习最新技术,试图让自己的技能面面俱到。要抵制这种冲动。除非你能清晰地阐述转换方向如何有利于你的职业发展,否则就应该继续精进你目前的工作。

10. 算法面试和面试练习是一场竞相降低标准的竞赛

你不用在程序员的推特圈里逛太久,就能看到当天最火的“软件行业招聘出了问题”的推文。这些推文总是会提到经典的“算法和数据结构”或者“白板面试”。但同样地,你也不用费劲就能找到“破解”这类编程面试的最新秘诀。

为什么会这样?为什么会出现这种二元对立?

这种现象如此普遍的原因在于,我称之为“硅谷企业”(即所谓的FAANG公司)的巨头引领潮流,而规模较小、资历尚浅的新兴企业则纷纷效仿。许多业内人士因此忍受这种现象,因为无论这种做法是否愚蠢,它都阻碍了他们获得一份令人艳羡的工作。

但批评者认为,这种做法本质上是一种毫无意义的入会仪式。事实上,FAANG(Facebook、Apple、Google、Netflix)旗下“G”公司的人力资源主管曾形容他们当时的面试流程“完全是一团乱麻”。批评者指出,无论你多么渴望加入某个组织,入会仪式仍然是愚蠢的。

但我想从另一个角度来看待这个问题。暂且不论这些面试本身的好坏,它们本质上是把你塑造成一个乞求者,而那位从业两年、负责考核的“老手”则扮演着你的上级角色。所以,即便你“通过”了面试,你也只是从庞大组织的最底层进入,因为你刚刚自愿参加了一场略显低级的入职仪式。

要明白这种动态的本质。专业人士不会让自己被蒙蔽。

11. 热爱你的工作,但要反击任何利用这份热爱来伤害你的人。

多年前,我看过一个让我受益匪浅的视频,名为《驱动力:关于我们动力的惊人真相》。视频的核心观点是,除了金钱(在达到一定的最低收入门槛之后),我们更渴望的是精通、自主和目标感。我们渴望感受到自己在不断进步,拥有自由去做有意义的工作,并觉得自己正在为更宏大的事业做出贡献。

这一点引起了我的共鸣,但我同时也观察到,企业往往会利用这一点来对付我们。例如,从满足员工对精通的渴望到用毫无用处的表扬性福利来代替额外薪酬,这之间并没有太大的差别(参见游戏化部分,第6页)。

最后,我还要给你们一些建议,那就是:务必对此保持警惕。

如果你的兴趣爱好和我相似,你会发现开发软件——也就是数字技术——既有趣又有成就感。你还会发现,当你拥有一份既有意义又收入可观的工作时,生活会非常美好。

你还能要求什么呢?

结果是,有时候少一些,有时候多一些。你的公司可能给你很高的薪水,你也可能很喜欢你的工作。

但永远不要忘记你自身的价值,也永远不要让任何人说服你,热爱工作反而会降低工作的价值。不要接受诸如“热爱工作本身就是一种回报”之类的加薪说辞,也不要把毫无价值的福利和“企业文化”与实际的薪酬待遇混为一谈。

这并不是说你需要时刻保持唯利是图的状态,为了每一分钱都斤斤计较。如果你对工作、薪酬以及其他一切都满意,那就太好了!但要确保你主动选择不去争取,而不是被人利用你对工作的热爱而使之成为谈判的绊脚石。

临别赠言:玩得开心!

办公室政治真让人厌烦。我对此深有体会,因为我曾在企业界摸爬滚打多年,之后又做了几年管理顾问。我对它习以为常,也十分了解,但别把这和享受混为一谈。我写了一整本书,最终目的就是为了阐明一条能够最大限度减少办公室政治的职业道路。

但即便这很糟糕,即便你可能不想面对它,它依然存在。如果你不去“应对它”,它就会反过来“应对”你。所以我写了这篇文章,希望能为新开发者们提供一些不同于主流建议的认知。

你需要意识到这一点。

但不要忘记一个关键事实:你选择了一条令人兴奋、收入丰厚且能提供非常有成就感的工作的职业道路。

所以,要了解办公室政治和其中的运作机制——尤其是我们这个行业里那些特别奇特的现象。但也要了解到足以避免被人占便宜的程度。之后,你就可以尽情享受这份在我看来非常棒的职业选择了。

如果你想向读者提问,可以在“问我”页面提问。

文章来源:https://dev.to/daedtech/11-realpolitik-career-tips-for-junior-developers-5a4j