论坛首页 海阔天空论坛

软件开发的一点感想

浏览 8453 次
精华帖 (0) :: 良好帖 (0) :: 灌水帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-29   最后修改:2009-12-19
这两天,遇到工作中的两个小问题,加深了我以前对软件开发的看法。

一个是关于Firefox崩溃问题的处理。
本来我一直用得好好的Firefox2.0突然打不开了,现象是只出现任务栏的button(见我重现问题的截图),或是要求我输入上网代理账号(公司内部不是匿名上网),但那个“确认”按钮怎么点击都无效。几个月前我遇到过一次,最后是被迫重装,但我喜欢的一堆plugin都得重新寻找、下载,包括收藏、使用偏好等,花的时间不亚于装个OS。现在咋办?虽然我尝试去研究firefox在“Documents and Settings”下的preference,并且google “firefox startup bug”等,但最后还是失败而返。
其实,现在最难的就是:问题发生在哪里?根据现象,我觉得问题应该是发生在Firefox初始化时,需要连接到网络,譬如检测firefox最新版。在定位问题后,我用firefox的安全模式(firefox.exe –safe-mode)登录,进入后去掉了代理设置。重启,ok,然后在“选项”里面重新启用代理,可以正常google了。但退出firefox后,重新启动,问题依然。

怎么解决?也就是不用每次启动firefox时确认那个代理对话框。找个匿名代理不就ok了吗?我想到曾经用过CCProxy的二级代理功能,于是我在本机安装一个它的共享版(仅支持三用户),在CCProxy里面设置我的上网代理IP,账号、密码。再把firefox的上网代理设置成CCProxy的IP、端口,但用的是匿名上网(CCProxy每次随系统启动)。
问题搞定!

另外一件事情是关于表格对齐的问题。
一位同事用Word做表格排版时,一表格cell居中对齐,弄了半天都没好(见截图示例),其它都是以前别人弄好的,不知道为什么丢下这个:怎么让那个橘红色的文本上下对齐格式和其它几个一致?大家都知道,Word的工具、菜单项都好几百,还有很多在菜单没显示,需要“自定义”的,一个个漫无目的尝试挺费劲的。现在我们怎么去定位这个问题?我们一般会在“格式”菜单里面去找(抛开无分类的快捷键),但怎么试都不行。其实,仔细想想,让文字在table的cell里面定位,是调节文字本身,还是调节cell属性?如果是调节文字的话,我们就应该选择文字吧?大家也可以想想,Word工具条上的那个“居中”功能,是归属哪个菜单(当然,对于纯文字居中,和table的cell居中,功能是不一样的,类似于OO的多态)。
问题在我定位后,轻易就解决了。

从上面两个示例,大家想到了一些共通点吗?我觉得有两个:
1、怎么去定位问题。
2、怎么去解决问题。这比定位问题容易。

其实,在软件开发工程中,我觉得我花时间最多的,往往不是解决问题,而且寻找、定位问题,也就是常说的debug能力。大家觉得上面两个问题和软件开发关系大吗?其实,我觉得,软件开发、设计,和它们解决的是同类问题。

软件开发,我觉得最重要的一种能力,就是抽象思维:寻找问题的共通点、规律,发现现象背后的本质。大家认同吗?
我又想,哪个学科不是这样呢?只是软件开发更突出点。

  • 描述: Firefox2.0突然打不开了,现象是只出现任务栏的button
  • 大小: 9.6 KB
  • 描述: 怎么让那个橘红色的文本上下对齐格式和其它几个一致?
  • 大小: 2.6 KB
   发表时间:2007-06-29  
认同你的观点
非常有感触
0 请登录后投票
   发表时间:2007-06-29  
有点道理,还能再多说点什么吗?很想听~~~~~
0 请登录后投票
   发表时间:2007-06-30  
