解密初、中、高级程序员的进化之路(前端)

程序员的标准与要求

初级程序员

仅能完成简单模块和项目的开发工作难以胜任复杂模块的开发。通常是入行不久 1 年及以下工作经验的同学。

能力要求

  1. 熟悉前端基础知识如 HTML、JS、CSS 。
  2. 能够使用一门 MVVM 框架进行简单的业务开发。
  3. 遇到复杂的组件和模块会找现有的轮子使用。
  4. 会使用百度、google 等检索工具搜索问题。

中级程序员(阿里 p5)

在必要的辅导或标准流程支持下能独立负责一个子模块或者一个项目的具体任务对及时性和准确性负责。通常是 2-3 年工作经验的同学。

能力要求

  1. 除了前端基础知识外熟悉计算机、网络等专业基础知识。
  2. 熟练掌握工作中使用的技术栈开发业务。除了 MVVM 框架外还能了解 webpack 的配置。
  3. 能了解一个需求从开发-上线整个生命周期并对各个环节负责。
  4. 具备基本的逻辑分析、问题分解、归纳总结等能力。
  5. 了解基本的数据结构和算法写代码较熟练。
  6. 知道从靠谱的渠道去查找问题在找不到合适轮子的时候会造一些简单的轮子辅助业务开发。

高级程序员(阿里 p6)

具有独挡一面的能力能够高质量完成工作能把握一个系统/团队的整体实现在推行过程中能提炼新的方法或方案或对现有方案提出改进建议并被证明有效。通常是 3 年+ 工作经验的同学。

能力要求

  1. 具有独挡一面的能力能高质量的完成模块级的工作。
  2. 熟练掌握工作中使用的技术栈并能了解它们的实现原理。
  3. 能够在一个需求从开发-上线整个生命周期中找到痛点并能使用技术的手段解决提升效率。
  4. 能在模块维度对问题或需求做出分析和拆解并做出相对合理的实现方案。
  5. 熟练掌握基础的数据结构和算法代码符合规范逻辑清晰。
  6. 有较好的技术选型能力。

程序员的进化之路

初级 -> 中级

通常在初级这个阶段是进步空间最大的阶段这个阶段是不存在天花板的。

编码

编码是初级阶段最需要经常做的事情古话说孰能生巧写代码也是同样的道理。

  • 写什么的样代码
    在公司要多做业务尝试不同的业务目标是让自己先成为一个熟练工。
    下班后也可以折腾点小项目做可以选择自己感兴趣的内容尝试自己实现一遍。

  • 如何写代码
    学会模仿参考大牛的编码风格照葫芦画瓢。
    如果公司有代码规范跟随着公司的代码规范走如果没有参考业界规范并用工具如 eslint约束自己。
    遇到一些不会写的哪怕找到可以参考的代码跟着抄一遍也行。

工作

大部分时间都在工作那么如何合理的利用好 8 小时工作时间呢。

  • 熟悉业务
    不要仅仅埋头写代码也需要对业务了解认真参与需求评审环节明确自己所做的任务。

  • 熟悉工作流程
    要熟悉从需求-开发-联调-测试-上线的每个工作环节认真按照规范来执行对上线要有敬畏心。

  • 提升效率
    工作的时候尽量不要被打断可以安排一个免打扰时段比如下午的 2点-4点只编码而不去处理其它事情。减少在群里 灌水和斗图的时间。

  • 加班
    可以接受合理的加班比如为了赶某一个需求加班一阵子不接受没有任何补偿和调休的日常加班996因为日常 加班会压缩你学习和生活的时间。

学习

初级阶段是需要通过大量的学习来提升自己的能力。

  • 明确自己的学习目标
    学习是为了提升能力能让你胜任更复杂和有挑战的工作。

  • 应该学习什么内容
    前端基础JS、CSS、HTML 反复学习。
    工作中用到的一门前端 MVVM 框架。
    了解一些广度知识比如 HTTP、正则表达式、Web安全、性能优化、设计模式数据结构和算法。

  • 找到合适的学习方式
    看书+编码购买经典的书籍阅读并作为平时写码的参考工具看书和编码是一个反复的过程基本就是看书->编码->看书->编码循环个 3-4 次这个过程就是在不断修炼内功。
    视频慕课网的入门实战视频根据自己的需求购买要充分学习自己购买的每一个视频认真的跟着老师学习一遍写一遍遇到不懂的要积极提问学习在于深入而不在于多。视频比书籍的好处在于更贴合实践也更贴合公司业务另外课程的升级和更新也更加灵活。
    官网文档学习每一个新的技术栈入门最好的方式是通过它的文档学习可以系统的过一遍文档手敲它每一个示例。
    社区慕课网手记、掘金、CSDN、InfoQ 等中文社区利用碎片化时间看一些高质量文章学习。
    GitHub学会 GitHub 的使用知道 clone、fork、pull、push 等基本操作。

  • 花更多的学习时间
    如果想比别人成长的快就得花比别人更多的时间用来学习这也是为什么不鼓励日常加班尤其是初级这个阶段成长曲线是非常快的。

  • 知识沉淀
    俗话说好记性不如烂笔头可以养成写博客的习惯把学习的内容用文字的形式记录下来整理成文并按学习的技术方向做归类。

