为了给这十年来一个总结,我想分享一下我在过去的十年当中作为一名开发者的心路历程。 对于现今的初级开发者来说,或许他们会在这篇文章里找到一些能够引起他们共鸣的东西,或者让他们深受鼓舞的东西。对于现今的高级开发者来说,或许他们也有一些有趣的故事可以分享,因为他们都是过来人。 我在 19 岁的时候开始应聘我的第一份开发工作,当时的那个职位叫作“Student Webmaster”。这个职位很有意思,因为如果你拿到这个职位,就变成了“学生”和“大师”的结合体。不过现在的人更希望成为“工程师”,因为这个头衔听起来似乎更有发烧友的味道。我当时的工作是负责 PHP 和 MySQL 方面的开发,维护 Drupal 网站,以及开发一些内部工具。 因为在孩童时代就开始写代码,并且我很肯定它们可以作为正式的经验,所以当被问及我有几年 PHP 经验时,我非常自信地回答道:”三到四年“! 我当时觉得我对 SQL 应该懂得挺多了,因为我都会用外连接了。 在当时,三到四年的经验意味着我可以拿到比较可观的薪水了。 五年之后,我开始了最近的这份工作。即使是到了这个时候,我的代码都没有给别人评审过。在部署代码的时候,我直接从 Git 上拉取代码,然后通过 SSH 部署到服务器上。我敢肯定我几乎没有提交过 PR。不过不要误会,其实我在头两份工作中学到了很多有用的东西,只是我从来没有真正地和其他开发者一起开发过同一个代码库。我就是这样去申请了”高级前端开发“的职位,并拿到了 offer。 就这样,我成了一名 24 岁的高级开发者。 我的意思是,如果我撑不起这个头衔,他们也不会给我这个职位的,对吧?我很确信的是,我之所以能够拿到这个职位,是因为我过去的那些令人印象深刻的经历。我感觉自己达到了职业生涯的巅峰,我是公司里最年轻的开发者。
我的职业生涯的前半部分主要从事学术方面的工作。具体地说,有三年半时间花在了一个由公共基金支持的项目上,然后一年半是在大学里。我可以告诉你:学术界的编程与业界的编程其实完全不一样。 你的大部分时间并不是在开发应用程序,而是在写算法或者解析数据集。如果凑巧你是在开发应用程序,那么它很可能也只是个公共项目——要么是免费的,要么是开源的。免费的项目意味着你不一定会全力以赴把它做到完美。 毕竟,天下没有免费的午餐。 后来,我带着很多期望离开了学术界。 我期望能够在业界看到我想看到的东西,比如自动化部署、PR 和代码评审,以及高质量的代码!我坚信业界的每个开发者都会写测试代码。 但是,在我加入第一家初创公司的那一天,居然没有看到任何测试代码。前端没有,后端也没有,什么测试代码都没有。 更糟糕的是,没有测试代码也就算了,居然没有人认为缺少测试代码是个问题!带着一点点的天真,我就当是他们不知道如何为 AngularJS 编写测试代码吧。如果我教他们怎么写测试代码,或许这个问题就解决了吧。但我错了!几年之后,我们在添加自动化测试代码方面有了长足的进步,但与我最初想象的并不一样! 他们之前不写测试代码并不是因为不知道该怎么写,而是他们体会不到没有测试代码的痛苦,或者不堪忍受维护遗留测试代码给他们带来的痛苦。
这个与上一个话题有点关系。我们公司没有人写单元测试代码,但是其他公司的人会写的,对吗? 我读过很多博文,在 YouTube 上看过很多大会演讲的视频。好像他们每个人都能做出非常复杂且质量很高的应用程序,不仅性能好,还非常有趣。而我呢,能够赶在截止日期之前把能用的东西拼凑在一起,并让它们运行起来就算不错了。 基本上,我对这些公司充满了崇拜之情,但同时又对自己的公司和项目落于人后而感到失望。
在以前,我对代码评审的要求是很严格的。 至少,我对代码风格是十分挑剔的。缩进、格式化、命名——你最好要做得和我一模一样。代码评审不留下任何评论的几率跟中彩票的几率一样低。 想象一下,一个 PR 里有我的 50 多个评论,都是因为缺少分号! 因为我有一双老鹰似的眼睛,不会漏掉任何一个分号!
在加入第一家公司时,我需要处理大量别人留给我的代码。我在干第一份工作时有做过一些类似的事情,但后来都没有真正深入到已有的代码库,弄跟无头苍蝇一样到处乱撞。我宁愿重写所有代码,也不想一点一点去理清楚老代码是怎么写的。 但即使是这样又能怎样?一个 Ruby 程序员写出来的 AngularJS 代码,或者一个自认为自己很厉害的初级程序员写出来的代码,别人照样看不懂。 所以,我开始在所有可能的地方添加注释,给所有函数加了注解。 我学会了所有与 Angular 相关的 JSDoc 语法。我的代码行数因此增加了一倍,因为有太多的注释。
在很长一段时间里,我认为任何“混乱”的代码都是技术债务。技术债务这个东西很有意思,如果你让不同的人例举技术债务的例子,他们会给出不同的答案。 因此,作为一个将“混乱”代码视为技术债务的人,我会立即使用最严格的方式消除这类代码! 我曾经花了一整个周末修复了 800 个 linting 错误(当然是在出现自动修复工具之前)。 可见我是一个多么神经质的人。
因为从小就写代码,编程对我来说就像呼吸一样。写代码就像在写博客或者邮件,通常比别人更快给出解决方案。 在很长一段时间里,我一直在思考这个问题:这就是成为高级开发者要做的事情的吗? 难道不是这样吗?因为头衔是叫“高级开发者”,又不是叫“高级沟通者”或者“高级项目经理”,不是吗?我不知道要成为高级开发者,除了编程还需要其他什么技能。
原文链接: https:///blog/2019/06/03/absolute-truths-unlearned-as-junior-developer/ 你也「在看」吗?👇 |
|
来自: taotao_2016 > 《计算机》