Welcome to Rolland Town which Record fire's life.
2004年09月10日我的文章

评论关闭

2004毕业设计总结篇——能力、态度、规则、反思

注:本文已经发表到“开发高手”杂志2004年9期。版权属于NetFire本人、杂志社和CSDN,如需转载请联系本人或杂志社,谢谢!

   大学毕业设计,当学生那会儿,就亲生经历过,了解其中的种种奥秘。可当了老师,那些所谓的"奥秘"则是我要努力避免的。2004年我第一次带毕业设计,但是我发现,我什么都不能避免……只有默默地遵守已有的"规则"、放任那些"奥秘"……

2003年下半年我就被告知,会带2004级电子信息工程专业学生的毕业设计,所以我很早就开始拟题目。在我的眼里,电子信息工程专业的学生对编程应该不会有什么问题;再加之这将是我第一次带毕业设计,因此额外的重视,在年末就把我的题目交了上去。
今年年初,我开始写一个短文,准备讲给选我毕设题目的学生听,希望他们能通过我的讲述能认识到毕设的重要性,并抖擞精神全情投入,独立完成整个毕设。当时拟的题目是–至选我毕设题目的诸君。

第一次接触

到了今年三月中旬,院系毕业设计动员大会,导师和学生见面后,结果发现他们还没有看到题目,他们院里根本就没有给他们看题目,只是按照一定的规则将学生分组。我们这个组10个人,我初步了解了一下情况——
问曰:大家以前学过什么语言?
答曰:8人C,2人QB。
问曰:有多少人比较了解计算机,或者玩电脑或者网络比较熟悉?(聊天那些不算)
答曰:……
问曰:有多少人了解B/S结构或者C/S结构?
答曰:……
问曰:有多少人用VB、VC或者ASP、PHP等写过程序?
答曰:……
问到这里,我都已经不知所措了……接着我大概说了我们有些什么题目(我所在的组的题目90%都涉及到了编程),以及相关的预备知识,题目难点等。同学们还没有听完就开始惊讶了–要学一门新语言啊?要写程序阿?……接着我给他们复印了题目列表,以及各个题目的预备知识、难点等,然后告知他们回去选题,如果觉得实在做不了,尽早和自己院系联系协调。学生们悻悻的散去……
我向我们组的组长说明了情况,然后在组长安排下我和另外一个同事一起准备大概一天的讲义。我的主要是介绍B/S的相关东西,而且最好用一个实例,一步一步地讲述怎么完成。而另外一个同事主要讲数据库方面的知识。
说起这次和学生的第一次接触,我和同事都唏嘘不已。电子信息工程专业的怎么会这样?难道这些题目确实不应该他们做?后来和一个带计算机应用专业的老师无意间聊到,发现他那的情况也好不到哪里去……所以,当时也就只有硬着头皮上,希望学生们能争气点就好。

  在这之后不久,我就和同事各自用了一天时间把相关的知识给他们大致作了介绍。最后,我带三个学生,两个女生做B/S的程序,一个男生做B/S和C/S的综合程序。(为了方便文章叙述,简称–女生A,女生B,和男生A)
我没有给他们讲述我写好那篇短文,因为我觉得不合适。他们的基础太差……

毕设前期

在毕业设计预备知识课之后,他们也选好题目,各自准备开题答辩。这时,他们三个都经常来找我,可能是对题目理解不够,不太好做需求,所以我也很耐心给他们讲。还将可能需要的参考书目给他们,让他们赶快去图书馆借,以免晚了。这样的开始,很不错,因为我向来认为–态度决定一切。虽然他们基础不好,可态度让我很是欣慰。
开题答辩很不错,至少我个人比较满意我学生的工作,特别是对题目的认识深度都超过了我的预计。可我也发现一个问题–不够独立!还要问我要开题答辩的幻灯片格式、内容框架。
在开题答辩后,我又找到他们三个,说了下一步该怎么做、要注意些什么等。开题答辩前,我认为我需要天天看着这三个学生,时常招呼着、询问着进度,可他们圆满的开题答辩让我放松了警惕,我觉得该给他们自由,让他们自己去发挥,有什么问题我努力和他们一起解决就是,并语重心长的给他们说–你们努力做,不会没有关系,我们一起解决遇到的问题。如果最后实在没有完成整个设计,我还是会酌情考虑的。
可事与愿违……

毕设中期

