题图是技术含量最高的乐高积木之一,一套玩具里面居然有好几个博士,一位演员,和一个硕士(这是咋混进来的)。
某乎这两天有个问题很好玩,“美国程序员行业高收入还能维持多久?”,提问者很担心,因为现在在美国程序员的收入水平很高。而他觉得编程的门槛儿并不高,他怕这种状态持续不久,毕竟他是一个程序员。
然而,这样的问题马上触动了一些人敏感的神经,有人说,“至于编程不是什么难事,这句话真的戳到我hhp了。如果编程不是什么难事,其实世界上也没有多少事算难事了。”。
还有人仅回复了句,“何以见得“编程并不是什么高技术含量”?”就获得了高票,而且还引发了大量的讨论。
那么编程到底是不是有技术含量的东西呢?也是也不是。
如果我们看看全体程序员的技术能力分布,我们可能可以得到以下的正态分布:
真正有技术含量的,凤毛麟角。有一些还没入门。最大多数的是自以为高科技的人群。
为什么?
1、做程序员的门槛不高,但是做好程序员的门槛不低。
这年头想做程序员难么?我有篇有些人甚至可能不敢相信的大火的前妻文,里面提到我前妻初中没毕业,听说程序员挣钱多,从理发小妹改行做的程序员,这么多年下来年薪已经40万了。
我认识的程序员里面有各种各样神奇的来源。
我自己是学机械的,我当年的合伙人霍矩是学暖风工程的,当年的著名代码网站Codephi的创始人,后来CSDN副总经理韩磊,是学越南语的。微博上大家知名的澳大利亚大别墅的主人灵感之源和Mac系统专家,前Java程序员iBuick都是学英语的。这行当里面转行过来的人,快赶上说相声的了,啥人都有,门槛还不低么?
其实,我初中的时候,在完全没有大人指导的前提下,一台学习机,一本附带的Basic说明书,我就学会怎么写程序了,那时候,自己写过一个横版的类马里奥游戏,高中的时候,用这个学习机我还自己写过一个logo语言的解释器。
其实编程有啥难的?不就是跟电脑说话么?跟人说话那么难,你都会,跟电脑说话有多难?
电脑是个聪明的傻子,你让它干啥,只要它能做到,它就会毫不犹豫的去做,多好打交道。
这个世界有那么多Geek,就是因为他们觉得电脑简单单纯好沟通,反之,跟人类打交道太难了,怎么学都学不会。
如果你跟一个人说,算n = n + 1算1万次,人会跟你说,你有病吧,老子才懒得算呢。但是你这么告诉电脑,电脑会毫不犹豫的算1万次,然后在你还没察觉到任何变化之前,把答案给你。
但是,做一个好程序员是很难的。
这也是因为电脑是一个聪明的傻子。它的脑子完全一根筋。它不会自己解决任何问题。现在任何一台电脑你让它算1万次n = n + 1就是秒出结果。但是,算法再复杂一点呢?一个稍微复杂一点的算法,可以让一台现在最好的个人电脑,秒变计算器。那怎么办?还不是要靠人?
其实这年头,大多数时候,不需要你开发任何新的算法,很多时候用各种语言的类库,容器和算法库就已经可以解决很多问题了。问题是,就连选对这些容器和算法也不是一件简单的事情。没有简单易行,放之四海的标准。有很多人在这个问题上其实也是只知其然不知其所以然。
2、行业在发展曾经有技术含量的东西,慢慢的变成大路货技术
08年,我和霍矩刚开始做技术咨询的时候,国内一般网站普遍还没有反向代理的知识,刚刚有一些文章介绍,有一些大网站用起来了。那时候,我们遇到一个客户,用JAVA搭了一个网站,可能做得比较重,当每天5万PV的时候性能就很好。但是推广的得力,流量翻了三倍,服务器就无法支撑,直接挂掉。我们当时跟他们讨论,从代码上去做大的性能改进根本来不及。我们就帮助他们设计了一套架构,用Squid做反向代理,扛住重复的访问。结果很快,这个网站流量上涨到100-200万,性能都没有出过大问题。在那个时间点,你还可以觉得懂的怎么架Squid算是有点技术含量的东西。
那现在有个网站可以撑200万流量算是什么大事儿么?完全不是。
为啥?一来,各种反向代理技术、内存缓存技术等等在web后端开发里面早就是平常事情了;二来,硬件有了长足的进步,CPU比当年强大多了,更重要的是SSD的使用,让磁盘IO带来的性能的压力越来越小;还有就是现在云计算大行其道,随时随地随地增减服务器改变部署变得非常容易。
题外话,所以这次冯大辉和丁香园撕逼事件里,那篇抹黑大辉的文章里面说,大辉作为一个CTO,不写Code,不参与架构设计,不Review代码。我非常不以为然。因为从Alex和一些其他的渠道你可以查到,丁香园网站的整体负载并不大,也就是200-300万以内,这还是很多产品,而不是单一产品的承压。简单的说,在当今的技术水平下,搭丁香园这么一个网站,难度都在产品和运营上,技术上没啥可谈的,咋做都不会出太大的问题。
07年,我的好友钱宏武老师,在SD大会上,做了一个演讲“如何设计高并发体系架构”,当时,我去会场听他的演讲,发现人都站到会场外了,完全挤不进去。他介绍的是他当时在搜狐设计社会论坛,日访问量6000万的经验,那是当时的动态网页日访问量世界纪录。
现在呢?现在这样的网站已经不算什么了。新浪微博日活跃用户在2015年都过亿了。
3、一些行业牛人和开源软件改变了世界
Google在很长一段时间里都是技术圈内的顶尖技术的代名词。外界也不清楚Google是怎么完成一些不可能完成的任务的。当年,大家光是想象Google怎么保存那些海量的索引,是怎么做到的都不知道。所以大家想象Google里面每个工程师都是百年一遇的大神吧。
直到后来,Jeff Dean的三篇论文Google File System,MapReduce和BigTable一发布,大家才注意到,原来Google有个Systems and Infrastructure Group,有个Jeff Dean大神。原来他们把处理海量数据的方法,写成了内部系统,Google的工程师,不需要是神,只要学会这套工具,就可以操纵海量的数据了。
但是,可惜的是,Jeff Dean和Google只开放了他们的思想,但是没开放内部工具出来。这时候,一个叫做Doug Cutting的大神站了出来。
Doug Cutting是Lucene的作者,他当年曾在多家公司做搜索,还曾经在Apple做过搜索,他觉得业界缺乏一个开源的好用的搜索引擎内核。他就写了Lucene,Lucene是现在广泛使用的Elastic Search的内核。可以说,现在你在全世界的很多网站内点搜索,都是Lucene在支撑。仅当年我们创业的时候,因为我们在用Lucene,所以,我们的客户跑在Lucene上的搜索量就有几千万。
Doug Cutting把Jeff Dean的思想实现了出来,做了一个开源软件叫做Hadoop。Hadoop兴起后,其实分析处理海量数据,就变成了一个人人都可以做的事情(买得起机器就可以),从而产生了一场大数据的革命。
我举这个例子什么意思?就是Google很牛逼,Google在04-5年就有能力非常高效的分析处理海量数据。在那个时间点,能做Google量级的事情的人没有几个,这是非常有技术含量的。但是Jeff Dean一公布具体思想,这个技术含量就骤减。但是,仍旧是很有技术含量的。等到Doug Cutting把Hadoop做出来,分析处理海量数据的门槛实际上就降低到了会编译和搭建这个Java开源项目就可以了。
当然,有一些领域内的东西,即使有了开源软件,由于你对领域知识的匮乏,你仍旧很难高效的开发。比如Lucene,非常好用,但是Lucene是一个底层引擎,如果你对倒排索引的各种细节不够清楚,你直接用Lucene开发出好用的搜索是很难得。所以,当时我做了一个Cypress系统,用XML/HTTP请求把Lucene完全封装起来,用户不用懂倒排索引的任何细节就可以用好搜索了。后来流行的Elastic Search,跟我的设计思路如出一辙,唯一的区别是,他用JSON来做数据传输的格式,我用XML。一般团队使用Lucene,可能需要几个月才能做一个可用的搜索,用Cypress或者Elastic Search,一天就够了。
在这些牛人和开源工具的作用下,很多原来无比高大上,也没有几个人可以做的领域,很快就变成了随便一个工程师都可以学会的东西。
4、企业的需求核心还是满足业务需求并不是高大上
实际上,中国的大多数技术公司,核心还是业务,而不是技术,技术的价值在于良好的保障业务。公司真正赚钱是靠业务。美国呢,大公司里面技术比重更高的公司要多一些。但是,也有大量的公司,核心业务并不是技术本身。
在这样公司里面实现业务逻辑的工程师是主流。他们虽然非常重要,但是他们做的事情,价值不是技术含量,而是能不能完美的满足业务需求。
举个例子,一个表单放几个按钮最合适,有啥技术含量可谈?但是,放好了,用户体验好,效果好,公司的收益就会更好。
已经扯得很远了,我翻回来说,如果你想做一个有技术含量的程序员,其实也不难:
1、你可以在某一个领域扎深
新浪微博的两个要点就是产品和性能。因为微博是国内日活最大的几个网站之一,性能不好,就别玩了。产品体验不好呢,也会造成很大的损失(这个我们就不谈了)。
那新浪的Timyang一路支撑新浪的流量越来越大,他和他的team一直都在关注怎么支撑巨大的流量,成为这个领域首屈一指的专家,当然是有技术含量的。
美国最大的PHP应用是Facebook,中国是新浪微博,大多数PHP网站都不会认为PHP的性能成为了一个大问题,但是他们都太大了,PHP不够快都影响体验了。所以Facebook搞了把PHP编译成C++的项目,而原来在新浪的鸟哥怎直接改造PHP,让PHP7性能达到了跟编译成C++相当的水平。
我们当年做搜索的时候,我的Cypress系统,一天可以支撑10万次搜索,后来客户的搜索到了30万,我就改进系统,让它可以支撑到100万。再后来客户的搜索到了200万,我就改进系统,让它可以支撑到300万。后来,有个客户日搜索2000万,用6台服务器,说如果我们可以用更少服务器,就采用我们的服务。于是我优化系统,花了整个两个星期,自己打造了测试工具,性能监控工具,最后优化到一台服务器日搜索2000万。在当时技术含量还可以。
这些都是你在一个领域扎深的例子。
2、你也可以在广度上去搞
我个人爱好广泛。所以在做搜索的同时,iOS SDK出来了,我也在自学iOS开发。等到有道词典,想趁市场热潮,迅速做一个iOS版本的时候,他们发现自己人没有会的。那时候市场上也很难找到外包人才懂iOS的。于是,他们辗转找到我。
后来,我进盛大创新院的时候,我问副院长,说我既可以继续做搜索,也可以做iOS开发,创新院更需要哪种?他说,两样都非常欢迎,两种人才都很缺。
但是不管怎么说,你安于现状,安于解决了老板提出的当前问题就好的话,你只能是一个庸庸碌碌的程序员,你不会有技术含量的。
====================
在看这篇文章的程序员们,这两天吃饭又瞎混了吧?别天天吃黄焖鸡,偶尔也像在家里那样,吃顿好的。