Part 3延伸:大前端变化那么快,如何才能做到每日精进?
有朋友问现在Android开发和web前端开发哪个前景更好?我的回答是明显是前端更好,看一下移动端发展过程
native < hybrid < rn/weex < h5
目前rn和weex的开发逐渐变得主流,组件化写法已经由前端主导了。以前ios和android程序员占比很高,但现在就留1到2个写插件,真是差别很大。
Web开发对移动端的冲击非常大。当然现在Web技术也开发PC client了,比如vscode是通过electron打包的,效果还是相当不错的。
前端可以说是最近几年开发里最火的部分,原因很多,最主要是开发方式的变更,以今时今日的眼光来看,称之为现代Web开发是不为过的。
先给出现代Web开发的概览图
每次演讲我会都问大家是不是前端,回答“是”的人非常多,我会开玩笑的恭喜大家:“现在的前端就是钱端”,确实,现在前端发展异常的快,而且没有趋向于类比java里ssh框架的那种稳定,所以未来很长一段时间,还会增长,持续混乱,这对前端来说是把双刃剑,一方面有很强的压迫感,不学习就跟不上时代,另一方它也是机遇,能够带给更多机会,包括money。
大家都疑惑的一个问题是如何在这样剧变的时代能够通过学习来应变,我可以很负责地告诉大家,没有捷径,但通过掌握 Node.js 能够帮你降低这个学习曲线而已,毕竟Node.js是大前端的基础设施。大家可以看一下,前端的开发过程,模块化,构建,辅助工具,调优,架构调整,可以说Node.js是无处不在的。
其实,辅助大前端开发只是Node.js的一个非常无心插柳的衍生功能,通过掌握Node.js能够让你能做的更多、获得的更多,甚至可以说有更多自我实现的快乐,这也是我那本书书名字里“更了不起的”要去阐述的内容。
综上种种,就是我一直提倡以 JavaScript 语言为中心的 Node全栈
概念的缘由,JavaScript 覆盖所有前端,Node.js 擅长做 I/O 密集型的后端,外加辅助开发的各种基础设施,无疑是工作、学习和成为快速掌握全栈技术最好的途径。你会的越多,你能做的就更多,你的人生也将会有不一样的精彩篇章。
全栈核心
- 后端不会的 UI(界面相关)
- 前端不会的 DB(业务相关)
只要打通这2个要点,其他就比较容易了。最怕的是哪样都接触点,然后就号称自己是全栈,建议大家不要这样做,这就好比在简历里写精通一样,基本上都会被问到尴尬。全栈是一种信仰,不是拿来吹牛逼的,而可以解决更多问题,让自己的知识体系不留空白,享受自我实现的极致快乐。
我的全栈之路
想问一下狼叔最近的业务一直都是简单的用express搭一个后端服务,没有其他更加深入node的业务了,这种时候应该如何自己给自己创应用场景呢
没有目标就向钱看,有目标就向前看
- 从 java 开始,蹭课,背着机箱到深圳,3个月胖20斤
- 坚持翻译英文文档,看 《Thinking in Java》
- 毕业后开始 bi,整理 bi 文档
- 学长明林清,传授 jQuery,愿意学,别人就更愿意分享
- 接手《内蒙广电数据分析与科学决策系统》,打通前、后端
- 广东联通,自己造轮子,写 jQuery 插件,DRY
- 做云计算,学习 AIX,写有《凌云志》
- 分手、离职,去做 iOS,从 cordova 开始搞 H5,研究各种移动端框架,自己写框架,转原生
- 面试也是学习的利器,轻松进新浪
- 总结了大量 iOS 经验,想写书,结果写了一堆写书的工具
既然无法逃避,就热爱它,最后变成兴趣
- 去网秦做技术总监,做首席,管架构,带人,写开源项目
- 创业,当 CTO,结婚,做公众号运营,写书,最苦的时候没钱吃饭,又不能找媳妇要,只能在 StuQ 上讲点课
- 加入去哪儿网,任职前端架构师
- 加入阿里巴巴,前端技术专家
人生不只有代码,但它能让我快乐,终生受益
也曾懵懂,也曾迷茫,但我这人比较傻,一直信奉:“一次只做1件事儿,尽力做到极致”,短时间看这是比较傻的,但一旦你坚持下去,你就会发现技术其实是门手艺,厚积薄发。
我没办法说自己最擅长什么,但在什么场景下用什么技术是我擅长的。或者说,应变是我最大的本事。很多框架,新技术我都没见过,用过,但花一点点过一下,就能拿已有的知识快速的理解它,这其实是长期学习的好处。
现在越来越忙,写代码的时间越来越少,技术又越发展越快,我能做好的就是每日精进,仗着这点已有的知识储备跟年轻人比赛。我不觉得累,相反我很享受这种感觉,没有被时代淘汰,是一件多么幸福的事儿。
从后端转
做后端的人
- 对数据库是比较熟悉,无论 mongodb,还是 mysql、postgres
- 对前端理解比较弱,会基本的 html,css,模板引擎等比较熟悉
4阶段循序渐进,build 与工具齐飞
前端开发4阶段,我的感觉是按照顺序,循序渐进就好。
从前端转
从前端往后端转,api 接口非常容易学会,像 express、koa 这类框架大部分人一周就能学会,最难的是对 db、er 模型的理解,说直白点,还是业务需求落地的理解
我们来想想一般的前端有什么技能?
- html
- css(兼容浏览器)
- js 会点(可能更多的是会点 jquery)
- ps 切图
- firebug 和 chrome debuger 会的人都不太多
- 用过几个框架,大部分人是仅仅会用
- 英语一般
- svn/git 会一点
那么他们如果想在前端领域做的更深有哪些难点呢?
- 基础:oo,dp,命令,shell,构建等
- 编程思想上的理解(mvc、ioc,规约等)
- 区分概念
- 外围验收,如 H5 和 hybird 等
- 追赶趋势,如何学习新东西
以上皆是痛点,所以比较好的办法应该是这样的。
- 玩转 npm、gulp 这样的前端工具类(此时还是前端)
- 使用 node 做前后端分离(此时还是前端)
- express、koa 这类框架
- jade、ejs 等模板引擎
- nginx
- 玩转【后端】异步流程处理(promise/es6的(generator|yield)/es7(async|await))
- 玩转【后端】mongodb、mysql 对应的 Node 模块
从我们的经验看,这样是比较靠谱的。先做最简单前后端分离,里面没有任何和db相关,前端可以非常容易的学会,基本2周就已经非常熟练了。一般半年后,让他们接触【异步流程处理】和【数据库】相关内容,学习后端代码,就可以全栈了。
从移动端转
看一下移动端发展过程
native < hybrid < rn/weex < h5
目前rn和weex的开发逐渐变得主流,组件化写法已经由前端主导了。以前ios和android程序员占比很高,但现在就留1到2个写插件,真是差别很大。狼叔一直固执的以为未来是h5的。
现在的 Native 开发是姥姥不疼舅舅不爱,非常尴尬,很明显连培训出的人就业不要工资混经验就很明显了。另外领导们也都在惦记,能不能用 H5 写?这还算是保守的,如果直接激进的就直接上 RN 了,那么 Native开发的程序员就变了
一个写插件的程序员…招谁惹谁了。。。。
要么忍,要么转,没办法,认命吧,温水里舒服了几年,也该学点东西了
- hybrid 或组件化开发,你总要会一样
- 无论哪种,你都离前端很近,因为 H5 或组件化都是从前端走出来的
- 组件化在前端领域先行,无论借鉴还是学习都不可避免
- 如果没时间就直接上组件化,如果有时间就好好学学前端完整体系,最终也还是要学组件化
原生开发就是 iOS 用 OC/Swift,Android 用 java 或 scala 等,就算偶尔嵌入 webview,能玩js的机会也非常少
所以移动端转全栈的方法,最好是从 cordova(以前叫 phonegap)开始做 hybrid 开发。
- 只要关注 www 目录里的 H5 即可,比较简单
- 如果 H5 不足以完成的情况下,可以编写 cordova 插件,即通过插件让 js 调用原生 sdk 里功能
- cordova 的 cli 可以通过 npm 安装,学习 npm 的好方法
- 学习 gulp 构建工具
只要入了 H5 的坑,其实就非常好办了。
- 然后 h5、zeptojs、iscroll、fastclick 等
- 然后微信常用的,如 weui、vux(vue+weui)、jmui(react+weui)
- 然后可以玩点框架,比如 jquery mobile,sencha touch
- 然后可以玩点高级货,ionicframework(基于 angularjs、cordova)
- 然后前端4阶段,依次打怪升级
- 然后 node
这个基本上是我走的路,从2010年写iOS、做phonegap(当时是0.9.3)、一路走到现在的总结吧!
以前技术发展还不是那么明显,写 Java 的时候 Apache
的开源用的比较多,那时开源的代码托管sourceforge
,google code
也都凑合用,自从 Git
和 GitHub
出现时候,代码社交兴起,极大的促进了开源的活跃,使得大量明星项目脱引而出。这是好事,如果没有开源,中国的软件水平真是要落后好多年。那么问题也来了,如何能够在技术快速发展的今天,个人成长也能更好呢?
学习的3种层次,跟人学最快,其次是跟书(或者博客)学,最差的是自悟。但是牛人不能遇到,遇到了也未必有精力教你,书本或者博客,别人有,但不一定写出来,就算是写了,可能只是点到为止。至于自悟,如果没有深厚的积累的,还是有相当大难度的。
对于开发来说代码是一切基础,在掌握了一定计算机基础后,其差别就在于代码质量和眼界。编程没有捷径,能够做到每日精进就是极好的。现在开源代码非常多,要能够从中获取自己所需的知识,也是一种本领!如果能够坚持着每日精进,根本不需要向其他人学习的。
大家可以在 Github 随便打开一个前端项目,里面有一半以上都是 Node.js 相关信息,各种包管理、测试、ci、辅助模块,如果大家对这些基础信息掌握的非常好,那么学习一个新的框架,你要比别人快好多,最重要的是学了一次,到处使用。
很多人问我怎么才能成为一个 Node.js 大神?我的回答是“在cnode论坛上坚持写文章和开源项目2年,足矣,轻松进阿里腾讯,不用你找他们,他们自会找你的”。
从今天起,开始重视开源项目,重视 node,做到每日精进