如何成为公司独当一面的工程师

大家好,我是若川。欢迎加我微信 ruochuan12,长期交流学习。今天推荐黄老师的这篇文章,你可能看到过了,但值得再看一遍。之前常有小伙伴问,大多情况下我都会分享这篇文章。

点击下方卡片关注我、加个星标,或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列


前言

如今的互联网市场对高阶技术岗位的需求越来越多,成为独当一面的工程师已经成为很多一二线互联网公司招聘的标准门槛了。那么如何成长为独当一面的工程师呢,我会从技术能力和业务能力 2 个方面去阐述。

技术能力

技术能力无疑是衡量一个工程师水平最重要的依据,那么对于独当一面的工程师技术能力的要求是怎样的呢。

职业技能

职业技能就是工作中依赖的技术栈,下面我们以前端工程师为例,看一下有需要掌握哪些职业技能。

  • 熟练掌握 HTML、CSS、JavaScript
    用语义化的 HTML 标签配合 CSS 百分百还原设计稿,并使用 JavaScript 完成各种交互逻辑。这是前端的基本功,除了通过书籍、视频等渠道学习之外,你可以通过做大量业务,不断写代码去应用所学知识,不断积累。

  • 熟练掌握一门 MVVM 框架
    Vue、React、Angular 其一,随着前端的日益复杂,大部分场景都离不开它们。你需要清楚的了解框架出现的意义,框架的职责边界,你能轻松应用框架提供的各种能力辅助开发工作。除了不断在工作中应用,你还可以主动去学习框架源码,了解框架的实现原理。

  • 至少要学会一种打包工具
    以 webpack 为例,你需要熟练掌握 webpack 的配置,学会利用 webpack 辅助我们的开发、部署和优化。你可以尝试去编写 webpack 的 loader 和 plugin。例如我们平时开发工作中需要 mock 数据,那么我们可以编写一个 webpack 插件,在不改源码的情况下,实现在开发环境请求 mock 接口,测试环境请求线上接口。

  • 熟练掌握前端的一些广度知识
    例如HTTP、Web 安全、性能优化、数据结构和算法等。除了通过书籍、视频等渠道学习之外,你可以在平时工作中不断去应用和验证。例如性能优化,你可以去分析页面的性能瓶颈,在前端还是后端?如果是在前端,你还可以进一步分析白屏时间、首屏渲染时间、JS 加载时间、JS 执行时间等等,最后通过统计的手段做性能监控和报警。

开发效率

开发效率的高低,直接决定你的工作产出比,那么如何提升开发效率呢。

  • 给自己设一个免打扰时间
    例如下午的 2点-4点,这个时间专心 coding,不看微信不刷微博不开会,这样的编码会很高效。

  • 工作中善于提炼可复用的代码和逻辑
    例如当你在开发过程中发现某组件在其它项目中实现过,这个时候千万不要想着去 CV 代码,而是把它抽象成可复用的业务组件,对外设计好输入和输出接口,并抽取到专门的仓库中管理,业务通过 npm 私服的方式去引入。

  • 善于通过技术的手段去提升效率
    例如当你去开发和维护多个项目的时候,每个项目都包含一些类似的代码和配置,你就可以想着去开发一个脚手架,自动帮助你去初始化项目代码和一些配置文件。

解决问题

每个工程师都会在工作中遇到各种问题,解决问题的能力侧面反映了一个人的技术能力。

  • 线上问题 case study
    当遇到线上问题,你可以配合一些报错日志快速定位问题出,找到快速修复的方案,并且在每次出线上问题后都认真的做 case study,找出引发问题的多方面原因,并给出对应的解决方案,避免日后再出现类似问题。

  • 探究问题的本质
    在开发过程中遇到报错,你可以通过代码执行堆栈和报错信息找到引起错误的根本原因,从而找到最合理的修复方案,如果报错的源头是第三方插件,你应该趁机去了解第三方实现的原理。

  • 学会提问
    并不是所有问题都要自己独立解决,有些时候也可以求助于他人,好的提问方式非常重要。例如你在提问之前,自己应该经过充分的思考,并学会把问题拆解,在拆解的过程中就会把问题的复杂度降低。要善用搜索引擎,把关键字提取出来去搜索引擎上去搜索,先尝试自己去解决问题。如果仍然不能解决,可以将问题的相关上下文、截图及必要标识及自己的思考过程、查找到的相关资料,以及自己的分析发送给想要帮助你的人,并能提供最小化复现的问题。

代码重构

