5

非典型程序员之路:腾讯第二届前端体验大会 | 嘉宾分享

 1 year ago
source link: https://luolei.org/feexp-2017-shenzhen
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

非典型程序员之路:腾讯第二届前端体验大会 | 嘉宾分享

发布时间: 2018-02-01



2017年12月23日,受腾讯的朋友邀请,回了一趟深圳,去腾讯参加「第二届前端体验大会」做分享嘉宾。

前端体验大会前身是创办于2007年的 Webrebuild 。去年改名叫「前端体验大会」,2016年第一届,我和阅文的同事专门从北京和上海过去参加,与腾讯和微信的前端朋友面基了一番。

这是我第二次参加前端体验大会,上一次是去当观众,这一次过来当分享嘉宾。这一次我的分享主题是《跨界-成长:非典型程序员之路 》

w=1200

课件在上面的链接有放出下载,相比其他分享嘉宾的技术分享,我的这个分享,带有更多的个人色彩,更多是从自己职业成长和发展的角度,来分享一个「非典型程序员」的成长经历。

今天写这篇博客,即是这次参会经历的回顾,也是自己这几年职业成长的一个总结,这两年来,我的博客大多是旅行、科技和数码类的内容,已经很久没有写技术或者职业相关的主题,如果你是从旅行和数码关注到我,看到我这发这篇博客,请不要奇怪。

为什么选择这个话题

说到程序员,联想到几个关键字和最近的几个悲情事件:女朋友、加班、翟欣欣、跳楼,不管是社会上的刻板印象,还是程序员的自嘲自讽自黑,「钱多、话少、死得早」,一定程度上,程序员的确是一个会让人觉得「闷」和「呆」的职业。

我是一个程序员,但是认识我的朋友,经常会嘲讽说我一点都不像一个程序员:一年到头在外面跑,写文章、拍照片、剪视频。

我被问到最多的问题就是「你怎么又出去玩了,怎么这么多假期?你怎么不用加班?」。

这一次分享,主办方给我以「后起之秀」的角色定位,当我听到这个名头的时候,心里倒是有点紧张。自己没写过什么知名框架、技术上面并没有值得背书的地方,被人冠以「秀」之名头,是有点不好意思,也有压力。

后来跟主办方沟通课件和主题,梳理了一下自己的职场经历,从「不会写JS的渣,到会写些渣JS,再到写支持千万用户量级的前端框架」,一路走来,作为一个非典型程序员,不管对公司和用户,还是做了一些「微小的工作」和贡献,这些年,也是收到了来自职场和市场的认可回报。

w=1200

上面这张图是我参与过的一些项目,虽然几经迭代,但一定意义上,这些项目就是我参与设计、开发的代码所支撑的。

有了项目背书,自己也是有了以「秀」之名对外分享的底气。2012 年开始接触前端,到2013 年去北京猎豹实习,再到 2015 年加入阅文,参与了公司的 Web 架构改造,经历了公司上市,一路走来,自己也的确是不负「折腾」两字,从「切图仔」到「写Web架构」,自己的确是一直在「跨界」尝试,进阶。

今天这篇文章,结合我在大会上的分享,依旧以「选择」、「发展」、「尊师」、「精神」这四个部分进行阐述。

一.选择

如果说这几年市场和职场给我的最有价值的经验,那就是:

有些时候,选择比努力更重要

对于我来说,从大学管理专业,跨界到编程,是一个选择;选择离开广州,去北京实习是一个选择;选择离开北京,来上海,也是一个选择;加入创业公司,是一个选择;加入独角兽,是一个选择。

做出这些选择的时候,我并不知道这个选择,会给自己带来什么样的成果或者后果,唯一可知的就是:

承担每一个选择后果的,只能是做出选择的人自己。

有时候,听到一些不认识的朋友说「看到你的经历,真励志,向你学习」。长久以来,我都有写作的习惯,写博客将近十年。从骑行西藏,到当程序员;从旅行拍摄,到视频自媒体。我的这些文字、照片、影像,公开在网络上,记录了自己的成长,记录了自己的变化。自知自己的这些经历,也的确影响了一些朋友。

我一直觉得自己不是一个「牛逼」的人,更像是一个「装逼」的人,或者更准确的描述:一个会装逼的人。

在2014年的一篇博客《装逼这件事》中,我就说过了我对「装逼」这个行为的看法。

装逼,牛逼,装更大的逼。

这种「自黑」式的自我驱动,也的确激励自己不断尝试新的领域、不断前行,进入了一个对的行业,拿了一份还可以的收入,能够在生活中,有更多的选择和可能性。

每个人的经历,都有其独立无二的经验和背景。对于这些朋友,我大多报以更「理性」和「现实」的回应:好好上学、不要挂科、争取去大公司。

我2009年参加高考,高考成绩高出重点线36,上了广州的暨南大学。高中的时候,对大学专业一无所知,跟风填写了当时的热门专业领域「金融、管理」,结果由于未达到专业录取分数线,被调剂到一个新的专业「应急管理」。

我的大学专业,对口的岗位是政府的应急管理办公室(所谓的维稳),课程跟行政管理类似,掺杂了一些诸如医疗、反恐之类的内容。同大多被调剂专业的人一样,我并不喜欢自己的专业,大一、大二的时候,心思并没有放在学业上面,在外兼职、打工。有一学期甚至挂科5门,收到了学业警示函。

2012年,大三,那一年,我做出了一个震惊学校的举动,逃课,带着10多个骑友,从成都出发,骑行去西藏。恰好那段时间,我校有一个学生,精神不正常,跑到黄山跳崖被救回,学校领导颇为紧张,担心我也出事,要求我立马返校,否则开除。院长在教职工大会上点名我,辅导员在班会上说要把我抓回去。

当时的我已经走到了新都桥,心和身子都已经在路上了,实在是不想放弃,最后通过运作,干脆就休学半年,安心骑行,把我妈气得个半死。

后面的事情,也是自己人生中的一段花絮了。川藏线318国道上,骑行了29天,走了2300多公里,回来后剪辑了一个视频,拿了自行车行业的两个奖,上了《南方都市报》,接受了广州电视台的采访。

其中有一个奖,是去南京参加「亚洲自行车展」,主办方报销机票,顺便去了杭州,找了当时在支付宝实习的郭宇。

当时跟郭宇去了支付宝大楼参观,第一次体验到互联网公司的办公环境,去了浙大校区闲逛。

我从上大学一开始,就经常通过 Google Reader 看国内外的互联网资讯,但是多是关注行业资讯,并不怎么关注技术领域。也是那一次交流,跟郭宇聊到了很多关于前端的话题。

从杭州回来,我就下定决心,我要当一个程序员。后面的事情,就比较接近我现在的轨道了。后面整整一年,我每天起床就去图书馆,翻遍了图书馆所有跟前端相关的动物书,学习编程、做笔记、Coding,基本上每天都是图书馆闭馆,才回宿舍。

再后来,我去了北京猎豹实习,算是正式成了一个程序员,再后来,正式入职,跳槽,直到如今。

把四五年的经历,浓缩到几段话,并不容易,这几段话里,我面临了许多选择,我也做出了自己的选择。之所以选择当程序员,一个很大的原因,就是当时我做出了这么一个简单的判断:

如果我从事管理或者其他相关工作,刚毕业工资大多是处于5000-8000;如果我晚一年毕业,去当一个程序员,工资直接上万,甚至更多。从短期收入的角度看,程序员一年的收入,就能抵掉晚一年毕业的影响;长期来看,互联网正在渗透各行各业,属于极有前景的领域。

基于上面的判断,我做出了自己的选择。这些年,互联网行业的收入水平,大家是有目共睹的,事实也证明了我的选择和判断并没有错。

二.发展

分享的第二部分,也是这次分享的主要内容:结合我在不同阶段、不同公司的经历,我总结了一些经验,尤其是介绍了我对于工作中遇到的问题的一些思路。

2.1 因问题而起的研究

接触到编程,很大程度上,是因为方滨兴校长,2013年4月,北邮校长方滨兴来我学院演讲,事后我写了一篇文章《GFW之父方滨兴讲座后杂想》,结果这篇文章在中文推特圈迅速传播,让我的虚拟主机流量一天就用完,被逼无奈,我购买了第一台VPS,从此开始折腾起服务器,也是这个契机,我开始接触Wordpress、Ubuntu、Centos、Mysql。

这几年来,与防火墙的斗法,是我的一个很大的乐趣,墙高一尺,梯高一丈。为了解决访问谷歌、Youtube的需求,我研究、实践了几乎所有的翻墙解决方案,并且做到了最佳实践和优化。翻墙并不是一个简单的VPN或者SS就能解决的问题,其背后涉及的网络线路、网络协议、加密算法、防火墙、路由、负载、乃至算法优化,每一个角度都有学问可以研究。

也正是通过研究翻墙,让我对网络运维层,有了较熟练的了解,为我后续写服务端打了下基础。

