当前位置: 首页 > Web前端 > JavaScript

做“高级”工程师该怎么做

时间:2023-03-26 20:09:19 JavaScript

作者:HannahLin来源:medium今天想和大家聊一聊身边的“真正的高级工程师”都具备什么样的能力和特点,而作为普通工程师,在应该向什么方向努力。实践能力既然是工程师,无论是上班做公司项目,还是下班后自己外包,最重要的任务就是通过写代码实现心中的想法,所以实践能力是必不可少的。就像LinusTorvalds的名言“Talkischeap.Showmethecode”,光说是没有用的。只有把程序代码写出来了,一件事情才能真正完成。实践能力达到什么水平才算“高级”?这个没有标准答案,但据我观察,资深工程师往往有非常丰富的实践经验。只要你的要求不是太苛刻(希望系统的availability有十个9XD),几乎没有什么是你做不到的。出来的东西。对于任何一张工单,他们大概只有两种类型:“这是一件简单的事情,很快就能做”和“我会花一些时间研究这件事”,而且他们通常可以独立工作,不会突然来找你“为什么?can'tmynpminstallrun","我没有写过Dockerfile,你能教我吗?"。说了这么多,实践能力怎么练?关于这个问题,我的想法是不断学习新的东西,真正应用到实战中。例如,我非常熟悉用Node.js编写RestfulAPI,所以下次我会尝试GraphQL或干脆将我的SideProject切换到Rust,尽管我第一次编写Rust时编译器会非常痛苦(我想把电脑砸烂了),但是写完之后你会发现“原来这种地方可能存在datarace!”,“原来异步不只有callback和promise两种处理方法”,这些东西会在你的技术深度和广度时间长了之后慢慢提高。有了足够的技术深度和广度,即使以后遇到没接触过的东西,也只需要五到十分钟就能看懂他在干什么,甚至能猜到底层的技术原理。有需要的时候,即使不熟悉,也可以更加自信的把东西写出来。愿意花时间在设计上虽然高级工程师会写代码,但我觉得除了写代码,他们最强的地方其实就是设计。这里的“设计”不是指UI上的设计,而是在实际搭建开始前的“系统设计”和“技术选型”。我身边的很多资深工程师在工作中都不会花太多时间写代码,因为对于他们来说,“前期设计”远比“实际操作”重要。一旦错误的设计开始,就可能走设计阶段。需要十倍甚至一百倍的时间来弥补。就像我前段时间在帮公司的一个项目,这个项目是2016年开始的,也就是Python3.6发布的那一年,但是这个项目竟然是用Python2开发的,已经被官方废弃了,导致tomanysuite无法更新,整个项目无法维护,只好写一个新的版本。所以,好的资深工程师在真正开始实践之前,都会先仔细确认需求,设计数据库schema,思考后端架构等等,等到这些大方向确定下来之后,再开始写第一行代码。很欣赏这种“先确定大方向,再慢慢完善小细节”的工作方法。如何提升系统设计能力?其实我还是系统设计的新手,所以不能给出很明确的答案,仅供参考。我觉得要想做好系统设计,除了要有一定的技术深度和广度之外,最重要的是要和其他人一起讨论,否则很容易受限于自己过去的经验,并且你想不出更好的方法了。比如我多年前刚开始做副业的时候,一直都是用AWSEC2来跑机器来跑API服务器。因为不知道有S3这样的服务可以存储静态文件,所以服务器接收到的数据直接放在本机上。这样做的代价是我的服务无法横向扩展。如果性能不够,我只能升级到更好的机器。现在回想起来,真是又蠢又幼稚XD。因此,我认为在对架构没有全面掌握之前,我应该尽量多和别人讨论。没人讨论的话,我也可以多看一些文章和书籍,比如我前阵子看到《系统设计101——大规模系统的演化》和《系统设计导论》都很好,很多东西说的比较模糊,看图就能看懂,而所有的知识准备好之后,就是要靠实战积累经验了,只要你每次开发新功能前认真设计,你一定能感觉到每个设计的开发速度、部署过程、可扩展性等。无论好坏,设计的系统都会随着时间的推移越来越完善。团队先于个人是我最佩服的事情从他的“真正的高级工程师”观察,一个好的高级工程师会思考如何提高整个团队的效率,而不仅仅是个人绩效。在写文档方面,每个公司都会有自己的开发流程,部署process,在哪里放置AWS密码,等等。而我身边的高级工程师很乐意把这些东西整理成文档。毕竟没有文档我会去问他XD,所以先花点时间写出来不仅节省了我自己的时间,也节省了整个团队的时间。此外,他们也愿意编写自动化测试。当然,不可能把所有的测试都测试一遍,但是如果能够用测试来保护系统中绝对坚不可摧的部分,那么团队中的其他同事在开发的时候就可以安心很多,而不会有些人不得不在假期XD期间挖掘修复错误。除了文档的编写和测试,在技术选择方面,他们也把整个团队放在首位,仔细考虑每项技术的好处和学习曲线。比如因为Docker简单易学,一个下午就能学会写Dockerfile,所以用它来部署的CP值非常高;但是如果要用Rust来写APIServer,虽然可以提高效率,也可以节省公司机器的钱,但是一来团队中的新人上手时间会比较长,二来确实是不容易找到会写Rust的工程师,所以这显然不是一个好的解决方案。还有什么事可做吗?“以团队为先”虽然听起来很抽象,但做起来其实并不难。只要你有把自己放在别人面前的心态,做任何事情的时候,想想“别人会不会有同样的烦恼?”,然后花一些时间帮忙解决,你就离一个不远了高级工程师。综上所述,要成为高级工程师,绝对不是靠资历,靠的是足够的力扣。一个好的高级工程师除了技术功底扎实之外,在沟通能力和心态(这方面我还在努力)方面也必须足够成熟,才能带领整个团队前进。以上是我身边观察到的高级工程师。当然高级工程师分很多种,有些高级工程师会有自己的特殊功能(特别是通灵,bug解决之类的XD),所以大家有空也可以多观察一下身边前辈的实力,说不定还能从中学到很多东西呢~代码部署后可能存在的BUG是无法实时知道的,事后解决这些BUG也需要很多时间。日志调试,顺便推荐一个好用的BUG监控工具Fundebug。原文:https://larry850806.medium.com/交流有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智慧。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。