开始,女生A很积极,在我的引导下成长也比较快。加上开题时对题目的分析,现在已经到了数据库建模和熟悉语言编程阶段了。可渐渐的我发现她不来找我了,打了几次电话也说在找工作,我原谅了她,因为毕设开始前她就给我说过。
而女生B相对女生A基础要好一些,就来和我合计过两次,之后再也没来。每次女生A来,我都让她回去问问女生B,让她来给我说说进展,可每次都不来。
男生A呢。开题答辩是做得非常好的。来的不多,每次问题也很少。完成英文翻译之后就几乎不来了。

  现在看来,这是我的失误,不应该这么放任他们,我想如果当时我要把他们都抓的紧,情况不会是这个样子——
在11周的毕设进行到一半多一些的时候,按照学校惯例进行毕设中期检查。
男生A居然更改了我给的任务书的内容,直接把难度降低到了留言本级,C/S部分没有了,6-7个周来写了不到30k的代码……两个女生连一个代码都没有写……女生A甚至还说-"……五一不是要休息么,可以理解一下嘛……"
我忽然一下就火了……
"五一长假不在你们毕设时间里么?那你们去问问你们院长,如果他说不算,那我可以给你们延长一个周……"
"你们以为可以在我这里蒙混过关?最开始我就说了,我这里一就是一,二就是二,其他的不可能。"
"可你最开始说的,实在做不出来可以……"
"我是那么说得么?我说的是,你们都努力做了,实在不行再说。可你们现在做些什么?还有4个周了,你们至少还要一个周写论文,你看你们怎么办?"
………………

  接着,让人更意外的事情发生了。女生B依旧不理睬我的话,我也决定看她最后能做出什么,过得了我这里,就去参加答辩吧。女生A逐渐露出敷衍我的马脚,设计还停留在需求分析、概念设计阶段。男生A更是不得了,居然提出更改我的任务书,当然最后还是被我说服,老老实实做设计。
时间就在这样的过程中耗费,我不断发现他们的问题,不断指出怎么改,需要努力做,可每次都不让我满意…………我就想,你们好好做,不管最后结果如何,只要我看到你们努力了,我都希望你们能过!

毕设尾声

写论文时我一再强调过写出你做了的工作,其他的介绍性东西少写些。论文出来了,我心里很清楚他们有多少分量,当我大致浏览了一下他们交上来的论文时,发现一个非常大的问题–他们都擅自更改了自己原来的设计,种种迹象表明,他
们现在"做出来的"东西完全是抄袭。所有人的论文,都不切要点,长篇大论技术简洁等,几乎很少涉及到自己所作的工作。更有胜者,居然文中出现–在进行新力集团网站设计时,我选择了Mcomedia的网页制作三剑客:Dreamweaver、Firework和Flash。我什么时候给他说了"新力集团"???!!
当然,他们也没有给我看他们做的东西。我开始一一打电话通知–"下午带上你们的成品或者半成品给我看。"
结果,在我一再追问下,女生A最终承认是和一个同学一起做得,女生B是从网上下的一个程序,男生A则只完成了B/S部分的60%(同样用网上的程序改的),C/S部分就做了几个界面,更谈不上运行。

  其实,从最开始希望他们都能尽力学些东西,独立完成毕设,到后来希望他们努力做、只要认认真真做了,不管做了多少,我都会尽力让他们能通过。但是如此看来,我实在不知道这样怎么让他们过?俗话说:临时抱佛脚,可他们连佛脚都不知道长什么样?怎么抱?
最后,我一个个单独找他们谈他们的设计,我罗列出我的意见,仔仔细细给他们讲论文什么地方该改,怎么改,希望他们能认认真真改改,像个样子再去答辩。
可以说,到这里,我做了最大的让步,希望他们能过就是。
 
   事到如今,我不得不反思一下自己——
在毕设还没有开始的时候,我过多的幻想了选我毕设题目的学生,希望他们没有八两,也有半斤。 当和学生第一次接触后,发现并不是我想象那么好,然后开始调整心态,希望能好好的和这些学生一起做好这次毕业设计。
开题答辩之前,我想应该好好地抓紧这些学生,由于他们基础不是很好。但是他们的开题答辩让我很惊喜。从中我看出他们前期准备工作还是比较充分的,我想我可能不需要把他们像小学生一样看着了。
接下来的日子,我过于信任他们。导致到了毕业设计中期检查的时候,发现他们毕设的诸多问题,只好再次决定抓紧他们,一个周查看他们的进度至少两次。因为我发现这几个学生,毕设在很大程度上还停留在开题答辩以后。
可最后,我还是失望了。虽然他们分析和设计都很充分了,可到了实际编码的时候,他们没办法了,因为他们根本没有花时间来学习语言,他们顶多就只有做做样子,要让他们给出成品或者半成品,是不现实的。事实也如此,他们给出的,不是网上下回来的代码,就是只有界面的东西,要不就是让人帮做的(当然也不能完成他们分析后该做的功能)……
事实证明他们确实不行,而我的指导也是失败的。所以,我向其他的老师说明了情况,然后准备在审阅/评阅他们论文的时候,决定怎么做。

