Talk is cheap. Show me the code.
——Linus
关于题外话
基本上我的每篇技术博客开头都会写一些题外话,交代一下写该篇博客的起因缘由等等,象征性地赋予该技术博客一点点温度,做点前戏什么的,而不是一上来就是直接手撕技术
但是这样也总会让人感觉废话有点多,然后失去耐心,做技术的人好像都比较崇尚 Linus 所说的 “放码过来就完事了” 的思想
所以这篇博客也是在总结 webpack 的时候写点题外话,发现这个题外话越扯越多,于是我就抽出来单独写了一篇,备胎转正,就当作正文吧,此片没什么技术性的东西,皆是愚见罢了
(想喝)一点点的小思考
前些日子刚好读完一本书:《人类简史》,很有味道,视角格局很大,虽称 “简史”,但是学术味道没那么浓,全书有很多新奇的看法,很多幽默的叙述,五星安利!
之前学弟学妹们从 html + css + js 等传统老模式转到学前端模块化,配合 vue 什么框架就会很不适应,像脚手架啊,打包啊,起本地服务啊等等概念扑面而来就一下子比较懵逼,无所适从,然后跑来问我学什么,怎么学巴拉巴拉,就跟我当时在这个阶段也一样,就会深深地感觉学不动了学不动了(虽然好像现在我还是这么觉得)
其实现在我自己再回头看,其实觉得很多使用 Vue、React 搭建的项目使用 html+css+js ( jq ) 三大件技术栈也可以做:使用三大件多简单,项目主体三个文件夹,一个放置 html、一个放置 css、一个放置 js ...UI 搭建也有 bootstrap,jq 也有很多库可以使用,这样对于新手极其友好,一个月学完三大件直接就可以搭建项目了,为什么要用 webpack,gulp,babel,bower 等等一系列技术呢?
为什么突然提到《人类简史》呢?
在 《人类简史》中是这样描述 农业革命 的——史上最大的骗局:人类最原始的时候是自由自在的采集者,以摘采野果和捕猎为生,可能一天在外不长的的时间就可以获得一天所需的热量的食物,然后之后的时间就可以聊聊天,睡睡觉,他们没有时间的概念,住哪里都可以,的确是自在独行
但是农业革命后,人类驯服了小麦等一系列农作物后:从此人类需要住在麦田附近,农作物娇贵,所以人们需要除草除虫,松土施肥,日出而作,日落而息,于是人类就这样被束缚住了,人类生理结构也不适合长期弯腰劳作,所以面朝黄土背朝天的生活对于身体是压力极大的
同时,当一个种植者是要定居,相互协作的,这时候在适宜种植的地带慢慢形成聚落,然后开始城镇化,这时候人一多就需要管理者,需要军队保护领土和财产,也就是土地和农作物,于是就产生了阶级,就有了剥削……于是底层农民越过越苦,终年终日劳作,却只能维持生计,甚至吃不饱……
在这一过程中,小麦等农作物是最成功的,数量大大增长,受到的的待遇也远超于曾同为野间不起眼植物的其他杂草
所以书中发出了这么一个疑问:究竟是人类驯服了小麦,还是小麦驯服了人类?
同理,当年互联网兴起,各个门户网站之后蓬勃发展,从后端自己写 JSP 之类的前端页面工作,到慢慢的前后端分离,好像掌握 html + css + js 就够了,做前端的自由自在,工作简单,后来呢,各种规范和各种技术变革出来了,于是很多打包工具,框架等等兴起,并且越演越烈,日新月异,前端从业者们苦不堪言,最多的一句话就是 “学不动了,学不动了” ,正如如今每每尤大一放出什么关于 Vue 消息:Vue 改版啊,更新啊,增强啊,都总是看到一群人哭喊着 “求求你慢点更新,我都学不动了”
于是我们发出了菜鸟的疑问:为什么我们要疲于学习这些新的前端技术呢?大家都用三大件不好嘛?
这个问题换一换:
- 为什么要顺应农业革命呢,我们过着自由自在的采集生活不行嘛?
- 如果现在把小麦都拔掉,回到原始的采集者生活可以嘛?
首先回答第二个问题,我们种了几年小麦,发现,“卧槽,我是为了更好的生活才种小麦生活,怎么越种越被束缚被剥削,生活越差呢?” 然后你想着不种了,全部拔掉,当一个自由自在的采集者,但是这时候你发现,由于种植小麦,你有了稳定的食物来源,稳定的住所,同时食物也比以前采集的时候多了,于是你娶了个老婆,多生了几个娃,这时候已经没办法靠着采集维持家庭所需了,所以你发现:“卧槽,劳资被套牢了!回不去了!”
正如你工作的时候一旦买了房要还房贷,就被套牢了一般,跟大学实习的时候工作随心所欲的心态和选择就完全不一样了
再从大格局上回答第一个问题:其他部落开始种植小麦等农作物,于是食物来源稳定,同时收获也比以前当采集者多得多,于是人口数量大大增加,所以它需要开拓更多的土地,养更多的人
这时候部落间就会产生冲突,对于那些处于原始以采集为生的部落,直接处于绝对下风:在那个时候,打战谁人多就谁有绝对优势,实行了种植技术的部落有稳定收成又有丰富食物储备,人口众多,有绝对优势,所以要么大家都被裹挟着种植农作物,增加人口,或者选择不做改变被消灭……
同理,前端也是如此:
JS 被设计出来是很仓促的,JS 设计者用了10天时间,借鉴了部分面向对象编程,部分函数式编程,设计出了 JS ,后期又因为种种原因难以调整,于是 JS 一直有各种缺陷被人诟病
所以人们开始有了种种方案:
- webpack 就是这么一种解决方案:解决 JS 的依赖问题,进行模块打包,解决前端 JS 层层依赖,依赖顺序的问题,还有其他前端资源:CSS,图片,文字...的打包问题
- bower 用来解决前端的依赖包的问题
- babel 用来 ES6 转 ES5
- gulp 用来解决一些可以避免繁琐,可以自动化的操作
...
包括后兴起的框架:Vue,React,开始让前端变得越来越强大,JS 的超集 TypeScript 让前端越来越规范,适合大型项目的开发
于是乎,就有如下场景的发生:
前端变得越来越专业化,门槛要求越来越高,一个输出 HelloWorld 的 demo 用一个脚手架搭起来目录结构都极其夸张,因为里面集成了太多东西...
但是,这是大势
我们已经回不去之前的 html + css + js 的幸福时光了,现在只会这个基础的三大件都已经不好意思说自己搞前端了
当所有应用采用了新的技术,将项目变得可读性维护性越来越高,技术栈都采用了 “高内聚,低耦合” 的软件工程思想实行后,如同做盖浇饭一样,要什么种类的盖浇饭就浇什么种类的汤汁就好了,项目开发速度大大增加
互联网公司有时候先发优势极其重要,有时候快一步就步步快,所以公司要求员工必须不断学习新技术,提高项目开发速度,效率和维护性等等,开发者也需要不断学习以提高自身竞争力
回得去嘛?回不去了...
仰之弥高,钻之弥坚,道阻且长,你我共勉