关于老的和新的技术及精神家园

转自:http://www.ituring.com.cn/article/9174

关于老的和新的技术

“技术的发展要根植于历史,而不是未来。”

图灵社区:对于日新月异的新技术,你是什么态度?

遇到新技术我会去了解,但不会把很大的精力放在这。这些技术尚不成熟,我只需要跟得住就可以了。我的团队自己想学什么我都不干涉,但是用到项目里的技术,必须是很成熟的,(技术应用)十年以上可能是一个门槛。有人说技术更新换代很快,我一点儿都不觉得是这样想。虽然有不成熟的技术不断地涌出,但是成熟的技术,比如Unix,40多年,C,40多年,C++,30多年,Java也有将近20年了……,所以,技术并不多啊。还有很多技术比如ruby,lisp这样的,它们没有进入主流的原因主要是缺少企业级的应用背景。

如果要捋一个脉络下来,70年代Unix的出现,是软件发展方面的一个里程碑,那个时期的C语言,也是语言方面的里程碑。(当时)所有的项目都在Unix/C上,全世界人都在用这两样东西写软件。Linux跟随的是Unix, Windows下的开发也是 C。这时候出现的C++很自然就被大家接受了,企业级的系统很自然就会迁移到这上面,C++虽然接过了C的接力棒,但是它的问题是它没有一个企业方面的架构,否则也不会有今天的Java。C++和C非常接近,它只不过是C的一个扩展,长年没有一个企业架构的框架。而Java出现之后,IBM把企业架构这部分的需求接了过来,J2EE的出现让C/C++捉襟见肘了,后面还有了.NET,但可惜的是这只局限在Windows平台上。这些就是企业级软件方面语言层面这条线上的技术主干。

另外一条脉络就是互联网方面的(HTML/CSS/JS/LAMP…)。这条脉络和上述的那条C/C++/Java的我都没有放,作为一个有技术忧虑症的人,这两条软件开发的主线一定不能放弃。无论是应用还是学术,我都会看,知识不愁多。何必搞应用的和搞学术的分开阵营,互相看不起呢?都是知识,学就好了。

技术的发展要根植于历史,而不是未来。不要和我描述这个技术的未来会多么美好,用这个技术可以实现什么花哨的东西。很多常青的技术都是承前的。所以说“某某(技术)要火”这样的话是没有意义的,等它火了、应用多了咱们再说嘛(笑)。有些人说不学C/C++也是没有问题的,我对此的回应是:如果连主干都可以不学的话,还有什么其他的好学呢?极端一点,我要这么说:这些是计算机发展的根、脉络、祖师爷,这样的东西怎么可以不学呢?大部分学校虽然都会教授C,但是教得都不好。学校喜欢教微软的东西,老师好教学生好学。我不是说Windows不好,但那不是计算机文化的主干,那只是微软的主干、PC的主干。整个计算机文化的主干肯定是源起于Unix/C这条线上(注意,我说的是文化不是技术)。我也写过很多与Unix文化相关的文章,大家可以看看我写的“Unix传奇”

图灵社区:可是在应用环境中,对新技术的需求是很高的,你觉得在教育领域计算机科学的侧重应该是什么样的?

学校教的大部分都是知识密集型的技术,但是社会上的企业大部分都是劳动密集型的。什么是劳动密集型的企业呢?麦当劳炸薯条就是劳动密集型的工作,用不到学校教授的那些知识。如果有一天你不炸薯条了,而要去做更大更专业的东西,学校里的知识就会派上用场。有人说一个语言、一个技术,能解决问题能用就行了,我不这样认为。我觉得你应该至少要知道这些演变和进化的过程。而如果你要解决一些业务和技术难题,就需要抓住某种技术很深入地学习,当成艺术一样来学习。

我在“软件开发‘三重门’”里说过,第一重门是业务功能,在这重门里,的确是会编程就可以了;第二重门是业务性能,在这一重门里,技术的基础就很管用了,比如:操作系统的文件管理,进程调度,内存管理,网络的七层模型,TCP/UCP的协议,语言用法、编译和类库的实现,数据结构,算法等等就非常关键了;第三重门是业务智能,在这一重门里,你会发现很多东西都很学院派了,比如,搜索算法,推荐算法,预测,统计,机器学习,图像识别,分布式架构和算法,等等,你需要读很多计算机学院派的论文。

总之,这主要看你职业生涯的背景了,如果你整天被当作劳动力来使用,你用到的技术就比较浅,比较实用,但是如果你做一些知识密集型的工作,你就需要用心来搞搞研究,就会发现你需要理论上的知识。比如说,我之前做过的跨国库存调配,需要知道最短路径的算法,而我现在在亚马逊做的库存预测系统,数据挖掘的那些东西都需要很强的数学建模、算法、数据挖掘的功底。

