我的2016

作者:frank 发表日期:2016-12-26 19:52:11 更新日期:2016-12-26 19:52:11 分类:故事旮

摘要

我的2016

正文

倏忽之间,2016年就要结束了,快的超乎想象。

非常幸运,娶到了心爱的薇薇同学,盖个章哈。

到这个月底,从事前端工作1年8个月,感觉自己也算是入门了。这段时间经历了几次大起大落,刚开始觉得前端很简单,非常容易上手,做了几个月后就凭借在GitHub搭建的个人博客进入了“JS中级开发群”,当时自以为前端就这样,也开始迷茫下一步该怎么走,直到遇到一个问题:

<button onclick="this.onclick()">Click</button>

上面的代码点击Click按钮的时候会栈溢出,当时很焦虑,想不通为什么,就去“JS中级群”请教了一下,被一些人鄙视,他们说“现在怎么什么水平的人都能进中级群”,有个人回答了这个问题,说onclick中的语句其实是被with(this)包装起来的,我并不认同这个回答,也没找到相应的文献证明这个回答,不过这个回答可以解释这个问题。后来看书讲到onclick中的this其实指向的是元素本身,书中也没有再多详尽的解释。我目前的理解是这句话其实就相当于在JS中写:

myButton.onclick = function() {
    this.onclick();
}

也就是说相当于有一个匿名函数包装了HTML中出现的与事件绑定的JS语句。当时说了句豪言壮语,谁要是回答上这个问题,我就主动退出“JS中级群”,结果……

从这以后,发奋读书,开始大量的购买前端相关的书籍,每天早上6点半起床看一个小时书,每天晚上下班后看一个小时书,直至现在,这期间看完了很多经典的前端书籍,也真正的学到了很多东西。说起来很惭愧,非常感激“JS中级群”中鄙视我的那些人,虽然我很鄙视这种在别人遇到困难还一副高高在上的行为。

看了几个月的书,又开始觉得前端不就是这样,学好HTML,CSS,JavaScript就可以了,也没啥难的。直到听到了一次知乎live。

我一直以为经验就是一种随着时间的流逝可以迅速积累的东西,经验并不会带来技术上的突飞猛进。直至最近听到贺老的知乎live,他讲到visited伪类的用法,我觉得很简单啊,但真正实践的时候才发现下面的写法是永远不会实现我要的效果:

a:visited::after {
    color: red;
    content: '访问过';
}

我要的效果是当一个链接被访问过的时候,会出现伪元素提示。为什么不会实现呢,我一直以为是语法的问题,直到Google后才发现:

"Note: For privacy reasons, browsers strictly limit the styles you can apply using an element selected by this pseudo-class: only color, background-color, border-color, border-bottom-color, border-left-color, border-right-color, border-top-color, outline-color, column-rule-color, fill and stroke. Note also that the alpha component will be ignored: the alpha component of the not-visited rule is used instead (except when the opacity is 0, in that case the whole color is ignored, and the one of the not-visited rule is used).

Though the color can be changed, the method getComputedStyle will lie and always give back the value of the non-visited color.

For more information on the limitations and the motivation for them, see Privacy and the :visited selector."

简单来说因为设置其他属性可能会泄露用户的隐私,可能会让别有用心的人知道用户访问过哪些链接,继而知道用户的兴趣所在。一般来说到了这里问题就解决了,我就可以心满意足的关掉电脑,兴奋的以为已经学到了很多知识。如果真的像上面那样其实我是真正的错过了很多知识,比如,为什么其他属性会泄露用户的隐私,CSS有那么多属性,难道其他所有的属性都会泄露隐私吗,泄露隐私会带来什么后果,日常工作中怎么防止用户隐私的泄露等等各种问题。经验不只是遇到了问题,继而解决问题的过程,而是不但要解决问题,还要继续问问题,再解决问题的过程。 通过听很多牛人的分享,我才知道怎么样才算正真入门一门技术,要学会质疑,学会问为什么,凡事要追根究底。 技术永远是用来解决问题的,脱离了实际的需求,谈技术就是纸上谈兵。前端的下一步是什么:不是技术本身,而是提高用户体验,比如考虑到视觉障碍者如何更方便的享受互联网服务。

谈谈技术。 刚入门前端直到现在一直在使用Angular框架,这是一个非常易用的,能大幅提高工作效率的前端框架,我从他身上学到了很多编程思想,比如MVVM,依赖注入,组件化编程,路由系统等等。但是也看到了他的一些不足,比如DOM节点过多的时候渲染效率会降低,要采取一些Hack手段防止整个DOM树更新,组件化设计比较复杂,对于新人来说,学习成本比较高,因为他引入了很多概念。

今年一月份开始使用React,这真的是一个与Angular完全不同的框架,天生的组件化,虚拟DOM带来的高效率的DOM渲染,单向数据流使程序非常容易理解和组织,配合Redux进行状态管理堪称完美。但是很不爽的一点就是代码写起来很累,状态很容易不经意间被修改(虽然配合一些库可以防止这个问题)。React带给我的最大的感触应该就是组件化编程。

最近的一个小项目,我尝试使用React的思想实现了一个小规模的组件化编程框架,实现了路由系统,组件的实现和渲染系统,事件系统。我觉得学习一个框架关键是学会他的思想以及他要着重解决的领域问题。

我很幸运,所处的这个时代正是前端技术大爆炸的时代,各种框架和库如雨后春笋般汹涌而出,新思想和新挑战会淘汰掉一大批安于现状、不思进取的 Front Ender,而那些经过这个时代易筋洗髓的勇者会成为下一个大爆炸的缔造者。但在这条路上最大的挑战就是坚持本心,不要被伟大的框架和库蒙住双眼。

我很羡慕身边那些有师父的新人,有问题可以相互探讨。我进入CVTE近5年基本都是一个人在研究技术,非常孤独,有问题只能Google,没有针对前端的培训可以参加,没有人可以一起Review代码,也没机会听到别人说我的代码写的很烂。这种孤独感严重影响了我的情绪,甚至一度变得非常忧郁,不愿与人交流,对待他人忽冷忽热。老婆都说我整天一副拒人千里之外的样子。我讨厌这时候的自己,前几天(12-24)提出想离职去一个有前端团队的公司,但是经过一个圣诞节,与老婆的坦诚沟通后,我觉得最主要的问题还是在自己身上。人们总以为换个环境就可以改变一些东西,却不知道如果自己变了,环境就很容易变。接下来的一段时间,改变自己,如果有一天开始喜欢自己了,再想想要不要离开。

2017年,我仍然会不断学习新的技术框架,学习新思想。也会慢慢转换思维,从单纯的解决技术问题转变为使用技术改善用户体验。