我从1988年开始学习编程,中学期间一直参加计算机竞赛,一开始用Basic语言,后来改用Pascal语言。大学的第一志愿本来填的是物理相关的专业,但是阴差阳错的,却被调配到第二志愿,计算机软件专业了。大学期间比较不务正业,毕业的时候因为重修了51个学分,没有获得学位。
  
  国企、创业、外企、腾讯的11年

  99年大学毕业后进入了一家研究所,参与一些医疗影像系统的开发工作。一开始使用delphi,后来改用VB。两年后换了一份工作,进入了一个电子政务项目,从那时开始用java编程。
  后来和高中同学一起创业,做办公自动化系统,创业一年后,没有资金了,就散伙了。
  创业失败后我去了一个外企工作了一段时间,做一个香港政府的外包项目,随后有一个技术移民的机会,27岁那年,我去了澳大利亚,在墨尔本呆了大半年,没有找到合适的技术性的工作,倒是做了一些钳工木工之类的活儿。新移民一般前两年不能随意离开澳洲,俗称「移民监」,算一算人生其实没有太多个两年的,我不想把时间都花在那里,28岁那年我回国了。
  回国后继续去了一家外企,做医疗信息系统,还是做Java。直到一年后遇到腾讯招聘,于是2005年我来到腾讯,转正后就30岁了。
  从2005年到2015年,我做了将近10年的QQ空间,从一开始的负责所有前端的交互逻辑开发,到后来有了前端团队,再后来把关注重点放到了性能优化和用户体验优化上。
  在技术概念的大爆发中何以自处?

  今年前端圈子里面很流行一篇文章《在2016年学习JavaScript是一种怎样的体验》,我看完也晕菜了,里面大部分的新技术概念我都没有听说过或者只听说过名字。
  这让我想起了十多年前,我还是个Java程序员的时候,也是碰上了一个技术概念大爆发的时期,每天面对着层出不穷的新技术概念、新框架、新工具。当时我过得很焦虑,学不完的新技术,每个都看起很有用,不学习,不实践,又没有办法确认它是不是真的那么有用。
  最后我做了逃兵,我想Java这个技术方向是适合那些更聪明的人继续发展的方向,那你们慢慢玩儿吧,我走了。2005年我放弃Java,走上了Web前端这个新方向,一下就解脱了。所以我们今天的话题有个「从入门到放弃」的噱头。我在这之前确实是经历过客户端开发和后端开发从入门到放弃的过程的。
  那么十年后再次看到这样的困境,让我意识到这样的问题其实会一直发生,所以我们也不能一直做逃兵啊,还是要换一个角度来重新审视这个问题。我们的身份是软件工程师,工程师的天职是「解决问题」,我们要关心的是新的技术是否赋予另了我们新的解决问题的能力,让我们能够解决以前不能解决的问题。
  我们看到很多新技术概念和框架,只是赋予了我们一种用新方式解决老问题的能力,比如有个网站叫做「你可能不需要jQuery」(http://youmightnotneedjquery.com)里面列出了很多我们常用的jQuery的功能如果不用它应该怎么做,也就是说,其实jQuery并没有让我们解决原来解决不了的问题,只是给了我们一种新的方便的代码写法。其他很多框架也有类似的问题,甚至现在很多人用ES6编程,再用Babel转成ES5,那实质上我们也是在解决原来用ES5就能解决的问题。
  所以我以前负责QQ空间前端的时候,有好些年我都不希望团队使用外部的前端框架,我对团队说:如果你自己连个jQuery都写不出来,那你怎么能理解你写的调用jQuery的代码实际上是怎么运行的呢?所以看到很多昙花一现的前端技术过气了以后,我都会有点庆幸还好没有花时间精力去追逐它们。
  所以如果你希望追求更漂亮的写法,没问题,这个社会也需要代码艺术家,有很多人喜欢代码艺术家。如果你想我一样缺乏艺术细胞,那我们还可以当一个好工程师,在掌握了基础的编程能力的基础上,更加专注于有哪些问题是前人没解决的。
  云时代需要新的编程思想

  新的互联网时代已经到来,但是我还是看到大量的前端开发者并没有具备这个时代应该有的新的编程思想和能力,很多人还在用老的方式搭建系统。
  比如我们有了一个好的想法,需要后台开发,但是我自己不熟悉后台技术,然后就必须要拉一个后台开发来加入,如果找不到一个靠谱的后台开发,我们的创新想法可能就搁浅了。
  但是其实现在国内已经有很多所谓「后端即服务」(Backend as a Service, BaaS)这样的平台,可以用通用一致化的后台服务来支撑我们前端开发者的创新,比如我们腾讯云就有移动开发工具TAB(https://www.qcloud.com/product/TAB)这样的BaaS平台,我们就很容易很低成本的把我们的创新想法开发出来,快速试错。
  又比如现在有很多人是全栈工程师,所以后端开发也不是问题,然后创意开发上线了,万一真的特别靠谱,比如我们突然想到了一个类似于围住神经猫这样的爆款创意,突然一炮而红,那我们的系统架构能力能不能支撑起怎样一夜爆红的压力呢?我们的很多开发者其实并没有准备好去迎接这样的的系统压力的,所以机会来了你也很容易抓不住。
  但是在云时代要通过有限的成本快速提供这样的抗压能力其实是比较方便的,只是系统需要有一些面向云的架构意识的体现,比如数据是否动静分离,是否充分利用了CDN网络的分发能力,是否使用了负载均衡服务,动态数据服务是否尽量采用了服务性存储,而不是本地硬盘和本地数据库存储,会话状态是否从服务器上分离到独立的缓存服务上等等。
  做到服务器的无状态化以后,你的服务器就很容易具备伸缩能力,在遇到良好的发展机会的时候可以很容易的复制新的后台服务添加到集群中来线性的提升负载能力,甚至在访问高峰期过后还可以很容易快速的释放资源节省资源浪费,而且这样的伸缩活动还很容易自动化,像在腾讯云上你可以使用弹性伸缩服务,设定一定的带宽或者CPU阈值来触发服务器的缩扩容,这只要在网页界面上做简单的点击配置就可以了。
  这些做法其实很多都不需要额外掌握什么新的技能,甚至可以比传统的做法节省很多开发量,只是需要把数据库的主机地址改成远程的IP,把会话配置文件改成指向远程服务器,使用对象存储SDK来代替自己开发文件上传下载等等。
  像这样基于云去思考和架构系统的方式,现在我们也常常称为「云原生」,这样的思考方式会极大提升我们前端工程师和全栈工程师解决问题的能力。
  不能因为工作放弃社会理想

  我一直相信一句话,看一个社会好不好,不是看这个社会上过得最好的人过得多好,而是要看这个社会上过得最不好的人过得有多不好。
  这些年因为个人兴趣的关系,接触公益圈比较多。正好看到社会企业这个概念的兴起,很多公益圈的朋友要么去加入了一个社会企业,要么去创办了一个社会企业,用各种方式尝试通过商业手段来实现改善社会的目的。
  我觉得自己和他们一样有社会理想,但是却又不像他们具备那么好的商业能力,我更多具备的还是技术能力。那当具备商业能力的人去做社会企业的时候,具备技术能力的人要怎兑现社会理想呢?所以去年我提出了「社会程序员」这个概念,大家可以类比一下「企业」和「社会企业」的区别。社会程序员也一样的,我们重视社会价值,尝试通过自己的技术手段来实现社会价值,帮助社会进步。
  我最早进行的相关实践是信息无障碍,这是一个很典型的领域。如果我关注商业价值的话,我们的产品应该面向全国的几亿或者全球的几十亿互联网用户去优化产品,实现商业价值的最大化。
  但是如果我们看过的最不好的那些人,那些使用互联网产品最困难的用户,比如中国的一千多万盲人,那么我们就不能过度的期望在他们身上挖掘出商业价值,而要看我们队产品做什么样的改造可以更好的帮助他们。
  后来我还尝试了寻亲领域,前天刚好是我们腾讯寻亲项目上线4周年。4年前我们瞒着公司悄悄改造了数千台服务器上线了这个项目,现在已经影响了腾讯的一系列海量产品,比如手机QQ、微信、电脑管家、手机管家、广点通这样的项目加入,甚至还有数千家外部的公司和网站也加入了我们。
  我们还尝试过通过把IT能力输出给公益组织,推动他们进步,让他们更好的的帮助受助者。
  今年8月,我们还发起成立了中国信息技术公益联盟(citpu.cn),联合更多的志同道合者一起用专业能力改变社会。
  什么样的程序员才算牛?

  我们使用的很多技术将来都会被淘汰,我们做的很多产品将来都会过时,真正能让我们牛的,应该是那些可以经得起时间考验的技术实践。
  今天大家基本公认,计算机界的诺贝尔奖就是图灵奖。我们去看历史上的图灵奖获得者也都是这样的,并没有某一个语言的高手,而是发明了一种语言,发明了一种算法,发明了一种编程模式,这样的人。
  我有的时候会想,图灵如果生活在今天,他会写JavaScript写得特别好吗?我觉得基本上是小概率事件。不是说图灵不够聪明,不能把JavaScript写得比我们好,而是说图灵之所以是图灵,是因为他做了那些经得起时间考验的事情。
  我觉得技术圈的很多人,往往会觉得程序写得好最牛。现在一些很高深的技术研究,能在技术圈引起讨论、关注,能让大家认识到你的技术很厉害,所以很多人认为吧程序写得特别好的程序员很牛,但是我们的编程技术很多将来都会被淘汰,这样的牛是一时的。我以前在社区里也认识过很多很厉害的人,但是今天的开发者不一定还知道他们。所以很多开发者也难以理解冯大辉作为一个CTO怎么能不写代码。
  但是如果我们通过专业能力,能对社会做出一点实际的推动和改变,让我们今天生活的这个世界变得有一些不同,这样的程序员,他们留下的改变可以不随着技术的升级换代而被遗忘,这样的牛,也许才是可以经得起时间考验的。
  所以我们应该多关注那些将来我们90岁的时候还可以回忆的成就,多想想我们打算跟自己的孙子吹什么牛。
    文/黄希彤
  黄希彤,腾讯云技术专家。
  1999年四川大学毕业后从事医疗影像系统开发,2001年创业,2003年创业失败后移民澳大利亚,2004年放弃移民身份回国,2005年加入腾讯,负责QQ空间等产品的前端技术和用户体验优化,2015年加入腾讯云。
  目前腾讯Web前端技术级别最高的程序员。技术公益倡导者,中国信息无障碍联盟发起人,中国信息技术公益联盟发起人。
  来源:InfoQ