如此考试

朋友“李木勺”的GF要考计算机二级,昨天问了我几个C语言的题目,本来我想我怎么说用C也用了快十年了,写的程序也有几万行了,应该没有什么问题吧。虽然我知道这类考试通常都是很BT的,毕竟我也考过高程的考试,没想到还是出乎我的意料。

比如这一题:

main()
{int a=2,b=-1,c=2;
if(a if(belse c++;
printf(“%dn”,c);}

该程序输出多少?

看看这出题的人写的什么程序,完全是有意对读程序的人造成误解,故意降低程序的可读性,当然也有可能是他根本不知道什么叫编程风格,按老郑的说法就是:“在中国,所谓的考试就是一群水平不如你的人,背着你看了答案以后,编了一些问题来折磨你”(大致如此,记不准确了)。

这就是中国的所谓人才选拔的考核。记得有人说过:国外的考试总是拿最常用的内容来考,以检验你学会了没有;国内的考试总是拿最不可能用到的内容来考,以证明你没有学会,或者说存心让你出丑。

比如下面这题就很典型:

若变量a,i已经正确定义,且i已正确赋值,合法的语句是:A;a==1    B,++1
   C,a=a++=5  D,a=int(i) 

有这样的教育者和考核者,不难想象中国软件业现状的成因了。

软件的目标

昨天与朋友讨论myIE,一扯就扯到那个原作者头上了(关于这个作者是什么人物,myIE的开发初衷等问题就不在这里扯了),以及那个导致SourceForge被封(当时和它一起被封的还有Google)的软件FreeNet。

单纯从技术角度上说,这两个软件算是相当不错的,那些开发人员的能力也是很强的,只是其目的不妥。我不禁感慨:“人还是需要有精神寄托的”,他们能做出这样东东,在于他们有着非常明确的目的性,在此驱动下,他们才能很好地达到目标。

其实失败的软件开发在很大程度上是因为目标不明确或与最终用户的目标不一致而造成的。

当然的确有些白痴用户自己都不知道自己想干嘛,这也正是目前软件开发所面临的困境之一。正好今天看到一篇非常精屁的文章:

http://www.eping.net/fourm/dispbbs.asp?boardID=13&ID=1259&page=1

正如文章中所说的那样,用户有用户的思维定式,所以一些很重要的事情被认为是理所当然而没有被提出(至少是没有被准确地提出),而造成了开发人员的误解,直接埋下了最后造成软件项目失败的隐患。

所以,只有解决了如何准确全面地获取用户的需求并为开发人员建立明确的目标的问题,软件项目才有可能获得成功。

然而目前国内的软件企业中,承担这部分职责的人好像都很失职,因为有开发人员为他们顶缸(反正软件项目成功的,功劳是他们的,失败了,责任是开发人员的),他们只要坐在这个位子捣捣浆糊就行了,难怪现在人人都想往“管理”上靠。这个现在看来已经成为目前国内软件业发展的一个瓶颈了。

精与杂

昨天读Andrei Alexandrescu那本著名的《Modern C++ Design》(《C++设计新思维》这个中文译名大概老侯取的吧,反正我是不太喜欢)的时候,偶然看到译者之一的於春景的序里说到:他是三年前(此书于2003年出版,照算此处应该是指2000年)开始接触template的,不觉大寒。

想当年与朋友“太可怕”在福州琢磨着自己写一个template library时(那时还不知道有STL,后来知道STL后就作罢了),大概还是98年吧。时至今日,忽然发现自己的C++水平居然一直都没有大的长进。这些年来,为了混饭吃,什么方面的软件都要做,结果下来终于发现会的多,精的少。

这个於春景我是知道的,他的网名叫做lostmouse,我手上有一个Scott.Meyers的《Effective C++》的电子版就是lostmose做的,手上还有一本他译的书《C++网络编程(卷1)》(Douglas C.Schmidt的《C++ Network Programming Volume 1》)。相信他的C++功力已经相当不俗了,在他面前,我大概只有汗的份。

“业精于勤,技精于专”果然是所言非虚啊。

春游

昨天有朋友讨论要在这个春天出游,在研究要去什么地方玩的时候,我一下就想到了扬州。

春风十里扬州路,卷上珠帘总不如。

十年一觉扬州梦,赢得青楼薄倖名。

二十四桥明月夜,玉人何处教吹箫?

淮左名都,竹西佳处,解鞍少驻初程。
过春风十里,尽荠麦青青。
自胡马窥江去后,废池乔木,犹厌言兵。
渐黄昏,清角吹寒,都在空城。
杜郎俊赏,算而今、重到须惊。
纵豆蔻词工,青楼梦好,难赋深情。
二十四桥仍在,波心荡、冷月无声。
念桥边红药,年年知为谁生。

西西,我的BLOG名称就来自这里。

Looser们

看到一篇不错的文章《值得中国人借鉴的美国短处》,虽然讨论的东东和技术没什么关系,不过其中有个词很有意思,就是looser(看来偶英文差啊,多谢tinyfool兄指正^_^)

软件业好像也蛮多这种looser的,一边在抱怨自己混得差,一边却自觉义务地为MS之类的吹鼓,打击开源等。殊不知在MS眼里,这些人不过是一些loosers。

午饭时间到,吃饭去。

BTW:今天你LOOSER了吗?

沙漠加油站

今天看到一则笑话:

沙漠加油站
进入沙漠区之前的小镇上,第一家加油站站前的巨型广告版上写着:此去即是沙漠地区,除本站外,您举目所见的其它加油站皆为海市蜃楼,务请即刻加满油箱以策安全。

好像有些软件公司也是这样宣传他们的“先进”技术的。^_^

随机应变的XP与按部就班的RUP等

昨天上海下了中雨,碰上一件很不爽的事:因为GF要出国,我们从火车站提了一件比较大的行李,要运到一个离火车站不远的一家宾馆,但是拦了几辆TAXI都拒载。只好自己动手冒雨步行搬运,累S人了,真TMD想投诉。麻烦的是今天还要一早把这件行李运回火车站,从这里上机场大巴运到浦东机场。为了这事我们昨晚研究了一晚的计划,如何才能让TAXI不拒载。包括向宾馆服务台咨询了几套方案。

结果正应了一句话:计划没有变化快。

今天雨停了,虽然在门口没打到车,但很方便地就通过电话叫了一辆,司机也居然很爽快就答应了,麻烦的事情就这样简单搞定。

其实软件开发有时候也是这样,常常要考虑到客户需求的方方面面,而且在设计开发中也需要到处为未来留下改进空间。结果却常常是我们考虑的方面根本就是客户不需要的方面,甚至影响到客户的真实需求,而我们为未来的留下改进空间的地方也许永远也用不上,反而给我们带的无穷的BUG。回头一看,原来客户的需求比你想的简单得多。

于是乎,有了XP。

其实正如我在《效颦篇:编程本质论》一文中所说的:“只要能解决问题的办法,都是好办法。”XP也罢,RUP也罢都是如此,还是需要根据情况选择取舍的。

Google是一种生活方式

郁闷,本来写了一通Google的好话,结果它干了坏事了。一不小心点到Google工具栏的拦截窗口按钮,把刚写的内容全刷新掉了。

看来Google还是不喜欢别人说它好话的,那我就不说了。^_^

三层、自增类型、李维及其它

早上与一个朋友讨论他在做MIDAS应用开发时碰到的一个跟MSSQL的Identity类型有关的问题。基本上真正有在实际应用中用过MIDAS的程序员都碰到过那个经典的:Data changed by another user的问题。其实原因不外乎那几个:Trigger、Default value和Identity类型。而且绝大多数用MIDAS做多层应用开发的,都是看李维那三本书来的。

问题李维在书里并没有很明显地提到这一点。就像比基尼:露出来的,都是你感兴趣的,隐藏的,却是关键的。

不敢说李维没有实践过,但是真正用于商业应用时,和写DEMO是完全不同的情况。BORLAND的技术在某种程度上说,普遍存在这样的问题,不论是MIDAS还是早夭的Kylix和WebSnap。

在这点上Microsoft做得要好得多,虽然它的很多产品都不能算最好,但一般都“足够好”,据说这也正是MS一向的产品目标。

正在没落的BORLAND与同样没落的李维

这个标题有点哗众取宠的意思。其实Borland是否真的没落,还要靠市场来最终检验,但原生Win32开发领域的开发人员大批跳向JAVA和.net却是不争的事实。Borland在用户心目中的地位也几乎是降到了一个历史性的低点。在NASDAQ上,代号BORL的股票价格也已经跌到了$10左右。

至于李维,现在在中国Borland开发者眼里,差不多已经等同于Borland的吹鼓手了。但在我看来,还是可以理解的,毕竟他是Borland的员工,所谓拿人钱财,与人消灾,无可厚非。

自打上月爆出Borland的几个重要头目–包括Black.Stone, Chuck.Jazdzewski,Simon.Thronhill等人–相继离开。特别是Black.Stone和Chuck.Jazdzewski的去向都是Microsoft,严重地动摇了Borland用户的信心。

然而事情并非始于此事,早在去年上半年,随着Borland的几个新产品问世,但却令人大失所望之时,Borland就已经种下危机的种子。而且现在Borland无限期暂停Linux下的Kylix项目,原生Win32下的Delphi/BCB项目都被冷却,全力投奔.net,但在.net下也并不成功,C#Builder和Delphi.net不但没吸引到多少新用户,反而把不少用户推向VS.net。

历史上Borland经历过多次的危机,每一次都需要Borland花上数年的时间才能重振旗鼓,而且往往无法回复危机前的风光。

但这次危机会对Borland有什么影响,我现在也不敢说,但众多Borland用户的态度明摆在那里。

然而抵制.net的人也还有:

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

getit911:   .net是什么?是一个ms又挖下的坑,给她披上最美丽的外衣,在ms press出版的那些"红宝书"里,给我们彻底地洗了一次脑,于是我们高呼".net万岁“,这个世界上没有什么是她解决不了的,这是万能的工具.但恶魔总是吹着笛子来,当我们都虔诚地朝拜在前往.net的路上时,回首一望,所有的语言都生长在clr的土壤上.等到那一天,bill就会眼里凶光一闪,"是时候了",又一个什么.net++推出,利用ms的垄断特权,填平那个曾经吹捧得无所不能的.net大坑,被埋没的将是离开了clr便不知所措的我们(这样的悲剧已在mfc上演过).剩下的只有什么clr++了,
  转自一个网友,.net就是垃圾
     (2004.03.15)

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

getit911:   .net根本就是个商业陷阱,技术垃圾,根本没有什么技术创新,那个所谓clr不过是个让软件开发人员上套的鬼把戏,.net上的开发语言的已经没有意义,再NB闪闪的语言到最后都必须使用M$的编译器编译,C#、VB.NET、ASP.NET还他妈的有什么搞头,不如直接写IL了,还有一个反编译问题.net也没有什么好的解决方法,即使加了混淆器也不怎么灵,代码根本没有保障。M$就是眼看Win32API被人操翻了,垄断地位不保,急忙弄个.net出来搞个语言新圈地运动,当然这对在中国用3.5元/张光盘的软件公司没用,否则开发软件的挣的那点糟银子都捐M$都不够。   (2004.03.16)

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

不能说他说的不对,但是以Microsoft目前的垄断优势,偶们这些小开发人员除了屈从,恐怕也没有什么更好的出路了。

在这种情况下,如果Borland轰然倒下,那么除非Borland将所有开发工具都OpenSource,像Eclipse那样,否则Visual Studio.net一统开发工具市场将成必然。