提问

在初级阶段免不了经常遇到问题会提问也是一门技术活好的提问姿势能让你事半功倍。

  • 不好的提问方式
    “这个报错是什么意思”缺乏思考没有体现自己关于问题的思考过程。
    “为什么我的代码和你的一模一样就是运行不了” 缺乏上下文应告知代码是编译不过还是运行不起来、错误提示信息、相关代码、可能出错的代码分析。没有足够的上下文神仙都不知道如何解决相关的问题。
    ”为什么 xxx 能不能 yyy“问的问题本身就是一个错误的结论通常是只是看到了现象而没有分析问题的本质。

  • 好的提问方式
    首先你在提问之前自己应该经过充分的思考并学会把问题拆解在拆解的过程中就会把问题的复杂度降低。
    其次要善用搜索引擎把关键字提取出来去搜索引擎上去搜索先尝试自己去解决问题。
    如果仍然不能解决可以将问题的相关上下文、截图及必要标识及自己的思考过程、查找到的相关资料以及自己的分析发送给想要帮助你的人并能提供最小化复现的问题。
    最后请将你的问题及解决方案重新整理并告知帮助你的人问题已经解决重新整理解决问题的过程会帮助你理清思路、从而对问题有着更深的理解。

中级 -> 高级

到了中级阶段基本上意味着你可以在大公司缺人的时候进入大公司工作了如果想成为大公司不可拒绝的人才 那你还需要朝着高级阶段努力。

编码

没错到了中级阶段你想要提升最重要的途径还是要编码。

  • 写什么的样代码
    和初级不同除了做业务之外你也参与开发做一些偏技术类型的项目比如参与组内组件库的开发一些通用 JSSDK 的开发这些会对你的技术要求会更高。
    有机会去参与平时使用到的一些开源技术栈的共建比如想实现每个 feature 但现有开源库不满足实现难度不大的情况下可以去提一个 pull request。

  • 如何写代码
    学会模仿除了参考大牛的编码风格还要琢磨他们的编码思路多思考他们为什么这么做。
    学会组件化、模块化的开发方式学会复用和封装减少 CV 的操作。
    对自己的代码质量负责可以经常组织 code review。

工作

想要进阶需要在工作方面有些产出。

  • 业务思考
    要明白业务和公司的目标参与到需求的早期阶段中同时也要多思考业务想着有没有通过技术手段来提升业务价值比如移动端的白屏时间减少可以带来很好的用户体验提升用户的留存率。

  • 技术思考
    思考业务开发中的一些痛点如何用技术手段去优化业务的开发流程提升开发效率比如为业务量身定制一款脚手架工具。

  • 优化工作流程
    不仅要熟悉从需求-开发-联调-测试-上线的每个工作环节还要多思考每个环节有没有可以提升的点特别是上线过程比如能不能做到自动化能不能做到小流量上线能不能及时回滚代码。

  • 技术分享
    把工作中遇到的一些问题的解决方案、学习的一些新技术产出的一些技术项目总结下来作为组内技术分享和输出这样一是可以总结沉淀你的技术二是可以让大家能知道你做的东西并活跃组内的技术氛围三是锻炼自己的表述能力这个能力在大公司的晋升述职中非常重要。

学习

中级阶段仍然需要通过大量的学习来提升自己的能力。

  • 明确自己的学习目标
    学习是为了提升自己的硬实力不仅仅能够提升工作效率还能让自己更好的服务于业务升职加薪。

  • 应该学习什么内容
    研究工作中所用到的工具链不仅仅是运行时的 MVVM 框架还可以是编译时的 webpack必要的时候去研究其中的源码实现。
    深入学习一些广度知识比如 HTTP、正则表达式、Web安全、性能优化、设计模式数据结构和算法并把它们应用到你的工作中。

  • 找到合适的学习方式
    看书找到所学习方向的经典书籍阅读适当做一些学习笔记。
    视频慕课网的进阶实战视频根据自己的需求购买。
    官网文档可以尝试去看一下英文文档。
    社区StackOverflow、HackerNews慕课网手记、掘金等除了利用碎片化时间看一些高质量文章学习也可以往上面发布一些优质文章。
    GitHub关注 trending参与开源社区的共建并尝试自己造一些轮子。

  • 学习时间与深度
    在中级阶段你仍然需要花很多时间去学习这个时候要注重自己学习的深度了。

  • 知识沉淀
    俗话说好记性不如烂笔头可以养成写博客的习惯把工作中深入学习到的一些非敏感知识记录下来并发布而不仅仅去发布一些基础知识的学习了。

  • 技术视野
    除了自己工作中的使用的技术栈之外也要了解同类其它优秀的开源技术栈从多个维度feature 完整性、文档、上手难度、维护力度、生态等去做对比。
    要保持对新技术的敏感的关注并时刻思考这些技术能否为自己的业务带来价值在需要的时候做合理的技术选型。