规则!?

答辩前两天,我们答辩组的老师拿出所有的毕业论文。首先,自己先审阅自己学生的论文,写出审阅意见。然后交给其他的老师写评阅意见,最后决定要不要某个学生去参加毕业答辩等。

  我带的三个学生,我老老实实的写好了审阅意见。把他们在毕设期间的态度、所完成的工作,最后提交的论文等材料的个人意见清清楚楚地写上了。然后,我询问了我所在组的组长的意见,组长说还是要让他们去参加答辩,所以我给了他们一个建议分数 –60分。(其实,当我再次看到他们的论文的时候,我差点"立扑",他们几乎原样交上来……至于写审阅意见的时候,也就本着不至于违背自己的原则,是什么就写什么。至于最后答辩如何,就看他们自己了)
轮到我写其他学生的评阅意见的时候,我真的不知道怎么给其他老师带的学生怎么写,只好去看看别人的,结果…………!!??!!
我原样拷贝如下——

该生提交的材料详实,毕业设计任务基本完成,符合毕业设计相关要求。
论文较为清晰地反映了物品管理系统的工作流程、设计思路、研究路线、设计过程,较好地体现了软件工程的思想。
所设计的程序界面较为清晰、简洁,基本完成了任务书规定的相关任务。
英文翻译较为流畅、准确。
该生毕业设计工作量基本饱满,符合要求,推荐答辩。
建议成绩      中

  这个学生的论文我没有看,但是他的指导老师就是我同事,从毕设开始,我就没有见他本人来过我们办公室几次。而且从平常的闲谈中也得知,这个学生不怎么样,而且也让我这个同事很头痛,可另外一个老师给我同事带的这个学生的评阅意见居然如此???!!让我惊愕万分。
这不禁使我想起刚毕业快一年的时候,去参见的计算机应用专业的毕业答辩。和我同年毕业的同事带了毕设,我听了学生的答辩,一连串的问题,让那个学生哑口无言。其实那些都是基本的问题,只要独立完成的都该知道答案。一连几个学生都是他带的,一连几个都被我问倒,他只有维护着自己的学生帮着回答着。难道他也经历了和我类似的痛苦,也是无奈之举?
难道这就是规则?
当时在我订阅的blog中,也看到其他院校的老师,也为这个头痛。我不敢说"规则"就是让百分之九十八的人通过,百分之二的人倒霉。我只希望整个过程中的每一步,都是真实的,都是实际情况的反应!可事实摆在我面前–并非如我想的!请允许我大胆的假设一下,其他老师的评阅意见,也许–都是如此!! 为什么呢??
我带着这样的问题去参加答辩…………

答辩

答辩基本上在比较缓和的气氛中进行。一般只有评阅老师和主持老师提问题。很中庸的答辩,问题好像有些不着编辑、或者过于浮浅,回答东拉西扯,但却都被评阅老师认为是–还算对。……
我没有像去年一样,提着大刀四处砍,只是默默地在那里看着,每过一个学生,中庸的打个分数。而我带的毕设,我没有违背我的原则,对其他老师的问题,我也没有帮我带的学生辩解,任其自由发挥的答。
忽然脑子里浮现出我毕业答辩的场景–我是下午的第一个,偌大的教室,前面零零散散坐着些老师,后面也熙熙攘攘的坐着这个答辩组的我的同学们。我当时的题目是一个油田ERP项目的子项目,我和另一个同学一起做的,他做的后台我做前台。我将我的毕业论文简要的制作成了幻灯片提纲,然后分别阐述我怎么开始的、怎么选择技术的、遇到什么问题等等,之后就是提问。我不知道我的评阅老师是谁,只记得当时有两个老师给我提问,一共问了四个问题,还问道关于界面设计和未来电子商务……

 

  最后的结果当然不大好,我带的那两个女生因为不能演示程序都还要参加所谓的"及格答辩",而那个男生侥幸过了…………之后,我听到的消息是,那两个女生也过了。那时,我没有成就感,没有喜悦,没有巨石落地的快感,反而异常的失落、迷惘、惆怅……

2003年12月26日我的文章

评论关闭

