第三十二期 AMA 我们请来了3位前端的技术大佬,分别是开课吧首席Web顾问“winter”,前端开源作者和技术博主“工业聚”、花果山团队负责人 “大圣”。希望通过专场活动,集中帮助大家解决「技术相关」「个人成长」等问题。
关于winter
winter之前做过嵌入式系统的浏览器开发,带过前端团队,也做过前端架构。现在他是一名前端领域的教育从业者。
精选提问
1、您感觉在前端技术上分哪几个阶段,怎么衡量自己的位置呢?
助理前端(P4/T2.3以下):
你有不错的编程基础,可以熟练表达任何的逻辑,还懂得基本的算法和数据结构,对于前端技术,你看了不少书,也有自己业余写一些网页——但是仅限于纸上谈兵,并没有用于商业项目。你自信一旦你开始前端工作,你能够快速地把它们应用起来。
入门级前端(P5/T2.3):
你可以实现你日常见到的网页里面绝大多数功能和交互,除了一些交互新奇的网站,没有能难倒你的,即使这些不太会做,在阅读了相关的技术资料之后,也能够迅速学会。你懂得如何在项目中与小伙伴协作,跟服务端沟通API、跟设计师沟通设计稿,跟产品经理沟通需求全都不在话下。
资深前端(P6/T3.1):
你在项目中充当骨干,可以解决一切项目中的前端问题(不一定是正面硬刚),推动项目前进,在一个5-10人的项目组中,大家遇到问题第一个想到找你。对于团队中的共性问题,你能够提出解决方案,并且给大家用。
前端领域专家(P7/T3.2):
你在团队中是公认的某个特定领域的专家,比如工具、数据监控、框架、组件等,在你的领域里,你有一套自己的方法论,不论是自建还是开源方案选型,你都能够因地制宜,给出合适的结论。你对你选择的开源方案十分了解,能够魔改其中代码,有时候也会提交PR给开源社区。你的老板每次遇到你的领域的问题,都会找你咨询,他极少会推翻你的判断。
前端高级专家(P8/T3.3):
你每天思考着自己所在的前端团队的未来。每次公司业务变化,是你最头疼的时候,你需要重新思考前端技术的规划。你的前端技术总能给业务带来新的可能性,你会考虑团队还缺哪些领域的专家,并且跟HR一起努力去寻找。你知道你团队的重点在哪里,所以对每个领域使用社区方案还是自建,有清晰的判断标准,一旦深入这个领域,你能够做出业界领先的方案。
资深专家(P9/T4.1):
你的技术给公司带来了新的业务场景,公司因为你的技术而有了新的盈利点。当然,除了技术本身,你还要整合很多公司的资源,通过技术把它们点石成金、变废为宝。你关心着如何把团队的价值更好地变现,你对团队有明确的规划,总能用适当的人力创造可观的营收——即使不是财务数字上的营收,你的团队对公司的价值也是明确和可衡量的,所以你背负着来自管理层或者股东的业绩压力。
2、总感觉前端不受重视啊,怎么破局?
我觉得与其考虑让前端受重视,然后做前端的我们从中受益,不如先解决”我不受重视“的问题,这要简单的多。 其实任何技术岗位受重视程度都受到时间影响,前端发展时间太短,这个很难短期内改变。
3、工作了3年的前端,感觉自己在这一领域进步很慢,看着同一时期进来的后端同学已经升职级了。请问怎么提高自己的技术水平呢,是否有必要学习后端技术?
我觉得多数职业发展遇到瓶颈的同学,遇到的问题都不是靠多学一门后端技术来解决的。3年左右,我猜测应该是普通工程师到资深工程师的瓶颈,这个瓶颈是一种角色的转变,资深工程师是项目的中流砥柱,公司里一线的主力,能解决问题的人,这种转变是心态、技术、视野综合作用的结果。
4、winter老师,我想咨询一下您关于前端职业发展方向方面的看法以及前端人的目标应该在哪里,在日常工作中感觉比较迷茫。
这个问题比较大,我觉得职业发展目标分远期和近期,你觉得迷茫,那就是近期目标都没有,我觉得可以从想一想一年之后你跟现在有什么区别做起,到明年这个时候,再回过头来看一看,你是不是真的有这样的变化。 如果你不知道"更好的前端"长什么样,可以尝试在公司里找一个目标,看看级别更高的人技术水平和做事方式跟你有何不同。
5、如何学会重学前端? 以前在工地上搬砖,4年前在朋友的引荐下转行了前端,不过在公司没有人带,习惯了"看API文档--复制--粘贴"来完成开发任务,浑浑噩噩混到现在。一直想巩固基础,重学前端,却不知道该从哪里下手?目前的情况是:工作四年,四个月工作经历!
我觉得重学的过程是整理的过程,我推荐使用脑图来整理自己的知识,当你能够做到脑图上的每一个级别都具有高度完备性和逻辑性的时候,你的知识自然就形成体系了。
想看winter大大更多精彩的回答?点击传送门直达专题!
关于工业聚
工业聚是一个前端开源作者和技术博主,也是Farrow、react-lite 和 react-imvc 项目作者。目前是一位前端工程师,负责 React,Node.js,GraphQL 等前端基础设施建设方面的工作。
精选提问
1、请问在技术这条路上,您觉得什么技能是程序员必须掌握的呢?
用词是「技能」而不是「技术」,是指软技能吗?这个问题可能回答起来容易烂俗,列举一系列众所周知的优秀品质,然后说它们很重要就行了。非要说的话,我觉得有一点,倒是值得强调——保持信心。学习技术,或者任何严肃的知识,很容易碰壁,很容易卡住,很容易灰心。
我们经常连安装开发环境都搞不定,连写一些配置都配不好...挫败是开发者的日常,我们很容易自我怀疑:我究竟有没有天分,我真的适合这种工作吗?这种犹疑情绪,会让我们失去信心,更容易放弃,容易裹足不前。我们觉得自己不够聪明,不足以胜任某些任务或者前沿技术。
当我们从事实层面去审视时,可能发现,如果学会某个技术平均要花20小时,那些信心不足的开发者,在前5小时内就大量退缩和放弃了,没有坚韧地持续学习。过早放弃跟过晚放弃,都不好。我们可能要不断学习什么时候才该停止和放弃,但最好不要出于自我否定。
保持信心,不要怀疑自己的智力,相信即便自己只是普通水平,也能慢慢学会。相信即便是普通水平,也有机会做出惊人的成果。
学习是一个累积的过程,学得越多,知识结构越丰盛,学习效率也会因此提升,越容易抓到重点,越能举一反三。 记得保持信心,持续学习,实现知识的原始积累,看到更广阔的世界和更自信的自己吧~
2、您好,现在是一个2年经验的前端,但是一到某家公司就是问你后台管理系统,别的东西也没有给你长时间下来就是个element搬运工,如何保持自己的技术更新并且投入生产中?
公司项目往往选择权不多,可以从几个方面去入手:
1、在保证质量的前提下提升工作效率。但并不缩短工期。可以在完成功能后,留出一截时间可以自由分配。比如去做局部重构、优化、去技术债,打磨和完善项目,这也是一种技术提升的方式。当然,用这时间去学习/调研新技术也行。关键是提升工作效率,争取到喘息时间去提升自己。
2、在业余时间发力,去研究技术,做 demo,参与开源项目,分享技术知识等,加入到技术氛围更广厚的圈子中,去补充工作中技术涉猎窄的问题。一开始,可能难以立刻反哺新技术到实际工作中。然而,随着技术积累的增加,总会遇到落地的机会。机会是留给有准备的人,在业务时间里的自我提升,就是在为将来的机会做准备。
3、如何看待react server component ,这会不会给前端带来一定技术变革?
React Server Component 是可以进入前端框架发展史重要时刻的特性。
当下大多数开发者,还没有意识到它带来的深远影响。他们对它的评价,主要是一种对比视角。对比 Client Component,觉得它缺少 state/effect,觉得它引入了更多依赖和成本,需要 node.js 服务器。这些都是比较表面的理解。从所谓的第一性原理的视角出发,我们可以看到 React Server Component 的重要意义。
1)标志着前端框架不只是将 Server 看作顺便搞一下 SSR 的事物,开始着手探索充分挖掘 Server 能给 UI 开发带来的助益(尽管不是零成本,关键看收益/代价之比)
2)Streaming CSR 支持
React Server Component 里通过 custom json protocol 传输 vdom/client-js-src/error 等内容,并支持 streaming 流式传输。这里的重要意义是,Streaming Client-Side Rendering 优化策略,在很长一段时间里,几乎都不被前端框架所支持。CSR 客户端渲染,往往还是串行模式。
fetch -> json -> render/vdom -> renderer(react-dom/react-native)-> UI
React Server Component 实现的 Streaming Client-Side Rendering,则是将上述过程分块:
{server: fetch -> json -> render/vdom } -> {client: renderer(react-dom/react-native) -> UI }
在 server 接口往返请求延迟更低,做 fetch -> json -> render/vdom 是更高效的,然后streaming json reponse 发送给 client 端。client 端的 renderer 支持 partical rendering/hydration,可以更早看到渲染内容,更及时地请求 js-chunk 模块,绑定事件。仿佛跟 Streaming SSR 似的。
并不是说不用 React Server Component 就做不到 Streaming Client-Side Rendering。而是说,React Server Component 标志着主流前端框架官方支持这种优化,而不必让开发者自行从零研究。
3)面向未来
React Server Component 的潜在适用场景之一,是结合 BFF/Serverless 实现 BFF Component 或 Serverless Component。这可能改变大家的开发模式和协作模式,提供一种 React-Based 的 Micro-Frontend 微前端方案。
Next.js/Vercel 团队在近期可能推出 组件实现 React Federation 这类模式。可能的做法是:
1)component server。多个不同团队开发的 React 组件单独部署为 node.js server
2)page server。依赖多个 component server 渲染出最终页面,呈现给用户。
大家可以期待一下,上述预测未必完全精准,未来也未必是 React Server Component 最终胜利。但它的发布,标志着前端框架新的探索空间和竞争维度。
4、想请教下,作为一个前端工程师,如何去深入的学习一些工具,框架背后的设计思想,如何借鉴它们的设计思想,拓展到自己开发的工具上?如何深入学习一些通用的设计思想,模式(fp,codata等),更好的运用到日常的前端开发中?
这可以是一个自然的过程,当我们熟练使用某个框架时,很多时候会自然而然地想要了解它背后的思想。
可以去 GitHub 关注项目,订阅它的 release 等事件,查看 Pull Request 或 Issue 看看里面的讨论内容。在 Twitter 上关注官方开发者,每当他们分享一些相关设计理念或者某些资料时,就认真阅读。完全不用愁没有内容可以获取,这些资料之间会不断索引出更多内容,一开始可能都会吓到我们,慢慢学习即可。核心做法就是尝试去接近信息源头,去积累一手资料。随着积累的增加,自然而然的产生了借鉴和拓展,我们会有自己的想法。
至于学习 FP,关键在于忘记自己是前端,再去思考如何学习 FP。减少路径依赖,减少去找面向前端的 FP 资料。FP 是一个独立领域,它有自己的入门经典材料。去靠近信息源头,获取更多一手资料吧。在不断积累的过程中,我们会得到机会和灵感,将所学知识,部分地落地在实际工作中。
5、想请教一下,成为一个前端架构师,从您实际的工作经验来说,要具备那些技术能力和掌握那些编程思想。
前端架构师这个 title,有很多解读的维度。
1)岗位维度
公司或部门,需要有一个前端架构组,专门做一些工具或者服务于其它前端工程师的活儿。那么团队中技术相对出色,或者对前端架构工作感兴趣的开发者,可能就进入了前端架构组,可以对外说自己是前端架构师了。尽管这不意味着,他们属于能力维度的前端架构师。
2)能力维度
要具备哪些技术能力或者掌握哪些编程思想,才撑得上前端架构师?可能更重要的,并非技术能力或编程思想这类可以打磨提升的因素。而是某种意义上的产品敏感性。前端架构组的产出是一些工具或技术产品,它们通常不是服务于 C 端客户,而是服务于其它开发者,俗称 toD。面向开发者的产品。
岗位维度的前端架构师,如果缺乏 toD 产品敏感性,可能做出来的工具像空中楼阁,看着美好,但用起来体验不好。不是说,前端架构师的技术能力,就一定比业务前端的强。他们解决的问题,其实是不一样的。
前端架构师的能力素质:
1)具备面向开发者的产品敏感性,能够跟开发者共情,找到开发者的技术痛点
2)能够思考如何技术性地解决或优化它们
3)在②的基础上,能够提升相关技术能力,实现目标
4)回到① 在1~4的步骤不断循环的过程中,前端架构师们的技术能力和编程思想,自然而然地得到了提升。
但并非因为技术能力和编程思想,就自然而然地成为前端架构师。
想看工业聚大大更多精彩的回答?点击传送门直达专题!
关于大圣
大圣毕业于北京交通大学,过去曾就职于百度和360,目前担任开课吧Web品类负责人。因为是自学转行,所以他拥有从零到一的宝贵经验。加上有从小厂跳到大厂的经历,总结了很多心得能与大家分享。
1、如果作为一个前端团队的组长,要怎么去规划团队?
1)首先得先跟你的老大聊一下,确认好他心中你这个团队要达成的目标
2)你自己是更注重业务,还是更注重人,这是两个规划的方向,每个业务分几个人,备选方案,明年要规划的新业务是啥,人才梯队做好
3)我是更注重人的leader,会按照硬技能和软技能分好维度,比如应急能力的框架,工程化,算法等,软技能里的抗压,沟通,执行,画出一个表,让团队里的人按照特点去点亮不同的维度
4)业务分方向,画一个树状图,每个节点需要多少人都标记清楚,需要多少人,还没到位的红色标记等 好像我就这些方法,比较粗糙,仅供参考
2、大圣老师,我想问一下怎么保持一个良好的学习心态,不过于急功近利,因为确实体验到了欲速则不达,总想学了立马就能得到很强的正反馈。
先承认自己是个普通人,然后使用争取的学习方法,推荐一下我的学习方法。
1)以月为单位指定学习或者阅读计划
2)烦躁的时候打局王者
3)不要急于制定看多少本书,或者看几个框架源码,先定一个学习的主题,基于这个主题去找书,找视频,找资料, 所有的内容都是为了这个新的知识体系,不要陷入伪勤奋中
4)费曼学习法 ,以讲一遍为目标的学习
5)讲起来太散,给你订个计划把, 推荐一本书《如何阅读一本书》 先来一周看完把
6)如果还是看不下去,建议你出去大厂面试一下,被面试官怼了,回来就能静下心来学习了
3、大圣老师,怎么提高自己在职场的不可替代性?
那么多框架和技术,把主流的一个吃透其实就有很大的不可替代性了,比如组件化,基建,监控,性能优化。也可以走横向的路线,比如我
1)提高自己的核心竞争力,能处理的问题更多
2)开始做技术管理,带出优秀的团队
3)培养好接班人
4)找到自己的优势,扬长避短,比如我就喜欢蛋逼,还挺适合讲课
4、请问老师,网络和算法这种提升性的技能,我们是一直学,还先把前端知识点能力提高再学?
这个属于两个维度的技能
1)前端知识点属于学了就有效,短平快
2)网络算法等基础知识,属于重要且不紧急的事,长线收益高,需要加入到日常工作中 结论是都要学,但是前端知识在一直更新迭代,每个新知识都学的话很累,学到最后你开始看源码的时候,你发现底层其实都是算法和数据结构,网络等知识,比如vue和react的虚拟dom,就是树形结构的操作,对这个操作的进一步优化, 使用最长递增子序列提高效率就是vue3的做法,把树改造成链表就是react16+的做法 最终都是要学计算机基础的,这些才是内力,所以我们工作中用啥就学啥。前端只是把算法和网络编程日常的学习任务, 你以后的核心竞争力也是这个
5、请教一下大圣,中级前端如何进行职业规划?
我感觉可以分几种情况
1)公司和团队业务有前景有意思,就好好研究业务,比如开始做基建规划,工程化体系建设,在业务中多承担责任,在业务中快速成长
2)公司也团队业务前景不明,比如很多同学只负责后端一个cms,团队只有两三个人,我建议把眼光放在社区开源里,开始去研究流行框架的源码,比如vue,react等框架的底层原理,这些框架中的最佳实践记得整理归纳,比如源码中用到的算法和数据结构,编译原理等,再去找书专项训练
3)上面两种情况 都建议刷刷算法题,学学网络协议,研究下编译原理等计算机基础
4)学有余力的情况下,建议再研究一下软技能,比如谈判,沟通等综合实力
5)规划其实不用太远,执行才是王道 共勉 个人意见,仅供参考
想看大圣大大更多精彩的回答?点击传送门直达专题!