posts - 77, comments - 5, trackbacks - 0, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2011年10月30日

约公元前25年,古罗马建筑师维特鲁威说:"理想的建筑师应该既是文学家又是数字家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算。"(好难哪,软件构架设计师的要求呢?大家好好想想吧。

posted @ 2011-10-30 13:01 就是喜欢 阅读(15) 评论(0) 编辑

人与人之间最难得是合作,组件与组件之间最难得时协作。“合为贵"

posted @ 2011-10-30 10:01 就是喜欢 阅读(8) 评论(0) 编辑

软件产品本质是逻辑或者说事概念产品。

posted @ 2011-10-30 09:47 就是喜欢 阅读(3) 评论(0) 编辑

2011年10月21日

 用户提出的需求与用户理想系统之间的鸿沟需要逻辑模型来填平。逻辑模型包括领域知识、企业情况、数据情况等等等等 。   用户提出的需求是片段的,不系统的,逻辑上不完备的,需要领域专家以这些需求为基础进行开发,开发的最重要的内容就是建立系统的逻辑模型。先建立旧系统的逻辑模型,即使旧系统中并不包含计算机等现代的信息处理工具,但只要有人的活动就有信息的流动,纸和笔就也能构建起复杂的信息系统。

逻辑模型是表述信息系统复杂概念结构的有力工具。写需求分析与写小说一样的是创作的过程,用户需求可能是一个个的灵感,但要把故事编圆满了就需要需求分析了。

posted @ 2011-10-21 06:25 就是喜欢 阅读(18) 评论(0) 编辑

2011年6月11日

投递人 itwriter 发布于 2011-06-10 09:08 评论(7) 有1420人阅读  原文链接  [收藏]

  文/陈皓

  还记得以前本站的那一篇“编程好难啊”吗,那是一篇众程序员调侃程序新手的文章,有恶搞的成分在里面。今天要和大家说的这个事没有一些恶搞和调侃的意思,是比较严肃的话题,你一定可以从中收获一些东西。这个话题来自StackOverflow上的一个问题——Cycle in Family Tree Software,这个程序员问了下面这个问题:

  我是一个写家族族谱软件的程序员(我用的是C++和Qt),这个软件基本上没有什么问题,真到有一天有个用户报告了一个bug。这个问题是这样的——我这个用户和他女儿生了两个孩子

  于是,我程序员的一些断言和硬性条件导致程序报错,因为我的程序在处理这个关系的时候,其发现X即是Y的爸爸,又是Y的爷爷,所以只能报错。

  请问,在不需要移除我的断言和数据验证的情况下,我怎么才能解决这个问题

  看到这里,请重点阅读一下下面的两点:

  • 如果你看到这里开始兴奋了,请你为你阴暗的心理去面壁反省10分钟,因为这是一个很技术的问题。
  • 如果你开始陷入了深深的思考如何解决这个问题,那么你绝对是一个合格的程序员,因为你已陷入技术已经很深了,有点呆了。

  我在前面说过,“这个是一个严肃的话题,你可以从中收获一些东西”,当然,我并不希望你来收获乱伦的知识和心得,酷壳是一个技术博客,应该是收获技术方面的东西。

  从技术的角度上来说,这是我们经常在设计软件时犯的错误——

  1)作了错误的假设(Assumption)

  Assumption是软件设计的重大天敌,Assumption的动词Assume意为Ass u me – Ass you and me 。你的假设做得越多,你的设计就越不靠谱。这里的假设是——我们以为family tree是一个tree,其实并不是tree。Assumption是魔鬼

  还有一些经典的Assumption如下所示

  • 最著名的就是那个y2k臭虫。
  • 不要以为没有2月30日,在瑞典1712年有2月30日
  • 一分钟有60秒?闰秒呢?
  • 双胞胎的生日是同一天吗?
  • 双胞胎的父亲是同一个?
  • 性别只有男和女?
  • 婚姻只能是异性?关于这一点,推荐一篇强文——Gay marriage: the database engineering perspective (同性婚姻:数据库工程)

  2)没有认真分析用户案例(Use Case)

  在设计软件时,我们需要考虑各种各样的用户案例,比如如下的东西:

  • 私生子的问题。
  • 一夫多妻或一妻多夫,同父异母,同母异父。
  • 就算一夫多妻制违反法律,也会有离异再婚的情况。
  • 同性恋的问题,虽然不能繁衍,但可以领养。
  • 换妻活动。
  • 各种乱伦关系——这种东西那个民族都不少,尤其是古时候,比如:
    • 先后嫁了两个人其是父子关系(昭君)
    • 达尔文同学和他的表妹,爱因斯坦的二婚是和他的表姐,埃及艳后嫁了她的弟弟,……
    • 顺治同学娶了四个老婆,这四个人还是一家人:姑姑,侄女,妹妹,女儿。(参看这里
    • 刘邦同学的母后干出来的事,相当变态(参看这里
    • 中国古代的“扒灰老”(类似于楼主那个问题的Use Case)

  不想再列下去了,人类真TMD恶心,有点要吐了

——————为了缓解一下恶心的气氛,请允许我插入一个搞笑短文——————

  一位自杀者在他的遗书里讲述了他自杀的原因,听起来实在让人头痛。遗书这样写道:“我和一个寡妇结了婚,她有一个已成年的女儿,我父亲跟我妻子带过来的女儿结了婚。所以我父亲就成了我的女婿,女儿就成了我的后母,我管父亲叫爸爸,而我父亲也管我叫爸爸;我女儿管我叫爸爸,但我却管她叫妈妈;我还得管我妻子叫姥姥,因为她是我后母的母亲。不久我女儿,也就是我后母生了一个儿子,他是我同父异母的弟弟,他也得管我叫姥爷,因为他也是我的外孙。后来我妻子,也就是我姥姥生了一个儿子,他是我后母的弟弟,我是他的外甥,所以儿子管我叫爸爸,我管儿子叫舅舅。另外我是我妻子,也就是我姥姥的外孙,同时也是我姥姥的丈夫,所已我也是我的外祖父。又因为我妻子是我的外祖母,我的儿子,也就是我的舅舅是我的弟弟和我女儿的弟弟,所以我……我的天哪,这么复杂的关系实在让我伤透了脑筋,我只有一死才能得以解脱……”

  看完上面这个短文,不知道你是否和我一样,觉得这么一个简单的程序将是如此难做啊。另外,我决定在下一次的面试中让应聘者来设计Family Tree的程序

  我又说多了,现在还是让我们回到技术上来。除了上面那几个观点,我在回复中还看到了如入一些有意思的回复:

  • “我的软件没有bug,是你的生活有bug”——让我想到了程序员惯用的借口
  • “算法中不应该加太多的限制,限制多了反而让算法不灵活。”
  • “移除断言,并不代表就不出错,对于这种rare case,我们最好给一个Warning提醒用户,让用户确认确实是这样的。”
  • “关于解决这个问题,移除那个断言,如果显示上会有问题的话,那就复制一下有不同关系的人就可以了”
  • “你真的应该想想你的软件的价值是什么?市场在哪里?你真的要照顾这样的用户吗?”

  挺好的,相信你对软件开发又学到了一些东西。

posted @ 2011-06-11 09:41 就是喜欢 阅读(30) 评论(0) 编辑

2011年5月16日

让管理靠边站!


—摘自《华尔街日报》


人是不喜欢被人管的。

他们希望被人领导。

你可曾听说过“世界管理者”这样的说法?

“世界领导人”,这才像话。


政治领导人,

宗教领导人,

商业领导人,

。。。。。。

他们都是在领导,

他们不是在管理。

胡萝卜永远比大棒有效。

不信就拿你的马儿试一试。

你可以“领”着他走到水边,

却无法“管”着让他去喝水。

如果你想管人,

那就管管你自己。

把自己管好,

你就愿意停止进行管理了。

然后你就会走上领导之路了。

posted @ 2011-05-16 18:27 就是喜欢 阅读(8) 评论(0) 编辑

2011年5月2日

 今天来和大家分享两个很不错的程序设计「做」与「不做」列表。首先,是 Andres Taylor (安缀斯‧泰勒)写的「Top 10 Things Ten Years of Professional Software DevelopmentHas Taught Me」,翻成中文就是「十年程序设计经验教我的十件事情」。

  原文不长,里面有很多不错的观念,我鼓励你们去读读。以下是中文版:

  1. 面向对象比你想象中的还难很多
  2. 程序设计师最重要的技能:沟通
  3. 你必须要学会说「不」
  4. 如果所有的事项都一样重要,那意思是它们都不重要——无论如何必须把先后顺序排出来
  5. 千万别把事情复杂化
  6. 深入问题的核心,但是不要被困住了
  7. 非常清楚的了解其它人在做的事情,无论是营销、设计、客服
  8. 你的同事就是你最好的老师 (你该试试 Pair Programming)
  9. 无论如何最后的产品必须是好用的
  10. 这世界上总会有一些混蛋

  而至于什么事情应该要避免,大家可以参考 Dare Obasanjo (戴尔‧欧巴桑侯)写的「Top 10 Signs Your Software Project is Doomed」,翻成中文就是「十个软件项目注定失败的迹象」。

  1. 第一个版本就想做太多功能
  2. 采用太新的技术平台
  3. 「复杂的问题,需要复杂的解法…」
  4. 团队人手不足
  5. 成员开始隐藏进度落后的事实和原因(Schedule Chicken)
  6. 不断更改、增加的需求 (Scope Creep)
  7. 不知道客户在哪里
  8. 2.0 症状群——后继版本非要更大、更强、更美(Second System Syndrome)
  9. 与公司里面另一个很有份量的产品竞争(这在创业团队应该不可能发生)
  10. 根本从一开始就选了一个你无法解决的大问题

  以上,跟大家分享,希望能够帮助你们在做的产品更顺利、更成功,加油!

posted @ 2011-05-02 12:48 就是喜欢 阅读(14) 评论(0) 编辑

2011年3月24日

摘要: 人月神话--没有银弹-软件工程中的根本和次要问题(No Silver Bullet - Essence and Accident in Software Engineering)所有软件活动包括根本任务——打造由抽象软件实体构成的复杂概念结构,次要任务——使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。现在是关注软件任务中的必要活动的时候了,也就是那些和构造异常复杂的抽象概念结构有关的部分。我将它们分成根本的——软件特性中固有的困难,次要的——出现在目前生产上的,但并非那些与生俱来的困难。一个相互牵制关联的概念结构,是软件实体必不可少的部分,它包括:数据集合、数据条目之间阅读全文

posted @ 2011-03-24 16:37 就是喜欢 阅读(96) 评论(0) 编辑

摘要: 使用视图及存储过程构建应用的外模式阅读全文

posted @ 2011-03-24 15:55 就是喜欢 阅读(16) 评论(0) 编辑

2011年2月22日

摘要: 进京感受 这是来北京的第一篇随笔,第一次来北京,呵呵! Live Writer里面写下了几个1,2,3系列(1,2,3在英语中代表很简单的事情和方法)的标题: Silverlight XAML 1,2,3 依赖属性 1,2,3 ASP.NET生命周期 1,2,3 却发觉始终没有了往日下笔如涌泉的灵感,大概是因为心里在想着找工作的事情,也可能因为是一个人到一个陌生城市都会有的失落,不知所错的感觉,就像去年去深圳。 回想这两年南下北漂的经历,有些想法和感悟想和刚开始工作的朋友分享。 2009年毕业只身前往深圳,虽然带着梦想和希望,也带着自信,然而一次一次的离开面试的公司却也无情地告我,我没有工作经阅读全文

posted @ 2011-02-22 19:25 就是喜欢 阅读(24) 评论(0) 编辑