ASP.NET 2.0的一些新特性(仅针对开发人员)

原作者:Sreedhar Koganti,翻译:NetFire(Fire.Rolland.Han)翻译得到了原作者许可。
原文:http://www.w3coder.com/alphatalks/aspnet20.aspx
注:本文已经发表到“程序春秋”杂志2003年12期。现转发CSDN,版权属于NetFire本人、杂志社和CSDN,如需转载请联系本人或杂志社
杂志上发的是最终稿,我找不到了。下面的版本不知道是什么时候的了:(

开篇语:

在这篇文章中,我将向大家介绍一下WINDBEY的一些有趣的新特性。哦?是Whidbey?别搞混了,Whidbey就是V2的内部开发代号。(下文中V1表示ASP.NET 1.0,V2表示ASP.NET 2.0)

正文:

好吧,让我们来讲讲V2;V2是MICROSOFT.NET的下一代应用程序开发平台的“起始点”。据说它也是Yukon的一部分。别着急,MICROSOFT将会在即将的PDC大会上向您揭开V2 ALPHA的面纱。好了,让我们言归正传。(PDC——Microsoft Professional Developers Conference,简称为PDC;Yukon——微软下一代的SQL Server的内部开发代号)

在V2中有以下一些有趣的新特征:

a) 和v1相比,在v2中代码行减少了70%,这是不是很让人兴奋?

b) 新的VS.NET(Whidbey)将会带给使用者友好的、让人兴奋得新特性,这会让开发人员的编程生活变得非常容易。

另外,在新版本的VS.NET中,有以下一些新特性。

1. 无项目的项目系统“Project-less”

如果你是从ASP转过来的开发人员,你将会为这个前景感到非常兴奋的。

2. Web站点将支持FileSystem,IIS,FTP和FPSE(Frontpage服务器扩展包)。

3. 同时支持代码分离和页面嵌入服务器端代码两种模式。

4. 完全的功能更强的智能语法和调试支持。

5. Html代码保存;

微软官方说这次它肯定有作用。所以对于ms阵营的开发者来说,这绝对是个好消息。

6. 支持真正的XHTML标准,以及动态插件的引擎;

7. 更加全面的支持数据库的设计;

8. 在ASP.NET中增加了40多个新的控件。我相信他们将会给开发人员的工作带来极大的方便。

下面分类介绍这些控件:

Login/Security Controls:
这里面有5个控件,他们非别是——
a) Login
b) LoginView
c) PasswordRecovery
d) LoginStatus
e) LoginName
这些都是使用起来非常方便的控件,并且这些控件将会让开发登陆安全系统的应用程序变得非常简单。

(图一:Whidbey的工具箱Security控件截图)

Data/DataSource控件:

下面是ASP.NET 2.0中新的Data Source控件:

1.
2.
3.
4.
5.
6.

下面是ASP.NET 2.0中新的Data Bound 控件:
1.
2.
3.
4. (Beta timeframe)

(图二:Whidbey的工具箱Data控件截图)

Personalization:

在 ASP.NET的Personalization控件中,信息是以一种固定的格式存储,并且和特定的用户相关联。ASP.NET的 Personalization控件使得我们可用简单的方法来管理用户的信息,而不必非要去使用数据库(这就免去了创建和维护数据库的劳累工作)。另外,Personalization系统为我们处理用户信息相关的这类问题时提供了一组规范、易用、强大的API,使得我们的应用程序能够随时随地的使用。

下面是一些私有化控件的名字:

a) WebPartManager
b) WebPartZone
c) ContentWebPart
d) CatalogZone
e) PageCatalogPArt
f) EditorZone
g) TemplateCatalogPart
h) AppearanceEditorPart
i) LayoutEditorPart

(图三:Whidbey的工具箱Data控件截图)

Navigation:

这个Navigation控件帮助我们方便的在ASP.NET站点中创建导航。在一个站点中,我们可以用站点题图描述这个站点的逻辑结构。当然,我们可以简单的修改站点地图来管理页面的导航,也可以为了管理页面导航做很多修改。

(图四:Whidbey的工具箱Navigation控件截图)

下面是另外一些新的控件(至于这些控件的名字,大家可以猜一下):

1) Wizard

2) Image Generation
3) Multi-View
4) ImageMap
5) Mobile controls 等等

Master Pages:
这个特性对许多站点都是有用的。借助master pages, 我们可在程序中进行一致的页面布局。在我们的应用程序中, master page为所有的页面定制了一个通用的外观和标准行为。之后,我们可使用该Master Pages创建单独的页面实例,这些页面自然将包含以上这些通用特性。你能够在Wilson 的Blog —Master Pages details at paul Wilson blog中找到与此有关的内容。网址是—http://weblogs.asp.net/pwilson/posts/33273.aspx