2.2 因忙乱而起的研究

回归到前端本身,刚开始工作的时候,与大多新人前端开发者一样,我负责的主要工作就是 UI 重构,通俗点来讲就是切图。在猎豹工作的时候,每周都要写大量的 H5 页面,我们部门有十多个前端开发,主要的开发模式就是:

产品提需求 > 设计师出稿 > 前端UI重构 > 套模板 > 上线

在这种模式下,前端承担了大量的重复性工作。对于新手来说,这样的工作,能够迅速训练对 HTML,CSS 的掌握能力。设计还原考验的是开发者对语言的熟练程度,对不同设备、浏览爱的兼容则更多考查的是项目经验。在那新人岁月里,每次新写一个 H5 页面,都要在十几台、乃至几十台设备中进行不同分辨、不同浏览器、不同系统条件的测试。

但是面对这重复性的工作,弄久了,也是枯燥和无趣,当时我们部门并没有对应的工具或者系统,于是,我自己通过研究grunt,结合lessSass之类的预编译语言,根据自己的开发需求,做出了一套简单的脚手架工具,当时还写了一篇文章《让前端工作更快、更智能:利用StaticPage自动化工作流 27 April 2014》,虽然只是自己个人使用的工具,但是面对重复性的切图工具,还是提升了我的开发效率,每次来了新需求,只需要 clone 一个新项目,然后就可以开始本地开发了。也是从这个时候起,我开始接触前端工程化和自动化。

后来从猎豹离职,加入上海的小蚁科技。相比猎豹十多人的前端团队,小蚁的专职 Web 开发只有两个,我需要面对更杂乱的需求,不仅仅要切图,还要维护服务器。在小蚁的这段时间,中间的一个 APP 测试的需求,让我颇为头疼。

我们的 iOS 开发团队,每天都会发布多个 ipa 测试安装包,由于 iOS 安装限制,需要把这个 ipa 文件上传到七牛上面,然后手动更新一个线上的 xml 文件(里面含有当前版本号、线上的ipa 安装包地址)之列的动态信息,然后再把这个 xml 文件发布到线上。

这是重复性需求,由于当时是我负责维护网站,每次 iOS 开发同学一编译新包,就要找我。有些时候一天甚至可以找我4、5次,烦不甚烦。

针对这种情况,我研究了一下这个流程,发现这个需求完全可以通过工具自动化。可是,作为仅存的两个前端开发,后端的同事又有各自的工作,我发现只能自己干,这是我前端生涯中的,第一次被迫「跨界」。也是从这个契机,我第一次开始写服务端和后台,我选择了用 'Nodejs' 来写这个项目。

Express来作为 Web 框架,本地用gulp来进行构建,数据库则选择了mongoDB,并且自己按照RESTful规范设计了一套API,前端部分则选择了一套谷歌样式的bootstrapejs的模板引擎。

最后,硬是在一个星期不到的时间里,从0到1,做出了一个有模有样的后台。有账号系统,有历史记录,iOS 开发的同事可以直接把 ipa 安装包拖拽到浏览器,自动上传到又拍云,自动生成 xml 文件,自动生成线上可访问的网页。

说一个插曲,在我开发完这个系统后,我才发现,其实蒲公英有提供这种服务,由于当时并不了解 iOS 开发,我造了一个轮子,但毕竟是自己造的轮子,经历了这一个副本,经验值暴涨。

从那之后,原本需要两个人,花10分钟才能完成的事情,现在只需要10秒就能解决。这个系统上线后,我再也没被这类需求所烦过。

2015年10月,从小蚁离职,正式加入阅文集团。这是腾讯文学收购盛大文学,阅文集团成立的第一年。当时上海团队主要负责的是起点中文网、创世等老项目,起点中文网是公司的重头产品。

这个时候,公司的整个技术架构,用一句话来说就是:

沉重的历史技术包袱,极其低效的开发效率。

上面这张图这是改版前的起点中文网,UI十分复古,后端是Java,前端团队只负责重构,然后把 HTML 交付给后端套模板。在这种开发模式下,前端团队没有太大的话语权,在公司里的定位就是「切图」,考验前端团队的标准,也仅仅局限在完成网页数量、视觉还原度。前端开发者,在这种情况下,各自为战,有人纯手写代码,有人用 Less,有人用 Sass,有人用四个空格,有人用一个Tab,并没有一套统一的开发规范和代码规范,也没有相应的工具来保证交付质量,就更别谈什么前端性能指标了。