我觉得真正的高手都来自知识密集型的学院派。他们更强的是,可以把那些理论的基础知识应用到现在的业务上来。但很可惜,我们国内今天的教育并没有很好地把那些学院派的理论知识和现实的业务问题很好地接合起来。比如说一些哈希表或二叉树的数据结构,如果我们的学校在讲述这些知识的时候能够接合实际的业务问题,效果会非常不错,如:设计一个IP地址和地理位置的查询系统,设计一个分布式的NoSQL的数据库,或是设计一个地理位置的检索应用等等。在学习操作系统的时候,如果老师可以带学生做一个手机或嵌入式操作系统,或是研究一下Unix System V或是Linux的源码的话,会更有意思。在学习网络知识的时候,能带学生重点学一下以太网和TCP/IP的特性,并调优,如果能做一个网络上的pub/sub的消息系统或是做一个像Nginx一样的web server,那会更好。如果在学图形学的过程中能带领学生实践一个作图工具或是一个游戏引擎,那会更有意思。

总之,我们的教育和现实脱节太严重了,教的东西无论是在技术还是在实践上都严重落后和脱节,没有通过实际的业务或技术问题来教学生那些理论知识,这是一个失败。

精神家园

“当你老了的时候,回想过去,如果你是为自己而活的,你就不会后悔,而且会感觉很踏实。”

图灵社区:你如何在进度压力下,享受技术带来的快乐?

中国人中庸的思想,入世和出世,每天的工作就是入世。举个例子,在上海的时候,给交通银行做项目的时候,每周休息一天,早九点到晚十点,每天工作12个小时,这样的工作持续了一整年,没有节假日,项目上的技术也没什么意思。当时我晚上十点回到住处,还想学一些C++/Java和Unix/Windows的技术,于是就看书到晚上11:30,每天如此,一年下来学到很多东西,时间没有荒废,心里就很开心。我觉得当时是快乐的,因为有成长的感觉是快乐的。

现在的我,工作、写博客、养孩子,事情其实更多。我早上7:30起床,会浏览一下国外的新闻,hacker news, tech church, reddit, highavailability之类的站点,9点上班。晚上6、7点钟下班,开始带孩子。十点钟孩子睡了觉,我会开始重新细读一下这一天都发生了些什么事情。这个时间也有可能会用来看书。学习的过程(我)是不喜欢被打断的,所以从十点到十二点,家人都睡了,这正是我连续学习的好时间。可能从晚上11:30开始,我会做点笔记或者写博客。我现在对酷壳文章的质量要求比较高一些,所以大概积累一个星期的时间才可以生成一篇文章。每天我大概都在一两点钟才会睡觉。没办法,我有技术焦虑症。但是觉得这样的生活很充实,也很踏实。

另外,任何一门技术玩深了,都是很有意思的。有些人形成了一个价值取向,“我只做什么,绝不做什么”。前段时间有一个刚来亚马逊的工程师,他原来做的是数据挖掘推荐系统,后来公司重组要他做前端,他不肯。我觉得,前端后端都是编程,Javascript是编程,C++也是编程。编程不在于你用什么语言去coding,而是你组织程序、设计软件的能力,只要你上升到脑力劳动上来,用什么都一样,技术无贵贱就是这个意思。

回到问题,怎么才能享受到快乐呢?第一,入世和出世要分开,不要让世俗的东西打扰到你的内心世界,你的情绪不应该为别人所控,也不应该被世俗所污染,活得真实,你才会快乐。第二点就是要有热情,有了热情,你的心情就会很好,加班都可以是快乐的,想一想我们整个通宵用来打游戏的时光,虽然很累,但是你也很开心,这都是因为有了热情的缘故。

图灵社区:有人说你现在的文章仍然说明你是一个躺在自己池子里说话的人,是不是说你仍然没有达到一个很高的层次?

我承认我活在我的精神家园里面。我推荐大家看一下王小波的《我的精神家园》,这篇文章对我的影响非常大。看了这篇文章,你就会明白我为什么要躺在自己的池子里,如果不想被这个社会所污染,就必须要躺在自己的池子里。做大众是很容易的,做自己是最难的。当你老了的时候,回想过去,如果你是为自己而活的,你总会觉得很踏实。可能有人会觉得我偏激,没关系,为什么要所有人看法都一致呢?世界因为不同而美丽,多元化的价值观并不冲突。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值