Web Admin Tool:
  在ASP.NET 2.0中,这是我最喜欢的一个新特性之一。这个工具将帮助我们配置web.config文件中的信息。所以,当在一个产品的应用中,不需要打开 web.config文件来修改配置。就像IIS的虚拟目录配置一样,无论在什么时候在需要时,只要用这个工具修改一些属性就可以了。比如需要修改 web.config文件中的数据库联接串的时候。在IIS站点属性中,你就可以找到名为ASP.NET的选项卡,它将帮助我们配置和管理 web.config文件。下图是在IIS站点属性中的ASP.NET选项卡下的web admin tool。

(图五:IIS中Web Admin Tool截图)

(点击“ Edit Configuration”按钮后, 所显示的内容截图)

Cross Page Posting:

这是ASP.NET 2.0中我喜欢的另一个新特性。以前,在页面之间传递数据是一件很痛苦的事情。但现在在ASP.NET 2.0中,这变得非常简单容易。

页面现在可以提交到另外一页,同时最初的服务器控件可被访问。这是不是让您耳目一新?

怎么完成呢?完成它只需要非常简单的两个操作步骤,他们是:

1. 设置“PageTargetUrl”属性,在按钮和服务器控件中,它将引发页面之间的提交;

2. 在目标页中的相关控件的原使页面中使用“PreviousPage”属性。

  好了,现在就可以控制前页的控件传送的数据了!

客户端脚本:
现在我们可以说说新增的客户端脚本支持,它们分别是:

a) Focus
b) Scrolling
c) Client Events
d) Out of band call backs to server

现在我们同样可以从新闻组中获得相关的支持。我认为这也是ASP.NET 2.0很不错的新特征。

总结:

上面我们非常简要的讨论了所涉及的新特征,这里没有提及象Mobility, Health Monitoring/Operations, Hosting,Copy Web in Visual Studio等新的特征。不要认为ASP.NET 2.0只有以上这些新特征。在文章中,我只是简要的介绍了一些相对来说重要的新特征,这里说到的只是冰山一角。现在ASP.NET 2.0仅仅是在测试阶段,也许正式发布的时候还有更多的新东西等着我们,让我们拭目以待吧!

2003年11月12日我的文章

评论关闭

Who’s designing the future?

题记:

当我写下这个题目,依然不知道自己下一步究竟应该怎么走。我只想把我了解到的一些东西和大家一起分享,希望能对大家有所帮助。

