写给学计算机的你

来源:互联网 发布:vb.net 调用c dll 编辑:程序博客网 时间:2024/05/18 00:14


 

好就拿来,管他谁的~~~~~
作者简介:小宁,微软亚洲研究院的创始人之一和软件开发总工程师,曾担任北大软件学院软件技术系主任,客座教授,现任湖南大学软件学院教授,教学指导委员会主任。


这是我九月份在湖南大学软件学院的演讲,跟大家分享一下。
  大家好。欢迎大家来到湖大。
  大家很幸运,能走进这所千年学府,带着希望,比如学成后找到好工作或出国深造的希望,带着梦想,比如将来有一天成为优秀的工程师,管理者,企业家,学者的梦想。
  大家的希望和梦想能成真吗?也许能,也许不能。因为教育可以使你成长,教育也可以把你变成傻瓜!  傻瓜? 是的,这不是我说的。这是历史上的许多智者说的。
  “人天生并不笨,是教育把人变笨了”,
  这是法国历史上的一个名人Bertrand Russell说的。
  为什么这么说?讲个故事。
  我在微软中国研究院工作时,有个著名大学的著名教授向我推荐了一个学生,说是计算机系第一名的博士毕业生。很好,我很高兴,把他叫来面试。前二十分钟很好,他对答如流,很有信心。这时我问他“你曾经有过的印象最深的失败是什么,你从中学到了什么?”。他无言,两分钟无言。看他的样子很着急,我相信他并没隐藏什么。但我开始猜测,这可能是一个老师们都很喜欢的什么事情都做得很好的学生,因此他没觉得自己有什么失败,一路顺风地走过来。也许他害怕失败,不能冒险?于是我开始问一些变了花样的与课本上不太一样的技术问题。他的回答真得让我很失望。他的回答基本上是沉默。他完全不知所错。于是我有了结论:第一,他看起来是个死读书读死书的人,不会融会贯通地应用;第二,他像是个不敢犯错误,不能冒险的人,他甚至不愿意尝试着回答他没做过的问题。这面试的结果你一定猜到了。我们想要得是基础好,有能力,有创造性的研究员。说实话,这个学生真可惜,他看起来聪明刻苦,但他在学校里丢掉了人的最宝贵的东西:创造性!不要忘记,这是一个著名大学著名教授的著名学生。这不是我们教育的一个失败吗?
  大家有一点失望,有一点迷茫吧。怎么会这样哪?我们满腔热情,满怀希望走进大学,走出大学时却可能是个笨蛋!这就对了,因为迷茫和失望使我们思考,思考可以帮我们找到好的答案,这样我们就有了好的机会成功,而不成为笨蛋。
  就让我们思考一下:我们怎样学成才,而不学成笨蛋?我们的老师,我们的父母会有很多不同的答案。我的答案最简单,就三个字:
  你自己!
  是的,成才还是成笨蛋,最重要的,不在于学校,不在于老师,不在于父母,而在于你自己!因为当你离开中学,离开父母,走进大学,你就真的自由了,可以选择自己喜欢做的,喜欢吃的,喜欢穿的,喜欢玩的,等等。所以你真的长大了,你有了选择的力量。没有人可以强迫你做什么。你可以选择好好学习,也可以选择拼命打游戏;你可以选择学好你的专业,你也可以选择整天炒股;你可以选择将来做个优秀的工程师,企业家,学者,你也可选择将来去做超女,快男,或者去做芙蓉姐姐那样的人。
  但是我想提醒大家:
  选择的力量可以是天使也可以是魔鬼,可以把你带到不同的地方。所以,当你有了选择的自由,选择的力量,你就有了责任,作出聪明的选择的责任。
  我相信,大家是大学生了,一定有能力作出聪明的选择。所以,我要继续讲一些学校的好话,也继续讲一些学校的坏话,不管好话坏话,我讲的都是实话。大家可以选择信或不信,选择做或是不做。可以选择学成真材,也可以选择学成笨蛋。
你的选择 : 是听中学,还是做中学
什么叫听中学?就是大家从小学走到现在最熟悉的上课,作业,背书,考试一条龙。你可以继续这么做,你也许可以得到好的分数。但是我告诉你,这并不是有效的方法。因为

“读书听课是了解,了解不是学习,动手做才是真正的学习。”

这是Roger  Schank讲的。他是美国著名的计算机专家,教育学家。他有很多的故事解释这个道理。但是让我讲个湖大的故事。

去年冬天,我的朋友,微软亚洲工程院院长张宏江到美国出差,我把他请到家里玩。闲谈之中他对我说,小宁,我现在缺人招不到,如果你有合格的毕业生,有五个要五个,有十个要十个,越多越好。我知道工程院是做微软核心产品的,招人要求很严。心里真没底。于是我说,宏江,十个不敢说,三五个应该能行。在给我点时间,我回去了解一下。回到湖大,我找学生谈,一个一个谈,了解学生的情况。说实话,对他们的大多数,我很失望。我对他们说,你们是学软件的,怎么连看家本领都没学好,什么看家本领?算法,数据结构,程序设计。他们说,课都上了,考试也过了。我说,没用呀,上课考试是了解,不是真正的学习。我建议他们去找本书,不要从头到尾再读一遍,读书也不是学习。要坐在计算机前,便读边做,编程序,设计算法和数据结构。写几千行几万行程序。有几个学生真的听进去了,照着我说的作了。半年后,我把微软的人请来面试我们的学生。他搞了个突然袭击,发卷考大家,考算法,数据结构,C++。考完了他很惊讶,说你们有些学生真不错,北大清华的都很少考的这么好。他挑了三个到微软亚洲工程院做实习生参与微软核心产品的开发。要知道,这三个学生还仅仅是大三的!

这个故事告诉我们,学软件,一定要在做中学,动手做了,才能学会,才能理解,理解了才能应用。再讲个我自己的故事。

我在美国读书时,选了一门课叫自动机与编译原理,讲的是如何把计算机源代码自动变成计算机可以执行的机器代码。 这是门两个半月的课,除了要学理论,还要做个很大的项目,是用C语言实现一个完整Pascal 语言的编译器。 这两个多月的时间里,我平均每天在实验室里编程序四个小时,最长的一次在实验室连续编程二十多个小时没睡觉。 成功地完成了几万行的程序。 不仅真正学到了自动机和编译的理论,而且,学成了一个很熟练的C程序员。为我后来进入微软成为一个成功软件设计工程师打下了很好的基础, 因为,我在做这个项目中,真正学会了编程设计。

这就是做中学。 我们学软件的,就是要大量的编程,老师留的编程的作业,一定要做好,不要抄别人的,抄你学不会。要自己做,有时间,还要多做,比老师要求的还多,因为我们现在有些老师,我们现在有些课程,还是太偏理论,动手太少。要自己想方设法多做。多做的另一种方式是参与校内校外实际软件项目的开发。参加实际项目的好处是能学到很有价值的经验。

去年我们开了一门软件工程创新课程,用一个真实的项目带动教学。这个项目是湘潭钢铁公司的设备监控管理。我们有学生到公司实地了解软件需求,他们埋怨说,用户对软件的要求总是不停地变,使得项目变得很困难。 我对他们说,哈,这就对了!你们已经学到了需求总是在变这样一个非常重要的软件工程概念。软件需求变化这一概念在软件工程历史中很长时间不能为人理解。人们都在追求固定需求的方法。其实,那是不对的。我学软件多少年,到了微软后,才真正理解了这个需求一定会变的概念,理解了软件工程应适应这种需求变化,而不是一味地限制这种变化。这是软件工程当前发展的一个趋势。这个故事说明,学生通过实践,真正学会了,并理解了这个现在很多人仍不能理解的概念。