总结

所谓技术能力其实就是解决问题的能力和学习能力所以无论你在哪个阶段甚至是更高的阶段不断提升这两个能力都是你应该一直要做的事情。

知识体系

问题答疑:

Q: 如果我想设计个组件,如何才能设计的很完美呢,是平常需要看其他开源库的源码?老师有没有什么书或者优秀库推荐?

A: 建议多参考一下现有的开源组件,多阅读他们的源码,其实很多优秀的组件库很多实现也是互相参考的,比如 element-ui 的 Table 实现,基本就是参考了 Antd 的实现思路,用 Vue 的语法实现了一遍。

所以你是什么技术栈,就去参考这个技术栈中优秀的开源组件。

 

Q:如果自己制定一个规范或者组件,需要推到各个部门,需要考虑哪些东西?怎么才能有效推进项目呢

A:在公司想要推广到各个部门,最好是能够自上而下的,由一个有影响力说服力的人去推进。还有一种情况就是你做的东西足够优秀,且别人不太容易实现或者实现成本高且又需要,这样才好推进。

我在 Zoom 的经验就是我们做的组件库一个是符合公司 UI 设计规范,新 UI 的推进就是一个自上而下的过程,并且我们的组件库解决了大量的 accessibility 问题,这个是业务开发的痛点和难点,他们自然就把之前用 jQuery UI 开发的组件切换到了我们的组件库了。

 

Q: 有时候发现不了项目中的痛点,老师能举例说下吗,比如公司发现了哪些项目痛点,怎么解决怎么推进落地的?给点灵感

A: 比如我刚进 Zoom 的时候,就发现了很多痛点,前后端严重耦合,技术栈老旧,历史包袱太重等等。解决方案就是结合 Zoom 产品的特点,设计一套适合的前后端分离的架构方案,当然这玩意展开说能说几小时。

总之,就是任何你开发过程中遇到不爽的地方,你都可以把它看做痛点,然后想办法去解决它。

 

Q:同源下,请求同源下的图片会自动带上cookie, 前端能控制不自动带吗?

A: 这个不可以控制,所以通常我们的做法就是把图片、JS、CSS 等静态资源发布到 cdn 上,这样请求就是 cdn 的域名,就不会携带当前域的 cookie。

 

Q:前端行业对年龄真的很敏感嘛?设计行业转过来的,年近30才中级水平,感觉自己是不是快被开除了

A:我们公司有很多工作了 20 年以上的工程师,还在写代码,他们就是 Zoom 的初创员工,也实现了财富自由,他们创业的时间也是在 30 岁之后。我想说 30 不算晚,加油努力朝着高级进阶吧。

 

Q:前端架构师具体的职责是什么,和技术负责人以及后端架构师的区别在哪里

A:比如我现在做的事情就是帮助他们推进前后端分离,提升前端开发体验和开发效率。架构师通常都是负责提出一些系统化的解决方案,编码工作包括且不限于这套解决方案中的框架、插件、工具等。

技术负责人通常有一定管理属性,除了管技术之外还要管人。后端架构师只是和前端架构师工作的内容方向不同。

 

Q:对于开发来说慕课网出的 计算机基础——更适合程序员的编程必备基础知识+数据结构+算法一些课程 理论基础知识够了吗

A:这个课程我不太了解,但是如果你并非科班出身,并且还是初级水平的话, 是可以尝试去学习的,如果买课了一定要认真的跟着老师学习一遍。另外计算机这些理论知识也是要在平时工作中不断应用实践,才可以加深理解的。

 

Q: 我现在是初级的前端开发工程师,我想跳槽,找一份有自己技术团队的公司好好成长,我该如何准备简历呢,才可以让面试官眼前一亮呢?

A: 你可以事先了解你想投递的公司和团队,知道他们做的东西,比如我之前在滴滴的部门,开源了 cube-ui 和 better-scroll,如果你有参与共建这些项目,就是一个非常大的亮点。

另外简历中的亮点可以有高质量的博客、高质量的开源项目、竞赛获奖(ACM)。对于自己工作中的项目,也尽可能简明扼要地讲清楚其中的难点,你从中的收获等等,切忌流水账。

不过如果你现在是初级阶段,可以先朝着中级阶段努力,进一家自研产品的创业公司锻炼一下也可以。跳槽也需谨慎,可以骑驴找马。


转载地址:

https://www.imooc.com/article/289955
https://note.youdao.com/ynoteshare1/index.html?id=2cd837cb820c7ad9c4c341706c6a9050&type=note

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值