引子:

  为什么我忽然想起来写这篇文章呢??我归结了一下,可能是这几个方面的原因:

  1、在七月的程序春秋杂志上,有一篇“走程序员之路”的文章,其中讨论了就业的压力、现状、简历,以及个人发展等好几个方面的问题。其中我特别留意了个人发展部分;

  2、不止一次的听过这样一句话——做程序员的,在中国顶多做到35岁。那也就是说程序员的职业寿命最多就是10-15年时间;

  3、微软的Tech·Ed 9月底在北京召开,从身为MVP的朋友那里拿到了相关资料;李维的Borland演讲在北京、成都等地分期召开,从朋友那里得知演讲的主要内容。两方面汇集而来的资料,让我不得不思考自己未来的路;

  4、项目没完没了,而且几乎90%都属于重复性劳动;

  5、不停的在网上bbs上看到类似于“.net和java我该学什么”的问题。……

  所有的东西错综复杂的交织在一起,让我对现在国内信息产业的状态,看得越来越清晰;让身为程序员的我,对程序员的未来越来越忧心忡忡;让我对未来该怎么走,产生了太多的疑惑……

  首先,让我们一起查看一下人类的发展历史。

  不管是原始社会、奴隶社会、封建社会,抑或是资本主义社会等,任何一个发展比较完善的社会阶段都会对下一个更高层次的发展产生阻碍作用。发展的时间越长,这个阶段的各种制度越完善,对下一个阶段的产生和发展产生的阻碍作用就越大。不过东方社会,还是西方社会,这样典型的例子很多。比如中国的封建社会发展了二千多年,其政治制度、社会制度、在意识形态方面都发展的达到了非常强盛完善,正因如此,在资本主义萌芽出现时,便多次被抹杀。在所有影响向前发展的因素中,意识方面的因素是更大,很多起义进行的也如火如荼,但最终只是变成了改朝换代的前奏而已。

  回过头来,看看国内的信息产业。不管软件、硬件,还是网络,从最开始到现在已经有二十几年的历史了,我们也曾经辉煌过。

  长城创建于1986年12月12日,已经开发出了长城0520CH。1985年6月,0520CH在全国计算机应用展览会上正式发布,轰动一时。据当时的报刊称,其性能超过了IBM PC和NEC 980,被认为是中国计算机工业发展史上最具历史意义的重要里程碑。如此树碑立传的理由有两个:一、长城0520CH是中国第一台中文化、工业化、规模化生产的微型计算机;二、它设计并应用了世界上第一块汉卡(014汉卡)。1986年,0520CH产量突破1千台,1987年5月,长城286面市,形成了年产两万台的能力。

  从1998年,王选携激光照排技术加盟方正猴,他激光照排技术让方正辉煌了10年。
  四方利通创建的新郎、丁磊开创的网易,拉开了中国互联网的新篇章。在纳斯达克上市之初也圈了不少外国人的钱。
  国内的软件行业,就紧密和企业应用联系在一起。东方仿真的仿真系列软件、金蝶的财务软件等在国内都占据了不少的市场份额。
  而华为等硬件开发企业,经过近几年的发展,也开始崭露头角。

  但是,随着在1990年,中国取消了计算机产品进口许可批文,同时,大幅度降低关税,由此,形成较为开放的计算机产品市场。加上2001年加入WTO,信息产业的市场就更加的开放。

  而国内,至今大部分企业仍处于手工作坊式,根本经不起这样的一个冲击。那么随之而来的就是,作坊式的模式向印度模式的转变。这样的转变实质就是,手工作坊式转向工业化发展,其实这根本不是印度独创的模式。让我们再回顾一下历史中工业经济的起源。

  首先文艺复兴为西方近代化做了足够的思想准备;其次,新教的产生导致了教会权利的分散,更加符合新贵族思想的教会机构的产生,为这些新贵族到资产阶级的转化提供了前提。最后,就是英国的圈地运动基本上完成了资产阶级原始积累。之后才是工业化的开始——瓦特改良的蒸汽机和珍妮的纺织机,这两者对世界经济的工业化进程都起了非常巨大的推进作用。瓦特的改良只能说是代表了工业经济的萌芽,但从萌芽到成熟经历了相当长的一段距离。而纺织机的出现虽然使英国的工业化进程大大加快。而铁路的出现就是工业化的重要标志,当大规模铁路网在一个国家建成的时候,起码表示这个国家的钢铁和工程机械等工业发展到了一定水平。另外铁路的建成使许多地区性市场连成一片,其中任何一个地区的产品能够迅速地销往其它地区。

  现在,我国的信息产业就处于这样一个转变过程。工业化当然会带来信息产业飞速的发展,那现在的程序员呢?就成了为工业化实现的铺路石!

  还记得前几年,网络飞速发展的情况嘛?

  那时候,会做网页,平均每个月就可以拿到至少5k左右,为什么?首先,网络的飞速发展,导致这样的人员缺乏,使这样的人身价倍增;其次,那时候制作工具相对比较少、比较弱智,很多都需要手动输入代码。而现在呢?随着工具的智能化增强、需求的减少,对于这样几乎没有什么技术性的、单一的工作,不会再有公司招聘,如果要,也是需要你会些创造性的东西,比如平面设计等。

  现在的程序语言,差异性已经比较小了,一个能熟练掌握一门语言的程序员,对于一门新的语言,入门上手顶多也就是一个周的时间,他就可以写出简单的程序了。而且,现在的开发工具也是越来越智能。

  今年的微软Tech·Ed 2003上,微软展示了已经开始做内部测试的ASP.Net2.0 Whidbey,给我印象最深刻的是在2.0中常用的数据存取,可以做到“0代码”。

  接着,李维的Borland演讲——Turbo Charging Your .NET Development中,表达了Borland要造就一个“大IDE环境”的概念,也就是说,一个工程里面,可以包含Delphi、c++、c#的不同单元,在对象级实现混合编码 ;完全可以用Delphi写界面,用c++写底层,用c#写接口。不同语言间可以实现对象的引用和继承。

  如果说开始,我还幸喜若狂,到最后我就变得忧心忡忡了。

  “0代码”,意味着什么?意味着程序员的门槛越来越低,如果只从应用的角度出发,一味只满足客户的需求,那让我们从现在的这种发展试想,以后的应用开发,完全可以做到拖动一些控件,不编写、或者说编写极少量的代码,就可以完成功能的开发。

  而“大IDE环境”的概念,虽然可以让程序员再也不用头疼会用几门语言却担心都不深入的问题了,但是如果按照“0代码”的发展趋势,加上大环境下工业化的要求,程序员对语言会有多深入呢?

  那程序员的命运如何呢?如果一味的满足于应用的角度出发,一味的为了满足客户的需求,当然是可以赚到钱,但是我们的职业寿命有多长?大家考虑过这个问题吗?

  为什么在国外,就有50岁的程序员,难道他们不是在经历这样一些巨大的变革吗?

  答案当然是肯定的。他们一样在经历这样巨大的变革,但是和我们不同的是,他们国家的信息产业,可以说已经走过了工业化的道路,现在需要的需求已经站在更高层次了。前面我已经用很长的篇幅来说明这样一个问题——中国的信息产业正在从手工作坊式的发展,转向工业化的发展,其中涉及到了很多问题,我都没有深入的阐述,比如为什么会走工业化等等。因为这些都是显而易见的,社会的发展不可能停滞不前!难道我们程序员就要走印度式的软件蓝领的道路?

  不!中国也不可能走完全印度的发展模式。

  很多在印度、美国的等国家出现的群体在中国现阶段的发展基础很难形成,比如印度对IT 产业的崇拜使得产生软件蓝领的人力资源基础非常的雄厚,但在中国,就业压力相对较轻,就很难形成真正的软件蓝领队伍。中国现在很多的公司在学习CMM,也只是学到一点皮毛,无法深入精髓。“上不上,下不下”的现状最普遍了,中国现在正在处于这个阶段,很多软件人由于看到了印度的发展模式而试探性的拿来,并试探性的应用于我们的软件产业。这些变形了的印度模式便是过渡性的产物。也造成了多种软件产业模式共存的现状,从根本上无法真正的按照印度的模式前进。

  因此,套用小平同志的一句话就是——发展有中国特色的信息产业。

  这样一来,留给程序员的就是一个更模糊的未来!我们要么成为工业化道路的牺牲品,要么成为一个旁观者!

  如果说前者,那么现在要做的,也就是利用短暂的青春,敛财!客户的需求就是你追求的唯一目的,不需要管太多的底层、构架上的东西。

  当然,可以深入研究语言,研究构架,研究项目的管理和实施等等。最后做到项目经理、系统分析员等,这样的职位上。可这样,我们还是牺牲品,只不过把我们的职业寿命稍微的延长了五年或更长一点。

  那如何作为一个旁观者,让我们的职业寿命更长呢?

  从个人的角度出发,我认为做理论研究是最好的选择。做理论研究什么呢?比如研究Grid、Petri、O&O等等。这些都需要比较好的数学作为基础,还要在努力之上加上一点天赋,那就可以成为大师级的人物了。比如国内搞数据库的王珊教授、搞O&O的杨芙清教授等都是很好的例子。做不了大师级的人物,延长自己的职业寿命的话,走这条路是应该不会有什么问题的。

  当然,如果衡量好自己的能力之后,觉得不太可能做理论研究。那还有另外一条路——做基于理论的应用!

  简单说来,就是将国内或者国外的理论拿来,想想如何应用!比如基于角色的访问控制(RBAC),这个理论在1992年提出的,1995年就有相关的产品了;再比如杨芙清教授搞的北大青鸟III,一个基于O&O的工具,据说现在已经可以做到O&O建模完之后,自动生成代码了。理论随着科技的发展将会越来越多,基于理论的应用也会越来越多。因此,这也是一条不错的道路。

  写了这么多,无非就是想我的程序员兄弟姐妹们看清现在的形势,给自己找一条比较好的道路!上面我所说到的两条路,也是个人意见,也许大家还有更好的看法,欢迎大家和我交流探讨!


