[译] 做为初级开发人员,我学会放下的 7 项真理

做为初级开发人员,我学会放下的 7 项真理

thumbnail

明年就是我正式受雇以编程为业的第 10 个年头了。十年了!除了实际工做以外,在我生命的近三分之二的时间里,我一直在开发网站相关的东西。我几乎不记清在个人生活中什么时候我不知道 HTML,这样的确想是有点奇怪。有些孩子学习演奏乐器或跳芭蕾,而我却在我童年的卧室里用代码创造了一个神奇的世界。前端

这是我往终端里打打奇怪文字就能按期伸手拿钱的头一个十年;回想这段时光,我打算花些时间和各位分享下做为开发者,在此间个人一些想法的转变android

对如今的初级开发人员来讲:也许你会在这里找到一些你如今相信的东西,并从中获得启发,去了解更多关于它的知识,以及为何这个话题如此多元化。 或许你会发现这篇文章很鼓舞人心,由于你已经远远超过了我在你这个阶段的水平。ios

对如今的高级开发人员来讲:也许你能够讲述一些有趣(或不起眼)的故事来分享你在初级开发人员的人生经历。git

我澄清一下,我认为初级开发人员是很棒的,由于仅仅是学习就须要很大的勇气。而这篇文章是关于我本身的经历和学习,并非要归纳全部初级开发者的想法或行为。程序员

我但愿你喜欢这篇文章而且能够产生一些共鸣。😄github

感谢 ArtemSara 对这篇文章的反馈!算法

做为初级开发人员,我学会放下的真理

1. 我是一个高级开发人员

当我申请第一份技术工做时,我才 19 岁。我申请的职位是“学生网站管理员”。这是一个很是棒的职位,由于你能够同时被视为学生和大师(英文里学生网站管理员这个单词能够拆成学生和大师,这里是做者的冷笑话)。如今每一个人都想成为一名工程师,由于工程师听起来更高级,但若是你问我,“大师”是作什么的。这么说吧,个人工做是编写 PHP 和 MySQL,维护咱们的 Drupal 网站以及构建一些内部工具。编程

由于我在卧室里编码已经有几年了,因此我十分确定我是有“多年的开发经验”的。因此当我被问及我有多少写 PHP 的经验时,我自信地回答,“3 或 4 年!”。后端

我觉得我对 SQL 了解不少,由于我能够作外链接。 😎服务器

当我谷歌搜索它时,3-4 年的经验意味着我应该可以赚钱。 💰

快进到我最近的工做,这是我在 5 年的学生和工做经验“结合”后获得的工做(我认为这和正常的工做经历是同样的)。 然而在那个时候,我基本上历来没有审查过个人代码。 我经过 ssh 部署到服务器并运行 git pull 指令。我很肯定我历来没有打开过 Pull Request。别误会,我在前两份工做中学到了不少很棒的东西,可是我历来没有真正和同一个代码库中的其余开发人员一块儿工做过。可是, 我申请了一个“高级前端工程师”的职位,获得了一份工做,并接受了。

在那里,我是一位成熟的 24 岁高级开发人员。

个人意思是,要不是我有丰富的经验,他们怎么会给我这个职衔呢,对吧?固然,是我使人印象深入的经历让我走到了这一步,人们应该听个人!我已是处在技术生涯的巅峰,我也是办公室里最年轻的开发者。

像老大同样。 💅

我最终学到的

并不是全部的经验生来平等。 我在卧室编码、学生时代的工做、计算机科学研究领域的工做以及在一家成长中的初创企业工做的经历都是颇有价值的经历。但它们并不都同样。在你职业生涯的初期,你在支援到位的团队工做一年所能学到的东西,要比你一我的(或是只有少许反馈的状况下)编程五年多十倍。若是你的代码从未被其余开发人员审查过,你将没法以最快的速度学习 —— 这是一个巨大的因素。

这就是为何导师如此重要。 和你一块儿工做的团队比你薪水中的几块钱更有价值。若是你能控制住本身的话,不要接受你将独自工做的初级职位!不要仅仅由于薪水就接受你的第一个角色(或者老实说,任何角色)。团队才是真正的价值所在。

我还了解到职位头衔不会给你“带来”任何东西。 这有点像,5 人团队的首席技术官不一样于 50 人或 500 人团队的首席技术官。即便头衔相同,所需的工做和技能彻底不一样。因此,仅仅由于我有一个“高级”职位头衔,也不能让我成为一名高级工程师。此外,等级头衔自己就有缺陷,很难跨公司比较。我认识到不要盯着职位头衔,或者说很重要的的是把它们做为一种外部验证的形式是。

2. 每一个人都写测试

在我职业生涯的前半段,我从事研究工做。具体来讲,我在一个公共资助的项目上工做了大约 3 年半,而后在一所大学担任 NLP 主席一年半。我能够告诉你的是:学术研究中的编程与作工程和业务中的编程是彻底不一样

