上周末很有幸参加了CSDN举行的TUP活动,不但获得了带有Jeffrey签名的图书一本,而且还得到了和Jeffrey面对面交流的机会。会上也见到了很多牛人,博客园上的金旭亮老师,图灵丛书的主编刘江老师以及微软的测试总管方敏先生,激动之余,做一些回顾。
首先是图灵丛书的主编刘江老师致开幕词。
然后是北理工的金旭亮老师讲解.Net 4.0的新特性。
金老师首先讲解了.Net 1.0到.Net 4.0的发展历程,然后系统的介绍了.Net 4.0新增的特性(并行处理,MEF等),讲解的很好,举的例子也不错,不过不知道为什么金老师没提到DynamicObject,可能是自己当时没仔细听吧。
金老师准备的很充分,讲解的也很全面,只可惜时间不足,后面的一些关于MEF的内容没有讲完。
感觉金老师很像我本科时的一个老师,对学生很负责任,对技术也有很执着的追求,看似古板,实际上却很幽默。在讲解C#语言的同时也融入了很多软件工程的重要思想。在如今大学校园的计算机系,能有这样的老师,实在很难得。很想阅读下金老师的那本关于.Net4.0的书,以后应该和金老师多交流下,以增长自己的见识。
接下来就是Windows核心编程以及CLR via C#系列畅销图书的作者,Windows编程、.Net编程的大牛Jeffrey Richter的登场了。
感觉这些老外还是很随意的,牛仔裤t恤衫,非常休闲的就上场了。
作为技术作家,Jeffrey首先提到他最近并没有在写新书,也暂时没有写新书的计划,that feeling is great~
对于CLR via C#是否还会出新版,Jeffrey表示之后随着.Net的版本更新,会做一些修订。而对Windows核心编程那本书,Jeffrey表示very painful,如果可以的话他是再也不想碰了,看来windows programming还真是fucking horrible。
Jeffrey表示他并没有做特别的准备,因此可以直接进入问答环节。
在这个环节,由于之前请的那位做翻译的嘉宾没来,我非常幸运的出场了(作为Jeffrey的临时Interpreter,没错,就是左边那个黑衣男),多谢刘江老师给我这个机会。
第一个问题把整个会场的人都整囧了,一个哥们居然拿出自己一个编程的问题(Winform程序,连接数据库时窗体突然消失了,请问Jeffrey老师这是为神马?),搞的我也不知道该不该翻译,Jeffrey对这样的问题也表示很无奈。
对于第一个问题,Jeffrey回顾了下C#的发展历程:C#1.0是一门Java-like、C++-like的语言;C#2.0引入了泛型的机制,使得C#更加完善;C#3.0、3.5增加了很多函数式编程的语法特性(高阶函数、lambda表达式),当然还有LINQ;随着动态语言(Ruby、Python)和多核CPU的飞速发展,C#4.0引入了动态语言的一些特性(诸如Dynamic Type),并引入了更完善的并行库。至于C#接下来的发展方向,Jeffrey认为C#会增加更多的特性以支持异步编程(Asynchronous Programming)。
对于第二个问题,Jeffrey认为这个问题不好回答。首先他承认他用java主要是在他的android phone上写一些小apps,对于java语言和C#语言而言(注意是语言,不是平台),Jeffrey认为C#更强大,更易用,他也提到这主要是由于C#晚于Java发布,因此对Java语言进行了扬长避短。同时Jeffrey认为在library这方面,.Net库比Java库设计的更合理,更人性化。而在IDE方面,Jeffrey认为Visual Studio相对于Java的IDE(Eclipse)要更强大易用。
对于第三个问题,Jeffrey提到了一些关于Windows 8的内容。微软对苹果一直很不爽,尤其是ipad这样的移动设备。他表示windows 8会更注重移动设备,优化程序性能,增加续航时间,并提供对ARM芯片的支持,以在平板设备(slate device)上同iOS相抗衡。
接下来有人问Jeffrey对mono的看法。Jeffrey个人认为mono是一个很好的项目,他也很希望C#这样优秀的语言可以跨平台,然而他也提到微软可不一定这么想(需要注意Jeffrey本人不是微软公司的)。
一位同学提到将来会不会有可以直接运行IL的CPU(这哥们看书看的还真细)。Jeffrey没直接回答这个问题,他只是提到微软现在开发了一些称为".Net Gadget"的小玩意,可以编写C#代码再烧制到这些设备上,通过这种方式,你甚至可以自己编写DC上的程序。
接下来进入了圆桌环节,到场的两位嘉宾(金旭亮老师和微软的测试总监方敏先生)上台,同Jeffrey一起解答之前网友的热门问题(我本来是站在一边的,后来Jeffrey让我坐他旁边了,不胜荣幸,图上的我正在疯狂的记录中,以便接下来口译)。刘江老师从中精选了一些代表性的问题。
问题1:如何在技术的浪潮中选择自己的方向?
Jeffrey认为首先要找到并跟随自己的兴趣,follow your heart。Jeffrey认为学好计算机专业基础(Computer Core Concepts)是相当重要,诸如操作系统的概念,数据结构这些课程都应该扎实掌握。在学好基础的前提下,专精一个方向,比如说图形处理或是人工智能,这样就会使自己在技术的浪潮中利于不败之地。
方敏先生则根据他的招聘经验对学生提出了一些建议。他尤其提到当前的大学学生编码能力不足,微软面试的写程序环节,很多学生写不出来,一些人写了但不是最佳的方案。为此他建议学生在校期间多编程序。
金旭亮老师也认为兴趣很重要,多编写代码,多实践,实践中补充理论,学理论时进行实践,如此互动。金老师以Brooks的新书Design of design为例,虽然是好书,但是没有点经验,是根本看不动的。
问题2:如何尽快的掌握一门新技术?
Jeffrey谈到了他是如何学习Windows Azure的:下载SDK、观看教程、阅读文档、编写sample code、与一线人员交流。他还提到,自己过去的经验对于学习掌握新技术有很大的帮助(深表赞同,自从阅读了esr的那篇文章,学习了五类编程语言之后,感触颇多),此外,要focus,要专注,要持之以恒。
刘江老师提到Jeffrey有Python的经验,Jeffrey也就发表了下对动态语言的看法。他表示自己是a fan of strongly type language,因此用C++/C#很多,他承认Python这类语言在编写一些脚本时很方便,不过他认为动态语言不适合大型的工程项目,动态语言是很灵活,但也许太灵活了。编写一些gluing code(胶水代码)动态语言很适合,但是对大型的工程而言,强类型语言更合适。
金旭亮老师在这里提到基础的重要性,以WCF为例,他提到一个学生不明白Http不知道Socket,就要学习WCF,结果自然不会好。他同时提到要多看一些技术人员的blog(good advice),尤其是那些项目主力开发人员的blog。
方敏先生进行了补充,他认为技术固然是重要的,但一定要与应用相结合,以他所负责的health care sytem为例,他们的项目组就经常到医院进行实地考察,以编写实用的医疗管理软件。
问题3:对云计算的看法以及云计算对软件界带来的影响?
对火热的云计算,Jeffrey似乎并不感冒,他用infancy这个词来描述cloud computing,认为云计算还有很长的路要走。
对于云计算的影响,Jeffrey认为如何把现有的软件迁移到云中是一个巨大的挑战(migrating is a great chanllenge),同时,如何编写可扩展性强的软件以适应云环境,也是一个难题。
方敏先生则提到,对于云计算,有三点要求:Performance(性能),Security(安全性),Extensibility(可扩展性),这三点也是Windows Azure追求的目标。
问题4:在微软的众多表现层技术中,你最推荐的是哪一种技术?
这个问题的回答比较令人意外(也许是情理之中的回答),Jeffrey首推HTML5,不但是因为微软已经把发展HTML5作为主战略,而且是因为HTML5有效的支持Cross-Platform,为了在移动终端的市场上取得更大的突破,微软需要一种跨平台的强有力的技术,这就是HTML5。Jeffrey顺便提到,如果不考虑跨平台,而且想制作绚丽的界面的话,也可以选择silverlight。
接下来就是签售活动了,各位读者纷纷向Jeffrey索要签名,或是合影。
会后不但和Jeffrey合影,而且并获得了Jeffrey的签名图书,十分兴奋,毕竟是头一次和这样的编程大神级人物走的这么近,而且还可以他面对面交流,that is really fantastic!!!