刚入职的时候,为了熟悉公司业务,我也做过一些 H5 页面,也遇到需求方的同事问「你是新来的切图吗?」,这种让人略显尴尬的问题。

2016年初,起点中文网的改版工作正式启动。公司级的小黑屋项目组也在这个时候成立,借此契机,我从头到尾,参与了这次网站改版和架构改造的工作。在这次改造中,我主要做了两块工作:

  • 1.前后端分离:前端 Web 架构的设计和开发 Yuenode
  • 2.前端开发脚手架的设计和开发 Yworkflow

起点改版工作涉及全站,业务复杂,前端前后有四个开发参与到这个项目中。后端也投入了将近10个人力进行开发。

起点改版涉及全站,业务复杂,前端前后有四个开发参与到这个项目中。后端也投入了将近10个人力进行开发。对一个有十多年历史的大型站点,进行前后端分离重构,并不是一件简单的事情,我过去没有写过 Web 框架,在这种情况下,我先跟前端和后端的老板约定了双方的业务界线。最终确定的方向就是:

前端负责开发基于 Nodejs 的 Web 服务框架,框架机仅承载渲染直出功能,业务逻辑完全由PHP层接口封装。

在这种思路下,前端框架机的逻辑就简单和清晰多了。

Client 请求对应的路由,Nginx层将用户请求转发到框架机,框架机根据请求头 Header 中的 Host 和路由信息,请求配置文件中配置的对应后端接口,找到对应的模板文件,最终渲染出 HTML 返回给Client。

框架机的框架十分简洁,但是结合业务需要,利用中间件,封装了不少自定义功能。有人可能问,为什么不让前端来处理数据业务、管理Session呀?答案很简单,因为当时没人力做这些事情。

这一次项目改造, 是前端人员第一次介入服务端开发,在很长的一段时间里,只有我一个人负责框架机相关的工作,团队其他人对服务端开发并不熟悉,短期内也招不到专人来进行相关的开发工作,在这种情况下,框架机只提供简单渲染功能,是更加现实和理性的解决方案。

Web 架构设计好了,框架机上线了,本地开发也是一个大问题,不同于过去的一个人负责一个项目,起点中文网是一个颇为庞大的项目,三四个前端开发人员,分属于不同子站点,要同时维护这个大项目。在这种前提下,统一开发工具、规范开发流程成了一个必做项。

为了让前端的同事能够更加方便在本地进行复杂业务的开发和调试,我开发了一套基于gulp、Express 的本地构建脚手架。对于这套脚手架,一句话总结就是:

开发流程自动化,顺便把前端框架机Yuenode在本地做了一套模拟。

这个脚手架,针对模板、Css、Js的预处理、预编译,精灵图管理、SVG、中文icon生成、静态资源版本化、资源 comobo 等,等等,均做了定制支持。

Yuenode 和 Yworkflow 跟我们公司的业务场景强依赖,做了较为深度的个性定制,具体的功能就不在这里繁琐介绍。

有了架构和工具支持,前端开发同事的工作就简单多了,框架机属于通用基础服务,后续新增项目,只需要新增一个配置文件,就能够做到快速发布。在统一的规范和流程下,前端开发只需要关注业务,一定程序上,规范带来了效率的提升。

2.3 因兴趣而起的研究

解决工作中的需求是职责所在,而工作之外的这些事情,就比较偏个人 Side Project 的意思。

从我接触 Wordpress 开始,我就开始折腾不同的主题,在过去这几年,自己也做了不少原创的博客主题,有几个主题在国内也有不少的用户。

做博客主题,是一个特别有趣的过程,很早我就有了自己的独立博客。个人博客就好像是一个人的名片,也会有美丑、快慢。让自己的博客变得好看、好用,也是一个需要打磨的过程。

制作博客主题,一方面要求你对网页设计、UI设计有一定的了解和掌握,所谓对「美」的把握,同时也需要你有一定的开发能力。对于前端开发者来说,这是一个很好地训练自己能力的途径。这两年,我见到不少开发者,从前端到后端,自己开发博客系统,对于这类开发者,他的博客(以及代码)本身,就已经是他的简历。

除此之外,我一直在坚持写原创技术文章。对于一个观点,我深有其感:

输出是最好的输入,教授他人也是最好的学习手段。

写技术文章,前提需要你去了解、学习相关的知识,写作的过程中,你得重新组织、逻辑化你的知识,能够加深你对这个知识的理解。如果下次你学习一门新的语言、技术,不妨试着边学边写,把你的学习过程梳理成一篇新的教程。