大多数状况下,你不是在构建应用程序。你是在研究算法或解析数据集。或者,若是你正在构建一个应用程序,那么你的工做极可能是由公共资助的,这意味着其余人能够无偿使用,并且一般是开源的。某样东西是免费的话,这意味着,在很大程度上,你没有责任确保它老是彻底可用。

由于,嗯,这是免费的。

你也没有责任赚钱或产生结果,但这是一个彻底不一样内容的博客文章,讲述的是如何成为学术界的一名开发人员。 ✨

长话短说,我带着不少指望离开了学术界.

而那都是些有关业界运做的想法。我以为该有自动部署、拉请求和代码审查。这些都是极好的!终于实现了我求之不得的 代码质量!但我坚信,除了使用适当的标准最佳实践编写高质量代码以外,软件行业的每一个人都要写测试

呃哼。

因此想象一下,当我在一家初创公司上班的第一天,却发现没有任何测试时,我有多么的惊讶。前端没有测试。后端没有测试。总之就是不作测试。

没!有!测!试!

这里不只没有测试,并且彷佛没有人认为缺少测试有问题!我有点天真地猜测,不作测试,是由于你们人们不知道如何为 AngularJS 编写测试。若是我教他们怎么作,一切都会好的,咱们会开始测试。错了!长话短说,多年之后,咱们会在向代码中添加自动化测试方面取得巨大的进步,但这并不像我想象的那样简单。

但这并非由于人们不知道如何编写测试。

他们要么从未感觉过没有测试的痛苦,要么感觉过有过期测试的痛苦。虽然两件事我也从未亲身经历过。

我最终学到的

大量的公司和创业公司不多或根本没有测试。 在努力寻找适合产品市场的产品或者在为生存而战时,不少公司都忽略了早期的测试。即便是那些看起来很复杂、有赞助会议或开源代码的公司,它们中的不少仍然是一个庞大的、粗糙的、有着不多的测试的总体,它们须要你的帮助来改进。询问那些不打算招募你的开发人员,让他们告诉你代码库的状态。

没有一家公司有完美的技术设置。 每一个公司都有问题,每一个公司都有技术债务。问题是他们在作什么。咱们求职时不该该有不切实际的想法,以为是有工做要作的 —— 不然他们不会雇佣你 😉

对你缺少现实生活经验的话题过于执拗己见是至关傲慢的。 我给人的印象是这样一个无所不知的人,坚持认为必定有测试,但几乎没有任何实际经验。不要像我同样。有原则很重要,但也要开放,真正有兴趣理解他人的经历和观点。

3. 咱们远远落后于其余人(也就是“技术错失恐惧症”)

这个与单元测试的主题密切相关。尽管个人公司没有不少单元测试,但其余公司确定都作了,对吧?

我读了不少博客帖子。我在 YouTube 上观看了一些会议讨论。我一直在关注“橙色网站”。好像每一个人写的程序都功能精妙、质量一流、性能出色,并且动画精美,而我只是在这里修补一些东西,试图让它在个人最后期限以前及时工做。

我几乎崇拜我正在关注的全部其余公司,而且对我本身的公司和项目如此落后感到失望。

我最终学到的

许多会议讨论的是概念的证实,而不是现实世界的场景。 仅仅由于你看到一个关于特定技术的会议,这并不意味着公司在平常工做中使用了该技术,或者他们全部的代码都处于完美状态。一般,作会议演讲的人展现的是玩具应用程序,而不是真实的案例研究,区分这二者很重要。

处理遗留问题是彻底正常的。 可是说真的, 咱们很容易会以为有的公司没有遗留问题要处理。但在花时间参加会议,与顶尖科技公司的工做人员交谈以后,我发现,咱们都是同病相怜。哪一个公司没有他们试图彻底把控(或在某个时候不得不彻底把控)的庞杂的(堆积如山的)麻烦代码?有遗留的代码是正常的,学习如何处理遗留代码经常比从头构建应用程序教会你更多的东西,由于你将更多地接触到你还不理解的概念。

4. 代码质量最重要

早些时候,代码审查这事,我作起来是能够很不留情的

至少,我对编码风格很是挑剔。个人编码风格,刚好是 Airbnb JavaScript 风格指南的修改版本,但符合我我的的品味。当时我最不想看到的,就是别人的编码风格和我不同,好比缩进、格式化、命名。要是想在我不留一条注释的状况下经过我负责的代码审查,不只要用上读心术,还要有中彩票的运气。

想象一下在你 PR 下的 50 多条关于全部遗漏的分号评论!

由于个人眼睛像老鹰,这只老鹰想要那些高质量的分号。 🦅