所以,大家有时间的话应找机会做实际项目,自己组织起来找项目也可以,做老师的项目也可以。也许你还能钻点小钱,有点收入,这很好。但这是第二位的,第一位的是学习,是积累经验。如果有两个项目让你选,一个你赚不到钱或只能赚500块钱,但能学到很多东西;一个你能赚5000块钱,但学不到太多东西;你选哪个? 我会选第一个,去学东西,而不是选第二个,去赚钱。大家一定听说过这句话:人一生中能做得最好的投资就是投资到你自己,就是学习,就是教育。切记切记!

但是你会说,凌老师,你让我们多做,多编程,还要做课外的项目,可我们有很多课要上,要考很多试,没有时间呀? 好,我就讲讲考试与学习。这也是你要做的一个选择。

你的选择:是铁杵磨成针,还是急功近利
8月13日,NBA巨星中锋奥尼尔,姚明崇拜的榜样,来华访问。有记者问道奥尼尔对“将之道”有何理解时,奥尼尔表示一个球员要在球场上成为领袖,必须要有精湛的个人技术,在困难的时刻带领全队取胜。而这个技术则是由不断的刻苦训练才能锻炼出来。他还说:一切都从基本功开始,而不是一味的去追求视觉上的花哨。我们现在美国队的球员上场就会胯下运球其他花哨的动作。真的要想拿到冠军,需要一切从基本功去练习,只有把基本功练好了,你才有希望。
学习软件是一样的。要想成为一名优秀的软件人才,一定要刻苦训练基本功,在困难的时刻以精湛的软件技术克服困难取胜。例如,新产品急需的新技术,你能不能发明出来?一个新产品因一两个严重的bugs不能上市,你能不能尽快地修复它。这些都需要精湛的技术和经验。
我在微软开发工具部门(Visual Studio)工作时,曾参与一个新产品的研发。我们需要一个图形学新算法,微软没有。我们试图从外面购买这项技术,谈来谈去,花一百万美元只能买到一个执行程序而没有源代码。这对软件整合很不利。于是我自告奋勇,承担了这个算法的研发。我用在学校学到的算法,数据结构,数学等基础知识,成功地发明了一个新算法。此后,这个算法用在多个微软的产品中,包括 Visual Studio, SQL,Access, Visual InterDev, 等等。我也因此获得了我的第一个美国技术专利。
但是,我们现在有不少学生过于浮躁,不愿吃苦,不愿意练基本功,总想找捷径,太过于急功近利。这也许是受到当前我们社会中的浮躁风气的影响。例如,曾经有学生问我,说他不喜欢编程序,太累,说他想做架构师,或软件技术管理,他问我,怎么学才能达到这个目的。我说,你想成为成功的架构师或技术管理人才的机会太小了。我告诉他,我在微软工作了十三年,见到的架构师和技术开发经理都是,过曾经是优秀的程序员,包括比尔盖兹。
因此,铁杵磨成针,学好基本功,真的是你未来成功事业的基础。什么是基本功呢?
数学是内功!离散数学教你计算机的方式思维。是计算机逻辑和算法的基础。高等代数不仅是很好的数学训练,也是程序和算法分析的工具。概率论和数理统计在互联网时代尤其重要,被大量应用于数据挖掘。微积分是离散世界与连续世界的桥梁,教你抽象思维,也是数值分析的基础。
数据结构,算法和程序设计是程序员的看家本领,像篮球里的运球和投篮,学不好,怎么得分?中国的软件业因商业应用的发展,正面临着极大的挑战和机遇,例如,中国的无线通信已走在世界前沿,照抄照搬已不够用了,急需创新软件技术,包括算法和系统。
计算机/网络体系结构和操作系统教你计算机的基本工作原理。理解它,能帮助你理解软件内部的工作原理,使你从肤浅的皮毛走到深层,使你能写出架构合理,性能优越的软件,使你能成为调试和编写程序的高手。
英语的重要性不用我说了,是你又一只眼睛,又一张嘴,使你能与外界沟通。能进微软中国工作的人,几乎所有的人都会有机会去微软美国总部培训和工作,那里没人跟你讲中文。
但是,这么多东西,又要动手做,实践,怎么都学精学好哪? 我的建议是,有目的地学。用你目的来确定你的重点,来驱动你的学习。 这是你的又一个选择。