同样说一下。
上班时候有的人很多时间都是在写代码,而有的人更多时候在看网页和其他同事聊天什么的。
其实很多时候,解决问题的,都是后者。
0 请登录后投票
   发表时间:2007-06-30  
第一个问题解决方式,是通过Adapter模式,将一种接口转换成Firefox期望的接口。
特此更正: 我原来在这儿是说中介者模式,经过思考,我觉得它是不适合的,因为我设置的那个本机代理服务器并不是作为一种调停者的角色,使Firefox和目标website解耦。
另外,Decorator模式,我认为也不适合,因为Decorator模式有个要求:给原对象添加职责,但不改变原对象接口。
而且,我之所以没有说Proxy模式,因为它并不能解决问题,本来就是proxy服务器嘛,我解决问题的方式,只是重新构造了一个不需要输入上网账号的代理。

第二个问题,是有关职责分配。

有人说,所有的软件问题,都可以通过添加一个中间层解决,不过直到现在我的理解也不是非常深刻。但我认为,软件的发展,都是以解耦和职责分配为其核心思想,其实,它们两个是同一个问题(解耦是目标,职责分配是其实现方式)。GOF模式和Core J2EE模式,几乎都是解决这个问题。
Factory模式:将对象创建的职责分离出来。
Builder模式:将一个复杂对象的呈现和其构造过程分离出来(譬如Spring容器提供xml配置,如果我们再给它提供一种DataBase配置的方式,Seasar framework就是用XmlS2ContainerBuilder来构造IoC容器)
Bridge模式:将抽象和其实现分离(jdbc驱动设计思想,譬如mysql的jdbc和odbc等)
Tempate模式:将可变的部分分离到子类(Template模式的callback是所有framework设计的核心思想之一)。
...........太多了,每种模式都涉及到职责分离...........

Craig Larman那本著名书籍《Applying UML and Patterns An Introduction to Object-Oriented Analysis》,里面最核心的模式GRASP,也就是解决职责分配和解耦的。
就是最常见的Web Framework,如Webwork,除了解决了重用的问题,但一个核心思想,也就是解耦(MVC)。
Spring的IoC和AOP也就是解决同一问题。
IoC:将对象的创建和对象的使用分离,降低耦合。(其实现方式DI,Dependency Injection,我认为Provider Injection更适合。)
AoP:将通用的功能分离出来,单独形成一个横切面。

另外,象工作流系统的产生,也主要是为了将业务逻辑和业务流程分离开来,譬如媒体行业,如新闻的采、编、发;电子政务、金融行业的审批;电子商务的预定处理流程(amazon卖书的整个过程)....,工作流都是其核心。

哪种framework,哪种architecture,莫不如此。
0 请登录后投票
   发表时间:2007-06-30  
好像所有问题都是这样的
0 请登录后投票
   发表时间:2007-07-01  
i_love_sc 写道
同样说一下。
上班时候有的人很多时间都是在写代码,而有的人更多时候在看网页和其他同事聊天什么的。
其实很多时候,解决问题的,都是后者。


?
什么意思
0 请登录后投票
   发表时间:2007-07-02  
推荐wikidepia上关于Design patterns的极其详细的描述:
http://www.answers.com/topic/design-patterns
http://www.answers.com/topic/design-pattern
0 请登录后投票
   发表时间:2007-07-09  
"怎么去定位问题... debug能力"
一般我使用"隔离法",例如把一段代码注释掉,然后看问题是否依然.如果依然有问题,说明问题不在注释的代码里.这样就缩小了范围.
第二中隔离的方式,是把自己认为可能有问题的代码单独抽离出来,看看十否有问题.
0 请登录后投票
   发表时间:2007-07-09  
问题分解,说回来还是算法。

为什么全世界都喜欢用 三
因为规模适中。
规模大了,递归,回溯都很困难。


最近开始研究魔方,受到点启发。
0 请登录后投票
论坛首页 海阔天空版

跳转论坛:
Global site tag (gtag.js) - Google Analytics