曾经有个大佬跟我说过,如果每半年去回顾你之前写的代码,都会觉得像坨屎的话,那说明你在进步。

  • 不要过度设计
    有些人喜欢一次性把代码写好,预留各种扩展接口,过度设计,但由于需求的的变化往往不可预测,非常容易导致花了大量的时间却写了大量无用的代码,产出低下。在高速发展的互联网公司是绝对不能容忍这种情况的,而应该是敏捷开发,快速迭代。

  • 及时重构
    通常我们为了一个项目快速上线,第一版的代码可能会有很多问题,当我们在基于之前版本的代码开发新功能的时候,如果遇到之前代码实现不合理的地方要及时重构,而不要敷衍了事,如果等到代码量已经很大的时候去重构,会非常困难和痛苦,并且还可能有 regression 风险。

  • codereview
    找比自己厉害的同事帮助自己的代码做 codereview,吸取他们的一些好的建议,也可以去 review 其他同事的代码,觉得写的好的代码要学习,觉得写的不好的地方可以  ”挑刺“,引起讨论,追寻最佳实践。并且一个团队要制定统一的代码规范和风格。

  • 学习优秀源码
    如何去写出优秀的代码,首先要学会模仿,你应该经常去 GitHub 去阅读一些优秀的源码,把好的编程思想和代码实现借鉴到自己的工作项目中。

技术沉淀

技术是一个长期学习并积累的过程,需要经常做一些技术沉淀。

  • 技术分享
    把工作中遇到的一些问题的解决方案、学习的一些新技术,产出的一些技术项目总结下来,作为对内或者对外(公司允许的话)技术分享和输出。对内分享的话可以让大家能知道你做的东西,并活跃内部技术氛围,锻炼表述能力,这个能力在大公司的晋升述职中非常重要;对外分享可以锻炼写作能力,提升个人或者是团队的技术影响力。

  • 开源
    如果在工作中做的不错的项目,有开源价值并且公司允许的前提下,可以考虑开源,因为开源会让你对项目质量有更高的追求。例如之前我在滴滴做的 cube-ui,开源会让我们对代码的质量要求更高,并补充了完整的文档、示例和测试。而且随着越来越多人使用,用户帮我们反馈了很多 bug,也补充了很多功能,直接帮助我们省了 QA 的人力。好的开源项目也可以帮助我们提升个人和团队的技术影响力。

快速学习

技术变化日新月异,快速学习的能力尤其重要。

  • 阅读官方文档
    当你去学习一门新技术的时候首先应该去阅读官方文档,而不要去看社区总结的文章,因为官方文档是最权威的,并且是实时更新的,而他人总结的二手资料很可能是过时甚至是有误的。

  • 在工作中实践
    学习如果脱离工作的实践,其实是非常低效的。你应该把自己所学的知识并在工作中反复实践和验证,及时反馈,加深学习的印象。不要花时间去学习与工作无太多直接关系的领域。

  • 先精通一门技术
    不同的技术之间其实是融会贯通的,当你对一个技术精通并总结出方法论以后,很容易上手别的技术。比如一个对  Vue 精通的同学,上手 React 必定毫无难度,对 Web 前端开发精通的同学开发小程序也是毫无压力。

技术选型

技术选型是大部分工程师都会面临的问题,好的工程师一定要有好的技术选型的能力。

  • 技术选型的标准
    当你去选择某个开源项目的时候,应该参考以下几个方面:feature 完整度(能否很好满足我们的需求),使用量(npm 下载量、是否有大公司使用),维护力度(最近更新时间、更新频率、issue 和 pr 的处理情况),测试(是否有测试,测试覆盖率),文档(文档和示例是否完善),维护者(团队、个人的技术能力以及他们的技术影响力),流行度(star、fork 量)。

造轮子

当现有轮子不能满足我们的需求的时候,我们要有自己造轮子的能力。

  • 学会造轮子
    你需要经常去学习和研究其它的轮子是如何造的,学的多了,自然就掌握了造轮子的一些规律和方法论,了解轮子实现的本质原理,也就可以根据自己的需求和场景去定制化轮子了,并且你的轮子也可以是其它小轮子组装而成。例如我在滴滴的时候为了实现一个媲美原生 iOS 体验的 Picker 组件,先是研究了 isroll 的实现,在它基础上扩展实现了 better-scroll,然后在 better-scroll 的基础上扩展出 Picker 组件。

业务能力

作为独当一面的工程师,除了过硬的技术能力,也需要有良好的业务能力。

owner 意识

如果你不甘心只当一颗螺丝钉,你需要有 owner 意识,对产品和项目负责。例如我现在在 zoom,从需求、设计、开发、测试到最终的上线都是由工程师在主导,并协调各个角色成员。这对工程师提出了更高的要求,也锻炼了工程师的综合素质能力。即使你所在的公司项目并不由工程师主导,你也可以以这个标准来要求自己。

