从零开始学习Hadoop--后记
在越来越多的任务上,计算机比人类做得更快更强成本更低。麻省理工的两位经济学家写了一本书叫《与机器竞赛》http://www.geekonomics10000.com/639,书中说,以人工智能为代表的计算机技术可以完全代替司机驾驶汽车,可以在商业上代替人类翻译员,IBM的Watson计算机已经在传统电视竞答节目上击败人类选手,苹果公司的Siri语言助手对人类语言可以理解得很好。再比如,一种新的软件可以代替高级放射科医生分析医学图像,成本降到原来的百分之一。在公认的人类才能做的律师行业,在计算机软件的帮助下,一个律师可以可以完成以前500个律师的工作,而且准确率更高一大截,成本低到不可思议的程度。
因此,社会将不断地用计算机取代人类的工作,计算机能做的工作会越来越广泛。掌握最新的计算机技术的人在未来有更多的机会得到好工作,为自己和公司创造更大的价值。在美国硅谷,顶级的程序员们已经象体育明星电影明星一样,有了自己的经纪人http://www.36kr.com/p/202520.html。
另一方面,如果不掌握最新的技术,会面临巨大的失业风险。《与机器竞赛》说,技术进步导致美国的就业机会更少,同时越来越明显地看出,财富是由少数人操纵资本、机器设备和软件创造出来。FaceBook公司曾经在市值是1000亿美元时只有3000多员工。Twitter公司估值100亿美元,只有900多员工。更早一点的公司,Google市值2500亿美元,员工3万人。比Google更早的公司,微软市值也是2500亿美元左右,员工有8万人。越新的公司,单位市值对应的员工数越少,趋势非常明显!
这种趋势不但在美国发生,在中国也开始了,2013年8月10号和11号,中央电视台在晚上黄金时间报道了美的电器,同方热水器,沈阳新松机器人公司等生产和使用机器人替代人力的新闻分析,甚至河南平顶山这种传统的煤炭城市也开始生产智能机器人了。华晨宝马汽车在沈阳的新工厂里,95%的工位是机器人做的,只有返修工位是工人处理。我们相信,中国未来会在更多的行业使用机器人,智能度更高,效率更高,跟美国的差距不会太远。我们无法预测未来的行业是是怎么变化的,但很明显的是,那些拥有普通的技能,做着普通的工作,拿着普通的工资,过着普通的生活的人,会被自动化淘汰。
根据上述的事实,未来好的职业只能是不用担心这种未来机器取代人的趋势,必然是肯定不会被智能软件和机器人取代的技能—这样就不用担心失业问题,这种技能必须是本质上有难度的,需要经过精深的练习才可以掌握--这就意味着稀缺性和好的薪资,这种技能如果遇到机遇可以创造巨大的财富--看看数量众多的美国创业公司的发展就知道了。
那么,哪种技术最有可能符合上述条件呢?个性化服务,或者高度专业的技能。我认为,大数据技术是高度专业化的技能,理由如下:其一,未来几乎所有行业都会逐步扩展到应对全球客户,要快速处理海量数据,由此维持和增强竞争力,既然几乎所有行业都要逐步使用大数据技术,因此它会提供大量的职位和创新机会;其二,大数据是有技术难度的,如果要做好大数据,必须对Linux操作系统,网络技术,编程语言,人工智能与模式识别都有一定程度的了解和掌握,它们都会跟大数据相关,并且要有实际项目经验,因此技术的全面性和技术的深度是大数据行业的门槛和护城河;其三,智能软件和机器人可以代替人,那么最终不可代替的就是开发智能软件和机器人的人。
众所周知,信息技术行业有三个显著的特点:1)技术更新非常快,从技术更新的角度说,几个月发生一次小变化,一两年发生一次大变化,新的语言,新的方案,新的技术趋势层出不穷,仅仅研究这些变化都需要花很多时间。2)工作压力非常大,加班到晚上九点十点是常有的事情。几年前华为的工程师曾经猝死和跳楼。在北京,下班后通用汽车的大楼和微软研究院的大楼截然不同,前者的灯是关掉的,而后者常常灯火通明。3)爆发迅猛,快速改变人生和世界,最简单地说,从创造财富的角度看,几乎没有什么行业比IT行业更快,比如美国不断爆发出几十个人做出一个产品被数亿数十亿美元收购的新闻。如果想快速地赚一大笔钱,这个行业是最合适的。如果不想创业,在这个行业工作也是一种很好的选择,在北上广起薪可观,如果有几年的工作经验,薪水还可以更高。
那么,我们怎样解决大数据的学习问题呢?根据一万小时天才理论,任何人只要通过持续的精深练习,就可以学会任意一种技能,天赋只是精深练习的结果。如果能持续一万小时的精深练习,任何人都能成为天才式人物。在通常情况下,一般人只要能很好地掌握一种稀缺的技能,就足以获得一份不错的工作,这只需要几个月的精深训练就足够了。
如果想学习大数据,必须要学会Hadoop。Hadoop是大数据行业使用最多最广的开源工具,围绕Hadoop已经形成了一个巨大的生态环境。那么,我们应该如何学习Hadoop呢?
1.试错成本
如果自学一种快速发展中的新技术,最大的成本是试错。比较成熟的技术,都有若干本经典书籍可供学习,这些经典书非常好,经过多次印刷出版,几乎没有错误,讲述完善,习题全面,语言流畅,按照它们的路子走可以很顺利搞定这些技术,诸如《Unix高级环境编程》,《算法导论》,《深入理解计算机系统》,《C程序设计语言》,《Java设计模式》,《JavaScript权威指南》,太多了,不一一列出。但对Hadoop这种本身仍在快速发展中的技术,大部分已出版书籍的内容往往落后于技术本身,中文版的比英文版的更慢一些。那么,用这些书籍学习的时候,会遇到各种不一致的问题,代码的,编译的,API变动,有时候甚至从安装和配置都不一致。一般来说,书里一定会有错误,示例代码原样敲上也会有编译问题。根据我的估算,学习过程的三分之一的时间都花费在处理这些麻烦上头。
2.冗余成本
一个新技术不全是新的,通常是用成熟的技术实现几个核心理念Hadoop的核心理念是两个:MapReduce和HDFS。在不同的层次上,对MapReduce和HDFS的理解的深度也是不同的。Hadoop体系非常复杂,有诸多的细节,试图在短时间内完全理解Hadoop是不现实的。因此,我们需要根据学习的目标,将学习定位在不同的层次上,如应用层,架构层,然后有选择地进行学习。如果方向走偏了,会导致比较大的冗余成本---把时间花费在不该花费的地方。
3.精深练习
做一遍是最好的学习方式。读书千遍,不如做题一遍,做题千万,不如一个Project实现。第一阶段,要熟悉书里的例子,能做到不看例子的源代码,可以查java和hadoop的API的情况下,将它们写出来,能运行和调试成功,能解释清楚每一行代码的作用。第二个阶段,遇到一个大数据的问题,比如说某些经典书的章尾习题,某些创业公司的业务需求,或者跟其他行业朋友的闲谈,能从熟悉的例子里找到相近的“模式”,然后作一些修改满足需求,这个阶段是需要一些灵感的,有时候需要回头重新看书看基础知识,有时候需要多查一点资料,但基本上来说只要你做过一次,这块知识就融入你的灵魂,你会象熟悉自己一样熟悉它。第三个阶段,当解决了足够多的有价值实际问题,你会在它们之中找到共性,然后实现一个通用解决方案,或者一个有价值的开源软件,到这个地步,就是非常好的开发人员了。