后记:

  当我们选择了做程序员,就意味着选择了站在浪尖上,如果你停止向前,很快就会被后来者所淘汰。不管国外的程序员职业寿命有多长、国外是不是已经走过了工业化的道路,都需要不停的学习。如果要走得更长,我们的程序,我们的代码,就不能仅仅停留在满足客户的需求。我们需要用一种思想来思考我们的程序,我们的代码;需要多想想这个世界需要什么样的程序,什么样的代码,不要仅仅停留在想怎么实现上!

  Who’s designing the future? 路在自己脚下!思考过去,思考现在,思考未来吧,我亲爱的程序员兄弟姐妹们!

  本文引用了一些网上的文字资料,下面列出来,在此表示感谢——

  1、 刘韧:中国IT无梦;
  2、 闫辉:从历史发展的角度看中国软件业;

  最后,以上文字仅代表个人观点,请勿咬文嚼字!

2003年10月27日我的文章

评论关闭

从ASP.NET数据库某字段为空时的处理所衍生出来的思考

对于数据库字段为空时,在B/S结构下的处理方式很多,而到了dotNet时代,就和原来有了本质的不同,根本就在于更强调服务器的自行处理。下面一步一步地从大家最熟悉的东西开始说。

首先用一个简单的ASP+Access留言本为例。数据库中对于每一个留言都有对应的一个回复,并且,只要回复了的留言将会用一个数据类型未bit的messageStatus字段来标记,回复了的用“1”来标记,否则用“0”(下面只给出关键部分代码,也就是判断messageStatus字段的值是真还是假):