(幸运的是,在盯着电脑看了不少年后,我再也不有鹰眼了,因此大家都幸免于难 —— #开玩笑)

我最终学到的

足够好就是足够好。 当谈到代码须要有多“好”时,收益会有必定程度的减小。代码不须要写得很是细致完美,也能够作到既完成工做任务,又不会在维护的时候出现大麻烦。一般,有些重复或冗长的代码更容易被其余人理解。另外,“好代码”不一样于“看起来是我写的代码”。

架构比吹毛求疵更重要。 虽然能够改进一小段代码,但日后引起更大问题的,一般是体系层面的东西。我应该更关注应用程序的结构,而不是早期的一小段代码。

代码质量很重要。 别误会我。可是代码质量并非我想象的那样,好比语言分析和格式化,或者在我最近读到的博客文章中提倡的任何风格。 🙈

5. 一切都必须记录在案!

当我进入个人第一家公司,老实说,这是我第一次大量使用别人写的代码。固然,在个人第一份工做中,我已经作了一点,可是我历来没有真正进入一个现有的代码库,并弄清楚到底发生了什么。由于那一次遇到这种问题的时候,我重写了全部代码,而不是试图弄清楚它是如何工做的。

无论怎样。

这都无济于事,由于它是由 Ruby 开发人员编写的 AngularJS 代码,或者说我是一个不知道本身仍是个萌新的萌新开发者。 🕵🏻‍♀️

那么,我如何处理这 300 行让我感受本身快要淹死的不熟悉的代码的呢?

JSDoc。无处不在。

我开始注释一切只是为了试图理解它。对我能够接触到的全部函数做注释。

我学习了全部那些奇特的专用于 Angular 的 JSDoc 语法。因而个人代码老是通常的代码两倍长,由于里面有许多注解和注释。 👌

我最终学到的

文件有时是谎话。 咱们很容易认为文档是万灵药。“咱们须要文档!” 我虽然没有得出结论,认为“仅仅由于文档工做很辛苦,并不意味着它不值得作”,但也明白到,你必须用正确的方式记录正确的事情。过多地记录错误的事情每每会致使停滞不前,这对于那些试图解决问题的人来讲一样使人困惑。

在适当的时候更关注自动化而不是文档。 测试或其余形式的自动化不太可能不一样步。所以,我尝试将重点放在用清晰的语言编写好的测试上,这样开发人员在编写代码时就可以看到项目如何使用工做代码工做。另外一个例子是用一些注释自动安装应用程序,而不是一个冗长而详细的安装指南。

6. 技术债务是坏的

若是你看完刚才那点就以为我很神经质的话,别急,这点我还没说呢!在我职业生涯的一段时间里,我认为任何我认为“混乱”的代码实际上都是技术债务。技术债务是一个有趣的术语,由于若是你让人们给你举一个例子来讲明它是什么,可能会获得许多不一样的解释。

所以,做为一个把任何一种杂乱的代码都视为技术债务的人,我当即试图以最严格的方式消除它!

绝不夸张地说,我曾经花了一个周末手工修复了 800 个语言分析错误。

这就是我有多神经质。

(免责声明:这是在自动修复成为一件事以前)

我最终学到的

杂乱无章的代码并不等同于技术债。 仅仅由于感受很差并不意味着这是技术债。技术债实际上在某种程度上减缓了你的速度,或者使某些变化变得困难或者容易出错。若是代码仅仅是有点乱,那就有点乱吧。整理它可能不值得我花时间。

持有一些技术债是健康的。 有时候咱们走捷径是由于咱们须要借时间,为此,咱们放弃了将来的速度。拥有一些真正的“技术债”的代码是能够的,只要你意识到你可能须要偿还这些债。若是你认为你的代码库没有技术债务,那么你极可能过度强调完美而不是交付。呜呜呜,说的就是我!

7. 资历高意味着最擅长编程

我从很小就开始编码,大概已经精通 for 循环 15 年多了。编程自己对我来讲就像呼吸同样。当一个解决方案显而易见时,我能够直接输入,而后代码就会随之而来。这就像写博客或电子邮件同样。我能够比其余人更快地编写解决方案,而且一般本身承担更复杂的项目。

很长一段时间,我觉得成为高级开发人员就是这么一回事。

难道不是吗?职位名称是高级开发人员,而不是“高级沟通者”或“高级项目经理”。我是真的搞不懂,要成为一名真正的资深开发者,还得学些什么其余技能。

我最终学到的

除了编程,高级工程师还必须发展许多技能。 与我所拥有的技能相比,我必须培养的技能数量简直是天文数字。从沟通和依赖管理到共享上下文、项目管理、评估,以及与非开发人员的成功协做。这些技能很难量化,须要大量的尝试和错误来纠正。

不是每一个人都会在职业生涯中成为“高级”。 资历高是多年积累经验的结果。然而,多年的经验是资历高的必要条件,但不是充分条件。它还必须是一种正确的经验,在这种经验中,你内化了正确的教训,并成功地将这些学习到的应用到将来。有时候,更大的教训可能须要一年或更长时间才能彻底被发现 —— 这就是为何多年的经验仍然重要,即便你是一个很是好的程序员。

在某些领域,咱们都还年轻。 不管你有多少经验,仍然有你知道的很少的地方。认可你所不知道的是填补这个空白并从更有经验的人那里得到帮助的第一步。


意外收获 — 我真的很喜欢这篇文章 关于成为一名高级工程师 。 若是你正在努力解决你职业生涯中的什么问题,而且发现本身在想“高级意味着什么?”,这将是一本很棒的读物。

若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索