bitfan(数字世界一凡人)的专栏

在新浪博客的新家:http://blog.sina.com.cn/bitfan

用户操作
[即时聊天] [发私信] [加为好友]
bitfan(数字世界一凡人)ID:bitfan
375265次访问,排名142好友0人,关注者63
=========
一名代码一写就十多年的“老古董级程序员”,看来还会再写下去;
一名有着“好为人师”臭毛病的小小讲师,“混迹于”大学校园,时不时发几句不合时宜的“反动言论”,好在皮厚,任人笑骂而无所谓;
于北京高楼林立之地租一小屋容身,依靠讲几节小课赚点小课时费应付房东大妈,所幸政府开恩照顾,终于让我等穷教师有了当房奴的资格,高呼:感谢政府!
==========
几本小书:
《网站建设教程》:高等教育出版社(2005)
《编程的奥秘——.NET软件技术学习与实践》:电子工业出版社(2006)
《.NET 2.0面向对象编程揭秘》:电子工业出版社(2007)。
《ASP.NET程序设计教程》高等教育出版社(2009)。

几堂小课:
在ITCAST(http://www.itcast.net)讲授.NET系列在线视频课程,想将课堂开到互联网上,目标不大,要帮助更多的年轻人学好技术找到好工作。野心不小,已录制了5个系列30节课,打算一路跟踪微软最新技术,打造国内自成体系、独特风格的微软技术系列课程。
bitfan的文章
原创 87 篇
翻译 0 篇
转载 0 篇
评论 2212 篇
最近评论
wjfmail:可以学,但估计要比别人多很多的努力.毕竟开发不是一种天赋就可以拥有的才能.你碰的钉子会比别人多得多.不过,还是从现在开始努力吧.
gsqswjh:我就是小学文化,而且"奔四"了,才开始学习编程,学如逆水行舟,不进则退,说的太对了,加油啊!
Microsoft_China_Vip:


www.soAsp.net 编程学习网 技术+ 实例应用 讲解不错。 推荐大家!

有很多 技术资料也很好!



Microsoft_China_Vip:


www.soAsp.net 编程学习网 技术+ 实例应用 讲解不错。 推荐大家!

有很多 技术资料也很好!



Microsoft_China_Vip:


www.soAsp.net 编程学习网 技术+ 实例应用 讲解不错。 推荐大家!

有很多 技术资料也很好!



文章分类
收藏
    相册
    .NET技术学习与实践
    5.2 使用.NET开发数据库应用程序
    数据绑定原理
    杂类
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 现在该不该学习Win 32 API和汇编?收藏

    新一篇: 金旭亮著作斟误表及未来写作计划 | 旧一篇: 本学期.NET课程的新变化

    现在该不该学习Win 32 API和汇编

    ——《.NET 2.0面向对象编程揭秘》勘误兼回答读者问题

    本书出版以来,陆续收到了一些读者的邮件,或者探讨技术,或者指出疏漏。感谢热心而且细心的读者,你们对技术认真执著的精神很让我感动。今后,我会在本博客上给《.NET 2.0面向对象编程揭秘》提供一个勘误表,将发现的疏漏公布。

    最近收到山东师范大学张超同学的邮件:

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

     金老师:
          你好,我是山东师范大学的一名大三学生,……(中间的文字与本文关系不大,略去),我现在还有个困惑想请教一下老师:现在还有没有必要再学传统的Windows程序设计(我指的是WindowsAPI编程,不知这样说合不合适),是不是.NET的出现淘汰了这个技术?另外有没有必要学习汇编语言,是不是学了编出的程序效率高一些?请金老师指点一下。

    另外老师的著作《.NET2.0面向对象编程揭秘》中有两个地方好像不太完善:

    一.
       第259页浅复制的那段代码中的“ return obj; ”我个人认为应改为 “return newObj;”,要不然复制后的对象也指向原对象了。

    二.

       第253页信息的双向传送中下面这个过程有点小问题:
         Private Sub ChangeProgressBarValue(ByVal IsIncrease As Boolean)

            If IsIncrease Then '增值
                If Me.ProgressBar1.Value = 100 Then
                    Me.ProgressBar1.Value = 0 '重新开始
                Else
                    Me.ProgressBar1.Value += 2
                End If
            Else '减值
                If Me.ProgressBar1.Value = 0 Then
                    Me.ProgressBar1.Value = 0 '不允许再减少了
                Else
                    Me.ProgressBar1.Value -= 2
                End If
            End If

            '显示信息
            Me.lblInfo.Text = String.Format("{0}%", Me.ProgressBar1.Value)

            '向主窗体的公有方法向其传送信息
            Me.frmMainForm.SetValue(Me.ProgressBar1.Value)

        End Sub

    当我手工把主窗体中NumericUpDown1的值改为99后(当然这是我故意的),再单击从窗体上的“增加值”按钮会产生异常,程序的健壮性还不是很好,不过老师是为了说明信息的传递原理,可能就没太关注这个了。

    ==============================
    我的回答:

    你发现的第一个问题是我的疏漏,确实应该改为newObj;

    第二个问题很好解决,将

    If Me.ProgressBar1.Value = 100 Then
    改为

    If Me.ProgressBar1.Value >= 100 Then

    即可。
    有关程序健壮性的问题是比较麻烦的,因为程序实际运行时可能出现的情况太多了,拿本例来说,用户也完全可能输入的不是数字,而是字符,特别地,有可能是全角数字……。但除非作为一个商业程序,一些简单的示例可以不必考虑得过多,不这样做,细节就淹没了主题。

    关于Win 32 API和汇编该不该学习的问题,我很难回答“该”还是“不该”。一切应该从学习者本人的情况出发决定。

    Win32 API 有数千个C语言形式的函数,涉及到Windows操作系统的许多运行机理,花功夫学习可以对Windows操作系统有深入的了解,对写出高质量的软件有帮助。另外,至少到目前,Win32 API 仍然是调用Windows操作系统的核心功能的主要手段之一,最新的Vista仍然是NT平台的技术(其版本为6.0),这就是说,仍然在底层使用Win32 API。从这个意义上说,学Win32 API 是有用的。但要注意,没有一个技术是可以长盛不衰的,win 32 API 也一样,迟早会被更好的技术取代。Windows应用程序的开发日益转向使用.NET是微软坚定不移的战略,其思想是用面向对象的类来取代传统的函数,即使用面向对象的类而不是结构化编程时代的函数来调用操作系统功能。因此,如果你主要从事应用系统的开发,与操作系统底层技术细节关系不大的话,确实可以不去花大量时间对Win32 API深挖细掘。而且Windows本身源码不公开,是个“黑盒”,学习起来也不方便。

    你如果因为想深入了解操作系统这一目的而学习Win32 API,建议先去学习大学计算机专业课——《操作系统》,然后,直接研究开源的LINUX是较好的选择。

    再谈谈汇编。

    汇编语言有许多种,目前高校中讲授的大多是PC上最早源自8086系列的汇编语言,虽然现在很少直接用汇编来写应用程序,但与Win32 API不一样,我还是建议在校学生好好学学汇编,但其目的不是为了直接写应用级别的程序,而是通过它来深入地了解计算机。

    汇编本身属软件范畴,但与硬件关系密切,学习它有助于更好地了解计算机体系结构。你只要抱着“我想弄清楚计算机内部是什么样的,软件是如何控制硬件干活的”这个目的去学就行了。另外,如果你想向硬件方向发展,汇编与C语言是必须下功夫扎实掌握的硬件工程师基本功之一。

    还要指出一点,汇编技术也是现代软件编译器的基础技术之一,通过分析编译器为应用程序生成的汇编代码,有助于写出高效率高质量的代码,也有助于定位程序BUG。我在写作《.NET 2.0面向对象编程揭秘》一书时,就是通过直接阅读C#编译器生成的IL源码,对CLR和面向对象技术才有了较以前仅使用面向对象语言编程时更多更深入的了解。这些心得,我都写在书中了。

    总结一下:知识都是有用的,但每个人的定位不一样,发展方向也不一样,因此,没有必要什么知识都去学,也不要对各种知识和技术平均分配精力。有所不为才能有所为,要绕着自己的长处与兴趣点去分配时间和精力,要在某个最适合发挥自己长处的领域做到出类拔萃,在此基础上,对于其他领域的知识,大致了解就够了。样样都懂,却样样不精,难有成就。对于目前这种知识爆炸的现状,我认为这是唯一可取的策略。
                                                           

    发表于 @ 2008年04月14日 09:38:00|评论(loading...)|编辑

    新一篇: 金旭亮著作斟误表及未来写作计划 | 旧一篇: 本学期.NET课程的新变化

    评论

    #paopaoc 发表于2008-04-14 13:22:04  IP: 219.131.196.*
    非学有必要:)
    因为在工作中,若你写个稍微深入系统级的程序,就会用到win32 api,而若你想加深对系统更深一层的了解,就非学学汇编不可了。
    #ngn888 发表于2008-04-14 17:16:35  IP: 58.19.70.*
    同意楼上的观点!
    #billycat 发表于2008-04-14 19:28:40  IP: 117.69.36.*
    你好

    上文提到 可以先学一下《操作系统》
    那么请问学习《操作系统》这门课之前需要掌握哪些知识?

    一门编程语言? 组成原理? 数据结构?
    #hsm824 发表于2008-04-15 02:52:00  IP: 218.5.40.*
    领教了。
    #hsm824 发表于2008-04-15 02:53:39  IP: 218.5.40.*
    我一直都赞成金老师的观点,我们学校要是有这么一位老师,那真是有福了,呵呵。
    #007pro 发表于2008-04-15 10:06:24  IP: 222.131.141.*
    如果是一个严谨的开发人员一定要学习计算机体系结构和汇编,win32api的意义在于你在知识通达的基础上又一个方便的工具,仅此而已
    #liangfengxx 发表于2008-04-15 14:37:43  IP: 125.85.134.*
    《.NET 2.0面向对象编程揭秘》很不错,不过重点是在.NET2.0上,对于面向对象,也不是没讲,但似乎欠缺力度,如果能结合设计模式来讲解,那将非常棒(记得好像只提到单根模式)。
    #godwater8 发表于2008-04-15 15:33:08  IP: 67.180.44.*
    掌握一门工具是必须的 但也是不够的 软件开发绝不仅仅是某些框架或API的杂凑 要用什么工具凭自己的爱好决定就好了 关于算法和设计 也很难单靠看几本书就搞定的 但这正是决定一个开发者处于哪个层次上的决定性因素
    #Mysteryqing 发表于2008-04-16 12:47:57  IP: 125.81.2.*
    不错.受益了!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © bitfan(数字世界一凡人)