前些时间,前端真的很“乱”。

作为小前一枚,实在没法和那些大神搭上什么腔,说实在,也没有必要搭上腔,因为就好比,虽然我没有学过PHP,但是我知道:PHP是最好的语言!

:—)

这里来说说我大三,那时偶尔一次,打球回宿舍,心血来潮,从图书馆借了本《javascript语言精粹》和《XX Photoshop技巧》,先撇开后面那本不说吧,对于当时的我来说,TM这本书基本就是天书,因为我编程经验基本为零,更别说连面向对象都搞不清楚了。

脑子坏了?搞计算机的,MD放着正课不学,基础都没学好,就去玩js?再说,难道不知道前端TM有多坑吗?

“我靠,谁知道啊!”

我想,基本没有哪个学校会把“前端这门学科”当做标准教材来分配学时让学生学习吧?况且当时,连前端职业的概念,都鲜有人知。能够接触到前端,于我,无非就是一条简单的个人信仰:做自己喜欢的事情,做别人不做了的事情!

于是,实现一些简单的js特效、PS美化一些照片成了我在人前炫耀的资本,然而,仅此而已。看不懂的书,我们可以默写代码,然后通过大量的代码(垃圾代码也好,看网站源码也罢)练习,然后回头看书领悟。

其实,能够在学习前端的启蒙路上,接触到《javascript语言精粹》,其实是不幸中的万幸,通过这本书,我开始便了解了js的优雅与糟粕,让我能够在早些的时候,至少能够按着这本书教导的规范去约束自己的代码。对这门语言能产生好感,在我看来,并不在于你知道了什么是原型、什么是闭包、什么是捕获和冒泡,而是在于你能了解这门语言“糟粕”的地方,然后采用各种所谓的“黑魔法”去避规掉(包括良好的编程习惯)。

对我而言,学习前端最大的乐趣在于你能通过这门语言欠缺之处,窥视到世界上的很多其它新鲜的事物:

为什么我写js,没有class关键可以用?你会重新去wiki了解C语言,去了解java、C#、甚至C++,了解他们的区别,这个时候回归本质,你会发现原来面向对象就像一层包裹在普通语法上糖衣,在各种高级语言里面,类这个概念,仅仅是面向对象一个分支而已,哦,原型也是面向对象!

为什么我写js,不能像java那样写while(true) { ... }?你会又去重温什么是线程,你会各种搜百度、谷歌,高手说,老子早就知道为什么了!但是你出生就是高手?好吧,所以去写写java的多线程跑跑看,所以去陶腾一下linux,把以前网络通信copy过来的代码好好重新拜读一下。MD,还是搞不懂,是不是概念不清楚,所以又去拿出操作系统好好读读。看了书也好,貌似知道java天生需要考虑多线程的问题,不然tm就有可能一段代码可以直接击穿到另一段代码的if语句块里面去。回头看js,我靠js不是单线程吗,把while block到js主线程里面去,浏览器直接给你来页面崩溃!哪里来的机会给你并发?

为什么我写js,get不到页面元素,不是明明有那个div吗?我靠,每一个人都有理由说这是一个前端弱智的问题,但是你不得不承认,哪怕你是个所谓的“伪web前端”,也不可能没有这么经历!

为什么this指向了window?为什么我在for循环里面生成click函数,click都是一样的值?为什么我页面js按他们说的写到body底下,但是页面开始显示的并不完全?为什么js不需要编译啊?

在这个过程中,我并不在乎别人是怎么走过来的,但是每一个前端小鸟,在开始入门的时候,基本都会产生类似各种各样的疑问。在这个过程中,我一样会接触到算法的书籍,一样会接触到关于设计模式的书籍,甚至会异想天开去搞一些打算“改变世界”的事情(学着大师造轮子)。

《javascript忍者的秘籍》是我认认真真读的最后一本关于js的书籍了(这本书其实出版至今有点小久了,自毕业后,基本没有抽出任何时间拜读老外的经典了),在这本书里面,能深深地感受到一个n年老司机对技术最根本的追求——把算法以及一门语言的特性,优雅地运用到实际的工具中,并且能举一反三地发散。

我并不是想说我读了几本关于js的书,如今就像升仙了一样,各种顺利。回头看知乎、博客上的牛人,没少人是科班出生,读万卷书,行万里路的人比比皆是。但是回归到我对如今前端的看法,各种好玩的插件,各种棒棒的开源库,让我觉得前端真是如沐春风。

三年以来,我没有做过重构,对css这门传说中的DSL从来就是一步一个坑,记得大学毕业那年刚来深圳,偶尔的一个机会,竟然等到了TX的一个面试电话,当时的我那心里简直是爽翻了,不错啊,刚毕业竟然没有走校招,直接被TX看中了,于是接了电话,也没有说把面试时间往后定定,好好准备准备,现在看来,当时基本是社招裸面......,其实也没有什么,一面做了一套相当基础的笔试题(偏向js,貌似TX习惯性考笔试哦),不过还不错,不卑不亢地竟然及格了,后面面试官也是一题一题地给我讲解,甚至给机会让我重新考虑做错的题目,第一面其实感觉还不错。

然后重点在后面,第二面的面试官基本把我css的功底全部揭光,什么是三栏布局?什么是css权重?background的书写顺序?尼玛,劳资对这些哪有概念,有时候为了完成一个界面布局,只要能实现效果,粘的贴的,鬼知道,有时候甚至用js直接在界面初始化算出的值,复制到style上就好了。

Game Over!

从头走来,于我,最可悲的地方在于,不是你学习能力不够,也不是你对某些知识不了解,而是孤独。

假如我有一帮朋友,能够指明我哪些不足点,我会不会会像学习js那样,早早地去系统地学习css?没人告诉我哪点不对,没人告诉我哪点不足。那就这样,假如你TX不给我机会去弥补我的不足,那至少你能告诉我哪点不足,于是我当时如痴如醉地开始大范围的面试,没有任何项目经验,那就在github上面挂几个demo呗。后来,我突然发现,面试并不是主动表现你的弱点,表示你的学习的意向,这是小白,相反,如何扬长避短才是面试的王道啊!

很多时候,我们看待问题,我们总是强迫自己多客观、从不同维度去看待一个问题,那么,我问我自己,工作、学习、生活,哪个价值最大?其实面对这个问题,从另一个角度看,这个问题是不对的,每一个人都缺不了这三个面,而且无关轻重,面面俱到,相辅相成才是最终的目的。所以无论我们对待我们的事业,对行业性的广度的了解、深度的理解,是需要很长很长的时间去奋斗的。

只要无关道德问题,任何争议在这个世界没有谁错 —— 认可是别人给的,但是你可以先认可自己。