产品思维

当你接到一个需求的时候,也要思考这个需求解决了什么问题,有什么价值和意义。作为一个工程师,最好能参与到需求早期的讨论中,充分理解业务,这样你对需求的把握和理解会更准确,而不是产品说什么你就做什么,有些时候你会找到一条既能满足需求又能节约开发成本的路。

沟通能力

很多人希望做一个只写代码的美男(女)子,但实际情况你需要和不同的工作岗位的人沟通。沟通能力是非常重要的,很多时候你需要去了解你的需求方的想法,并输出你的想法。如果你两耳不闻窗外事,很可能做出来的东西并不是他人想要的,充分的沟通可以避免走一些弯路,提升工作效率。

敬畏上线

很多没有在大公司待过的人对于上线的视程度不够,一旦上线出问题,第一反应并不是回滚代码,而是去定位问题,通过下一次上线修复。这个行为在大公司是绝对不允许的,因为当你用户量大了,每一次上线事故的影响面都会很大,如果不及时回滚,对公司也会造成非常大的损失。因此要对上线有敬畏心,保证整个上线过程是自动化而非人工参与(因为人是不靠谱的),上线过程中需要观察监控,一旦有任何数据异常要及时回滚,然后再定位问题重新上线,最好避免高峰期上线。

总结

我们通篇讲了很多方法,但实际上在你进阶成为独当一面工程师的路上,这些方法也只是仅供参考,真正能成为大牛的人,能够直面困难和挫折,敢于跳出自己的舒适区追求进步,能熬得住突破瓶颈长时间的寂寞,是肯下笨功夫的聪明人。没有什么人可以靠着看一两篇文章就能成为大牛,而真正重要的,是多年如一日的坚持。

与大家共勉。


最近组建了一个江西人的前端交流群,如果你也是江西人可以加我微信 ruochuan12 拉你进群。


················· 若川出品 ·················

今日话题

有小伙伴问为啥现在我的公众号推文的封面是黑底白字,真的很难看。我说是因为比较醒目,容易在众多公众号推文中区别出来,而且省时间。选封面是比较费时间的,为了选封面其实我特意安装了谷歌插件 unsplash Instant,每次打开新的标签页就能欣赏美图,但大多不太符合公众号封面。如果是随意选的网图,有可能有人找上门说侵权赔钱。欢迎分享、收藏、点赞、在看我的公众号文章~

一个愿景是帮助5年内前端人走向前列的公众号

可加我个人微信 ruochuan12,长期交流学习

推荐阅读

我在阿里招前端,我该怎么帮你?(现在还能加我进模拟面试群)

如何拿下阿里巴巴 P6 的前端 Offer

点击方卡片关注我、加个星标,或者查看源码等系列文章。
学习源码整体架构系列、年度总结、JS基础系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flex如何做响应式设计_响应式设计-您做错了!

flex如何做响应式设计Responsive design is not just about the web that automatically adjusts to different screen resolutions and resizeable images, but designs that are crucial for web performance.自适应设计不仅涉及可自动适应不同屏幕分辨率和可调整大小图像的网…

30万手表推荐_今年六十岁生日,儿子说要送只30万的手表,请问有哪些推荐?...

关注腕表部落,尽享腕表生活一位读者向笔者提出这样一个问题:今年六十岁生日,儿子说要送只30万的手表,请问有哪些推荐?首先要恭喜这位老爷子,一来是生日马上就要到了,二来是还有这么孝顺而且慷慨…

写 Node.js 代码,从学会调试开始

大家好,我是若川(点这里加我微信 ruochuan12,长期交流学习)。今天推荐这篇调试文章,熟悉我的读者都知道我写的源码文章都多次强调要调试,而且写了调试方法。点击下方卡片关注我、加个星标,或者查…

创建用户友好的表单

Forms are a common way to engage with users and could be a user’s first impression of your product. Since forms aren’t always the user’s favourite thing, it is essential to make filling out forms as easy as possible. Let’s go over a few tips for creati…

细节决定成败—关于.net的.dll.refresh文件

一直在做.net的项目,c/s的、b/s的,一直没有注意这个东西。众所周知,.net的程序生成后会在bin目录下生成.dll文件,而.dll.refresh这个文件从何而来呢?那天无聊地google了下才知,这个东东是在你的项目中引用第…

环境在c盘_如何给女朋友解释为什么 Windows 上面的软件都把自己安装在 C 盘

本文经授权转载自漫画编程(ID:mhcoding)周末,我在家里面看电视,女朋友正在旁边鼓捣她的电脑,但是好像并不是很顺利,于是就有了以下对话。计算机存储我们使用的计算机中,保存信息的介质有两类:一…

