写给学计算机的你.docx
- 文档编号:2144698
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:6
- 大小:23.39KB
写给学计算机的你.docx
《写给学计算机的你.docx》由会员分享,可在线阅读,更多相关《写给学计算机的你.docx(6页珍藏版)》请在冰豆网上搜索。
写给学计算机的你
写给学计算机的你
好就拿来,管他谁的~~~~~
作者简介:
小宁,微软亚洲研究院的创始人之一和软件开发总工程师,曾担任北大软件学院软件技术系主任,客座教授,现任湖南大学软件学院教授,教学指导委员会主任。
去年冬天,我的朋友,微软亚洲工程院院长张宏江到美国出差,我把他请到家里玩。
闲谈之中他对我说,小宁,我现在缺人招不到,如果你有合格的毕业生,有五个要五个,有十个要十个,越多越好。
我知道工程院是做微软核心产品的,招人要求很严。
心里真没底。
于是我说,宏江,十个不敢说,三五个应该能行。
在给我点时间,我回去了解一下。
回到湖大,我找学生谈,一个一个谈,了解学生的情况。
说实话,对他们的大多数,我很失望。
我对他们说,你们是学软件的,怎么连看家本领都没学好,什么看家本领?
算法,数据结构,程序设计。
他们说,课都上了,考试也过了。
我说,没用呀,上课考试是了解,不是真正的学习。
我建议他们去找本书,不要从头到尾再读一遍,读书也不是学习。
要坐在计算机前,便读边做,编程序,设计算法和数据结构。
写几千行几万行程序。
有几个学生真的听进去了,照着我说的作了。
半年后,我把微软的人请来面试我们的学生。
他搞了个突然袭击,发卷考大家,考算法,数据结构,C++。
考完了他很惊讶,说你们有些学生真不错,北大清华的都很少考的这么好。
他挑了三个到微软亚洲工程院做实习生参与微软核心产品的开发。
要知道,这三个学生还仅仅是大三的!
这个故事告诉我们,学软件,一定要在做中学,动手做了,才能学会,才能理解,理解了才能应用。
再讲个我自己的故事。
我在美国读书时,选了一门课叫自动机与编译原理,讲的是如何把计算机源代码自动变成计算机可以执行的机器代码。
这是门两个半月的课,除了要学理论,还要做个很大的项目,是用C语言实现一个完整Pascal语言的编译器。
这两个多月的时间里,我平均每天在实验室里编程序四个小时,最长的一次在实验室连续编程二十多个小时没睡觉。
成功地完成了几万行的程序。
不仅真正学到了自动机和编译的理论,而且,学成了一个很熟练的C程序员。
为我后来进入微软成为一个成功软件设计工程师打下了很好的基础,因为,我在做这个项目中,真正学会了编程设计。
这就是做中学。
我们学软件的,就是要大量的编程,老师留的编程的作业,一定要做好,不要抄别人的,抄你学不会。
要自己做,有时间,还要多做,比老师要求的还多,因为我们现在有些老师,我们现在有些课程,还是太偏理论,动手太少。
要自己想方设法多做。
多做的另一种方式是参与校内校外实际软件项目的开发。
参加实际项目的好处是能学到很有价值的经验。
去年我们开了一门软件工程创新课程,用一个真实的项目带动教学。
这个项目是湘潭钢铁公司的设备监控管理。
我们有学生到公司实地了解软件需求,他们埋怨说,用户对软件的要求总是不停地变,使得项目变得很困难。
我对他们说,哈,这就对了!
你们已经学到了需求总是在变这样一个非常重要的软件工程概念。
软件需求变化这一概念在软件工程历史中很长时间不能为人理解。
人们都在追求固定需求的方法。
其实,那是不对的。
我学软件多少年,到了微软后,才真正理解了这个需求一定会变的概念,理解了软件工程应适应这种需求变化,而不是一味地限制这种变化。
这是软件工程当前发展的一个趋势。
这个故事说明,学生通过实践,真正学会了,并理解了这个现在很多人仍不能理解的概念。
所以,大家有时间的话应找机会做实际项目,自己组织起来找项目也可以,做老师的项目也可以。
也许你还能钻点小钱,有点收入,这很好。
但这是第二位的,第一位的是学习,是积累经验。
如果有两个项目让你选,一个你赚不到钱或只能赚500块钱,但能学到很多东西;一个你能赚5000块钱,但学不到太多东西;你选哪个?
我会选第一个,去学东西,而不是选第二个,去赚钱。
大家一定听说过这句话:
人一生中能做得最好的投资就是投资到你自己,就是学习,就是教育。
切记切记!
但是你会说,凌老师,你让我们多做,多编程,还要做课外的项目,可我们有很多课要上,要考很多试,没有时间呀?
好,我就讲讲考试与学习。
这也是你要做的一个选择。
你的选择:
是铁杵磨成针,还是急功近利
8月13日,NBA巨星中锋奥尼尔,姚明崇拜的榜样,来华访问。
有记者问道奥尼尔对“将之道”有何理解时,奥尼尔表示一个球员要在球场上成为领袖,必须要有精湛的个人技术,在困难的时刻带领全队取胜。
而这个技术则是由不断的刻苦训练才能锻炼出来。
他还说:
一切都从基本功开始,而不是一味的去追求视觉上的花哨。
我们现在美国队的球员上场就会胯下运球其他花哨的动作。
真的要想拿到冠军,需要一切从基本功去练习,只有把基本功练好了,你才有希望。
学习软件是一样的。
要想成为一名优秀的软件人才,一定要刻苦训练基本功,在困难的时刻以精湛的软件技术克服困难取胜。
例如,新产品急需的新技术,你能不能发明出来?
一个新产品因一两个严重的bugs不能上市,你能不能尽快地修复它。
这些都需要精湛的技术和经验。
我在微软开发工具部门(VisualStudio)工作时,曾参与一个新产品的研发。
我们需要一个图形学新算法,微软没有。
我们试图从外面购买这项技术,谈来谈去,花一百万美元只能买到一个执行程序而没有源代码。
这对软件整合很不利。
于是我自告奋勇,承担了这个算法的研发。
我用在学校学到的算法,数据结构,数学等基础知识,成功地发明了一个新算法。
此后,这个算法用在多个微软的产品中,包括VisualStudio,SQL,Access,VisualInterDev,等等。
我也因此获得了我的第一个美国技术专利。
但是,我们现在有不少学生过于浮躁,不愿吃苦,不愿意练基本功,总想找捷径,太过于急功近利。
这也许是受到当前我们社会中的浮躁风气的影响。
例如,曾经有学生问我,说他不喜欢编程序,太累,说他想做架构师,或软件技术管理,他问我,怎么学才能达到这个目的。
我说,你想成为成功的架构师或技术管理人才的机会太小了。
我告诉他,我在微软工作了十三年,见到的架构师和技术开发经理都是,过曾经是优秀的程序员,包括比尔盖兹。
因此,铁杵磨成针,学好基本功,真的是你未来成功事业的基础。
什么是基本功呢?
数学是内功!
离散数学教你计算机的方式思维。
是计算机逻辑和算法的基础。
高等代数不仅是很好的数学训练,也是程序和算法分析的工具。
概率论和数理统计在互联网时代尤其重要,被大量应用于数据挖掘。
微积分是离散世界与连续世界的桥梁,教你抽象思维,也是数值分析的基础。
数据结构,算法和程序设计是程序员的看家本领,像篮球里的运球和投篮,学不好,怎么得分?
中国的软件业因商业应用的发展,正面临着极大的挑战和机遇,例如,中国的无线通信已走在世界前沿,照抄照搬已不够用了,急需创新软件技术,包括算法和系统。
计算机/网络体系结构和操作系统教你计算机的基本工作原理。
理解它,能帮助你理解软件内部的工作原理,使你从肤浅的皮毛走到深层,使你能写出架构合理,性能优越的软件,使你能成为调试和编写程序的高手。
英语的重要性不用我说了,是你又一只眼睛,又一张嘴,使你能与外界沟通。
能进微软中国工作的人,几乎所有的人都会有机会去微软美国总部培训和工作,那里没人跟你讲中文。
但是,这么多东西,又要动手做,实践,怎么都学精学好哪?
我的建议是,有目的地学。
用你目的来确定你的重点,来驱动你的学习。
这是你的又一个选择。
你的选择:
是有的放矢,还是随波逐流
我们中大部分学生从小到大多是由父母老师手把手走过来的,不懂得规划自己的人生,走一步看一步,跟着别人随波逐流。
可你现在长大了,有了选择的自由,选择的力量。
你可以,也应该想一想你将来到底要做什么,干什么职业。
你最好在大二结束前想清楚,这样你在大三大四选课,实践,学习时就有了明确的重点。
这个选择取决于你的兴趣爱好,取决于你的特长,也取决于职场对人才的需求。
当你明确了你的职业目标,你的学习就有了重点,有了方向。
你就有了更好的动力。
曾有学生对我说,情况是变的,目标是虚的,定了目标也没用。
我说,目标定得要明确,实在;情况变了就要调整目标。
我说,最坏的目标就是没有目标,就是守株待兔,就是瞎猫碰死老鼠。
久而久之,你有可能变成混混,混日子了,变得最后无颜见江东父老!
你要想清楚的一个大方向是将来做研究还是做产品。
做研究是发明未来可用的新概念新方法新系统。
这要求创新能力,冒险精神,要能承受失败,要深得理论功底。
也要求动手能力,因为只有真正动手实现了才能证明你的发明。
只写些没用的文章最愚蠢。
如果你要走这条路,你就要学习好这些基础和素质。
要找到好导师(包括国外的),读博士。
因为研究机关大多要求博士学位。
但是我要警告你,软件业做基础研究的公司并不多,你将来就业的选择是有限的。
如果你计划将来做产品研发,如果你在大学基础学好了,其实,你不需要读博士硕士。
我在美国看得的大多数优秀的程序员都只有学士学位。
我在微软中国研究院招收的第一个工程师就只有学士学位,但他基础学得很好,又努力,做得很不错,现在是一家公司的副总。
现在我来说说你的职业选择,和你的基础学习的重点。
现在软件工业需要最多的是程序员,项目经理,测试工程师,和可用性设计师。
如果你喜欢写程序,程序员是个很好的职业选择,容易找到工作,又有很好的职业发展前景,例如,将来做架构师,技术管理,等等。
除了学好基础外,你的看家本领就是算法,数据结构,和程序设计。
你一定要比别人学得好,学得精。
记住,你一定要做中学,写上几万行的程序,并把它搞懂。
你还要学会团队合作,学会与各种各样的人有效工作。
如果你喜欢与人打交道,有人际交流和管理的天分和愿望,你或许适合做项目经理。
项目经理通常定义一个产品,设计产品的用户界面。
这需要你对用户有充分的理解,也要求你有一定的技术功底。
项目经理还要管理控制软件开发的全过程。
这要求你协调各开发组的工作,解决纠纷,解决开发过程中的问题,以保证你的软件按要求按时完成。
对项目经理的最主要的要求包括,对用户的理解能力,界面的设计能力,对市场的理解能力,人际交流能力,能说会写,管理能力,对系统和技术有相当的了解。
项目经理通常不写程序。
我在微软工作时,合格的项目经理很难找到,有很大的供求缺口。
你要是学好了,应能找到很好的工作。
坦率地说,我们现在的课程设置不太能培养出好的项目经理。
你多半只能自己努力,除了学好基础,要多做社会工作,组织社团,多做义工,多练说写,多了解软件市场,学会从用户的角度分析,设计软件,等等。
测试工程师是中国当前供求缺口最大的软件工作之一。
有好的就业前景。
微软的测试工程师大多要写程序。
他们是写测试程序来自动测试软件产品。
也要求有相当好的编程能力。
这也要求你学好算法,数据结构和程序设计。
当然,学好软件测试课程是必要的。
我还是要强调,一定要做中学,只听课是没用的。
找一些市场上的软件,用你学到的测试方法理论去测测。
如果你努力,你十有八九能找到bugs,把你发现的bugs报告给软件厂家,把厂家的反馈保存起来。
这都是你的经验和成果,对你将来申请工作会有帮助。
当前软件业的另一个人才缺口是用户界面的可用性设计师。
我听说一些在美国和中国的公司为找不到这样的人材而苦恼。
美国的一些大学为适应需求增加和加强这方面的课程。
可用性设计师是从用户的角度,把用户界面设计得易用,易学,易懂。
这对互联网应用是极为重要的。
可用性设计师不仅涉及到软件技术,还涉及到艺术设计,对用户行为人机交互的理解,等等,是个跨专业行当。
如果你不仅对软件有兴趣,而且对用户行为,对人机交互,对艺术设计感兴趣;希望对用户使用软件的行为有直接的影响,这对你是个很好的职业。
现在我讲讲创业。
不少学生跟我说将来想创业。
这不是坏事。
但是,创业要求的是与工程师很不同的技术,知识,和技能。
商业头脑,对市场的了解,对用户对你的员工对投资人的责任,领导能力,人际关系,沟通能力,即要能低三下四有要能保持自信自尊,等素质和软技能,常常比技术来得重要。
中国,美国每天都有无数的软件公司倒闭,又有无数的软件公司成立。
美国有个统计数据,在倒闭的公司中,因技术原因失败的只沾不到10%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 写给 计算机