初级的七个“绝对真理”,我们必须从中学到



十年即将来临,因为我专业从事编程工作。 十岁! 除了正式工作,我几乎有三分之二的时间都在互联网上创造了东西。 我几乎不记得我不懂HTML的岁月:如果考虑一下,这甚至会很奇怪。 一些孩子学习音乐或芭蕾舞,而是我在托儿所里创造了神奇的世界,并在其中编码。

考虑到最初因在终端中输入奇怪的角色而经常获利的十年,我想分享一些关于我的想法在多年来的工作中发生了什么变化的观察

也许现在的大三学生会在这里找到他们的一些信仰,并从另一侧来看他们。 或者他们意识到自己已经摆脱了这一点,所以他们走得比我在您现阶段要走得多。

当前的老年人可能还想分享一些有趣的(并且有点丢脸)的故事,这些故事是关于他们从初中的经验中学到的。

为了清楚起见,我强调大三学生是很棒的 :只是出现在工作中学习新事物-这已经需要大量的勇气。 本文是关于我自己的经验和培训的。 我完全不概括所有初级开发人员都是以这种方式思考或行为的。

希望您喜欢这篇文章,并提醒您过去或现在的事情。

感谢ArtyomSarah的反馈!

需要从中学到的初中的绝对真理


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


当我第一次尝试找到工作时,我只有19岁。 这项工作被称为“学生网站管理员”。 这对于这项工作来说是一个非常令人惊讶的名称,因为您同时被认为既是“学生”又是“大师”。 如今,每个人都想成为“工程师”,因为它听起来更时尚,但对我而言,“大师”对于这种工艺来说是个更好的词。 无论如何,我的工作是编写PHP和MySQL,并在Drupal中维护我们的网站,以及创建一些内部工具。

从那以后,我在卧室里编码了几年,因此我确信这些年算作“经验年”。 因此,当被问及我有多少PHP经验时,我自信地回答:“ 3或4年!”

我以为我对SQL了解很多,因为我可以进行外部联接(外部联接)。

当我用谷歌搜索时,我发现三到四年的经验意味着很多钱。

让我们继续我的上一份工作,这是我在五年的学生和专业经验(我认为是正常经验)结合之后获得的。 那时,我的代码几乎从未进行过代码审查。 我在服务器上运行ssh并进行了git pull。 我确定我从未见过任何拉取请求。 不要误会我的意思,在前两篇著作中,我学到了很多神奇的东西,但我从未与同一代码库中的其他开发人员合作过。 不过,我申请了“高级前端工程师”的职位,收到了一份录取通知书并接受了这个提议。

因此,我在24岁的成熟时成为高级开发人员。

毕竟,如果我不是真正的高级开发人员,他们不会给我这个职位,对吗? 当然,我令人印象深刻的经历使我到达了顶峰,所以人们应该听听我! 我正处于技术职业的顶峰时期,而在办公室里最小的那个。

就像老板一样

我终于明白了什么


并非所有的经历都是一样的 。 我在卧室里编码的经验,是一名学生程序员的工作,与计算机科学的科学研究不同,在新兴企业中的工作也有所不同。 这是不同的经历。 在职业生涯的第一年,在技术支持方面工作了一年,您可以在单个项目中学习五年多(或反馈最少)十倍。 如果您的代码从未被同事查看过,则培训会慢很多

这就是导师如此重要的原因 ,而您的团队比两美元的薪水差距要重要得多。 不要满足于独自工作的初级职位! 并且不要仅根据薪水选择第一份工作(坦率地说,是任何一份工作)。 团队才是真正的价值所在。

我还了解到,职称本身并不意味着任何东西 。 CTO职位可以是5人,50或500人的团队。 尽管名称相同,但这是完全不同的工作。 因此,我的“高级”头衔根本没有使我成为一名领先的程序员。 另外,等级标题固有地有缺陷并且难以比较。 我意识到重要的是不要卡在名称中,也不要将其用作外部检查。

2.每个人都写测试


我职业生涯的前半段是在研究领域工作。 特别是,在国家资助的一个项目上执行三年半,然后在大学自然语言处理系工作一年半。 我可以说一件事: 科学环境中的编程与商业行业中的编程完全不同

在大多数情况下,您不是在构建应用程序。 您在研究算法或分析数据集。 或者,如果您正在创建应用程序,则很可能该工作是由国家资助的。 这意味着它对他人免费,并且通常是开源的。 而且当某件东西是免费的时,这意味着通常您不负责确保它始终可用。

因为...好吧,它是免费的。