你的选择:是有的放矢,还是随波逐流

我们中大部分学生从小到大多是由父母老师手把手走过来的,不懂得规划自己的人生,走一步看一步,跟着别人随波逐流。可你现在长大了,有了选择的自由,选择的力量。你可以,也应该想一想你将来到底要做什么,干什么职业。你最好在大二结束前想清楚,这样你在大三大四选课,实践,学习时就有了明确的重点。这个选择取决于你的兴趣爱好,取决于你的特长,也取决于职场对人才的需求。当你明确了你的职业目标,你的学习就有了重点,有了方向。你就有了更好的动力。

曾有学生对我说,情况是变的,目标是虚的,定了目标也没用。我说,目标定得要明确,实在;情况变了就要调整目标。我说,最坏的目标就是没有目标,就是守株待兔,就是瞎猫碰死老鼠。久而久之,你有可能变成混混,混日子了,变得最后无颜见江东父老!

你要想清楚的一个大方向是将来做研究还是做产品。做研究是发明未来可用的新概念新方法新系统。这要求创新能力,冒险精神,要能承受失败,要深得理论功底。也要求动手能力,因为只有真正动手实现了才能证明你的发明。只写些没用的文章最愚蠢。如果你要走这条路,你就要学习好这些基础和素质。要找到好导师(包括国外的),读博士。因为研究机关大多要求博士学位。但是我要警告你,软件业做基础研究的公司并不多,你将来就业的选择是有限的。

如果你计划将来做产品研发,如果你在大学基础学好了,其实,你不需要读博士硕士。我在美国看得的大多数优秀的程序员都只有学士学位。我在微软中国研究院招收的第一个工程师就只有学士学位,但他基础学得很好,又努力,做得很不错,现在是一家公司的副总。

现在我来说说你的职业选择,和你的基础学习的重点。现在软件工业需要最多的是程序员,项目经理,测试工程师,和可用性设计师。

如果你喜欢写程序,程序员是个很好的职业选择,容易找到工作,又有很好的职业发展前景,例如,将来做架构师,技术管理,等等。除了学好基础外,你的看家本领就是算法,数据结构,和程序设计。你一定要比别人学得好,学得精。记住,你一定要做中学,写上几万行的程序,并把它搞懂。你还要学会团队合作,学会与各种各样的人有效工作。

如果你喜欢与人打交道,有人际交流和管理的天分和愿望,你或许适合做项目经理。项目经理通常定义一个产品,设计产品的用户界面。这需要你对用户有充分的理解,也要求你有一定的技术功底。项目经理还要管理控制软件开发的全过程。这要求你协调各开发组的工作,解决纠纷,解决开发过程中的问题,以保证你的软件按要求按时完成。对项目经理的最主要的要求包括,对用户的理解能力,界面的设计能力,对市场的理解能力,人际交流能力,能说会写,管理能力,对系统和技术有相当的了解。项目经理通常不写程序。我在微软工作时,合格的项目经理很难找到,有很大的供求缺口。你要是学好了,应能找到很好的工作。坦率地说,我们现在的课程设置不太能培养出好的项目经理。你多半只能自己努力,除了学好基础,要多做社会工作,组织社团,多做义工,多练说写,多了解软件市场,学会从用户的角度分析,设计软件,等等。

测试工程师是中国当前供求缺口最大的软件工作之一。有好的就业前景。微软的测试工程师大多要写程序。他们是写测试程序来自动测试软件产品。也要求有相当好的编程能力。这也要求你学好算法,数据结构和程序设计。当然,学好软件测试课程是必要的。我还是要强调,一定要做中学,只听课是没用的。找一些市场上的软件,用你学到的测试方法理论去测测。如果你努力,你十有八九能找到bugs ,把你发现的bugs报告给软件厂家,把厂家的反馈保存起来。这都是你的经验和成果,对你将来申请工作会有帮助。

当前软件业的另一个人才缺口是用户界面的可用性设计师。我听说一些在美国和中国的公司为找不到这样的人材而苦恼。美国的一些大学为适应需求增加和加强这方面的课程。可用性设计师是从用户的角度,把用户界面设计得易用,易学,易懂。这对互联网应用是极为重要的。可用性设计师不仅涉及到软件技术,还涉及到艺术设计,对用户行为人机交互的理解,等等,是个跨专业行当。如果你不仅对软件有兴趣,而且对用户行为,对人机交互,对艺术设计感兴趣;希望对用户使用软件的行为有直接的影响,这对你是个很好的职业。

现在我讲讲创业。不少学生跟我说将来想创业。这不是坏事。但是,创业要求的是与工程师很不同的技术,知识,和技能。商业头脑,对市场的了解,对用户对你的员工对投资人的责任,领导能力,人际关系,沟通能力,即要能低三下四有要能保持自信自尊,等素质和软技能,常常比技术来得重要。中国,美国每天都有无数的软件公司倒闭,又有无数的软件公司成立。美国有个统计数据,在倒闭的公司中,因技术原因失败的只沾不到10%。不要以为你有了个看起来不错的技术构思就能创业成功。我看到太多的这样的失败。因此,我建议大家静下心来想一想,自己的长处和弱点,想一想你适合吗?不要为将来有一天有可能赚大钱的梦想而迷失。不要人云亦云随大流。当然,如果你真的认为你有这样的潜力,就把它挖掘出来。不过你要做好准备,你在成功之前多半会经历多次失败。这样的故事实在太多了。

现在让我们回到学校,再讲讲学习。这与你们将来职场上的成功有直接关系,因为工作后,你仍然要学习。学习是你一生的任务。我想讲的是学习的境界。
你的选择:学习的不同境界

我把学习的境界由低到高分为五个层次。

1. 学会答案。2, 学会方法 。3. 学会学习。4. 学会做事。5. 学会做人

例如,老师教你个软件的快速排序算法,你学会了,你记住了,你能用它去写排序程序,你学会了这个答案。你到了学习的第一层境界。快速排序的方法是什么?是编程的分治法,如果你学懂了,能用分治法去解决不同的问题,你就学会了一个方法,你到了第二层境界。如果你碰到一个问题,老师没教过你答案也没教过你方法,你怎么办?这会是你在工作中常常碰到的。你就要会学习,学会找到好的方法和答案。你能做到了,就到了第三层境界。如果你碰到一个现实中的实际问题,你能不能融会贯通地应用你的知识解决它,并带来实际的效果。例如,我前面讲的我在微软碰到的图形学算法的问题。这是学习的第四层境界-学会做事。

学习的第五层境界,学会做人,我认为是学习的最高境界,也最难。我要多讲些。

学会做人之所以难,是因为大家从小到大听大人讲得多了,听不进了,麻木了;是因为大家不时看到有恶人骗子行其道又很风光,对做人的道理嗤之以鼻,变得怀疑,冷漠。但是我还是要讲,因为,你的麻木,你的怀疑和冷漠,会使你在职场上败的一塌糊涂。 讲个故事。

几个月前,Google中国发布了一个新的拼音输入法。不久,被人发现里面的数据偷偷包含了另一家公司拥有的数据。这事被新闻一炒,引起酣然大波。Google一贯的正面形象受到很大的打击。为此,Google中国展开了内部调查,发现是个新招收的学生偷偷从网上找到这些数据,并未经汇报擅自用在产品中。虽然Google此后加强了管理,但恶果已造成,公司因此承受了极大的形象的和经济的损失。不用我说,大家一定能猜到造成这些后果的学生的结局是什么。这种追求急功近利而不讲诚信的人,这种把别人的东西拿来当作自己的东西的人,一个优秀的公司是绝对不能用的。

说实话,我不认为这个学生的本质一定很坏,但他没有学会诚信做人,也许是因为麻木和冷漠?千万不能再麻木,千万不能再冷漠。要学会做人!

除了诚信之外,学会做人的的另一点是要学会与别人一起有效地工作,又叫团队精神。这是我们学生的一个大的弱点。大家多是独生子女,多年来读书升学个人奋斗,没得到很好的团队合作的学习环境。这不怪大家。现在,大家上了大学,学习生活在集体里,有了团队环境,应该主动培养团队意识。现在的互联网时代的软件业,单打独斗很难成功,一定要有好的团队。为什么微软亚洲研究院已出了三个微软全球副总裁,而微软其他研究院没有?为什么从那出来的人都混得好,是老总,副总,技术总监什么的? 因为全世界都知道,这个研究院做得非常成功,一个非常优秀的团体,因此,人们相信那里的人一定很棒。要有这样的理念,团队的成功是个人成功的前提,团队失败了,个人也是失败,团队成功了,个人也是一份功劳。因此要有团队精神。要有帮助团队成功的理念,不要只想自己。要学会帮助别人,主动地去帮助;也学会寻求帮助,不要形成总是单打独斗的习惯。

怎么做?第一,积极参加团队的,集体的活动,参加学生俱乐部,参加学生兴趣小组,参加社区的公益活动。我们学院有一个学生自愿的公益组织,是个很好的形势。

第二,在大学,你会有很多机会与其他人共同完成一些项目,也许是课程的项目,也许是课外的开发项目,也许是参加集体编程大赛,也许是社会活动的项目。要积极主动地参加,这些都是很好的锻炼学习的机会。

第三,学会关爱你周边的人。你的家庭是你最亲近的团体。在节假日,生日,在他们需要的时候,一个问候,一封信,一次探望,一声谢谢都会使你的亲人久久难忘。相信我,我是为人父的人,我深知这一点。你的学校你的班级是你的团体。教师节不要忘记问候你的老师。最能感动老师的,莫过于得到学生的认可。相信我,我是老师,我深知这一点。同学有困难,不要忘记帮一把,关爱是团队的凝聚力!不要再麻木,不要再冷漠。这些点点滴滴,都会帮你学会做人。

学会做人,除了理念和精神,还需要技巧。坦率地说,这也是我们学生现在所缺乏的。什么技巧? 处理人际关系,沟通,表达,争论,妥协,等等技巧。李开复先生曾写过不少文章和书,例如,“做最好的自己”,讲这个问题,讲得很精彩。建议大家去读一读。我不再讲了。这里我只想用两个数据来说明这个问题对你的将来是何等重要。这数字来自中软副总裁林博士的一个报告。

普林斯顿大学研究发现:智慧、专业技术、经验三者只占成功因素的25%,其余75%决定于良好的人际沟通。
哈佛大学商学院调查结果:在500名被解职的员工中,因人际沟通不良而导致工作不称职者占82%。

最后,让我回到演讲的开头。我说,教育可以培养出人才,教育也可能培养出苯蛋。大家都长大了,有了选择的自由,选择的力量。你可以选择学成才,你也可以选择学成苯蛋;你可以选择做中学,也可以选择听中学;你可以选择为了考试而学习,也可以选择为了学习而考试;你可以选择脚踏实地地学,你也可以选择急功近利地学;你可以选择有的放矢地学习,你也可以随波逐流地混;你可以选择不同的学习方法,学习境界。你的选择,即可以是天使,也可以是魔鬼,可以把你带到不同的地方。5年,10年,20年以后,你再回头看看,扪心自问,你在大学的选择,是天使的,还是魔鬼的?到了那时,你会发现,你现在的选择,真是你人生中最重要的选择之一。


原创粉丝点击