我是个前端开发者,我到底要不要学Node开发?
春和景明
我总是不太善于做营销这一块,骨子里有点旧时穷酸知识分子的调调,内心里认定好的东西不需要做过多的修饰,说太多大话我会不好意思。
但我一个朋友言之凿凿的说,这个时代就是个浮躁的年代,你要善于制造焦虑,夸大效果,什么都得学,不学就落后,落后就要挨打。
反正课又不是药,吃不死人。
按照这个说法,长此以往,人人都得是苏东坡,音乐家、书法家、画家、文学家,噢,他还是个美食家。放在计算机领域,恨不得要求你,上能搞人工智能,下能搞操作系统。
然而世上只有一个苏东坡。人还是得认清自己,事事跟风,样样都学,反而落下个附庸风雅的名号。
所以,认清自己的现状,理智选择知识来学习,这一点尤为重要。没有那么多不学不行的知识,也别指望学个什么课就能脱胎换骨,达到Px,Tx。琴棋书画3年起步,5年入门,10年小成,20年大成,凭什么编程就能速成呢?
这世道,缺的就是清醒。
现在的营销都讲究“以德服人”,然而我觉得,知识这种事儿不能迷信权威,必须以理服人。讲道理,是本篇广告的“独特气质”。
新课是关于Node.js Koa的课程。那么问题来了,借用姜文的话就是:你XX的给我说说,我XX的到底要不要学XX的Node.js?老子学不动了。
没办法,这行就这样。你不学Vue,总不是跑去学React/小程序/算法与数据结构/TS去了,不断学习根本避免不了。一入编程深似海,从此女神是路人。所以关键在于把时间投在学什么上比较划算,利益可以最大化。从经济学的角度考虑问题,兼顾短期、中期与长期的利益,才是上上佳策。
明确表达我的观点,前端学习node.js,短期小收益,中期高收益,长期必然趋势。
诚实的讲,一个前端学习服务端编程,短期收益不大。但是考虑到中长期,投入一门课时间,收益还是很可观的——关键是它保留了你未来进阶/转型的可能性,而这仅仅只需要耗费你18个小时左右的时间。
短期来看,对于绝大多数前端开发者,将服务端技术直接应用到工作中的可能性不大。但短期最大的收益我认为是可以让你独立完成一个项目,比如自己开发一个完整的小程序。
不求人的感觉,真的很好。想想,接个外包项目,以前要分人一半,现在你自己照单全收,棒不棒;自己有个好的idea,挽起袖子就是干,爽不爽。
开个玩笑。但独立完成项目对于每个开发者来说,意义确实太挺重大的。这并不是外包只拿一半的问题,而是程序员价值的问题。能独立开发意味着你具备了不求人,不受人限制,甚至是未来独立工作、创业的可能性;独立开发也可以让你去践行自己的各种想法,不再因为好的想法由于不懂服务端而不能落地;独立开发也可以增强你编程的成就感,弄个项目只有fake的假数据有啥意思。
能自己独立做一个完整的Web项目,感觉就像一个熬了几个通宵的人,洗了个热水澡,伸了一个很爽的懒腰,舒服到骨子里去了。
中期来看,学习服务端编程,符合前端要将“传统后端”赶尽杀绝的气势。赶尽杀绝是不可能的,数据和高并发的架构设计依然是传统服务端开发者的领地。但前端现在的发展确实迫使web开发呈现出了”后端靠后,前端靠中“的趋势。服务端蜕化(不是退化,这种变化是良性的)成数据的提供者,大量的业务与数据合并交给前端来处理,这也是三大框架流行的一个因素。前端的重要性愈发明显。
现在的前后端界限非常的模糊。在中大型的项目中,整体架构是三层的,而不是典型的前后双层的。”后端更后“表达了传统的后端将蜕化到纯数据管理的角色,也就是我们说的“服务”的角色,它只提供比较干净的数据,而数据的整合,传输给前端的最终数据模型,都将由前端开发者自己定义。
简单点来说,前端开发者需要会写“API”接口。前端需要什么数据结构,前端开发者自己是最清楚的,所以业务数据结构的定义交给前端开发者是比较好的做法,这也是为什么很多中大型项目都有“中间层”这个概念。后端是微服务,专心做并发、性能与数据一致性;中间层整合成业务数据,并向前端提供API输出数据。
你成天喷服务端接口垃圾。好!你自己来写!
长期来看,30岁,算了,算35岁,是一个挺难的点。而这一点对于前端开发者来说尤为具有不确定性。
30来岁还能踏踏实实任劳任怨和大把大把年轻人比赛写代码的人真的不多。别听那些跟你说,50岁还能写代码的鬼话。50岁写代码,那可以是因为兴趣,但绝对不能是因为生活。就像我没事儿画会儿画,那是陶冶情操,靠画画生活,我怕不是要饿死。
对于一个程序员来说,逐步走向技术管理/技术总监的路是比较靠谱的一条程序员之路。不是说,35岁后你就不能写代码了,而是35岁之后,只写代码啥都不管的人,你所贡献的价值必定达不到你35岁时的薪资要求。薪资达不到,怎么平衡而立之年”老男人“的自尊心,又如何负担沉重的家庭负担?这个年纪的人需要做团队的决策者,给团队提供超越技术的价值。
不要类比尤大这种星光一样的人物,这并不多见。换个角度,能做出点名气的,混的还不错的,哪个是一点服务端都不懂的呢?
业界有一条不成文的定律,谁离数据更近,谁才有话语权。一个公司掌控技术全局的人必然是偏”后“的。所以我们可以看到大多数公司的核心技术管理者都是服务端出身,纯前端出身完全不懂服务端的CTO/技术总监,少之又少。但只懂服务端,完全不知道啥是三大框架的技术总监遍地都是。是不是不公平?但这就是现状。
不是前端就不能做技术总监/CTO,而是前端独立发展的时间太短。纯前端入门编程,在过去是没有的,绝大多数年纪在30岁以上的都是Java/C#/PHP语言入门编程的。所以,纯前端能否胜任全局的技术管理者,还无法得到有效的验证。
所以35岁这道坎,前端开发者怎么迈过去,还是个未知数。尽可能向服务器靠一靠,是一个不错的选择。反正也不是让你精通服务器开发,也不是让你去搞高并发分布式,但你必须要了解,要能自己独立做做中小项目。
退一万步讲,熟悉服务端API的开发绝对是面试加分项。
以上建议仅针对走技术路线的同学,未来要去做生意的、搞艺术的,或者家里有矿的,不在建议范围内。
此外,学习服务端编程也不是只有Node.js这一个方向,事实上,如果你心大一点,我觉得Python比Node.js更好,反正这两兄弟都差不多,服务端都搞不过Java。但如果你不想学其他语言,Node.js是你最低成本进阶服务端开发的选择。学一门语言并不是像你想象中的那么容易,如果会JavaScript,选择继续依附这个语言也挺好,至少你不用担心它”死“掉。
前端是框架竞争太残酷,但JavaScript一统天下;而服务端是语言竞争太残酷,昨天还是”世界上最好的语言”,今天就莫名其妙被唱衰了,我他喵的也不知道为啥。青出于蓝胜于蓝到未必,那大概就是一代新人胜旧人吧。
好了,最后要详细讲下课程。《纯正商业应用——Node.js Koa2开发微信小程序后端》到底讲了什么?Node.js有三大应用,前端工程化、Web开发和中间层。本课程主要是讲最为实用的Koa Web开发,并会给大家讲解中间层的概念和意义(不是重点)。工程化和Node.js原生接口基本没讲。
1. 新课程在业务上将配套我去年的小程序课程《纯正商业应用——微信小程序开发实战》,完成《旧岛小样》小程序的服务端开发,帮助同学们对完成完整的项目。前后分离,非必须配套购买,但在前端课程中讲过的知识点不会在新课程中重复。比如回调、Promise、部分ES语法。如果JS基础不好,还是建议看看前端课程。
当然,这都是业务。但熟悉我课程的同学应该知道,我的课,从来不以业务为主。编程思维、优质代码、更好的应用框架才是课程的核心。
2. 在新课程中,我们将二次开发KOA。说实话,KOA简直就是裸奔,精简的让人发指。我们当然不能裸奔,所以我们必须穿上漂亮的衣服,舒舒服服的去逛街。二次开发是非常要必要的。我说的二次开发并仅仅只是用上koa-body-parser,koa-router,koa-static这些常见的必备中间件。我们需要巧妙使用koa-router分离路由;需要做路由的自动加载来偷懒;需要编写Lin-Validator中间件来构建验证层;需要编写全局异常处理中间件;需要为每个错误编码还需要为权限编写中间件。
很多同学应该知道egg.js这个知名的Koa框架,但本课程解决的问题是egg.js没有解决的。事实上egg.js给出的只是一个企业级别的框架,但并没有给出像TP、SpringBoot、Flask框架中那些及其有用工具类、校验器、专门针对API优化的异常处理,甚至ORM层也没有给出范例代码。因为目标不一样,egg.js给出的是一个宏大的架子,怎么写代码并没有限定。但我的这门新课程给出的是一套小而优雅的Web API解决方案,我始终认为对于项目开发,没有选择就是最好的选择,先让自己开发更有效率是重中之重。有兴趣的同学,可以在未来把这门课程中代码的写法、工具类移植到egg.js中,两全其美。
3. 课程中少不了要深入理解下Koa三件套:中间件、洋葱模型、async和await。这个应该都被讲烂了,但新课中会让大家知道:
为什么一定要保证洋葱模型?不保证洋葱模型的后果是什么?
Koa中的中间件调用到底是同步还是异步?是不是一定要在中间件调用时加上async和await?不加又能怎样?
asnyc和await大家都会用,但当我们面临复杂的异步嵌套调用的时候,当我们面对Promise的时候,如何转化成async和await呢?await的本质到底是什么呢?
相信你听完课程后会有一些不同的理解。
4. 异步编程模型。排除语言的门槛,Node.js其实相对于Python、PHP等动态语言的同步框架,编程难度是比较高的。async和await降低了异步的难度,但是异步编程依然非常容易出错,尤其是在链式嵌套调用和异步异常处理上。这也是本课程要讲的重点。
5. Node.js中间层的概念。虽然新课程不是以中间层为主的项目,但对于Node.js中间层这个重要的应用还是必须要讲讲的。由于新课程需要调用后端的数据服务,所以刚好可以体现中间层的概念。
6. Sequelize 以ORM的方式操作MySQL。没有选择MongoDB。一个公司不可能招聘一个只懂MongoDB不懂关系型数据库的后端开发者。可以不学MongoDB,但是不能不学关系型数据库。不懂关系型数据库,谈不上入门了服务端。当然,如果你Mongo+MySQL文体两开花,那更好。
7. JSON序列化。凡是要做API,必然要给出一个灵活的JSON序列化方案,新课程讲给出几个层级的序列化方案来,包括Sequelize实体层,Scope层,Koa层。
8. 与微信小程序的对接方案,这里涉及到令牌的处理与无感知登录方案。小程序中的无感知方案和Web有所差异,它更简单一些。
9. 加强对JS这个语言的应用和理解。异步编程太能体现JS的特点了;原型链的理解也是本课程的一个重点。
最后,是最重要的一点。整个课程的Koa核心库构建思路其实来源于Lin-CMS-Koa这个开源项目。换句话说,学完这门课程,基本上入门了Lin-CMS的服务端开发,因为从接口到写法,新课程都和Lin-CMS保持同步。事实上我们推出Lin-CMS-KOA就是为了让前端开发者能够独立完成一整套CMS,必须是一体化的JS技术栈。
当然,Lin-CMS前端是Vue构建,如果还不了解Vue的同学,慕课网黄轶老师和DellLee老师的Vue课是绝佳的选择。
赶在新课程上线的前一天,我们发布了Lin-CMS Vue/Koa/Flask的beta稳定版。新版本重写了路由机制,优化UI布局方案,新版UI看起来更加清爽整洁。未来的Java版本也已经提上了日程。
demo传送门:
github传送门:
感谢一路有你们!祝你们前程似锦,快意人生!
共同学习,写下你的评论
评论加载中...
作者其他优质文章