您的位置:首页 > 编程语言

读者skyfalling:《.NET 2.0面向对象编程揭秘》读后有感

2008-11-07 09:57 357 查看
读者skyfalling:<.NET 2.0面向对象编程揭秘>读后有感


今天收到了一封读者的邮件,对我的著作给予了肯定,并提出了中肯的建议。作为一名技术书籍的作者,没有比读者对自己作品给出肯定的评价更高兴的事了,非常感谢读者的建议,知音啊! :) 写作这本书时的艰辛仍历历在目,但这本书能帮助一些人更好地掌握技术,是件令人开心的事,心血没有白费,我做的事还是有点价值的。



他的邮件我附在下面:



================================

金老师:
你好,冒昧给你写信,见谅。
但是,读完你的《.net 2.0 面向对象编程揭秘》真的挺激动的,这本书我花了整整两天的工夫就一口气读完了(但是我读得很认真,你这本书是我第一次一口气读下来的关于技术类的图书),第一感觉就是“这才是中国人写的书”。我是计算机专业的在校生,有过编程的基础,但是在学校学到的往往是编程的理论,比如语法算法之类的,像你书上所介绍的一些实际应用中非常有用的知识则鲜有介绍,即使其他的一些编程资料也是语焉不详。例如你书中谈到的序列化,我之前也听过序列化,但是到底不知道有什么用和什么时候该用,看了你的大作才豁然开朗。还有就是关于多个窗体之间的通信,以前实现的手段都是你第五章中所介绍的利用公共属性和字段,虽然一直感觉很别扭,但是不知道有其他的解决方案。到了第十三章见你讲述的用委托和事件两种方法解决多窗体间的通信,才惊叹于原来委托和事件的作用在这里才得到淋漓尽致地发挥。再有就是,以前编的一个程序,当打开一个文件时必须先启动程序,然后选择打开文件,这一直让我很不爽,为什么不能像记事本和offcie word那样,直接双击文件就能打开文件,这也是看了你的这本书才找到了答案,虽然是你不在意的一点,但是对我帮助很大。其他的像windows 应用程序的多线程编程,反射机制的用处,都是在你这里才得到了理解和体会,之前虽然对这些都接触过但是就是不知道怎么用和用在哪里,这是编程最郁闷的事情。好多书对于某一个知识点反复强调多么多么重要,但是就是不举个实际应用的例子,只是找一个非常简单,而且用其他方法解决更容易的例子来讲解,结果造成我虽然知道这个知识点非常重要,却就是不知道重要在哪里,也不知道有哪些问题是必须用它解决或者用它解决最方便的。读了你这本书,虽然讲解书法的地方并不多,但是几乎每一页都有实际应用中非常有用的技巧。再举个例子就是,你书中一段非常不起眼的程序,其中有这么一句:ConsoleKey key=Console.ReadKey(true).Key; if(key==ConsoleKey.R)就这么一句将对我以后编程产生永久的影响,我再也不会用Console.Read()来判断输入字符了。

总之,你的书让我眼前一亮,我刚开始学c#不久,因为现在介绍c#的书越来越多,然而国内的大多千篇一律,而且往往避重就轻,国外的翻译过来又是那么佶屈聱牙,生硬拗口,而且国外人的思维和国人也不一样,所以看着实在费力。以前,除了MSDN之外,对我学c#影响最大书的有两本,一本是清华大学出版社的《C#程序设计》(非常适合有编程基础但从没接触过c#的朋友),还有一本是《Effective C#》,(适合已经精通C#编程的朋友,讲的是如何编写高效率的程序),而今天我有幸拜读了你的大作,注定又是对我的c#编程产生重要影响的一本书,让我知识从课堂走进生活,将理论化为实践。好多在技术上而不是知识点的难点和疑问到了你这里都迎刃而解了。当然以后编程面临的问题要比现在遇到的多得多和难得多,但是你的书至少给我指明了解决问题的切入点,以后就有迹可寻了。

说了这么多关于你的书的亮点,这里我想给你提点建议,不管合不合适,至少是我真诚的想法。首先,不管你的书是不是介绍语言的抑或介绍某种技术的,只要和语言相关或者以语言为依托,那么就请单纯的用一种语言吧,如果我是学C#的,我就绝不像看到关于VB的任何知识点,反之亦然。没有人会同时学两种语言,也很少有人同时用两种语言做一个项目。如果他是学某种语言,那么他就不想受到其他语言的干扰,我没必要学者A语言还要记着B语言零星的东西吧?如果我是用某种语言解决问题,那么我更是只关注这个语言是怎么解决问题的,其他语言只会对我造成干扰。所以对于我来说,只要书中同时用两种语言讲解的,我直接pass。不过你这本书讲的太好了,而且对于VB只是很少一部份,所以我也就不太在意了。另外还有一些疑问的就是你书中关于你的猜想,原因是微软没有公开技术资料的那部分,如果只是你的谦虚的话,还是不要这么说,否则的话,我想很少有人去看的,毕竟我们学某种语言大多是为了用这个语言,而不是却怎么完善它。还有一疑问,你举的那个线程例子,我觉得它体现不出线程池的作用:

你讲的是求1+……+10000和的例子,你说一个进程初始化时线程池有25个可用线程,但是在例中你的线程池只启动了一个子线程,如果这样的话,我为什么还用线程池呢?毕竟在你的计算只是在一个线程函数函数中就计算完了。我在其他书上看了一个例子讲的就要好一些,让人能理解线程池的好处,那本书也是用一个关于数学计算的例子,是求 x^Y+x^(1/y)的值,它启动了线程池里的两个线程,一个计算前半部分,一个计算后半部分,当两个线程都执行完毕后进行求和,这样让我一眼就看到了线程池的好处来,所以以后解决类似的问题我就会想到线程池来。

可能我对你的程序理解有误,如果有的话,能否给我讲解一下呢?之所以下力气和勇气和你写这封信,因为对你这本太有感觉了,希望你以后出书能坚持自己的风格!期待你的下一部大作!讲了这么多,如有不当,还请多多包涵!

祝,工作顺利,万事如意!

=================================

线程池的例子的确可以设计得更好。我会在下一版本中予以更新。

关于CLR的内部机理,我的确是在“盲人摸象”,带有一定的猜测性质,因此不敢误导读者,才在正文中明确声明。好在现在微软公布了.NET Framework的源码,资料更多了,等到本书第二版时,我会修正发现的错误。“知之为知之,不知为不知”,这是应有的求知态度。

当前我在着手研究.NET 3.5的一系列新技术,目前的课题用到P2P,正在研究WCF中的这一部分。等到技术积累足够时,我会先在ITCAST上开设相关课程,然后,再将相关的东西总结成书,《.NET 2.0面向对象编程揭秘》将会升级为3.5版,而《编程的奥秘》将全面引入WPF和LINQ等新技术,并将采用C#改写。还可能写一些新书,介绍Silverlight,WCF和WF等令人激动的新一代.NET技术的强大功能。



技术进步的大潮浩浩荡荡,积极进取方可生存,抱残守缺必然落伍。



与读者共勉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: