最近人品爆发,图灵社区,InfoQ,51CTO相继对我作了采访,前两天我把InfoQ对个人采访张贴了出来,今天,图灵社区和51CTO对个人采访发布了(图灵的访谈 ,51CTO的访谈),我是一个有技术焦虑症的人,个人经历比较特殊,对你们来讲可能也没有什么意思,这两个采都有一些重叠的部分,不过有些观点我想再增强一些,并放在这里和你们一块儿分享一下。html
遇到新技术我会去了解,但不会把很大的精力放在这些技术(如:NoSQL,Node.js,等)。这些技术尚不成熟,只须要跟得住就能够了。技术十年以上多是一个门槛。有人说技术更新换代很快,我一点儿都不以为是这样想。虽然有不成熟的技术不断地涌出,可是成熟的技术,好比Unix,40多年,C,40多年,C++,30多年,TCP/IP,20多年,Java也有将近20年了……,因此,若是你着眼成熟的技术,其实并很少。前端
个人观点是——要了解技术就必定须要了解整个计算机的技术历史发展和进化路线。(这个观点,我在《程序员练级攻略》和《C++的坑多吗?》中提到过屡次了。)由于,你要朝着球运动的轨迹去,而不是朝着球的位置去,要知道球的运动轨迹,你就须要知道它历史上是怎么跑的。程序员
若是要捋一个技术的脉络,70年代Unix的出现,是软件发展方面的一个里程碑,那个时期的C语言,也是语言方面的里程碑。(当时)全部的项目都在Unix/C上,全世界人都在用这两样东西写软件。Linux跟随的是Unix, Windows下的开发也是 C/C++。这时候出现的C++很天然就被你们接受了,企业级的系统很天然就会迁移到这上面,C++虽然接过了C的接力棒,可是它的问题是它没有一个企业方面的架构,并且太随意了,不然也不会有今天的Java。C++和C很是接近,它只不过是C的一个扩展,终年没有一个企业架构的框架。而Java在被发明后,被IBM把企业架构这部分的需求接了过来,J2EE的出现让C/C++捉襟见肘了,在语言进化上,还有Python/Ruby,后面还有了.NET,但惋惜的是这只局限在Windows平台上。这些就是企业级软件方面语言层面就是C -> C++ -> Java这条主干,操做系统是Unix -> Linux/Windows这条主干,软件开发中须要了解的网络知识就是Ethernet -> IP -> TCP/UDP 这条主干。另一条脉络就是互联网方面的(HTML/CSS/JS/LAMP…)。我是一个有技术忧虑症的人,这几条软件开发的主线必定不能放弃。web
另外,从架构上来讲,咱们能够看到,算法
另外,我听到有不少人说,一些技术不适用,一些技术太学院派,但对我来讲,不管是应用仍是学术,我都会看,知识不愁多。何须搞应用的和搞学术的分开阵营,都是知识,学就行了。shell
技术的发展要根植于历史,而不是将来。不要和我描述这个技术的将来会多么美好(InfoQ 的 ArchSummit大会上有一个微软来的人把Node.js说得跟仙女同样,而后给了一个Hello World),我认可你用一些新的技术能够实现不少花哨的东西。可是,我认为技术都是承前的,只有承前的才会常青。因此说“某某(技术)要火”这样的话是没有意义的,等它火了、应用多了,规模大了,再说。有些人说:“不学C/C++也是没有问题的”,我对此的回应是:若是连技术主干均可以不学的话,还有什么其余的好学呢?这些是计算机发展的根、脉络、祖师爷,这样的东西怎么能够不学呢?数据库
另外,咱们要去了解整个计算机文化,我以为计算机文化源起于Unix/C这条线上(注意,我说的是文化不是技术)。我也写过不少与Unix文化相关的文章,你们能够看看我写的“Unix传奇(尤为是下篇)”。编程
学校教的大部分都是知识密集型的技术,可是社会上的企业大部分都是劳动密集型的。什么是劳动密集型的企业呢?麦当劳炸薯条就是劳动密集型的工做,用不到学校教授的那些知识。若是有一天你不炸薯条了,而要去作更大更专业的东西,学校里的知识就会派上用场。有人说一个语言、一个技术,能解决问题能用就好了,我不这样认为。我以为你应该至少要知道这些演变和进化的过程。而若是你要解决一些业务和技术难题,就须要抓住某种技术很深刻地学习,当成艺术同样来学习。后端
我在“软件开发‘三重门’”里说过,第一重门是业务功能,在这重门里,的确是会编程就能够了;第二重门是业务性能,在这一重门里,技术的基础就很管用了,好比:操做系统的文件管理,进程调度,内存管理,网络的七层模型,TCP/UCPUDP的协议,语言用法、编译和类库的实现,数据结构,算法等等就很是关键了;第三重门是业务智能,在这一重门里,你会发现不少东西都很学院派了,好比,搜索算法,推荐算法,预测,统计,机器学习,图像识别,分布式架构和算法,等等,你须要读不少计算机学院派的论文。浏览器
总之,这主要看你职业生涯的背景了,若是你成天被看成劳动力来使用,你用到的技术就比较浅,比较实用,可是若是你作一些知识密集型的工做,你就须要用心来搞搞研究,就会发现你须要理论上的知识。好比说,我以前作过的跨国库存调配,须要知道最短路径的算法,而我如今在亚马逊作的库存预测系统,数据挖掘的那些东西都须要很强的数学建模、算法、数据挖掘的功底。
我以为真正的高手都来自知识密集型的学院派。他们更强的是,能够把那些理论的基础知识应用到如今的业务上来。但很惋惜,咱们国内今天的教育并无很好地把那些学院派的理论知识和现实的业务问题很好地接合起来。好比说一些哈希表或二叉树的数据结构,若是咱们的学校在讲述这些知识的时候可以接合实际的业务问题,效果会很是不错,如:设计一个IP地址和地理位置的查询系统,设计一个分布式的NoSQL的数据库,或是设计一个地理位置的检索应用等等。在学习操做系统的时候,若是老师能够带学生作一个手机或嵌入式操做系统,或是研究一下Unix System V或是Linux的源码的话,会更有意思。在学习网络知识的时候,能带学生重点学一下以太网和TCP/IP的特性,并调优,若是能作一个网络上的pub/sub的消息系统或是作一个像Nginx同样的web server,那会更好。若是在学图形学的过程当中能带领学生实践一个做图工具或是一个游戏引擎,那会更有意思。
总之,咱们的教育和现实脱节太严重了,教的东西不管是在技术仍是在实践上都严重落后和脱节,没有经过实际的业务或技术问题来教学生那些理论知识,这是一个失败。
我以为倒不是。作一个软件开发者更简单了。由于如今互联网很发达,你能够找到不少共享的知识——相对于我那个时候。第一,知识你容易查到,而后社区不少,文章、分享的人也愈来愈多。咱们那个时候没有的。上网一查,什么都没有。都得去本身琢磨,本身去调查。因此我以为相比咱们那个时候更容易了。第二,工具变多了。如今的工具比那个时候好用多了。咱们那个时候就是一天到晚在vi里面,连个自动提示都没有,连个版本库管理都没有。不光工具变多,框架也多了,各类各样的编程框架。咱们那时候都是生写。写JavaScript,生写,连个jQuery都没有。没有这些辅助性的、让你提升生产力的东西。J2EE那时候也没有。并且整个(开发环境)都很不成熟。一个服务器的最高配置就1GB的状况下,一个WebSphere起来就占了900多MB——这还能跑什么应用?因此只能去用最基础的系统。因此我以为如今,不管是环境,仍是开发的过程,都更规范了。之前我作开发的时候就是,什么都不懂就上了,瞎搞,没有什么开发规范,没有人理你,反正你搞得好就搞好,搞很差就搞很差了,全靠本身,包括作测试维护等等。我以为如今的软件开发就很好,你一上去,就有好的工具,有好的知识库,有好的社区,有好的开发框架,还有好的流程,方法,甚至还有人帮你作测试,还有人告诉你应该怎么作。幸福得很。如今好多人还说这个很差那个很差,开发难什么的。其实容易多了。
可是,有个东西我以为是如今的软件开发者比咱们那时候变得更难的。就是,你享福了之后,人就变懒,变娇气了。对不少东西的抱怨就开始多了。咱们那个时候哪有什么好抱怨的?没啥好抱怨的,有活就干,有东西学就赶快学。如今呢,学个什么东西还挑挑拣拣的,抱怨这个语言太扯,那个IDE很差,这个框架太差,版本管理工具太扯,等等。这就好像之前我没东西吃,只有个糠吃,要是有面包有馒头,我就以为很是很是好了。如今是,好吃的东西多了咱们还学会挑食了,这也很差用,那也很差用。
根本就不是技术变难了,环境变差了,是程序员变娇气了。因此软件开发变难,归根结底仍是程序员们本身变娇气了。
中国人中庸的思想,入世和出世,天天的工做就是入世。举个例子,我十年前在上海的时候,给交通银行作项目的时候,每周休息一天,早九点到晚十点,天天工做12个小时,这样的工做持续了一全年,没有节假日,项目上的技术也没什么意思。当时我晚上十点回到住处,还想学一些C++/Java和Unix/Windows的技术,因而就看书到晚上11:30,天天如此,一年下来学到不少东西,时间没有荒废,内心就很开心。我以为当时是快乐的,由于有成长的感受是快乐的。
如今的我,工做、写博客、养孩子,事情其实更多。我早上7:30起床,会浏览一下国外的新闻,hacker news, tech church, reddit, highavailability之类的站点,9点上班。晚上六、7点钟下班,开始带孩子。十点钟孩子睡了觉,我会开始从新细读一下这一天都发生了些什么事情。这个时间也有可能会用来看书。学习的过程(我)是不喜欢被打断的,因此从十点到十二点,家人都睡了,这正是我连续学习的好时间。可能从晚上11:30开始,我会作点笔记或者写博客。我如今对酷壳文章的质量要求比较高一些,因此大概积累一个星期的时间才能够生成一篇文章。天天我大概都在一两点钟才会睡觉。没办法,我有技术焦虑症。可是以为这样的生活很充实,也很踏实。
另外,任何一门技术玩深了,都是颇有意思的。有些人造成了一个价值取向,“我只作什么,毫不作什么”。前段时间有一个刚来亚马逊的工程师,他原来作的是数据挖掘推荐系统,原来的公司重组要让他作前端,他不愿就离职了,他说他不想作前端。我以为,前端后端都是编程,Javascript是编程,C++也是编程。编程不在于你用什么语言去coding,而是你组织程序、设计软件的能力,只要你上升到脑力劳动上来,用什么都同样,技术无贵贱。你能够不喜欢那个技术,可是仍是要了解了解,也没有必要彻底不用,彻底抛弃。Javascript啊——只要能被Javascript实现的,将来总有一天会被Javascript所取代。
回到问题,怎么才能享受到快乐呢?
总之一句话——若是你没有兴趣,什么都是借口,若是你有兴趣了,什么都是好玩的。
转自:http://coolshell.cn/articles/8088.html/comment-page-1#comments