2016 终于要结束了,虽然满怀期待地迎接 2017,但回首 2016,真的非常辛苦。因为我知道,2017 肯定会更加辛苦。在这有限的时间内,我学到了非常多的知识,这一年学到的知识,比整个本科学到的还要多。
这一点都不夸张。本科四年,迷迷糊糊的不知道自己在干嘛,视野很窄,学到的知识很窄。读了研之后,我所考虑的第一件事,就是选择一个方向,然后选了半年,选好了,2016 也到来了。
本科就开始接触前端,真正让我对前端产生好感的是研一上学期的一个项目,我负责前端那一方面。虽然对前端没有一个系统的概念,碰到问题,基本靠谷歌(百度),虽然也能解决问题,但学不到东西。
喜欢前端,还得从喜欢 JavaScript 说起。不过,早期时候的学习 JS,都是把它当作 Java、C++ 来学,只是觉得它就是一门普通的语言,当然,这属于最糟糕的学法,对于 JS 中非常重要的思想一无所知。
不过,这一切,都在 2016 改变了,2016 真是蜕变的一年。
虚拟现实,很火
今年开心很晚,大概 3 月底才开学,所以前面两个月,不谈。
研一下没有多少课,导师允许的情况下,跑到一家离学校很近的公司实习(地铁一站路)。公司很小,刚起步,人不多,真是应了那句话,去小公司实习,啥活都干,非常庆幸自己可以在这里得到锻炼。
公司属于创业公司,主打虚拟现实,我在的时候,方向是房地产和旅游,现在转到教育方面。在这里,我能接触到前沿的虚拟现实技术,给我最大的感受就是,虚拟现实非常火,但技术不够成熟。虚拟现实将要开创一个行业,但这需要硬件和软件的支持。
我在这里做的事情很多,写过文档,做 Unity3D 开发,Arduino 单片机开发,还负责 P 图,维护、修改公司的网站,甚至我还是个网管,买服务器、装电脑、修电脑。中间还有一次去苏州的一个展会参加展览,展示公司的产品,由于 VR 产品非常有观赏性,很多人驻足,我和公司另一个同伴一起解说,也算是一次锻炼吧。
先来说下 Unity,它本身是一个游戏引擎,支持多平台,由于它游戏级的画面渲染效果堪称完美,被众多虚拟现实开发这用来当作虚拟现实引擎,效果比之前的一些引擎好很多。
Unity 上手很容易,但进阶很难,这往往需要一个全能的开发者,会写脚本,会建模型,还要懂得一些光照、渲染的基本原理。由于 Unity 需要的资源文件很大,用 git 或 svn 之类不方便管理(不过我们公司确实没找到一种合理的团队合作解决方案),好在公司人不多,我写完脚本,都直接发给 leader,有 bug,我修改一个版本,再发送。
我对模型和渲染一概不知,不会用 3DMAX 建模,不会调材质,但我会写代码。Unity 运行是一帧一帧的,代码逻辑很好理解,且支持 C# 和 JavaScript 语言,基本都是写脚本,拖到物体上,运行。
我用 C#,门槛很低,大概一个多星期,就可以上手写代码了,比如太阳光随着时间的变化,开关灯,移动,这些我都可以写,后来做虚拟现实自行车项目的时候,接触到物理引擎,碰撞,加速度,在参考别人的代码下,我也可以写。
之所以不用 JavaScript 来写而选择 C#,一方面是网上 C# 的代码样例很多,方便参考,另一方面,虽然 JavaScript 适合写脚本,但是每次我看到 JavaScript 的代码,都感觉非常奇怪,这种风格我真的无法忍受,举个例子:private var cubeTransform;
,所以,我还是选择了 C#。
还有 Arduino,一款超级流行的开源硬件,我用它来收集自行车的信号,传递给 C# 写的串口接受程序,实现软硬件的互动。本科最辉煌的那段时间就是搞单片机的时候,先是 51 单片机的那门课考了满分,老师都说历史第一人,后来期末课设,自己手动焊板子,写代码,做一些好玩的东西(板子是别人设计好的,不懂设计)。那个时候一整天待在机房,写汇编,直接操作寄存器,写中断,写串口程序。
这直接导致我的毕设和硬件有关,读了研之后仍然在学一些硬件的东西,这也是我去公司实习的目的,虽然我是以硬件的名义去实习的,但实际做的比这要多得多。
6 月的时候,我就离开了,因为导师有其他的事情安排,现在公司发展很快,方向很好。这三个月,学到很多知识,踏入了一个行业,并了解这个行业的业务和发展,虽然我不打算从事这个行业,但这却是人生的一次锻炼。老板人很好,同事也很热情,祝愿他们能够创业成功。
建站和个人博客
实习的这三个月,一周 5 天有三天在公司实习,有两天在学校上课。白天在公司,晚上就开始学习一些自己的东西。
当我开始想学习前端的时候,就拼命的在微博上找一些前端的大牛,看一看他们都在忙什么。基本上所有的人都在写博客,而且大多数都有自己独立设计的博客站点。当时我还傻乎乎的认为,博客这种东西应该是文人的喜好,而我印象中技术人员的博客大多都还停留在教你怎么配置文件,或者记录下今天解决了一个什么样的 bug。后来自己亲自写博客之后,发现远比想象中要复杂的多。
先从建站说起。之前就有 Linux 系统的基础,恰逢腾讯云和阿里云都有学生计划,价格很便宜,腾讯云的学生计划更是低到了一元每月,还免费送域名。
建站的过程中,学到了不少知识,反正是服了国内域名的备案。以前学网络的时候,知道什么是 DNS,通过腾讯的域名备案了解到什么是域名解析,而又通过域名解析又了解到了 @ * 主机记录和存活时间,也学习到不少新的知识。
或许当初我放弃一些免费的博客平台比如 cnblog、csdn 或简书、知乎头条等是一个遗憾,但是手动搭一个开源博客,并设计自己的样式,真的受益匪浅。感觉自己是一个前端人员,就要有自己设计的博客,且在设计的过程中,学习到很多前端之外的东西。
Wordpress 很火,但由于它是 PHP 语言写的,而我在选择的时候更倾向于一个 js 语言的框架。Ghost 是一个基于 nodejs 的开源博客平台,并且可以自己设计主题,参考官方的 API。我的第一个主题使用的是别人的,在此基础上,我增加了一些修改。不过那个时候,啥也不懂,不会使用构建工具,直接在 css 文件里改代码,非常痛苦。
大概这样子写了三个月的博客,说实在的 Ghost 真的是一个优秀的博客框架,但我在使用的过程中也发现了不少的问题,Ghost 是一个多人博客框架,对我来说,有点大材小用;好多功能都不够完善,Ghost 发布至今已经很多年过去了,但仍然不支持评论系统;Ghost 更像是给一个非技术人员提供的博客,而我如果想要自己扩张插件,很难。。。
上面不是我放弃 Ghost 的主要原因,当我遇到 Hexo,我知道是时候放弃 Ghost 了。Hexo 是一个静态博客,本地生成,可以 push 到 github 上,当然也可以用 nginx 代理到服务器上。Hexo 提供两种方式来写插件,一种是用 npm 管理,以 hexo-generator-{name} 的命名方式,另一种就直接在根目录下建一个 script 文件夹下全局函数即可。
参考 Hexo 的 API,我自己设计了一套主题,样子很丑,还算凑合。大概花了两个多星期,弄完了之后又有不少小的修改,总体感觉 Hexo 很优秀,但是有时候写博客也会很麻烦。
写博客给我最大的好处就是知识点的梳理,我的博客大多都是以学习为主,所以在写一篇博客的时候,往往要查阅很多资料,本来以为我对这个知识点已经很了解,但是查阅资料才发现,还有很多不足。写博客是一种锻炼,在写的过程中,要学会如何组织语言,还要把一些知识点写的通俗易懂,写完了之后,往往还要检查几遍,以确保不会出现纰漏。写博客本身就是一门艺术。
写博客的过程中,还学会了如何使用 markdown,如何排版,如何使用标点符号,这些都是非常小的细节,但又如此重要。
安全公司里实习,如履薄冰
后来 6 月份,来了南京,导师安排的,公司是做安全的,我在的项目组是做 web 安全的,在安全公司里实习,最大的感受就是,宁可错杀一百,不愿漏掉一个,尤其是一些可能对公司安全带来威胁的小细节,坚决杜止。
在这样的公司里工作,是福气,因为你必须要逼着自己,宁可多检查两遍代码,也不能等到它出现 bug 被 leader 骂一遍。公司里没有所谓的测试人员,自己就是测试人员,而且代码写完了,一般隔天就上线了,如果那个时候来个 bug,真的是毁灭性打击。还好,代码很简单,出现的问题都不大。
公司里很多时间都在写脚本,用 Python,各种搭建靶机环境,期间,最大的收获之一是正则表达式的熟练掌握。对于正则,不用的时候,感觉没啥,但当真的用到它,如何能写一些高性能的正则表达式,这都是一个程序员必须掌握的,受用终生。
之前对于正则的种种,还停留在入门的阶段,属于那种会用但不深入。在这里实习,初期的几个月里,几乎天天都和正则表达式打交道,自然而然,就非常熟练了。
既然是做安全,有时候需要复现一些漏洞,就需要搭靶机,这也是一个循序渐进的过程。早期都是在外网用虚拟机装个 Ubuntu,然后把整个虚拟机文件迁移到内网(内网是禁止连外网的),后来开始转入到 docker 的使用,效率大大的提升,迁移文件也方便很多。整体感觉,docker 的火是有其必然原因的。
由于是做 web 安全,有一部分的时间,是在学习 Http 协议,对于请求响应的过程做过颇多的研究,而且这和前端必备的知识又吻合,冥冥之中,也坚定了我前端的路。
实习到现在,7 个多月过去了,这里的实习很轻松,从来不会加班,晚上和双休完全是自己来掌控,在这里学到了很多。
github 开源的魔力
我接触 github 很晚,或者说在想学习前端之前,就没有去关注这个网站(感觉是一大批前端的码农让 github 如此之火)。本人没怎么用过 svn,到公司实习之后,公司的开发语言是 python,用 gitlab 内网托管。git 这样的版本控制方案,一用就爱不释手。
关注前端的大牛,先是微博,然后是 github,看一看大神们都在忙什么项目,我知道吗,我需要学吗?然后渐渐的把自己的项目也放到 github 上面去托管,尽管有时候网速感人。
不知道从什么时候开始,自己逐渐的向一个开源爱好者靠拢,尽管我目前对开源社区零贡献,但我相信,未来会有的。
自从我把 github 设置成自己的主页之后,每天打开浏览器,第一件事就是看看,大家都在关注哪些项目。记得 yarn 项目发布出来之后,几乎所有人都 star 它,火的项目,就这样传开了。
JavaScript 上的进步
开始玩 segmentfault 之后,发现自己的 JS 是如此垃圾,那个时候连最基本的闭包和原型链都没有弄明白。看了 jQuery 作者的《JavaScript 忍者秘籍》,慢慢的了解到这些概念,自己又写了几篇博客,来总结。
我觉得这段过程才算 JavaScript 的真正入门,之前写的 js 都算狗屁,因为那个时候的我连 this 都不知道怎么用。
这一年,在 JavaScript 上长进很多。JS 中最绕人的还是回掉,但是通过一步一步 debug 调试,循序渐进,慢慢地就不再晕头转向了。后来学习了 ES6,感觉进入了巅峰期,尤其是 ES6 中很多用法,让我对整个前端最火的几大框架又了新的认识,同时,当我学习这几大框架的时候,也能感受到 ES6 的威力之大。
暑假的时候,做了百度前端学院的题目,对 HTML、CSS 和 JavaScript 又有了一个进阶性的认识,开始学习闭包原型链和类的写法。也就是这个时候,我觉定重新看 JavaScript 的书,补强被遗漏的几大知识点。
看了《深入浅出 nodejs》一书,由于当时阅读的时候,没有太走心,真正有用的知识点,并没有学习到多少。后来学习 express 搭建服务器和博客的时候,网上有现成的教程,倒是对中间件的使用有不小的心得体会。那个时候 express 更新的很快,而教程都很老,踩了不少的坑。
九月、十月,这段时间花了很多时间在 codewars 上面,那段时间沉迷于用箭头函数写非常简洁的函数,有时候还会去研究下一些有意思的前端题目,还特意加了好几个 QQ 群,看他们讨论。当时的题目,除非是有很大坑的题目,基本都已经忘记了。
后面两个月,开始学习 React,但中间又多了许多变故,拖了很久,才算对 react 有个初步的认识。也写过一篇对 JS 中继承对深刻理解的文章从一个组件的实现来认识 JS 中真正的继承,渐渐的,越来越对 JS 着迷,深深的吸引着我。
从一开始,我都是非常热衷于看原生 JS,尤其是像 jQuery 等框架等源码,这也是我明年 2017 首要完成对任务。
前端让我对整个行业有了一个新的认识
以前,我觉得自己是一个程序员,但是孤立无援,一个人,默默地写着代码。后来我学习前端,开始玩微博并关注一些前端方面的人,开始学习 git 并在 github 上提交了自己的第一个 commit,同时也关注着许多前端开发人员的动态,那个时候,我才觉得,我不是一个人在写代码。
前端,让我的眼界得到提高。或许我可以通过其他方法来提高眼界,比如去了公司之后。但现在不一样,我还在学校读书,却能对整个行业有着自己的看法,这一切都要归功于 Front-End。
前端只是一个选择,它确实很火,但我保证自己并不是跟风过来学习前端的。我从刚入学的时候(研究生),就在为找工作时刻准备着,并不是为了找工作而选择前端。到现在,2016 已经结束,我对自己的选择并不后悔。
我不会强迫自己成为一个硬件工程师,或者算法工程师,或者 Java 工程师,这些看起来都非常的好找工作,在我选择前端之前,它们似乎是较好的选择。前端这个行业,受到很多人的批评,有人说他变化太快,有人告诫我,一个研究生不要去找这种‘低级’的工作,每次,我对于这种看法,都是一笑而过,毕竟,没搞过前端,就没有发言权。
存在都有其存在的意义,包括前端,发展很快,不正是说明前端这个圈子在飞快的发展吗。
在同学之间,我也找到了像我一样,喜欢前端的人,大家有时候也会在一起讨论,毕竟同学间的这个资源圈,确实稀少,因为大部分人还不知道自己毕业了之后干什么。
总结
这篇文章本应该在年前完成,但是中间多了一些小插曲,导致今天(1 月 2 号)才将就写完。算了,不管了。元旦玩的很开心,但是细想起来,这三天又丢失了很多东西,比如 github 上的 commit。有失必有得,希望在 2017,自己能够取得像 2016 一样的硕果。另外,前端不是你想学就会的,前端的门槛并不是你想像的那样低,但是,如果你选择前端,请用心。共勉!
欢迎来我的博客交流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。