随笔 - 11  文章 - 0 评论 - 21 trackbacks - 2
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

昵称:小笨狗
园龄:3年8个月
粉丝:0
关注:0

搜索

 
 

常用链接

我的标签

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜

“好好活着,因为我们要死很久。”

                ——网路谚语

根据Tom DeMarco和Timothy Lister在PeopleWare中的论述,“在今天的某个地方,一个项目正在失败”,也许就在我写这篇文章的时候,某些程序员或者开发经理正在经历项目失败的痛苦。

那么,是什么造成软件项目的失败呢?我们又可以做些什么,才能避免软件项目的失败,或者,说的现实一些,如果项目的失败无可避免,我们又能做些什么,才能在项目失败的时候,不至于成为项目的陪葬,或者管理者眼中的炮灰?

我想,要想回答以上三个问题,我们首相要搞清的是,什么样的项目,才是失败的项目,也就是说,我们需要为“失败的项目”建立一个判定的标准。就我个人的意见,我把以下几类项目归结为“失败”的项目:

1、项目中止或没有部署。这类项目应该在所有的失败项目中占到很大比例,至于项目中止的原因,不外乎项目消耗超出预算、和甲方的谈判破裂,或者更匪夷所思的,项目开发完成后才发现,项目的功能是实际的需求已经相差太远,以至无法使用或没有使用价值。

2、项目闲置。软件只有在使用中,只有和用户的交互中,才能体现其价值,很多项目开发完成后,就被束之高阁,随着岁月的流逝渐渐蒙尘,被人遗忘(抱歉,写的有点感伤了)。尽管很多项目的消耗在预算之内,完成的期限也很及时,最重要的(至少对软件公司的Boss来说),软件开发款也如数支付了,但是我个人还是倾向于将这类项目归为失败的项目。

3、项目延期。这里的延期,指的是长事件的交付延误,以至于给项目开发的成本激增,给软件的开发方造成严重的负担,或者项目的中止或者没有部署(参见原因1)

4、项目质量低劣。这类项目的归类存在一定的争议。软件成功发布,但是用户体验低劣,或者代码质量低劣,以至于无法对其进行维护,或者维护成本很高。我个人倾向于将其归类为“隐性”的失败项目。

关于失败的软件项目,我会写一些文章,每篇都不会很长,但是我会尽量坚持写下去(我其实并不是一个很有长性的人)。

相信大家也参与,或者遇到过失败的软件项目,也希望大家就失败的项目,和我交流,我会将大家的意见及时补充到我的文章中。

