最近少逛了一点知乎,取而代之的是逛Quora。然后逛到了这个题目:What'll happen to Silicon Valley when software can write software? 当软件可以自动写软件时,硅谷会发生什么变化。
无独有偶,随便刷刷知乎,然后就看到了这个题目 如果有一天代码再也不用手敲而可以用机器生成,那么现有的大部分程序员还要何去何从?
上面两题虽然问法不似,但实质上想表达的东西都一样,而且和一道古老的问题很相似:要是机器能代替人干活,那么人能干些什么呢?
一般这类问题的答案是:去干那些机器还干不了的活。这个回答实际上很笼统,而且没什么建设性。Quora上面最高赞的回答是:They'll hire people to write the software that writes software. 回顾现在的编程语言发展史,就可以知道,其实现在的编程语言都是建立于前人编写的语言之上的,例如C语言,要编译成汇编语言,汇编语言再编译成二进制的机器语言,电脑才能够识别C语言。实质上,编译的过程就是software writes software。Writes简单,但是build难。我们做一个功能或项目时,并没有说Write a project,而是build up a project,充分证明了build,构建的重要性。
人类文明的发展,一直都是外力慢慢代替人力。从牲口代替人进行劳作,工具的出现,交通工具的发明等等,到近代的大型的自动化生产,电脑代替打字机等等。所以其实提问:要是机器能代替人干活,那么人能干些什么呢?这个问题,其实算是杞人忧天,因为从古以来,就已经是机器代替人力了,不过当时的是牲口、有可能是工具等。
其实有三个维度描述一个工程:1、复杂度。2、规模。3、质量。可以类比于一件事情的深度、广度及高度。一项工程假如复杂度越高,那么需要人参与的成分就越多;一项工程的规模越大,那么机器所不能企及的地方就越多;一项工程的质量需求越大,那么人需要干预的成分就越多。
而另外一方面,成本控制也是考虑的范畴。
举个身边的例子,某亲戚开厂。我去他的模具厂观看时,看到很多工人,但是制作模具,其实只需要一个母版就可以了,然后剩下的就交给机器就好了。但为什么还需要工人呢?我所观察及询问得知,其实工人所做的是,控制机器雕刻的精准度,以及产品的质量检测。我所联想到,其实更高级的机器就会带有这种自动控制的功能,就是自动化工控。但是由于成本的制约,工厂并没有引进之。工厂规模和高级机器参与度其实有如下图:
工厂的规模和机器的参与度其实会有这么一个曲线。当规模实在太大之后,很多公司选择把业务进行分割,这样才能维持一个较好的成本控制。
所以,机器完全代替人这个命题不现实、甚至未来也看不到趋势。因机器代替人的工作后,人就有更多时间去做更高级的事情,例如探索太空、研究时间维度等等,而这些人类都不知道,怎么能够教机器呢?当然,你要跟我讨论Mechine Learning的事情,那么我们另开话题。
但现实中,的确有那么一部分是被代替的,上世纪的下岗潮,很多人都大呼,机器要完全代替人啦!而这种恐慌到现在还存在,观察一些比较落后的工厂、企业、单位等,他们宁愿让工人、职员超规加班,也不愿意引进新的设备和系统。这种恐慌的确来源于无能,这里不展开讲了,机器代替只愿机械劳动的人,这是现实。但机器永远无法代替那群创造新事物的人。
假如有一日你听闻到有机器可以干你这份工作时,不要恐慌,静下心来仔细想想你现在的工作是否除了机械重复就没别的价值了。