有个很好玩的问题,“美国程序员行业高收入还能维持多久?”,提问者很担心,因为现在在美国程序员的收入水平很高。而他觉得编程的门槛儿并不高,他怕这种状态持续不久,毕竟他是一个程序员。
然而,这样的问题马上触动了一些人敏感的神经,有人说,“至于编程不是什么难事,这句话真的戳到我 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 带来的性能的压力越来越小;还有就是现在云计算大行其道,随时随地随地增减服务器改变部署变得非常容易。
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 开发。等到一款词典 App,想趁市场热潮,迅速做一个 iOS 版本的时候,他们发现自己人没有会的。那时候市场上也很难找到外包人才懂 iOS 的。于是,他们辗转找到我。
后来,我进盛大创新院的时候,我问副院长,说我既可以继续做搜索,也可以做 iOS 开发,创新院更需要哪种?他说,两样都非常欢迎,两种人才都很缺。
但是不管怎么说,你安于现状,安于解决了老板提出的当前问题就好的话,你只能是一个庸庸碌碌的程序员,你不会有技术含量的。
文/郝培强,iOS开发者,Tiny4cocoa创始人
来源:知乎日报
其实,几乎每个行业都是这样的。做某一行业,入门并不难,但要做好都是不容易的。
总括来说,编程确实是挺有技术含量的活儿。