我的mail是:chieftech#263.net
MSN:mingyeh1979#hotmail.com
(请将#替换一下,呵呵)

Technorati 标签: ,,

posted @ 2008-09-27 11:11 小笨狗 阅读(144) 评论(0) 编辑

 

效果如上图图表的下半部分,这在中国的软件项目中,也算一个比较常见的需求了。

实现代码如下:

 

合并GridView单元格

 

在GridView的DataBound事件中调用上面的函数:

 

调用代码
posted @ 2008-08-22 13:41 小笨狗 阅读(263) 评论(0) 编辑

一定得选最新的开发平台
用高端服务器
做就做最牛叉的政府项目
光纤接到桌面
网速最低也要千兆
什么激光鼠标啊,移动硬盘啊,人机键盘啊
能给他接上全他你接上
车里有笔记本、口袋里有PocketPC
身边站一专属的技术支持
头发乱乱,特憔悴的那种
用户一进门,甭管有事儿没事儿
都得跟人家说“尼嘞就饶了我吧”
一口地道的天津塘沽腔儿,倍儿有面子
人手一本用户手册
光索引就得八九百页
再搞一次技术培训
地点设在普吉岛
就是一个字儿,爽!
光吃住就得5万美刀
中国的政府不是搞无纸办公就是搞电子政府的
你要是说自己不会用IE
你都不好意思和人家打招呼
你说,这样的项目,一年能做多少个?
(我觉着,怎么着也就两三个吧)
两三个?那是还在调研的!五个项目起
你别觉得多,这才起步
你得研究政府部门的心理
舍得花两万美刀置办服务器的
还在乎再花四万美刀开发一套OA?
什么叫政府部门你知道吗
政府部门就是有条件要上没有条件创造条件处心积虑勒紧裤带竭尽全力也要上!
所以,我们做项目的口号就是:
上也得上,不上,也得上。
谢谢!

posted @ 2008-07-31 15:17 小笨狗 阅读(254) 评论(3) 编辑
昨天遇到了一个在Visual Studio 2008中通过鼠标拖拽改变图片大小的时候,造成CSS文件错误更改的问题,详情请点击我昨天的帖子

改问题可以通过设定Visual Studio的属性解决,具体解决方法如下:
点击“工具”->“属性”->“HTML编辑器”->“CSS样式”


选中“为图像使用宽度和高度属性而不是CSS”选项,就可以解决了。

不知道这算不算Visual Studio的一个bug,就算不是bug,好像也不怎么厚道

另外,在Visual Studio 2008中设定表格等元素的风格时,经常在页面头部生成类似于style1,style2,style3的样式风格,我们可以在下面的窗口中将选项改为“CSS(内联样式)”,避免上述问题


posted @ 2008-06-19 16:24 小笨狗 阅读(379) 评论(3) 编辑
首先,新建一个aspx文件,在其中引用一个CSS文件



在CSS文件中有一个img样式



页面上放两个Image



然后利用鼠标拖拽改变其中一个图像的大小,你可以看到另一个图像的大小也在改变



切换到CSS文件,会发现Visual Studio 2008 更改了CSS中的img元素的width和height属性



不知道这能不能算作一个Bug,从常规上讲,Visual Studio 2008应该在页面中插入的Image上加style,而不是改变全局CSS文件的属性吧?
posted @ 2008-06-18 17:33 小笨狗 阅读(207) 评论(0) 编辑

二 面向用户,才是关键
回首自己两年多的编程生涯,我感觉除了知识水平的局限,制约程序员个人发展的一个重要因素,恰恰是“技术至上”。
记得当初给唐山国土资源局开发DigitalLand OA的时候,软件设计说明书中赫然写着“本系统采用先进的B/S架构,可大大降低系统的部署成本...使用面向对象的方法开发,对于系统的可维护性和可扩展性...”。
然而,我们扪心自问,OO和B/S对于用户来说,真的有那么大的吸引力吗?还是只是我们刻意的炒作呢?
给唐山国土资源局作系统实施的时候,我发现很多规划处的用户宁可使用中地公司用MapGIS开发的规划软件,而不是我们的系统,令我十分困惑。无论是软件的功能,数据的完整性还是软件的总体技术水平,我们的系统是绝对不输MapGIS的,客户有什么理由“弃明投暗”呢?规划处的王处长是这么说的:
“也许你们系统的技术水平确实比MapGIS高,可是我们还是觉得MapGIS用得顺手,你们的系统操作太复杂了...你和我们说的什么OO,什么S,什么数据完整性,我们也不明白,我们用系统,只要好用就行了。”
最后的结果是,我们被迫对系统的界面和操作方式做了若干的改动,系统才勉强得以实施。可是在唐山,包括吉林、东莞和河南项城,还是有N多的用户对MapGIS的规划系统和开思的绘图功能念念不忘,令我们大感困惑——我们,中国技术水平最强的GIS公司(无论是资金,还是人员,我都绝对不是吹牛),竞争对手居然是两个名不见经传的公司,真是匪夷所思!
也许这两个软件的数据完整性,安全性等方面的确存在一些瑕疵,但瑕不掩玉,系统的操作方式和方便性,确实值得我们学习。例如图形的外延功能,一座房屋,需要画出沿房屋轮廓外延2米的图形,在我们的系统中,需要进行一些复杂的操作才能实现,而在MapGIS中,只需选中房屋的面层,进行一次操作就能完成。
坦率的说,那次的事情对我的触动很大,刚刚毕业的时候,我总是觉得好的设计,良好的编码,数据的完整性和系统的安全性,是一个软件成功的关键,这件事情之后,我觉得只有满足客户的要求,才是一个软件最重要的目标。还是用数据库设计来举例吧,我们都知道,数据库的设计,要求满足范式,以消除数据的冗余和不一致性,可是是否完全满足数据库范式的系统,才是好的系统呢?或者说,好的应用系统,是否要满足所有的数据库范式呢?答案是否定的。两年的编程生活告诉我,一个得以顺利实施的应用系统,其数据库设计常常是在一定程度上违反数据库范式的;而完全依照数据库范式设计的应用系统,很多恰恰不能顺利实施。
难道数据库范式是没有意义的吗?难得大学中所学的数据库原理课程,都是老学究的空想?
当然也不能走这个极端,一个良好的数据库设计,常常是以数据库范式为基础,依照系统具体情况,做出适当的让步。
例如:
方案A:
table:employee
=============================================
name      gender    nativeplace  position
---------------------------------------------
Doe,John  1         1            4
Doe,Jane  0         2            5
blue      1         3            6

table:gender
==================
genderid  gender
------------------
0         F
1         M

table:nativeplace
=====================
cityid    cityname
---------------------
1         Boston
2         New York
3         Tianjin

table:position
=====================
positionid   position
---------------------
4            Saleman
5            CFO
6            SDE

方案B
table:employee
=============================================
name      gender    nativeplace  position
---------------------------------------------
Doe,John  M         Boston       Saleman
Doe,Jane  F         New York     CFO
blue      M         Tianjin      SDE

table:gender
==================
genderid  gender
------------------
0         F
1         M

table:nativeplace
=====================
cityid    cityname
---------------------
1         Boston
2         New York
3         Tianjin

table:position
=====================
positionid   position
---------------------
4            Saleman
5            CFO
6            SDE

以上,就是一个HR系统中雇员表的两个设计方案。
方案A依照数据库范式进行设计,将籍贯,职位,性别等信息抽取出来,建立字典表,通过主键和雇员表连接。可是你有没有想过这么做有什么缺点吗?我们的例子中涉及到的字典字段是三个,那么,如果有十个呢?三十个呢?也许你觉得这根本不可能发生,可是shit may happen!如果依照这个方案设计数据库,当你需要检索一个雇员的相关信息时,也许会这么做:

select emp.name,gender.gender,city.cityname,position.position
from employee as emp,gender as gender,nativeplace as city,position as position
where emp.gender = gender.genderid and emp.nativeplace = city.cityid and emp.position = position.positionid

哇~是不是比较复杂呢?闭上眼睛,想象一下,一共三十个字典表...额滴神啊~
这种方案不只实现复杂,在实际运行的时候,还可能造成系统服务器的巨大开销。
okay,我们再来看看第二种方案,那边的兄弟说了,你这个东东好像不符合数据库3NF哦,这个...不错,不过请听我慢慢道来。
我们设计字典表的目的是什么?为了防止数据的不一致,否则employee的position字段中,SDE也是软件开发工程师,或者你也可以写全称software developing engineer,明明是一个含义,统计的时候却会有两条记录。可是,维护数据的唯一性,是不是只能通过插入外键呢。我们换一个方法,我们在程序的窗体上放一个combobox,将dropdownstyle设置为dropdownlist,在窗体加载的时候,对combobox中的内容进行动态绑定,这样不是也能控制客户输入有效的数据吗?区别只是在插入数据和更改数据的时候,是传入combobox的SelectedIndex还是SelectedValue的问题。至于取得一个雇员的信息:
select * from employee
爽吧?呵呵,不只是写着过瘾,运行速度也绝对比方案A快很多。且对于数据的查看次数大大多于插入和更改的次数的情况,尤为有效。
并不是所有的客户都知道OO,B/S,数据库范式是什么东东,系统的界面漂亮,功能好用,运行速度快捷,确实客户可以切实感受到的。

posted @ 2008-06-18 09:05 小笨狗 阅读(210) 评论(1) 编辑
摘要: 写在前面自今年年初,便很想写一些文字。一来是有很多学弟学妹们经常问我,要成为一名合格的程序员,应该具备那些知识和能力,二来,也想在工作六年之际给自己一个交代。然而,每当动手把自己心里要说的话付诸文字,心中总有些惴惴。我能算作一个合格的程序员吗?虽然进入IT这个行当已经近六年,可至今,还是有很多领域没有涉足,还是有很多的知识我不具备,有一些还是急待了解和掌握的,比如LINQ,再比如WPF,更不要说J...阅读全文
posted @ 2008-06-17 09:39 小笨狗 阅读(329) 评论(2) 编辑
摘要: CREATEPROCEDURE[dbo].[TablePrint]@TableNameVARCHAR(50)ASSELECTSysobjects.nameAS[数据表名],syscolumns.nameAS[列名],systypes.nameAS[数据类型],syscolumns.lengthAS[字段长度],sys.extended_properties.[value]AS[字段描述],sysc...阅读全文
posted @ 2008-06-17 09:25 小笨狗 阅读(874) 评论(5) 编辑
摘要: 程序员在很多人心中的形象似乎是这样的:1、着装不修边幅2、一边写C++一边喝咖啡一边听摇滚乐3、高薪水4、很高杆,技术了得,至少能黑进某某网站或者什么系统5、黑白颠倒,昼伏夜出唉,Matrix,AntiTrust这类欧美电影不知道混淆了多少人的视听,其实象电影中的那种程序员,(至少在中国)实在不是很多。现在就让我create一个Merlin伯伯来喊声“Cut”,然后说说我和...阅读全文
posted @ 2008-06-16 13:45 小笨狗 阅读(235) 评论(5) 编辑
摘要: 小笨狗死后,来到天堂门前。圣彼得问道:“死狗,你一生浑浑噩噩,但无大过,特准你进入天堂,那么,你想在天堂从事什么职业呢?”小笨狗想了想,答道:“如果可能,我还想做一个程序员,但希望我做的项目需求永远不会变更,进度永远不会延后,系统永远不会宕机,内存永远不会溢出,磁盘空间永远不会不足,网络永远不会拥塞,用户也永远不会输入错误的数据,也没有黑客对我的系统进行攻击,我...阅读全文
posted @ 2008-06-12 13:33 小笨狗 阅读(182) 评论(2) 编辑