Open xinrong2019 opened 5 years ago
1、快速集中的学习,作者用了两年时间看了很多书
2、据作者自己说,一天给自己的自由看书的时间是1.5小时,但是坚持一年,也学了很多东西
3、新技术了解即可,要不断加深对基础知识的掌握。新技术层出不穷,基础知识才是宝藏。
4、学术的知识和实用的都重要,学术的甚至更重要,学术知识的掌握和实践是创新的源泉
5、优秀的人的特质:能够集中精力,用最短的时间掌握基础知识,会合理使用时间,心态好。
这篇文章更多的是读到了这些人做事的态度,每个人应该拥有的态度。
遇到困难,逐个击破,想方设法把事情做好,做重(这里不要被误导,有的知识还是要先广度,对每个知识点有所了解,再深度)
是的,我的互联网不是——全是骗子的百度、充满广告的微信朋友圈、质量低下的公众号、娱乐至死的新浪微博、只有抖机灵和“怎么看XX”的知乎、毫无营养的今日头条…… 在这样的网络空间里,我真的无法生存…… 这根本不是互联网,不是为我服务的互联网,而是在消费我的互联网,是让我变傻变笨的互联网…… 我不能忍,因为它影响到了我的生存……
我做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力。因为我开始工作的时候基本没有这样的训练算法和编程的网站,除了大学里的“算法和数据结构”里的好些最基础最基础的知识,基本上没有什么训练。所以,当我看到有人在做这些题的时候,我也蠢蠢欲动地想去刷一下。
前言
原文不知道在哪?也不找了,我希望学的是大佬身上的优点,而不是这篇文章本身。
但是还是给出转载这篇文章的地方,虽然没有给出处。
阿里巴巴陈皓: 技术是工程,我是技术的信徒
正文
人物简介:陈皓 前亚马逊、阿里巴巴技术专家超过15年软件开发相关工作经验,8年以上项目和团队管理经验。擅长底层技术架构,团队建设,软件工程,软件研发咨询,以及全球软件团队协作管理。曾在Amazon中国任研发经理,负责电子商务全球化业务(全球开店)和全球库存预测系统的研发。曾在阿里巴巴北京研发中心、商家业务部曾任资深专家一职,负责电商云平台、开放平台,云监控和电商多媒体平台。曾在阿里巴巴核心系统专家组从事阿里核心系统和阿里云ECS相关虚拟化平台的开发工作。
011年陈皓在亚马逊工作期间 在接受采访的前一天,陈皓刚刚在他的科技博客上更新了一篇文章,主题是“性能测试应该怎么做?”文章下面有几十条留言评论,大半都是探讨交流文章中的技术问题。 在这个微信泛滥的时代,陈皓仍然坚持在博客上定期撰写专业技术文章,他更愿意使用blog这样的方式分享文章。他希望自己的文章能成为生态圈的里的一部份,所谓生态圈是相互融合,不是唯我独尊,而微信公众号并不能很好的支持。“这和做开源软件的道理一样,开源软件不是把源代码开出来就好了,而是要去和已有的其它软件互相融合,互相兼容,互相支持,这本就是软件设计的真谛。所以我想,写文章也一样。” 与博客里的都是程序员之间交流不同,在新浪微博上,他是一个有将近20万粉丝的大V,除了技术问题,他还会对很多公共议题发表自己的看法,经常语出惊人。他因为旗帜鲜明的反对某家互联网大型企业,还被业内戏称为“黑XX第一人”。他的微博ID是“左耳朵耗子”,却经常被同业晚辈和粉丝尊称为“耗子哥”乃至“陈叔”。 双子座的陈皓评价自己是“一个既沉稳、也粗野的人”,“我做事情会比较沉稳,但是有的事情我做的却很疯狂。”工作将近20年,陈皓是一个技术的信徒。他在那篇性能测试的博文中详细讲述了金融系统响应时间的性能测试要求:99.9%的请求必须小于1ms,所有的平均时间必须小于1ms。 文章最后他反问道:“是不是很繁锁?是的,只因为这是工程,工程是一门科学,科学是严谨的。”尊重理想,24岁就知道自己想要什么 陈皓是地地道道的昆明人,为了离家近考上了云南大学,那还是在90年代中期。因为动手能力强,学计算机专业的他在上学的时候就帮着老师做项目。大三的一天,系主任找到他说:现在你有两个工作机会,一份在北京的一家IT公司,一份是在昆明的工行。区别在于,去了工行你的技术会越来越差,但公司不会倒;而北京的工作会让你技术越来越好,但可能有风险。 当时除了帮老师做项目外,陈皓连正式实习的经验也没有,也没有人可以问。因为家庭和父母的原因,最终他很自然的选择去了工行。 在银行工作是简单甚至有些单调的,做IT技术保障的大部分事情都是让外面的人来做,而他们只需要像包工头一样做实施和运维,这让他感觉很不习惯。与此同时,陈皓每天都能看到很多震撼而刺激的科技新闻:新浪搜狐搜狐三大互联网门户,以及微软、雅虎、惠普、甲骨文等这样的大公司的新闻不断出现在各种媒体上。 当然,互联网对于他的冲击是更是无法想象的,直到今天他还是清楚的记得第一次上网是通过14k的猫(调制解调器)拨号进入一个聊天室,以及认识的第一个网友来自湖南。 当时在银行陈皓有一位让他特别佩服的同事,比他大概大10岁左右,业务能力特别强,但由于一些历史原因只是一名临时工,颇有些《天龙八部》里扫地僧的感觉。一天他们俩吃饭时聊天,谈到理想时,那位同事说:为了实现理想而奋斗,就算失败了,就算很惨,也不后悔。这句话给陈皓的震撼特别大,那天晚上他躺在床上想:“我觉得自己生活在了一个正确的时代,也选对了专业,那一定要去一个正确的地方实现理想。”那一年他24岁。 于是,陈皓毅然选择了离开,离开银行、离开昆明,放弃单位刚刚分到的房子。陈皓坦诚当时这个决定受到家人朋友以及外界的强大阻力,但是,“当时不做这个决定,我就没有今天。拿得起是比放得下更难的事情,很多人是拿不起,但更放不下。你愿不愿意放弃现在的工作去争取未知的东西,你不确定能不能拿到,就会怀疑自己。” 多年后陈皓看到罗尔夫·多贝里(Rolf Dobelli)所著《清醒思考的艺术》一书,里面一个观点和他的想法不谋而合:绝大多数人会思考他失去的东西而大过于得到的东西,在做选择的时候,也通常会花更多的时间去考虑自己失去的东西。 多年以后,已经成为业界专家的陈皓经常会收到很多年轻人的邮件,甚至打来电话,请他做职业选择辅导,以及要不要来北京、要不要转行等等这些问题。“我听到的全部都是会担心失去,他们从来没有想到自己的得到。而我更多的是考虑我会得到的东西,而不是考虑会失去什么,所以我做任何选择从不纠结,这在我24岁的时候就清楚的明白了,我要的是有意义的刺激的经历。”
在Platform工作时的陈皓 外企很棒,但对中国公司更有信心 2000年陈皓离开昆明时恰好赶上了第一次互联网泡沫,这让一直心仪互联网公司的他只能暂时回到传统行业,在上海一家做银行业务的大型IT公司做软件技术开发。2年后,一直想去外企历练的陈皓,进入了加拿大知名软件开发商Platform。 刚进入Platform时让陈皓备受打击,才入职第一个月领导就不让他写代码了。“因为之前没有受过专业的训练,人家一眼就看出你是野路子、业余水准,于是他就被安排做测试。”做测试的时候陈皓闲不住,在系统出故障的时候会自己去找BUG,看到底是什么原因。找出来后还把故障原因和可能出现的相关问题写在内网里。这引起了加拿大总部的重视,正巧客服部门由于满足不了客户专业的需求,于是陈皓被派往客服部做技术支持。 做客服的这段经历陈皓受益颇多。他当时听到了不同国家各种各样口音的英语,其中印象最深的是德国客户和日本客户,德国人会一个单词一个单词极其慢速的说英语,这也让陈皓慢慢的把每个单词说清楚,从而也练好了英语。而日本客户会在过程中不断问新的问题,这使得陈皓必须看更多的东西,而对方会因为知道了这些再问更多的问题。一次在解决一个日本客户的问题后,陈皓看了其间的往来邮件,他在一个月的时间竟然把整个软件100万行代码读了2/3。 2007年,陈皓加入了汤森路透,4年多时间从一名普通技术人员做到了部门主管,最多的时候他负责北京研发中心八个项目组的技术管理和产品研发工作。陈皓相信“技优则管”,技术优秀了自然就可以管理指导团队。“我不觉得管理别人非要放在一个职位,管理是一种现象,是别人遇到问题会来问你,而不是高高在上的权威。”。 离开路透后,陈皓去了自己一直很心仪的一家公司——亚马逊。这家看起来在卖书、实际上做出世界上第一个推荐算法和云服务的公司,深深的吸引了他。多年之后通过对比几家服务过的外企,陈皓觉得每一家都有自己的特点,Plateform和路透有着完善的培训体系,“尤其是路透的有些培训,我觉得跟读一个MBA是一样的。”路透会请国外一些高级机构,经常就是5天的workshop,把全球各个国家的员工集中在一起,会学习到很多东西。 而亚马逊的经历陈皓更是坦言自己是被“洗脑”了,“因为亚马逊聪明人很多,和这些聪明人在一起的时候,你就会明白这个世界会变的非常简单,这实际上并不是一件简单的事情。”所以每年去亚马逊西雅图总部出差的时候陈皓都会约几位Principle SDE(资深技术专家)吃饭,“我跟他们在一起,不管他们说什么我都愿意听,哪怕就讲一道菜。” 在外企自认为已经待了足够长的时间后,陈皓选择加入了阿里巴巴,原因很简单,“就是想参加双11、明白本土企业是怎么成功的”。几个月的观察,让陈皓觉得阿里这个公司和外企有很大区别,“阿里的员工很有热情,也很有积极性,那种精神状态是我很喜欢的精神状态。”尤其是到了双11之前,所有参与的同事没有周末没有节假日连续工作三个月。到最后一个月倒计时,气氛紧张到自己必须要加班,时间感觉完全不够用。像陈皓这个级别每周都要熬三四个通宵。 陈皓负责的是天猫云服务平台“聚石塔”的技术保障工作,之前每到双11,淘宝和天猫的服务器宕机都是困扰阿里的一个大问题。在陈皓加入的2013年,他和同事提前连续做了四个月的测试,确保系统万无一失。 2013年的双11,阿里几千名员工连续好几天都待在一起,就像打仗一样。当零点一过的第一分钟,陈皓看着服务器压力一下上百倍地冲了上去,接近峰值,也如之前的反复测试的结果一样,很快又降下来了,之后系统便顺畅无恙。陈皓和同事反而没有了事做,于是他们找了一个会议室喝酒,看着在大屏幕上不断创新高的销售额数字,看着不同部门同事们亢奋的精神状态,看着马老板请来的各种明星,“像过节一样”。 “你觉得外企会干这个事?他们根本不懂这些。中国人要努力的多,我对中国的未来很有信心。” 从1998年到现在,陈皓眼见着中国的互联网公司发展起来,可能会有这样那样的问题,但很明显看到它们有一个非常强劲的成长势头。
陈皓在汤森路透工作时最多负责北京研发中心八个项目组的技术管理和产品研发工作 技术是门工程,工程是门科学 在加入第一家外企Platform后,陈皓就明白了技术需要一个非常系统的训练。“那个时候我才知道什么叫工程,就像盖房子,写代码只是在砌砖,而真正的技术是一项工程。”这种感受在之后的几家公司中都在不断加深。 由于要照顾父母,陈皓离开阿里后没有再从事一份全职工作,但由于上门求助的公司很多,陈皓也会偶尔做一些技术管理的咨询工作。通过接触众多大大小小的公司,陈皓发现中国已经跟美国一样,创业公司越来越多的同时,但技术人才却越来越缺乏,这成为很多公司发展的一大瓶颈。 有很多知名的企业家和创业者找到陈皓,希望他能够帮助搭建和管理技术团队。一次一位知名的创业者请他吃饭,陈皓问他:“你们请我过去可以,但你们尊不尊重技术?尊不尊重技术人员?”对方一愣,说已经给了技术人员很好的配置。陈皓摇头:“技术是门工程,工程是门科学,科学有它的规律,就像怀孕十个月就是十个月,马虎不得,尊重技术就是尊重科学。” 在陈皓看来,一般创业公司的发展都会经历三个阶段:一是想法变成产品,这个时间很快,就像在一条小河上架一个木板就可以过去了。二是获取用户,这时候就开始需要搭建技术架构,会面临获取用户的渠道变得很容易的同时,河的宽度也扩大了,之前搭的木板需要不断扩大来满足用户需求。这个时候经常会出现两个问题,系统挂掉,人才跟不上。因为以前欠的债越来越多。三是业务扩张,这个时候,企业需要的是非常庞大的系统架构和工程能力。很多人都觉得技术就是找几个人来写代码这么简单,这就好像他们觉得在家里安个自来水安个电灯很简单,他们忘了水笼头后面的那个自来水厂那个发电厂有多复杂。 这个时候很多公司的办法是请牛人来解决,但陈皓认为这根本不是解决办法,“是把牛人拉下来玩之前这套不尊重技术的玩法?还是把公司拉上来用工程的方法发展?工程的方法可能会公司发展慢下来,但未来会越来越快。而把牛人拉下来,还要牛人有什么用呢,就像中国足球,是不是把马拉多纳、罗纳尔多、C罗、梅西请来,中国足球就能成功了?不会的,结果是这几个人废了。” 陈皓坚信体制更重要,他认为90%的技术问题都是管理问题,而且试错的成本很大。“罗马不是一天建成的,亚马逊、阿里也不是一天建成的,但现在整个创业庞大的环境很浮躁,很多公司抓不住重点,技术管理就变得很混乱。” 陈皓认为自己不是一个聪明人,唯一觉得可取的地方是基础打的牢,因为基础知识一通百通。陈皓有一个比他小10岁的朋友,他很羡慕这个年轻人,“他对于很多技术知识都懂,我花了18年,他就花了不到10年。不是所有的人都是聪明人,笨的人要多花点时间,如果笨的人再浮躁,就什么都没有了。” “因为技术是门工程,工程是门科学,而且技术更新很快,很多10年前学的东西都没有用了,必须活到老学到老。”
一、个人简历 陈皓,coolshell.cn博客博主。 14年以上软件开发相关工作经验,8年以上项目和团队管理经验。 擅长底层技术架构,软件工程。 对高性能,高可用,分布式,高并发,大规模数据处理系统有一定研究。 技术擅长C/C++/Java和Unix/Linux/Windows。
二、轶事和思考
2.1、毅然辞掉银行工作
我当时在银行做银行网络、银行的电子邮件系统和办公自动化系统。当时正处在银行信息化的阶段,加上当时互联网和IT业刚刚火起来,得到这份工作其实是很幸运的。银行正值扩张电子信息化业务的时候,其实应该有很多事可做,但是当时的主要工作都是由厂商来干。比如说IBM或Cisco拿下单子来,会把工作外包给系统集成商。作为一位技术人员,其实可以发挥的空间并不大,多数时间我只是出了问题打电话的角色。没有人会教你任何事,出了问题,就是打电话,然后按照他们的指导来完成工作。但这个还不是促使我离职的最主要原因,我离开是因为互联网和IT业的兴起让我有些心向往之,有想去看一看的冲动。我还记得当时的辞职书是这么写的:“本人对现有工作毫无兴趣,申请辞职”。处长说,“你可以这么写,但是要加上‘经调解无效’,另外,分给你的房就不能要了”。我说好啊。就这样就辞去了工作,去了上海。老实说,这个决定真不好做,因为几乎所有的朋友和亲人都很反对。
2.2、选择上海闯荡的原因
当时选择上海是有原因的,我觉得在当时的环境(2000年)下,上海的发展比较不错。没有选择深圳的原因是个人感觉那是因为政治原因凭空冒出来的一座城市,我不是很喜欢。北京我有很多同学,而我想去一个陌生的地方。但是后来发现上海也不是做技术的地方,过得有些压抑,初来到上海的时候经常会被人瞧不起,毕竟是刚刚来到大城市。 我当时感觉银行束缚了我,想看看自己可以跑多远,能发挥出多大的价值。于是决定出来闯一闯,主要就是要去经历一些应该去经历的事情,不希望老了以后会后悔年轻的时候没有去。当时IT产业的发展是一个大趋势,我感觉我必须要去一座大城市,去经历一些东西。在小地方基本没有这些机会。要学会游泳就必须要跳到水里去呛两口水,所以我就义无反顾地出来了。
2.3、工作挫折和自省
我仍然记得自己拎着皮箱站在上海火车站的样子,举目无亲。原来在老家的时候觉得自己还挺厉害的,自以为不愁找不到好工作。不过事实却不是这样的。 我还记得第一次去面试时,(面试官)问了很多和C相关的问题,问了我半个小时,我一个问题都答不上来。我一直低着头,好像被审问的犯罪分子一样。我从大学毕业出来就没经历过什么面试,再加上自己内向的性格,所以,整个过程我都在低着头,不敢看别人一眼。最后,面试官问了我一个问题是“有不懂的问题你会怎么办”,这样的问题我都不敢回答,其实这道题的答案不过就是“问别人”或是“自己看书”或是“上网查资料”什么的。很显然,这场面试我肯定是被灭掉了。但这还没完,最后面试官对我说:“你出来干什么,像你这种性格根本不适合到大城市来”。 我当时被严重地打击了,感觉到自己确实有一些东西很差。第一个是性格差,不知道怎么与人交往;第二个是技术差,很多问题不知道;第三个就是视野狭窄,没见过世面。后面的几家公司的面试都大同小异。一个人在异地他乡,经历了这些事情,心里会非常地恐慌,“我这条路是不是走错了?”,我经常这样问自己。 面对这样的情况,我被逼迫着一定要改变自己。因为,离开银行时,我的家人、同学和朋友都很反对我出来,如果这样灰溜溜地回去,我面对不了他们。而前面的人还看不起我。我当时的处境真的很难堪,就像爬在悬崖中间,上不去也下不来。所以,当时只有一个想法,就是要证明自己不是那么差的人。人被逼到那个份上,活得就比较简单,哪有什么职业发展规划,只想拼命地多学技术,提高自己的能力。这个经历有点像是一剂兴奋剂,同时也相当阵痛。但是回头想想,第一个面试官应该是我最感谢的人。
2.4、疯狂成长
在同学的帮助下我找到了在上海的第一份工作。南天公司,这是一家给银行做系统集成软件的公司,大学毕业时本来也可以进去,现在绕了一圈而且还是靠同学帮助进去的,所以那时的心态还很不平稳;另一方面因为以前是做银行的,是甲方,现在成了乙方了,两边的人都用异样的眼光看我,心态非常不好。 不过,这是个技术不错的企业,国内早期很多搞Unix/C的高手都是从这个公司培养出来的。我当时的技术还是不行,比如说到了用户站点以后,不知道怎么做,我曾经误操作把用户的数据删掉了。经常犯低级错误,不但没做好自己的工作,反而还给别人添了麻烦。这些经历都让我有一种“技术焦虑感”,或者叫“技术忧郁症”。我觉得自己这也不行,那也不行。这也是我今天仍然在拼命学习的原因。这就好像我们经常在参加工作多年后还会梦见自己的英语四级没过,或者是期末考试没过一样。我经常会梦见的是项目又做砸了,又把用户的系统搞乱了,一大堆人要审我、要训斥我。 因为技术差,沟通差,不会面试,所以,我决定经常出去面试,基本上每周都要去,不管懂不懂,也不管是什么公司,也不管别人鄙不鄙视我,反正一有机会就去面试,多见见人这样可以让我的性格有所改善,同时,也可以知道社会上需要一些什么样的技能,把别人面我回答不上来的东西都记下来,然后回头找答案。那个时候我会经常去上海书城看书,看很多很多的书。我学的东西很杂,什么做网页,Windows,Unix,Java,.NET,flash,连3DMax/Photoshop我也学,还去考CCNA的认证等等。这样散乱地学习两年后,我才慢慢确定了要走C/C++/Unix/Windows系统底层的路子。而这样扑天盖地学习的结果有一个好处就是,我成长的速度相当之快。我自己摸索到了适合我的学习方法(从基础和原理上学习),从而不再害怕各种新的技术。那时,所有人都在休黄金周出去玩的时候,我还呆在办公室或住处看书学习。 等到一年半之后,用句赵本山的台词说,我在面试中学会抢答了。面试官的问题没问完,我就能说出答案了。其实,基本上是面一个公司过一个(当然都是一些小公司),此时,我就开始挑公司了。 感到技术能力不行就去学技术,交往能力不行我就去面试,这两个问题都可以通过大量地实践和努力来弥补,但是眼界这个东西没有办法通过努力来弥补。所以,当时非常想去一些更大的公司看看,如果能去外企更好。
2.5、变得不一样
我还记得,有一天,有一个和网络相关的技术问题,同事们搞了三四个通宵,也没弄明白,后来想起我好像在看这方面的书,他们就让我去看看、试试,结果我只用了20分钟就搞定了。基础真的很重要,这受益于我看了《TCP/IP详解》这套书。 后来,我去了一家做电信软件的公司,他们让我做PowerBuilder,尽管我当时想做的是C++,但是因为当时各种原因很需要这份工作,就去了。进了那里的第一天发现公司里有一个论坛,上面都是一些技术上悬而未决的问题,都是关于Windows/C++的。我一看,都是些很简单的问题,一下午的时间就被我全部解决掉了,我的基础知识发挥了作用。于是,当天下午我一下子就被调到了核心组。不过,我只在那里呆了两个多月,因为那时我已经不愁找工作了,这期间有两家北京的公司录用了我,于是,02年我就来到了北京,去到一家做分布式计算平台软件的公司。 在上海的这两年的时间,从什么都不是,到得到工作上的全面肯定。那段时间感觉自己牛得不得了,有些狂妄和骄傲了,经常上网和不认识的人争论一些很傻的问题,后来发展到对当时的领导以及银行客户的领导不敬,总觉得这些人太二。现在回头看过去,我觉得那是我人生特定时期的记号,人生的痕迹。
2.6、建立coolshell.cn的原因
我2002年在CSDN开了一个blog,当时叫专家专栏。开个专栏很简单,只要发6个帖子。我也不是什么专家,只是喜欢看书、喜欢学习而已,也喜欢做一些学习笔记。那时候没有笔记本也没有台式机,市面上好像也没有U盘和移动硬盘。正好有CSDN这么一个地方,就去CSDN的站点上把自己的一些学习笔记放在了上面。后来03年的时候技术专栏转到了博客,因为CSDN对其博客经营得不好,我09年就离开了csdn,创建了酷壳。花了4500块钱,租了一个server。我离开那里主要有两个原因,一个是因为当时CSDN博客有一些性能上的问题,.NET架构嘛,大家都懂的。另外一个原因就是当时出现了很多博客营销的站点,有点像今天的36氪。好像那时候出现最早的叫煎蛋,那上面会有一些报纸上不会出现的国外的趣闻,是以博客的方式形成的媒体。这和常规的以日记形式出现的博客大不一样。煎蛋、有意思吧等这些博客让我看到了博客还能这样写,我觉得很好玩儿。而我当时也经常会去国外社区看一些文章,也能看到一些有意思的东西(因为我当时有了学习瓶颈,国内的网站已经满足不了我了)。心想,既然这些东西这么有意思,我为什么不自己开一个博客呢? 我老婆是学新闻编辑的,她鄙视我说,你的博客虽然有很多人读,但是只能算是个书呆子的博客,全是一些书呆子式的文章。我有些不服,我觉得技术人员不全是书呆子,我们这个圈子里也有很多有趣的东西,只不过是你不知道而已。于是我想弄一个有意思的、有娱乐性质的东西,里面都是技术圈里面有意思的事儿,但是很多技术圈以外的人也能看懂。一开始酷壳和CSDN博客的风格完全迥然,如果有技术性的文章我还会在CSDN上贴,但是后来我就完全抛弃了原来CSDN上的博客。酷壳的初衷是希望很多人都可以来上面发表一些东西,但是可能是我写得太多了,别人就被压制住了。 现在博客更新频率是一周一篇,一开始的时候一周三篇。磨刀不误砍柴工,总是有时间来做这些事的。我经常看书,需要把学到的东西整理成学习笔记。自从在CSDN上写博客的时候,就有这样的习惯了,而且又有“技术焦虑症”,害怕跟不上,所以维护博客的事对我来说是很自然的。 现在我已经不用自己再租服务器了,由于酷壳的访问量比较有保证,我提供了广告位,就免费得到服务器了。
2.7、对于新技术的态度
遇到新技术我会去了解,但不会把很大的精力放在这。这些技术尚不成熟,我只需要跟得住就可以了。我的团队自己想学什么我都不干涉,但是用到项目里的技术,必须是很成熟的,(技术应用)十年以上可能是一个门槛。有人说技术更新换代很快,我一点儿都不这样想。虽然有不成熟的技术不断地涌出,但是成熟的技术,比如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传奇”。
2.8、对于学校计算机科学教育的看法
学校教的大部分都是知识密集型的技术,但是社会上的企业大部分都是劳动密集型的。什么是劳动密集型的企业呢?麦当劳炸薯条就是劳动密集型的工作,用不到学校教授的那些知识。如果有一天你不炸薯条了,而要去做更大更专业的东西,学校里的知识就会派上用场。有人说一个语言、一个技术,能解决问题能用就行了,我不这样认为。我觉得你应该至少要知道这些演变和进化的过程。而如果你要解决一些业务和技术难题,就需要抓住某种技术很深入地学习,当成艺术一样来学习。 我在“软件开发‘三重门’”里说过,第一重门是业务功能,在这重门里,的确是会编程就可以了;第二重门是业务性能,在这一重门里,技术的基础就很管用了,比如:操作系统的文件管理,进程调度,内存管理,网络的七层模型,TCP/UDP的协议,语言用法、编译和类库的实现,数据结构,算法等等就非常关键了;第三重门是业务智能,在这一重门里,你会发现很多东西都很学院派了,比如,搜索算法,推荐算法,预测,统计,机器学习,图像识别,分布式架构和算法等等,你需要读很多计算机学院派的论文。 总之,这主要看你职业生涯的背景了,如果你整天被当作劳动力来使用,你用到的技术就比较浅,比较实用,但是如果你做一些知识密集型的工作,你就需要用心来搞搞研究,就会发现你需要理论上的知识。比如说,我之前做过的跨国库存调配,需要知道最短路径的算法,而我现在在亚马逊做的库存预测系统,数据挖掘的那些东西都需要很强的数学建模、算法、数据挖掘的功底。 我觉得真正的高手都来自知识密集型的学院派。他们更强的是,可以把那些理论的基础知识应用到现在的业务上来。但很可惜,我们国内今天的教育并没有很好地把那些学院派的理论知识和现实的业务问题很好地结合起来。比如说一些哈希表或二叉树的数据结构,如果我们的学校在讲述这些知识的时候能够结合实际的业务问题,效果会非常不错,比如:设计一个IP地址和地理位置的查询系统,设计一个分布式的NoSQL的数据库,或是设计一个地理位置的检索应用等等。在学习操作系统的时候,如果老师可以带学生做一个手机或嵌入式操作系统,或是研究一下Unix System V或是Linux的源码的话,会更有意思。在学习网络知识的时候,能带学生重点学一下以太网和TCP/IP的特性,并调优,或是能做一个网络上的Pub/Sub消息系统或是做一个像Nginx一样的web server,那会更好。如果在学图形学的过程中能带领学生实践开发一个作图工具或是一个游戏引擎,那会更有意思。 总之,我们的教育和现实脱节太严重了,教的东西无论是在技术还是在实践上都严重落后和脱节,没有通过实际的业务或技术问题来教学生那些理论知识,这是一个失败。
2.9、如何在压力下,享受技术带来的快乐
中国人中庸的思想,入世和出世,每天的工作就是入世。举个例子,在上海的时候,给交通银行做项目的时候,每周休息一天,早九点到晚十点,每天工作12个小时,这样的工作持续了一整年,没有节假日,项目上的技术也没什么意思。当时我晚上十点回到住处,还想学一些C++/Java和Unix/Windows的技术,于是就看书到晚上11:30,每天如此,一年下来学到很多东西,时间没有荒废,心里就很开心。我觉得当时是快乐的,因为有成长的感觉是快乐的。 现在的我,工作、写博客、养孩子,事情其实更多。我早上7:30起床,会浏览一下国外的新闻,hacker news,tech church,reddit,highavailability之类的站点,9点上班。晚上6、7点钟下班,开始带孩子。十点钟孩子睡了觉,我会开始重新细读一下这一天都发生了些什么事情。这个时间也有可能会用来看书。学习的过程我是不喜欢被打断的,所以从十点到十二点,家人都睡了,这正是我连续学习的好时间。可能从晚上11:30开始,我会做点笔记或者写博客。我现在对酷壳文章的质量要求比较高一些,所以大概积累一个星期的时间才可以生成一篇文章。每天我大概都在一两点钟才会睡觉。没办法,我有技术焦虑症。但是觉得这样的生活很充实,也很踏实。 另外,任何一门技术玩深了,都是很有意思的。有些人形成了一个价值取向,“我只做什么,绝不做什么”。前段时间有一个刚来亚马逊的工程师,他原来做的是数据挖掘推荐系统,后来公司重组要他做前端,他不肯。我觉得,前端后端都是编程,Javascript是编程,C++也是编程。编程不在于你用什么语言去coding,而是你组织程序、设计软件的能力,只要你上升到脑力劳动上来,用什么都一样,技术无贵贱就是这个意思。 回到问题,怎么才能享受到快乐呢?第一,入世和出世要分开,不要让世俗的东西打扰到你的内心世界,你的情绪不应该为别人所控,也不应该被世俗所污染,活得真实,你才会快乐。第二点就是要有热情,有了热情,你的心情就会很好,加班都可以是快乐的,想一想我们整个通宵用来打游戏的时光,虽然很累,但是你也很开心,这都是因为有了热情的缘故。
2.10、做自己是最难的
我承认我活在我的精神家园里面。我推荐大家看一下王小波的《我的精神家园》,这篇文章对我的影响非常大。看了这篇文章,你就会明白我为什么要躺在自己的池子里,如果不想被这个社会所污染,就必须要躺在自己的池子里。做大众是很容易的,做自己是最难的。当你老了的时候,回想过去,如果你是为自己而活的,你总会觉得很踏实。可能有人会觉得我偏激,没关系,为什么要所有人看法都一致呢?世界因为不同而美丽,多元化的价值观并不冲突。