当前位置: 首页 > news >正文

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

读者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技术的强大功能。

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

与读者共勉!

相关文章:

  • sql查询行数_千万级数据表选错索引导致的线上慢查询事故
  • BIEE创建时间维报NQSError
  • ppt倒计时_逼得知乎大神写程序解决的PPT倒计时,我花7秒钟搞定了
  • SAP一句话入门
  • 一寸照片压缩到20k_压缩机油更换注意事项-杭州华力制冷维修小知识
  • 《深入解析Oracle》一书前言
  • python远程调试_python基础===利用PyCharm进行Python远程调试(转)
  • JAVA实现整句汉字拆分、转换为ASCII
  • numpy有什么功能python_Numpy的介绍与基本使用方法
  • 在Window XP家庭版上安装IIS
  • python中表达式4+0.5值的数据类型为_Python之路【第五篇】:Python基本数据类型
  • 单片机c语言必背代码_单片机入门-要从汇编开始
  • 敬琏:货币政策
  • sql 一段时间内相同的只统计一次_DBA的五款最佳SQL查询优化工具,收藏了
  • 什么样的公司程序员待遇好?
  • $translatePartialLoader加载失败及解决方式
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • android 一些 utils
  • bearychat的java client
  • echarts花样作死的坑
  • FastReport在线报表设计器工作原理
  • JavaScript 奇技淫巧
  • javascript面向对象之创建对象
  • Laravel 实践之路: 数据库迁移与数据填充
  • Redis的resp协议
  • SpringBoot 实战 (三) | 配置文件详解
  • vue-loader 源码解析系列之 selector
  • 翻译:Hystrix - How To Use
  • 机器学习学习笔记一
  • 坑!为什么View.startAnimation不起作用?
  • 来,膜拜下android roadmap,强大的执行力
  • 由插件封装引出的一丢丢思考
  • 与 ConTeXt MkIV 官方文档的接驳
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Semaphore
  • 从如何停掉 Promise 链说起
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #14vue3生成表单并跳转到外部地址的方式
  • #162 (Div. 2)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #WEB前端(HTML属性)
  • (26)4.7 字符函数和字符串函数
  • (C语言)fgets与fputs函数详解
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (学习日记)2024.01.09
  • (一) storm的集群安装与配置
  • (转)VC++中ondraw在什么时候调用的
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Micro Framework初体验
  • .NET Project Open Day(2011.11.13)