<%
if messageRs("messageStatus")=False then
%>
................(此处省略了html代码)
<%
else
set replyRs = Server.CreateObject("adodb.recordset")
replySql = "select * from reply where messageId = " & messageRs("messageId")
replyRs.Open replySql,conn
%>
................(此处省略了html代码)
<%
replyRs.Close
set replyRs = nothing
end if
%>

而在ASP.NET中,由于程序代码已经完全可以和html代码分开,加上所提供的服务器端控件,使我们必须要找到一种适合于ASP.NET的方式。下面就直接进入我们的正题,和大家一起探讨在ASP.NET如何更好的实现。

下面列出笔者所知道的三种方法。下面还以留言板为例。

第一种——

可以这样解决,在cs页里写一函数,用于判断一个帖子是否有回复,如果有回复,则返回回复的内容,没有则返回“无回复”。然后把这个方法绑定到DataGrid或者DataList,或者Reapter空间的itemtemplate中的一个Label控件上。

下面是一个例子,用于显示某个图片,首先用IsImageAvailable()方法判断是否存在这幅图片,返回是一个布尔值,从而控制img控件和Label控件是否显示.如果有图片,则img控件显示,否则显示Label控件。


  
		
		
  
//IsImageAvailable()函数
private bool IsImageAvailable(String strLastName){
       String strImageFile = "images\\" + strLastName + ".bmp";
       return File.Exists(Server.MapPath(strImageFile));
}

解决思路大概就是这样,当没有图片时用Label控件显示”No picture available”。

第二种——

留言板的数据显示使用DataGrid控件,那么就容易了。使用DataGrid控件显示数据的时候,如果字段值为NULL,它会自动默认为空。所以我们可以把数据存为一个DATASET,然后再绑定到DataGrid上,使用FOR 循环来判断,如果一个字段为空,如下赋值:

for (int i, i



第三种——

直接只用SQL语句。大家先来看看这样一个SQL语句:

SELECT GuestName,GuestContact,GuestEmot,PostTitle,PostContent,PostTime,PostIP,case when(ReplyContent IS NULL) then '未回复' else ReplyContent end AS reply FROM GuestBook ORDER BY Id DESC

这里出现了一个case when() then … else …end as,下面来看看它的具体用法。

CASE

计算条件列表并返回多个可能结果表达式之一。

CASE 具有两种格式:

1、简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。

2、CASE 搜索函数计算一组布尔表达式以确定结果。

两种格式都支持可选的 ELSE 参数。

语法

简单 CASE 函数:

CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END

CASE 搜索函数:

CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END

参数

input_expression

是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft® SQL Server™ 表达式。

WHEN when_expression

使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。

n

占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

THEN result_expression

当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值为 TRUE 时返回的表达式。result expression 是任意有效的 SQL Server 表达式。

ELSE else_result_expression

当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。

WHEN Boolean_expression

使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。

结果类型

从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。

那么,总结一下上面说过的三种方法:

1、  第一种方法,需要额外写一个处理函数。增加了工作量;

2、  利用了dotNet中的DataSet,对于能熟练运用的朋友来说不成问题,但是对于初学者这个就有点困难了。而且也没有从减少代码量角度来考虑;

3、  充分利用了SQL语句,将空字段的处理完全交给服务器来完成,不需要额外写任何的代码。

其实,不管是做B/S结构的程序还是做C/S结构的,都离不开和数据库关联,那么一个好的SQL语句,将会带来极大的方便。DotNet时代的到来,将会进一步加快我们走向完整的三层体系结构,如上面说到的程序中直接利用SQL语句将是不规范的,以后的程序都将分为数据层、中间层、应用层,那么数据层的开发,其实还是直接、或者间接的和SQL语句关联,所以充分挖掘现有的SQL语句的功能将会非常有必要。

返回顶部