除了写原创技术文章,翻译国外的文章,也让自己获益匪浅。长久以来,国外开发者社区都远比中文社区活跃,初创、原创的资讯也更多,对于国外优秀的文章,可以尝试去翻译成中文。一方面可以提高你的英文能力,另一方面可以通过文章的传播,提高自己的影响力(所谓的对社区的贡献)。翻译是一个提高英文阅读、写作能力的好方法,英语对于程序员的重要性,就不再在这里多说了。

多亏了过去长时间的英文阅读和翻译训练,如今阅读非专业性英文,基本上没有任何阻碍,最多就是遇到生词,查一下词典就可以了。

在这里说一个插曲,在知乎上面,有一个问题《作为一个程序员,你是如何在工作以后找到女朋友的?》,我的回答排名第一,没错,我的女朋友(现老婆),的确是因为自己翻译了一篇文章,才找到的。具体的可以点进知乎看全文,欢迎给我点赞。

三.感恩

谈完了项目、谈完了Side Project,接下来再聊点虚的,就是要感谢一些朋友。

在文章开头,我提到的郭宇,就是影响我职业选择的一个人,可以说,要是没认识他,我很大可能上,是不会当程序员的,谢谢郭总。

后来,入了行,陆陆续续从各种渠道,认识了不少朋友,不少人是从线上的网友,发展成线下的朋友。

小胡子哥、芋头君、Sofish 等等,通过各种乱七八糟渠道勾搭上。虽然各居一城,有时候,也会交流一些职场问题,有时候遇到技术问题,搜遍网络也没找到一个好的解决方案,发个红包,打个招呼,人家一句话就点拨了,毕竟是在大厂从业多年,经验丰富。

跳槽的时候,由朋友推荐或者内推,成功率也会更大。在大会上分享完后,有人私信问我**「怎么才能认识这些大牛呀?」**。

我想了想,之前认识这些网友、朋友,大多是通过朋友介绍,或者是线下聚会,或是公司交流,圈子就这么大,要认识也不难,并没有刻意勾搭。但是有一个点,这些网友,大多是在网络上比较活跃的人,比如说小胡子哥、屈屈的博客,都是持续输出干货,在社区也十分活跃,我虽然没啥技术干货,但毕竟也算是一个活跃分子,经常写些乱七八糟的文章。与这些朋友,遇到面的时候,打个招呼,人家也能知道你是谁,这样就比较容易自来熟了。

你对社区做出了贡献,社区本身也会回馈你。

精神

前面啰嗦一大堆,最近这两年,一直在写旅游、数码,被读者吐槽博客沦为成「开箱网站」,很久没有写自己内心思考的东西,想想一直这样也不好,不「真诚」,谈何写出好的文章。

我一直不觉得自己是一个牛逼的人,最多只能算一个运气不错的人:工作这些年,进了几个还不错的公司,遇到了好的老板,买了房,结了婚,并没遇到什么太大的曲折。

w=1200

现在回过来想一想,自己这些年的折腾,从公共管理跨专业到程序员,从切图到服务端开发,最后成了个半吊子全栈,很大程度上,就像乔布斯在斯坦福大学毕业典礼上的那段讲话:

你们同样不可能从现在这个点上看到将来;只有回头看时,才会发现它们之间的关系。所以你必须相信,那些点点滴滴,会在你未来的生命里,以某种方式串联起来。你必须相信一些东西——你的勇气、宿命、生活、因缘,随便什么——因为相信这些点滴能够一路连接会给你带来循从本觉的自信,它使你远离平凡,变得与众不同。

阅读、跟方校长斗法、骑行、逃课、敲代码、翻译、写博客、拍照片、拍视频。自己人生中,也是有许多看似分割的点,做这些事情的时候,并没有想会对未来的自己有什么影响。

随着人生轨迹的逐渐清晰,这些点,这些事情,带给自己的内在影响,也逐渐浮现和愈发清晰:长久以来对互联网行业的关注,让自己在职业方向上做出了正确的判断,折腾博客,让自己接触到网络 Web 技术;阅读各种乱七八糟的书籍,翻译、做主题,让自己对用户体验、产品有了一定的认知………………等等等等。

如今,程序员职业之外,我也是一个自媒体视频制作人。在拍照、做视频、自媒体的过程中,我程序员的背景,又给自己带来了技术上的优势。是的,新的点,依旧在出现,而人生的这条线,依旧在这些老点、新点之间继续连接。

w=1200

最后放张合照,感谢组办方的各位工作人员和参会嘉宾。

w=1200


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK