TUP对话大师系列:微软大师Jeffrey Richter

2011-03-23 04:06

TUP对话大师系列:微软大师Jeffrey Richter

by

at 2011-03-22 20:06:30

original http://news.cnblogs.com/n/94994/

技术作家和“微软传奇人物”Jeffrey Richter

   3月22日晚间消息,技术作家和“微软传奇人物”Jeffrey Richter周日做客TUP对话大师系列第三期。Jeffrey Richter的经典著作《Windows高级编程指南》和《Windows核心编程》早已成为Windows程序设计领域的巅峰之作,培育了几代的软件开发设计人员。

  以下为对话实录:

  Jeffrey Richter:今天很高兴能够来到Tup现场,(跟大家打招呼),我只会几句中文“您好”、“谢谢”。今天大家都非常热情。我现在有两个小孩,家庭和睦,我很享受现在的生活。

  大家都是通过书认识我的,或许你们会问我是否还在写书?答案是我没有在写书。关于我之前的那些书,一本是Windows,一本是有关CLR,Windows不会在出新版了,因为上一个版本修订起来非常的痛苦,这个版本也有涉及到新技术的发展,包括.NET、C#以及其他方面的技术。我现在关注的重点转移到云计算方面,当然也会花很多时间在这个上面。

  书籍:《Windows高级编程指南》和《Windows核心编程》

  Q&A环节:

  1.C#和java很类似,关于C#语言的发展趋势?

  Jeffrey Richter:从1.0开始刚作为一个C++和JAVA一些语言,作为一种微软挑战JAVA语言,2.0引用泛型机制,到3.0以后引用一些其他机制,现在4.0主要是像刚才引入了一些首先是并行机制,其次是动态语言机制,4.0已经提供动态履行。

  2. 很多人认为C#是java的克隆版本,请问您怎么看待这个问题?

  Jeffrey Richter:从某个方面来说C#确实借鉴JAVA很多优点,但C#比JAVA更强大,因为是在JAVA发行以后才出现,这样可避免JAVA的一些缺点,同时也引入了自己的独特机制。

  3. CLR操作系统未来方向?

  Jeffrey Richter:主要是针对Windows7、Windows8,微软更注重移动或者掌上开发,微软最大的竞争对手就是苹果,Windows8会在移动上会做一些改善,更长的续航时间。

  4. 现在Windows推出MVC3.0版本,很多应用进行MVC模式开发,请问当我们做一个设计的时候,在什么情况下适合用MVC模式,或者说是MVF是一种替代。

  Jeffrey Richter:我本身并不是一个Web开发者,对于这个问题MVC是微软推出一项新技术它更加正规,能够有效支持测试开发以及机械敏捷流程,编写出代码更加规范也便于架构,

  其次,我认为它们两个不是一个竞争关系,特定场合具有其特定优势,因此他们还会彼此共存很长时间,不会是谁取代谁的问题。

  5. 最近阅读了框架设计书,未来以后可能CPU会出现在某种CPU直接运行中间代码,请问这种情况是否有可能?

  Jeffrey Richter:关于CPU直接运行二维代码我是不敢确定,因为微软对这个问题也有争执,确实有一些产品应该说一种产品,可以在这种硬件设备上运行,里面有一种芯片编写代码,把这些代码直接下载到芯片上,这个芯片可以按照你编写代码直接工作,可以通过这些组合可以用代码编写出一个类似数码相机这样的设备。

  圆桌论坛:

  1. 如何在技术浪潮中选择技术和方向?

  Jeffrey Richter:首先你要根据自己的兴趣选择职业,树立一个重要原则。

  跟随自己兴趣做自己想做的事情,当前计算机界技术非常繁多,变化非常快,这20多年我也用过很多语言。要想在计算机界生存你得具备一个特性:适应性,很强适应性。

  其次就是关于技术选择方向,我们应该学好计算机基础,核心内容,比如说像操作系统概念,进程管理,线程等,此外在学好自己计算机基础之上,要专精某一个方向,这样,自己找工作或者以后从事什么职业就不会有太大问题。

  方敏(微软首席测试经理):我首先做一个调查:有多少人是学生。所以说软件这个工业不是给养老人做的,它发展的非常快,我记得20年前我刚从微软是Windows3.0出来,当时是很大的一个跳跃,我们写C,一句话就完了,但是写Windows有100多条,当时我进微软觉得非常新颖,怎么画图,一些概念,开始很困难,但慢慢便熟悉了,很快的很多API出来后,慢慢发觉跟不上,在微软内部也跟不上,每年各式各样出那么多,最后怎么办呢?

  有几条供选择,第一你喜欢什么东西,主要是学习动力;第二要跟工作有关,不能说我今天上班是做其他应用软件,我回家看其他东西,那样不会结合在一起,要看你工作需要什么,你工作在设计程序的时候,设计框架要考虑到今后几年往哪发展,微软大公司在推NET4.0这个方向,当然写程序要向那个方向走;第三点就是说我们学的时候要学的要真正学懂,有两个词什么都能做,还有一个是在工作中要学会发现问题。

  那么你在面试的时候,是需要非常专家的,当成给我写程序,回答技术问题,工作时涉及面很广。只要解决问题老板说好,你考试的时候,要深入,可是这时候你要是没有完全深入就有问题了,所以这样你学什么东西,虽然学一点要学清楚,有时间再联系在一起,这样才能保障往前走,最好是把你的兴趣、工作性质和你个人发展联系在一起,这样对你就非常有好处。

  我给学生提出一个建议,我去年来到北京招工,特别是招写程序,发现很多学生写程序能力弱一些,我微软面试当场写,很多学生写不出来,有的是能写出来,但是没有用最佳的方案,这时候我们90%都过不去,这样我建议你们上课的时候一定要多写程序,作为一种兴趣,解决问题一个工具,这样等你毕业的时候,发现从学生跟工业界门槛不是特别高。这是我的建议。

  金旭亮(北京理工计算机学院教授):有关学习方向还有技术进步这么快,我一直思考了很多,我本身就是一个教育工作者,对这块问题一直是我思索的重点,我也先后在我的博客上面已经先后发表过好几篇文章,基本上阐述了我对于这个问题的关键。

  我个人认为:如果对于软件,技术,计算机技术没有热情,觉得它没有什么意思的,我奉劝你尽快越早越好寻找你新的发展方向,换句话说不要再做软件这一块。这是一个事实,已经很明显了,计算机专业是从99年开始大规模扩招,08年计算机专业已经成为全国十大最难就业的专业之一,说明一点什么,有很多人是朦胧撞进来了,最好发现自己不适合计算机,不喜欢就不要往里钻。

  另外你已经确认喜欢计算机就好办,后面基本不成什么问题就是一个具体方式、方法、问题,这个领域我觉得首先要对自己有一个清醒认识,要知道自己几斤,几量,计算机技术要讲精,深是没有边的。

  对于10%有些人很聪明的,他的学习方法不适用80%普通智商人学习方法,我也只说普通智商,您觉得你是普通人,学习能力不是特别灵的,我建议你实事求是先选择那些你对感兴趣,而且能够看得懂,用得起的东西学,学了以后在学习过程中不断的深入,学某个领域的东西,我以前教学生有学完游戏,大一开始喜欢开发游戏,最初从最简单,最后到C++,游戏引擎,策划等等。

  只要选择一个你感兴趣领域,刚刚开始选一些实用性比较强,入门以后从实践到理论摸通,一开始写一些小游戏,后面接触游戏引擎,再后面人工智能发现我可能数学基础不够,再补数学,选择一个领域以后不要再见异思迁,从实践到领域打通,马上做东西出来有成功感,逐步向理论扩充,发现什么不懂马上补,一个普通人有足够毅力,基本上要掌握某个技术应该是不成问题。有了这个技能再进一步发展机会就比较多,否则的话,你代码没有写过几个程序,看一个设计原本是不切合实际的。

  2. 如何能够尽快的掌握一种新技术?

  Jeffrey Richter:学习掌握一门新技术主要途径就是实践,以Windows工作例子来说,Windows对我来说是崭新的工程,之前从来没有碰过它,主要通过观看一些相关教程,下载SDK,看原代码并动手敲打一些运行代码,看效果逐渐掌握;

  其次,过去的一些经验也会对掌握一门新技术产生非常大的作用,像滚雪球一样。最后快速掌握新技术重要的一点要专注,你选择一门技术不能在选择这一门又看另外一门这样什么都学不好,谢谢。

  金旭亮:这个新技术只要你进入软件这一行,新技术是必定会出现,所以说我经常看到.NET或者微软技术进步这么快,仔细想想哪一个领域不是更新很快。就我个人而言,新技术就像刚才Jeffrey Richter说的,我比较同意的一点:实践,比如说我在写NET4.0书的时候,我很多技术以前我从来没有碰到,比如说并行计算,国内没有任何资料,当时直接看第9频道,那些东西,直接看原代码,真的要看原代码,不要只是满足表层东西,一定要看原代码。

  还有一个很重要你要看原开发者写的博客,微软很多技术有自己的团队博客,里面有一些技术大牛写了一些博客,这些博客给了我们很多重要信息,告诉我们设计者最初是怎么想这个技术,碰到哪些问题,他是怎么解决的,你通过这些东西往往能够了解很多意义的信息。

  还有一个新技术的掌握是建立在旧技术的基础之上的,从我们教育学角度而言要掌握任何一个新东西要有一个知识框架是有机各个知识点联系起来,那么新知识才有附着点,接触一个新东西搞老半天搞不清楚,原因就是掌握这些新技术必须知识框架没有,没有这个附着点知识点是肯定学不好,这是我个人的一些体会。

  还有一个学习技术要跟理论结合起来,我碰到很多人问我,WCF太可怕了,框架那么庞大,我问他我说你光学WCF,其他的,协议你是否了解怎么回事,他说这东西要看吗,我说你不看这些东西怎么知道WCF为什么这么封装,你不用编写几个真正的原始网络应用程序你怎么知道WCF为什么这么封装,不把底层原始状态搞清楚,上来就搞一个这么复杂框架不头晕才奇怪。

  基本上会问我WCF复杂怎么学,第一件事把计算机网络相关的比较简单的整理出来,自己写一个Web服务器,还要对照看。下面这个问题就好解决了,什么情况下我们用WCF,很简单如果你开发一个系统,用到标准协议用现在封装,如果你要开发自己的协议,WCF可以不用,自己做协议就可以了。第二把理论和具体的技术结合起来。第三多去看一看这个技术的设计者,最初设计者博客的想法,把这几点做好这新技术学习是没有什么问题的,但是其中最关键一点,最重要因素一定要有对技术热爱,没有这个热爱前面所有做的一切都是空中楼阁。

  方敏:刚才两位讲得非常好,有一件事想重复下,在大学听到老师讲的他说拿一本书,刚开始是越阅越厚,然后再读是越阅越薄,拿WCF时脑子里面不是想到很多东西,而是想到一些就这么回事。还有一个事情我想在他们基础上再提高一步,为什么学这么快,学语言,技术,语言和技术只是一个手段,下一步要应用特别是已经工作的人,怎么把写的程序应用,特别是如何解决顾客的需要。

  比如说一个简单例子我做医疗卫生这些研究工作,按道理我们做了一个医疗卫生模式,觉得还挺不错,按道理到这一步有完成,但是我们觉得不行,医疗卫生要解决很多医院情况,我强调一定要到一个医院做实验,我们选择上海华东医院做一个试点,我们整个把机器运过去,装了7、8台机器,模拟从后面不同服务器,医院的信息系统和我们系统联在一起,联在一起过程中我们发现很多问题,理论上设计或者程序上编完以后觉得没有问题,和医院联在一起,怎么就不过来,怎么出现这个现象,怎么回事,找人,有些人甚至不懂了,怎么办,大家慢慢做,中间真的要放弃了,但是为什么我们把我们自己弄好就完了,为什么要跟医院系统联系?因为最后是要解决医院问题,再送一波人,这次去目的是什么,难点是什么,我们现在第一步要流通,哪个地方不通数据进步来为什么,为什么这个地方不通,做完了发觉通过理论设计,到实践中测试才能产生出来真正对我们用户有用的一些工具,改变他们生活改变世界。

  3. 对于NET程序员哪些技术您认为是最重要的?

  Jeffrey Richter:我认为最重要特性异步编程使得程序扩展性更好,伸缩性更强。

  金旭亮:我大概花两年时间看了一下NET4.0各个领域的,我觉得有一些技术并不看好,有些技术是比较看好。不看好比如说工作流,WF4和F3变化太大,说明整个技术设计者思路没有完全想清楚,所以变来变去,依靠这种技术构建项目是比较危险的,这个是需要考虑的。

  另外一个在Web领域我们MVC是值得考虑,千万不要认为MVC可以把Windows替换掉,是不是MVC比较牛一点,不是那么回事要根据实际情况。这两种技术各有各的优缺点,还有异步技术,跟CPU多核硬件密切相关,这个是多线程开发是所有程序员必须掌握的,现在是一个比较重要的一个东西,还有一个就是我今天因为时间有限没有介绍的就是动态变成语言和静态编程语言集成,简单说这个应用程序开发出高交互性,可以用C++静态编程语言达成一个框架,实现一种用户可控的应用程序,现在在NET4.0,支持之下这方面已经没有什么问题了。我个人觉得在NET4.0这几大块给我印象比较深。

  方敏:作为微软我肯定说我们NET4.0是不错,其他东西我就不讲了,让大家注意到,微软在云计算方面已经有很大投资,会有更多的技术出来,所以希望你们能够跟踪我们微软在云计算上的技术。

  4. 怎么看云计算对于程序员会有哪些方面的影响?

  Jeffrey Richter:云计算是一门比较新的技术,很多方面还不够成熟,这项技术投资会有受益但是受益期比较长,需要耐心一些。

  至于云计算对程序员影响,云计算出现在未来软件设计,需要考虑更多的伸缩性以及如何把现有软件移植到整个云平台是一个非常大的挑战。

  金旭亮:这一两年云计算是满天飞非常火,NET4.0集成了云计算应用的模板。比较郁闷的是现在云计算平台还是需要收钱的,所以这个地方我呼吁:如果微软听得到的话,能够给开发者免费的帐号和相应的一些实验资源,只有这样才能推动云计算的应用。

  另外一个就是云计算本身我看了一下原理还是非常酷的,的确我个人认为未来确实是很有深远影响,而且从微软平台上来看,本身的开发体验实际上跟我们桌面应用程序没有太大差别,面临一个虚拟机,里面跑的是NET但是这个虚拟机是很厉害,里面有动态升级要100个服务器,多大硬盘不需要归还给它,可以在云中漂移是一个很厉害的东西。

  但是有一个问题,我个人认为目前中国大陆本身还没有成熟的稳定云平台,企业部署这个要把这个平台云应用部署到国外,国内很多企业带有很大的顾虑,所以我这里我个人觉得你可以理解,可以学习,了解一下云计算为未来做准备,云计算真正在中国落到实地还有比较长的路要走,毕竟我们中国是有自己比较独特的国情。

  方敏:云计算是有很多优点,大家讨论特别多。以前早期的一些观点有雏形的概念,现在云计算要求世界上很多大公司非常重视这个东西,我们微软公司有几个部门专门做云计算,我们内部也学这个云计算。

  但是从测试的角度来讲,我可以谈几点和我们平常做不太一样,第一就是我们叫做性能,因为云计算要把数据传到云里面再回来,这样有时候传输时间可能会长一些,我们在做监测的时候,你程序写好一定要知道实践多少时间,我们讲云端,云在云里面,端我们平常用的设备,发一个过去多少时间回来很重要,如果时间很长,我不需要云计算了,云计算还有一个好处整个可扩展性,这是一个优点,但是扩展性怎么发展也是我们测试当中很重要一条。

  还有一条有关安全性,因为在中国,我们对一些数据看得非常重,其他国家也一样,到云里面去,云里面飞过去一个飞机把我的数据偷跑了,所以这样来讲,谁能看云里的数据,这个安全性变成更重要的,这样你要花时间考虑这些东西,以及里面的结构。

  还有一点,我们有的叫公共的云,希望能够有些像前来解决安全性的话,中国政府卫生部有一些数据自己维护这些东西,就好比一点让其他公司保障数据安全性就会差一点,所以现在就是有一个门槛了,因为我们不像其他PC,JAVA等等我们马上可以写程序。

  这个最好有一些免费的,我们谁上去都可以玩一玩,现在门槛的确比较高,怎么解决这个问题,也是一个很大的问题。就是说微软也在考虑,其他公司也在考虑,随着技术慢慢扩展这个价格会慢慢便宜下来,有些公司会上一些课或者免费玩一下,能够培养在云计算才能做东西的更多人才,大家都要往云里面飞,很多事情是以前不能想象,以后会慢慢变成现实,上个世纪初没有人想象飞机会飞起来,但是这么多年以后飞机飞起来,而且很快,现在到宇宙上走一圈也不是遥远的事情。因此就是说现在看未来,一方面自己工作不要浪费了,同时学这些,能够保障你沿着正确轨道向前不断的飞越飞越高。

  5. 请问各位专家怎么看NET这个平台和其他竞争平台之间的竞争,现在我们知道JAVA,LIMP,尤其是互联网企业?

  Jeffrey Richter:对其他平台接触也不是很多,就个人认为NET类库是比其他平台比如说JAVA要强大,而且也易用。我自己本身是非常喜欢用强类型编程语言,我用C++这些语言比较多。我认为这些动态语言不适合编写大型项目,怎么说呢,使用强类型语言,动态语言不太适合编写大型工程项目,相对于强烈性变成语言动态,语言也许会编译通过可能会很多隐性错误,强类型在编译时可以检查很多错误,运行的时候更加安心一些。

  金旭亮:有关NET平台其他平台关系问题,其实我一直都坚持一点,你最好是专注于一个平台,对这个平台有所了解,千万不要这个平台摸一下,这样搞是不行,至于你说编程语言这些东西我个人觉得你最好多学一点,面向对象多学一点,函数式变成学一些定多了解一些。我是专注于NET平台,但是我也同样也讲JAVA课程。

  我个人觉得接触不同技术平台对于开拓你的思路是很有帮助,对于提升你的个人技术能力也是很有帮助,你打算要靠某个平台谋生的话,要找工作求职发展我建议你采取葛优策略,“就是相信群众”,什么意思呢?就是说你看一下目前的主要市场上面平台是哪几个,一般人多投资在这个上面不会错太多。比如说从现实角度看推这个平台公司实力如何,微软平台公司是一个很厉害公司,JAVA一大堆业界很多大公司做这个没有问题,小公司有些东西慎重考虑一下,我基本上我觉得你就是相信大多数人选择,大多数企业选择,选择一个平台做好精通再了解其他的。

  方敏:我觉得他们讲得不错,不同平台最好是不要让微软人讲,所以最活找一个第三方,听一听专家意见,大家都走的方向微软肯定要看用户群,很多人用这个东西,自然会在方面投资比较多。

  6. 微软这么多年在表现层技术很多,比如VB等,WPF,现在HTML5也很快,其实NET平台有很多,有这么多竞争性技术,各位专家怎么看待这个问题,怎么选择,各有什么优点。

  Jeffrey Richter:首先微软在最近把HTML5作为未来战略主要部分之一,HTML5是一个跨平台的技术,至于选择UI技术方面,建议推荐是使用HTML5因为它具有跨平台性,根据自己需要可以选择WPF等技术,谢谢。

  金旭亮:微软一个喜欢推各式各样的新技术,一个是UI还有数据存储技术,一波接一波。我建议你是高手继续用,不是高手最好不要碰。如果你想要一个很酷界面,按纽不要方的要三角形的这种用WPF比较合适,我个人感觉性能确实够呛,在一个老的奔腾4跑肯定够呛,可能老半天起动不起来,WPF就是比较酷,看你程序跑在什么地方,我听说腾讯QQ出过WPF版本,但没什么人用,要根据应用来决定你用哪种UI技术。

  如果你用WPF客户必须端安装NET。我们知道最近最激烈的是移动设备比如说智能手机上面应用程序,Windows7是否一定能够站稳脚跟并且成长壮大,这个谁也不敢说,对手都很强,作为一个开发者擦亮眼睛看,不是说不学,一边看一边学,看看实际情况,智能手机到底谁是老大,不一定非得绑在微软平台,因为我不是微软公司,我不会老是说微软公司是天下第一的公司。

  方敏:首先我是同意Jeffrey Richter观点,他排序我还是同意的,微软很大,我们在很多时候选择技术、语言的时候,有很多方针,帮助你选择。第一就是看方向,今后大家向HTML5走,第二用在什么地方。然后还有就是在考虑实际应用。我们现在讨论用WPF,或者做Web这个有时候会讨论,因为有很多丰富功能,但是Web相对弱一些,一个很典型的例子我们在医院系统,还有很多使用XP很老的系统,因此要用每台机器得必须装。第三看你以前在什么平台上做。

  总而言之第一看方向,第二看什么时候实用,第三看原来是什么情况,新工程师要培训他们,学习新技术要花很多时间才能出产品。

  主持人:今天圆桌就到此结束,感谢几位嘉宾参与。

  翻译者:巩朋


  本文链接:http://news.cnblogs.com/n/94994/

  相关新闻:
  · 微软再发新补丁屏蔽AutoRun功能(2011-03-05)
  · 招聘信息暗示微软正研发下一代Xbox 360(2011-03-09)
  · 微软可能会在六月展示Windows 8平板操作系统?(2011-03-05)
  · 微软必应1月全球市场份额首超雅虎(2011-03-03)
  · 微软将向日本灾区提供价值200万美元的救助(2011-03-16)