“简单低级”的微软技术与研究生的贬值

时间:2021-07-11 04:13:45

简单低级”的微软技术与研究生的贬值

               金旭亮 

 

         我们学校计算机技术学院给研究生们开设了一门课——《面向对象方法与技术》,这学期由我来讲授。于是我就在博客上发了一个贴子“《面向对象方法与技术》课欢迎业界朋友参与交流”(详见:http://blog.csdn.net/bitfan/archive/2009/02/23/3925577.aspx),介绍了课程的三个组成部分:OOP(以.NET 3.5为例进行剖析)-->UML 2.0-->OOAD

         原贴中有一个名为river80的网友发言:

 

这些东西讲给研究生听,看来研究生真的贬值了.

 

         我估计river80发这个贴子可能包含以下的意思:

 

         1)这些内容太简单了,有必要给研究生讲吗?开设这种“小儿科”的课程:现有的中国高校研究生教育——完了!

         2)研究生居然学这种简单的东西,其水平可想而知。总之:现有研究生的水平是“可疑”的,不贬值才怪!

         3)这种水平的课,又是由曾被微软牛人狠批过的有着“误人子弟”头衔的金旭亮来讲,能好到哪里去?

         4)……。

 

         也许还有其他意思,毕竟我不是对方肚子里的蛔虫,不可能知道得一清二楚,以上仅是猜测。其实,我估计river80网友只是看了我的贴子,一时有感而“灌水”,并未经过仔细地思索。但其中其实涉及到一些很有趣的论题,不妨说说。再次声明:以下论点并非针对river80本人,只是我有感而发。

 

         软件业在中国还很年轻,因此,这个行业中有很多年轻的朋友在其中努力工作,奉献着自己的聪明才智。但年轻容易气盛(特别是本身也比较能干的),很容易出现这样的现象:

 

在没有比较充分的调查与研究的基础上,轻易地给某个事物“贴标签”;在给某事物下结论作总结时,要么阳光明媚,要么一片漆黑。

 

         具体到本门“研究生选修课”,如果我告诉你,这门课是“计算机学院”所开,但全校各专业研究生都可以“选”的,你还会说——研究生贬值吗?你不知道这个实际情况吧?

 

          的确,扩招所带来的弊端非常明显,尤其是教育部今年为了应付大学生就业压力,要求扩大研究生招生规模,甚至放宽一些特定专业(比如MBA)研究生的入学要求,遭到了社会各届的强烈质疑,作为一名大学基层教师,我也是对此持不赞成的意见。有关扩招所带来的教学质量下滑,无需多说。但事情绝不是只有一面的。

 

         我在高校呆了10年了,还是较有把握地说,哪怕本科生研究生再扩招,由于学生基数大,其中优秀的学生并不比扩招前少,甚至更多。而且由于扩招,相对降低了对分数的要求,也使一部分不太善于考试的人才得以有机会深造。另外,让学生在大学里学习几年,相比将他们全部推入社会去“自生自灭”,去“自学成材”,还是有助于提升国民总体素质的。

 

    教育部那批被人痛骂的“官僚”,其实都是聪明人,制订出这项政策,肯定是各方利益和各种现实因素进行博弈的结果,当然,其屁股未必都坐在百姓一边。

        

        另外,有些学生本身就是非常优秀,把他放到哪,他都能靠自身的努力而“自学成材”,这些自身素质较高的学生(尤其是年岁较长的研究生),是不太容易受到外界环境的影响的。

       

       现在回到具体的技术领域。

       

       我本人愚笨,学计算机学了十多年,弄.NET也有6年了,还是“水平有限公司”的。然而,我的确发现,许多说微软技术“简单”、“低级”,对此不屑一顾的人,其实对微软技术都是浅尝辄止。

        

    软技术的特点是:起始门槛低,但易学难精。我们学校微软俱乐部的学生曾打出一个横幅——十天成为.NET程序员,给我严肃地批评过。“十天成为.NET程序员”,那业界那么多在微软平台一开发就是几年十几年的工程师们,是不是都该去跳楼了?!他们太笨了嘛!

        

        就拿好象很简单的面向对象编程最基础概念:比如类的“静态方法”与“实例方法”,类的“实例字段”和“静态字段”,用起来“好简单啊!”。那我问几个问题:.NET程序运行的对象模型是怎样的,它怎样装载程序集,对象又是如何创建的?CLR是如何管理对象的“实例字段”和“静态字段”的?类的“静态方法”与“实例方法”都是“方法”,那么,他们编译后在内存中是放在一起吗?CLR又是通过什么机制来区分它们的?应用程序的多态特性——同一句代码在不同的上下文中会有不同的执行结果,.NET是怎么做到的?是在运行时实现的还是在编译时实现的?.NET怎么处理混合语言调用问题,你怎么能让语法完全不同的C++去继承一个VB编写的类?……

 

         再拿广泛应用的ASP.NET技术来说,以下几个问题好多人都回答不出:

          

        Http管线是如何处理HTTP请求的?HttpModuleHttpHandler在此管线中是什么角色?微软为什么在设计ASP.NET框架时要做这么复杂的设计,是不是“吃多了”?ASP.NET架构设计师的目的是什么?

        

        还有.NET 3.0、3.5中引入的多项新技术,以WPF为例,其中一个引人注目的特性是依赖属性与路由事件。用一用,好神奇啊,以前困扰程序员多时的“图形重绘”和“动画缓冲”问题好象不存在了耶!比如你给WindowBackground赋一个画笔,窗体怎么就会自动应用新的画笔重绘自己,它怎么知道该绘制哪块屏幕区域,为何重绘过程没有闪烁?为何有些依赖属性可以被子元素自动地继承,而另外有些依赖属性一但改变所有的相关元素都会得到通知?为何一个在底层控件上触发的事件可以在高层被处理?……。如果仅仅在WPF中只会用XAML设计界面,啊,好简单啊!但一切真的是那么简单吗?!

        

       还有更多的例子,我就不举了。

       

        微软技术好简单啊!那如此简单的东西,为何你会为调试一个程序而加班到深夜最后才发现原来是自己并未真正理解了某个技术点?为何你会为一个BUG搞不掂而火冒三丈?是应该怪“微软封装得太多了”,还是应该怪自己太“浅尝辄止”了呢?

 

         有些事情看别人做起来好象很简单,还会“奇怪”他为何不做得更好些。自己去做一做就会明白了,事情没那么简单的,有许多因素,不实地去做一下,你是无法想象的。相反,坐而论道,浅尝辄止是最容易的。

 

         到此,这篇短文似乎可以结尾了,又似乎不能结尾,也很难结尾。我再狗尾续貂几句吧:

         微软技术是不是“简单低级”,要看你钻研与应用到哪个层次,而“研究生是否贬值”,其实与个人无关。问题的关键是:自己贬值了吗?别因偷懒而被时代所淘汰哟!

 

                                                   金旭亮(2009.3.8于北理工)