您也不对财务收入或特定结果负责。 但是,科学机构中程序员的工作是另一篇完全不同的文章的主题。

简而言之,我对学院寄予了很高的期望。

对行业运作方式的期望。 自动部署。 拉取请求和代码审查。 太好了! 最后,我梦about以求的代码质量 ! 但是,除了具有适当标准和最佳实践的高质量代码外,我坚信在软件行业中,每个人都会编写测试

嗯...

因此,想象一下当我在启动的第一个工作日没有找到任何测试时感到惊讶。 界面中没有测试。 后端没有测试。 完全没有测试。

恩达 没事 零 NaN。 缺少测试是一种现象。

不仅没有测试 ,而且因此没有人似乎有问题! 出于天真,我建议原因是因为人们根本不知道如何为AngularJS编写测试。 如果我教他们,一切都会顺利进行-我们将开始进行测试。 错了! 总的来说,仅在几年后,我们在代码中实现了自动化测试,这并不像我想的那么容易。

但这不是因为人们不知道该怎么写。

他们要么从未因缺乏测试而遇到问题,要么就因存在测试而遇到了问题。 我从未遇到过的两件事。

我终于明白了什么


许多公司和初创企业几乎没有测试 。 为了市场或生存而战时,许多公司在早期阶段就忽略了测试。 即使是赞助会议或开源的新潮公司,也经常通过最少的测试来制造笨拙的整体。 只需向开发人员询问代码库的状态。

没有一家公司拥有理想的技术安装 。 每个公司都有问题,每个公司都有技术债务。 问题是他们如何处理它。 申请工作时,您需要清楚地了解那里没有一切,否则他们将没有空缺。

对您缺乏实际经验的事情过于自信,这很自大 。 我扮演了一个“万事通”的角色,坚持广泛地执行测试,几乎没有经验,如何真正大规模地执行此测试。 不要重复我的错误。 有原则很重要,但开放和真正感兴趣才能感知他人的经验和观点仍然很重要。

3.我们是如此落后(也就是利润损失综合症的技术版本)


这与单元测试的主题密切相关。 我的公司没有进行测试,但是, 其他所有公司当然都进行了测试,对吗?

我读了一堆博客文章。 我在YouTube上观看了很多会议演讲。 该死的,我一直都在读“那个橙色的网站”(可能指的是Hacker News-大约。 跨]。 每个人似乎都在编写具有出色性能和新潮动画的超精巧,高质量的应用程序,而我只是在制作补丁,以赶上最后期限。

我从字面上看都崇拜我所见过的所有其他公司,对我的公司和项目落后于他们多少感到失望。

我终于明白了什么


许多会议演讲都涵盖了概念验证,而不是实际场景 。 只是在会议上有关技术的故事并不意味着该公司在日常工作中使用该技术,也不意味着其所有代码都处于完美的状态。 会议演讲者通常会展示玩具应用而不是真实的应用:区分它们很重要。

与Legacy合作是完全正常的 。 不,严重的是,很容易想象其他公司没有遗产。 但是在花了一些时间在会议上,与顶级公司的工作人员交谈之后,很明显,我们都在同一条船上。 试图找到一家公司,他们没有试图在PHP或Ruby中拥有庞大的整体实力(或者应该已经驯服了)? 旧版代码很常见,与之相比,使用旧版代码通常可以教给您更多的知识,因为您可以使用尚不了解的概念进行更多工作。

4.代码的质量非常重要。


在过去,我可以进行非常艰苦的代码审查

至少我对风格很挑剔。 原来,我的样式是Airbnb JavaScript样式指南样式的修改版本,但它符合我的个人喜好。 缩进,格式,命名之类的东西-上帝禁止,您将以不同的方式进行操作。 没有我的任何评论就完全不可能进行代码审查:您将必须学习阅读思想的技能,此外还要赢得彩票。

向您的拉取请求提交50多个评论,列出您错过的所有分号!

因为我的眼睛像老鹰一样-这只老鹰想要获得所有高质量的分号!