能让你纵享丝滑的SSR技术,转转这样实践

大家好,我是若川(点这里加我微信 ruochuan12,长期交流学习)。今天推荐这篇图文并茂的SSR技术文章。这是江西前端群里一个小伙伴的文章。群里小伙伴很多都在知名大厂,但他们都很低调。点击下方卡片关注我、加个星标&…

魅族魅蓝mirror简单打开usb调试模式的步骤

经常我们使用安卓手机链接电脑的时候,或者使用的有些应用比如我们企业营销团队经常使用的应用引号精灵,以前使用的老版本就需要开启USB调试模式下使用,现经常新版本不需要了,如果手机没有开启USB调试模式,电脑则无办法…

hp-ux 单用户 启动_UX备忘单:搜索与浏览

hp-ux 单用户 启动重点 (Top highlight)When designing search results and interest sites, you have to keep in mind what ‘mode’ your user is in. Are they in ‘searching mode’ or ‘browsing mode’? This will help you determine how to design your platform to…

细数开源历史上的九个重大事件

开放源码(开源)的精神在于使用者可以使用、复制、散布、研究和改进软件。这可以追溯到20世纪60年代,至今已有半个世纪了。伯乐在线-职场博客的这篇文章将列举开源历史上的九大重要事件。虽然本文不是专门对开源产品,但还是说到了一…

有赞大数据平台安全建设实践

一、概述 在大数据平台建设初期,安全也许并不是被重点关注的一环。大数据平台的定位主要是服务数据开发人员,提高数据开发效率,提供便捷的开发流程,有效支持数仓建设。大数据平台的用户都是公司内部人员。数据本身的安全性已经由公…

请先设置tkk_理光MP2014扫描至文件夹的设置方法

理光旗下的2014系列入门级A3黑白复印机市场保有量较大,该系列机型加装M16网卡后可以方便的实现扫描至文件夹功能,经常有客户咨询该机型的扫描设置方法,下面我就以MP2014D为例来演示一下该机型的SMB扫描设置方法:首先是在电脑上建立…

听说现在都考这些React面试题

大家好,我是若川。最近刷脉脉看见圈里都在聊面试,吐槽最多的还是万年考点 React 和 Vue。不过关于两者的比较似乎有点针尖对麦芒的赶脚。确实,面试的偏重点往往映射公司对该框架的重视程度,但也不能一概而论,去学习或放…

荒岛余生为什么没有打开包裹_您会带到荒岛什么办公桌设置?

荒岛余生为什么没有打开包裹Throughout life, you experience a lot of desks and a lot of desk setups. Real or virtual, at the office or at home, temporal or permanent — just a way to call it, nothing is permanent— a big one with a great office view or a sma…

第五课 路由之初识路由

1.路由快速入门 1.1 概念 是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器。它的英文名称为Router,是一种连接多个网络或者网段的网络设备,它能将不同网络或者网段之间的数据信息进行“翻…

如何使用 React 和 React Hooks 创建一个天气应用

大家好,我是若川(点这里加我微信 ruochuan12,长期交流学习)。今天推荐一个练手的React项目,创建天气应用,相信很快能看完。昨天发送书掉粉18人,是我没想到的,送书一般是出版社按阅读…

拟态防御_纯素食汉堡的拟态

拟态防御If people are so against the idea of pigs and chickens being chopped up why would they want to buy fake bacon with realistic visual streaks of pork fat, or soy meat that tries to replicate the streaky texture of cooked chicken flesh? Surely these …

delphi 算术溢出解决方法_性能优化系列:JVM 内存划分总结与内存溢出异常详解分析...

前言那些使用过 C 或者 C 的读者一定会发现这两门语言的内存管理机制与 Java 的不同。在使用 C 或者 C 编程时,程序员需要手动的去管理和维护内存,就是说需要手动的清除那些不需要的对象,否则就会出现内存泄漏与内存溢出的问题。如果你使用 J…

微信小程序如何发送 http 请求

2019独角兽企业重金招聘Python工程师标准>>> 为什么要使用云函数发送 http 请求小程序云函数5 个可信域名不受限制需要备案无需备案在一些特殊情境, 比如域名没有备案或域名 5 个以上就需要使用云函数发送 HTTP 请求了. 如何使用云函数发送 HTTP 请求? 在云函数中能…

H5 页面列表缓存方案

大家好,我是若川(点这里加我微信 ruochuan12,长期交流学习)。今天给大家介绍一下关于h5页面的列表缓存方案。感谢屏幕前的你一直关注着我。点击下方卡片关注我、加个星标,或者查看源码等系列文章。学习源码整体架构系列…