(幸运的是,在计算机上工作了多年之后,鹰的视觉消失了,所以现在您不必担心-#笑话

我终于明白了什么


足够好-就足够了 。 在接近理想代码时,适用收益递减法则。 该代码不应该是完美的,但要足够干净,可以正常工作,而不是为了支持而造成的彻底灾难。 通常,过于重复或太冗长的代码对于其他人来说更容易理解。 另外,“好的代码”与“看起来像我自己编写的代码”不同。

建筑比挑剔更重要 。 尽管某些方面可以改进,但是主要问题是体系结构顺序。 最好立即专注于应用程序的结构,而不是专注于单个小代码。

代码的质量很重要 ,不要误会我的意思。 但是代码的质量不是我所想的。 这不是我阅读的上一篇文章中描述的棉绒,格式或任何样式。

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


当我来到第一家真正的公司时,我第一次是遇到一个奇怪的代码。 当然,我在第一份工作中就与其他人的代码一起工作了一点,但是我不必去研究现有的代码库,而是去了解到底发生了什么。 这是唯一的一次,我重写了所有代码,而不是试图了解其工作原理。

无论如何,这是由Ruby开发人员编写的AngularJS代码这一事实完全没有帮助,我是一个大三的人,他把自己想象成一个大四。

那么,我如何处理300行不熟悉的代码使我感到自己被淹死了?

JSDOC。 随处。

我开始评论一切 ,以使之有意义。 我可以使用的每个功能的注释。

我了解了所有这些花哨的特定于Angular的JSDoc语法。 我的代码总是两倍长,因为它有太多的文档和注释。

我终于明白了什么


文档有时会说谎 。 人们很容易认为文档解决了所有问题。 “我们需要码头!” 尽管文档是艰苦的工作,但仍需要完成。 您只需要以正确的方式记录正确的事情。 通常,过多记录不必要的东西会阻止试图解决实际问题的人。

在适当的地方,专注于自动化而不是文档 。 测试或其他形式的自动化不太可能失去相关性。 因此,我尝试着重于用清晰的语言编写好的测试,以便其他开发人员可以看到该项目如何与工作代码一起工作。 另一个示例是使用一些注释自动执行应用程序的安装,而不是冗长而详细的安装指南。

6.技术债务欠佳


如果在最后一点之后您认为我很神经质,请阅读此内容! 在我的职业生涯中,有一段时间,我认为任何肮脏的代码都是技术上的责任 。 技术债务是个有趣的名词,因为如果您举个例子,他们会说完全不同的话。

由于我认为任何“混乱的”代码都是技术职责,因此我立即尝试以最大的力度消除它!

有一次,我花了一个周末手动纠正了800条棉绒错误。

那就是我的神经质。

(免责声明:这是在自动更正出现之前)。

我终于明白了什么


杂乱无章的代码与技术职责不同 。 仅仅不完善的条件并不意味着它是技术义务。 技术债务实际上会以某种方式减慢您的速度,或使某些类型的更改变得困难或易于出错。 如果代码有点混乱,那就有点混乱了。 清洁可能不值得您花费时间。

承担一些技术债务是正常的 。 有时,我们会缩短路线,因为我们需要紧急进行工作,为此,我们将来会“借”一部分时间。 如果您承认自己可能必须退还代码片段,那是正常的“技术债务”是很正常的。 如果您认为自己的代码库没有技术债务,则很可能您高估了外观 ,从而不利于交付 。 而我的上帝,我怎么高估了他!

7.程序员的职位越高,他的编程就越好


在很小的时候就开始编程,我成为了循环的真正专业人士,并在15年的时间里将它们磨练为自动化。 编程本身对我来说就像呼吸。 当解决方案显而易见时,我可以不停地打印代码,例如博客或电子邮件中的文本。 我可以比其他解决方案更快地编码解决方案,并且通常进行更复杂的项目。

长期以来,我认为这是首席开发人员的本质。

一切似乎都融合在一起吗? 毕竟,该职位称为“首席开发人员”,而不是“首席沟通者”或“首席项目经理”。 我真的不明白要成为真正的“领导者”还需要发展多少技能。

我终于明白了什么


除编程外,高级工程师还必须掌握许多技能 。 与职业生涯的开始相比,我不得不发展天文数字的技能。 沟通,依赖性管理,上下文共享,项目管理,评估项目交付时间以及与非开发人员的同事进行协作。 这些技能很难量化,需要大量的反复试验才能正确学习。

并非每个程序员都会成为“高级” 。 这是多年积累经验的结果。 然而,多年的经验是主人必不可少的条件。 您必须已经在正确的经验中学习了正确的课程,并能够在将来成功应用这些知识。 有时,重要的课程将在一年或更晚之后出现-这就是为什么即使您是一个非常好的程序员,多年的经验仍然很重要。

在某些地区,我们仍然是初级 。 无论您有多少经验,总有一些地方您所了解的很少。 认识到您在特定领域的无能是填补这一空白并从经验丰富的同志那里获得帮助的第一步。


奖励 :我真的很喜欢文章“成为领先的程序员” 。 好东西,如果您在什么时候想知道这项工作意味着什么。

Source: https://habr.com/ru/post/zh-CN455459/


All Articles