找回密码
 FreeOZ用户注册
查看: 8877|回复: 83
打印 上一主题 下一主题

[论坛技术] 经验和预见的重要性

[复制链接]
跳转到指定楼层
1#
发表于 3-8-2010 13:37:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
老大说,我们发布的软件只需要指定一个固定的端口,hard code无所谓。
我说,谁把这东西hard code我杀了他。后来,一见到hard code端口我就跳起来找人拼命。
结果系统没有hard code这个端口。今天老大在第一个客户上装系统,第一件事就是开了一个“非标准端口”,
奶奶的,如果不是我之前坚持,他现在就够头痛的了。

评分

参与人数 1威望 +30 收起 理由
trisun + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

2#
发表于 3-8-2010 13:55:11 | 只看该作者


他忍了你这么久才够头痛呢

你能坚持到现在也算幸存者了

我现在的做法是大家高兴就好,将来有问题将来安排时间解决嘛,大家又不急着退休
回复  

使用道具 举报

3#
 楼主| 发表于 3-8-2010 14:23:33 | 只看该作者
要看公司的背景。

我的责任之一是整改公司的软件架构和开发流程,
如果没有相对合理的开发指引,根本说不上软件开发。
几个人跟着项目转悠,最后弄个半死不活的系统出来,不是我想要的。
老大现在很开心,有一个清清楚楚的系统,老大的老大更开心,因为系统能见人,这样他们才能向客户吹水。

我当初能清楚地看到问题能导致的严重后果,所谓我绝不放过这些细节,否则,最后问题还是回到我身上。
我的坚持是基于我当初清晰的预见,而不是意气用事。

原帖由 yuba 于 3-8-2010 13:55 发表


他忍了你这么久才够头痛呢

你能坚持到现在也算幸存者了

我现在的做法是大家高兴就好,将来有问题将来安排时间解决嘛,大家又不急着退休
回复  

使用道具 举报

4#
发表于 3-8-2010 15:38:12 | 只看该作者
可能和你举的这个例子有关

不hard code这件事属于让历史告诉未来的范畴,是不需要预见能力就应该遵守的

另外就事论事,一个只有一个固定端口的系统即使hard code了、碰到非标准端口了、需要改正了,也不应该需要多长时间

我只是从这个例子中没有看出老大需要头痛的必要,当然用这个事情去教育老大和兄弟是无可厚非的
回复  

使用道具 举报

5#
发表于 3-8-2010 15:59:33 | 只看该作者
原帖由 yuba 于 3-8-2010 15:38 发表
可能和你举的这个例子有关

不hard code这件事属于让历史告诉未来的范畴,是不需要预见能力就应该遵守的

另外就事论事,一个只有一个固定端口的系统即使hard code了、碰到非标准端口了、需要改正了,也不应该需 ...


你就不考虑重新编译,然后把编译好的程序发到现场的成本?不考虑针对不同环境的版本升级时候可能出现的问题?
无论如何,把类似端口这样明显属于环境变量的东西hard code都是不应该的,我觉得楼主做得很好啊
回复  

使用道具 举报

6#
 楼主| 发表于 3-8-2010 16:20:59 | 只看该作者
不需要太长时间和不需要时间是两个完全不同质的东西。

一个完全没有经过测试和端口改变,可以毁掉整个系统而你完全来不及做任何反应,对吧?
而有的应用现场,并不是想改就敢改的。

另一个背景问题是,我当初要拦下来的,不是一个问题,而是一系列问题,
比如老大期望在一台服务器上有且只有一个系统在跑,我坚持在同一个系统上,必须能理论上跑无限个系统。
老大期望尽量耗内存,不用担心,我坚持所有内存必须算清算楚。
老大期望一开始就关注并只关注系统运行速度,我坚持一开始关注并只关注系统稳定性。

这些坚持都建立在多年的产品经验和运维经验上,并不是一个简单的hardcode问题

原帖由 yuba 于 3-8-2010 15:38 发表
可能和你举的这个例子有关

不hard code这件事属于让历史告诉未来的范畴,是不需要预见能力就应该遵守的

另外就事论事,一个只有一个固定端口的系统即使hard code了、碰到非标准端口了、需要改正了,也不应该需 ...

评分

参与人数 1威望 +30 收起 理由
coredump + 30 都是很好的经验

查看全部评分

回复  

使用道具 举报

7#
发表于 3-8-2010 16:33:38 | 只看该作者
原帖由 key 于 3-8-2010 16:20 发表
另一个背景问题是,我当初要拦下来的,不是一个问题,而是一系列问题


所以我说“和你举的例子有关”,“就事论事”

如果你期待每个读者都能从hard code这件事联想到你的那一系列问题,算我没说

评分

参与人数 1威望 +30 收起 理由
key + 30 我很赞同!

查看全部评分

回复  

使用道具 举报

8#
 楼主| 发表于 3-8-2010 16:39:25 | 只看该作者
但我觉得,如果有人从“该软件只会运行在某个指定端口”而要求全面hardcode这个端口,
最终会遇到一些不容易预见的麻烦。作为一个有经验的开发人员,应该从一开始就劝阻这种不智的假设。

原帖由 yuba 于 3-8-2010 16:33 发表


所以我说“和你举的例子有关”,“就事论事”

如果你期待每个读者都能从hard code这件事联想到你的那一系列问题,算我没说
回复  

使用道具 举报

9#
发表于 3-8-2010 16:43:25 | 只看该作者
我看成hardcore了

除了toy级别的程序,hard code都不应该,除非有十足的理由。 理由充足到比如,C/C++里,用0这个hard code而不用NULL.
回复  

使用道具 举报

10#
发表于 3-8-2010 16:44:41 | 只看该作者
原帖由 woodheadz 于 3-8-2010 15:59 发表
无论如何,把类似端口这样明显属于环境变量的东西hard code都是不应该的,我觉得楼主做得很好啊


什么态度?!你竟然把楼主根据多年产品开发和运维经验的基础上提出的预见,当做只是禁止了一个“明显”的错误行为?

我帮你改改:没有多年经验,根本不会意识到把类似端口这样属于环境变量的东西hard code是不应该的

呵呵,开个玩笑

评分

参与人数 1威望 +30 收起 理由
coredump + 30 你太搞笑了!

查看全部评分

回复  

使用道具 举报

11#
 楼主| 发表于 3-8-2010 16:45:29 | 只看该作者
很同意。

其实hardcode端口最让人头痛的事应该是开发过程中的测试。这种不智的设想会让你难以有效地进行各种测试。
这里不单单是一个hardcode问题,我想说的是涉及到一系列没有必要的前提假设,我上面已经提到一部分。
这些东西对整个开发和运维都会带来很负面的影响。比如严重的内存浪费,可以让你在任何一台非目标主机上无法运行该软件,
包括你自己的开发机,而一台服务器只跑一个实例,也会让你必须启动多台机器才能进行一次简单的组装测试。
经验可以帮我们预见整个SDLC过程中可能遇到的各种问题,而对一些决定做出判断,
缺少经验,往往会看某些东西根本没法有问题,另一些东西可能有问题,但不致命。


原帖由 woodheadz 于 3-8-2010 15:59 发表


你就不考虑重新编译,然后把编译好的程序发到现场的成本?不考虑针对不同环境的版本升级时候可能出现的问题?
无论如何,把类似端口这样明显属于环境变量的东西hard code都是不应该的,我觉得楼主做得很好啊 :l ...
回复  

使用道具 举报

12#
发表于 3-8-2010 16:53:02 | 只看该作者
原帖由 key 于 3-8-2010 16:39 发表
但我觉得,如果有人从“该软件只会运行在某个指定端口”而要求全面hardcode这个端口,
最终会遇到一些不容易预见的麻烦。


假设这个端口就是4321,不改

系统里一共出现xx次,就写xx个“4321”,根本不用什么预见,这本身就是不好的
回复  

使用道具 举报

13#
发表于 3-8-2010 16:58:04 | 只看该作者
原帖由 yuba 于 3-8-2010 16:44 发表


什么态度?!你竟然把楼主根据多年产品开发和运维经验的基础上提出的预见,当做只是禁止了一个“明显”的错误行为?

我帮你改改:没有多年经验,根本不会意识到把类似端口这样属于环境变量的东西hard code是不 ...


明显错误也好,高难度错误也好,只要改正了就是好事。 你又何必这么严酷?
回复  

使用道具 举报

14#
 楼主| 发表于 3-8-2010 16:58:32 | 只看该作者
“不应该”有轻重之分。我入职于一个新公司里,如果没有十足的把握,我不会轻易强调一件事。
hardcode一个端口在很多人看来是不应该的,但如果改写public static final int PORT = XXXXX;估计就没有太多人反对了。
事实上我要阻止的是包括这种定义。
public static final int DEFAULT_PORT = XXXX;

public static final int PORT = XXXX;
是有很本质的区别的。事实上我做的事比这个还多一步。当然,吹毛求庇的事就不说了。


原帖由 yuba 于 3-8-2010 16:44 发表


什么态度?!你竟然把楼主根据多年产品开发和运维经验的基础上提出的预见,当做只是禁止了一个“明显”的错误行为?

我帮你改改:没有多年经验,根本不会意识到把类似端口这样属于环境变量的东西hard code是不 ...
回复  

使用道具 举报

15#
 楼主| 发表于 3-8-2010 17:01:56 | 只看该作者
其实你和我的见解区别很大。你可能以为,我要做的是用常量定义来代替直接写值。
事实上我要做的是从一开始就不主张这种假设,而不是某个写程序的方式。这就是你的意见和我的意见不同之处。

原帖由 yuba 于 3-8-2010 16:53 发表


假设这个端口就是4321,不改

系统里一共出现xx次,就写xx个“4321”,根本不用什么预见,这本身就是不好的
回复  

使用道具 举报

16#
发表于 3-8-2010 17:05:53 | 只看该作者
原帖由 key 于 3-8-2010 16:58 发表
事实上我做的事比这个还多一步。


我深信

但是你只是轻描淡写了一个hard code的故事,就期望我们也心有戚戚,太为难大家了

评分

参与人数 1威望 +30 收起 理由
coredump + 30 你太搞笑了!

查看全部评分

回复  

使用道具 举报

17#
 楼主| 发表于 3-8-2010 17:07:45 | 只看该作者
是我错了,我应该扬扬洒洒五万字,把前因后果写清楚。

原帖由 yuba 于 3-8-2010 17:05 发表


我深信

但是你只是轻描淡写了一个hard code的故事,就期望我们也心有戚戚,太为难大家了
回复  

使用道具 举报

18#
发表于 3-8-2010 17:17:29 | 只看该作者
原帖由 key 于 3-8-2010 17:01 发表
其实你和我的见解区别很大。你可能以为,我要做的是用常量定义来代替直接写值。
事实上我要做的是从一开始就不主张这种假设,而不是某个写程序的方式。这就是你的意见和我的意见不同之处。


常量先,大道不远矣;常量化是可定制的前提

从一个满是hard code的系统,优化成可配置的系统,常量化的工作量远大于定义和读取配置文件的工作量,不hard code的意义也正在于此

你从要求大家从一个不hard code的例子,联想到其他一系列尽在不言中的高标准要求,进化到了对什么是hard code的概念的扩大化

为了表示我也有预见性,我声明,我只从一楼,已经看到了一个软件开发理论与实际完美结合的典范

呵呵,又开了一个玩笑

评分

参与人数 1威望 +30 收起 理由
coredump + 30 你太搞笑了!

查看全部评分

回复  

使用道具 举报

19#
发表于 3-8-2010 17:22:55 | 只看该作者
原帖由 key 于 3-8-2010 17:07 发表 u
是我错了,我应该扬扬洒洒五万字,把前因后果写清楚。


我没有这个意思。写5个字传达5个字的意思,写5w字传达5w字的意思

写了5个字,读者没有领会到5w字的深意,不要奇怪就好啦
回复  

使用道具 举报

20#
发表于 3-8-2010 19:58:14 | 只看该作者
原帖由 key 于 3-8-2010 16:58 发表
public static final int DEFAULT_PORT = XXXX;

public static final int PORT = XXXX;
是有很本质的区别的。


说点儿具体的,你是用的配置文件吧?

如果是,配置文件里面是怎么定义端口的?DEFAULT_PORT还是PORT,还是both?
回复  

使用道具 举报

21#
发表于 5-8-2010 23:32:21 | 只看该作者
我在看你们争论呢,

我一直都是hardcode,我写的东西不用发布,独此一家,我自己明白就好,给你的永远是个installer

都写那么清楚了,公司就敢开我了,现在我是权威,让key来都不行,绕死你
回复  

使用道具 举报

22#
发表于 5-8-2010 23:33:29 | 只看该作者
记性真是不好,除了一个installer,还有一个除了我,神仙也不明白的reg

哈哈哈
回复  

使用道具 举报

23#
 楼主| 发表于 5-8-2010 23:37:29 | 只看该作者
这个要看运气。如果你算一下,把你的整套东西铲掉重来都花不了太多时间,你就没信心这样做了。
事实上我已经多次向多个老板证明,铲掉重来可能是最好的系统维护方法。



原帖由 准备买悉尼公寓 于 5-8-2010 23:32 发表
我在看你们争论呢,

我一直都是hardcode,我写的东西不用发布,独此一家,我自己明白就好,给你的永远是个installer

都写那么清楚了,公司就敢开我了,现在我是权威,让key来都不行,绕死你
回复  

使用道具 举报

24#
 楼主| 发表于 5-8-2010 23:40:24 | 只看该作者
利用find, grep, ctags和一些refactor手段,基本上很难有整不明白的程序。
目前看得最让我头痛的一套代码是NetBeans Platform的源代码,
是一群程序高手故意写得不让人看来导致代码难以阅读的。
至于烂代码,最大的特点是流水帐,只要不怕恶心,一边做refactor,一边看,难度并不大。

原帖由 准备买悉尼公寓 于 5-8-2010 23:33 发表
记性真是不好,除了一个installer,还有一个除了我,神仙也不明白的reg

哈哈哈
回复  

使用道具 举报

25#
发表于 5-8-2010 23:45:15 | 只看该作者
呵呵,咱做的不是纯软件的,代码只是其中一部分而已

你永远不会知道这行程序里面为什么要写个H0001,因为这个是往硬件的寄存器里面写的,如果你没有看过这个芯片的手册的话~~

整个铲掉重来,那不如继续雇着我,这个我有信心

因为硬件也是我干的,处理器都是我选的,SCH是我画的,PCB是我布的,为什么选这个,我不告诉老板
回复  

使用道具 举报

26#
 楼主| 发表于 5-8-2010 23:50:43 | 只看该作者
我还想说的是,我喜欢做产品,不断地做新东西,不断的卖产品,而不想自己跟进后期维护。
如果你把自己绑在一个产品上,你可以认为你把这个产品绑死了,但同时你也被这个产品绑死了。
我把自己做的软件产品尽量放给别人来用和维护,这样我就有足够的时间和空间来做自己的事。
到目前为止,自从产品beta version之后,我就基本上没有理过,都是同事在做。
我在搞其他东西,已经搞了有一个多月了吧。老大也不理我在搞什么。
我的目标是弄下一代系统,之后整个开发团队就可以退出产品线,完全交付其他组的人来维护和使用。
我不担心老板开我,除非他和钱过不去。

原帖由 准备买悉尼公寓 于 5-8-2010 23:32 发表
我在看你们争论呢,

我一直都是hardcode,我写的东西不用发布,独此一家,我自己明白就好,给你的永远是个installer

都写那么清楚了,公司就敢开我了,现在我是权威,让key来都不行,绕死你
回复  

使用道具 举报

27#
 楼主| 发表于 5-8-2010 23:54:30 | 只看该作者
硬件有硬件的特点,或者这样做在硬件开发领域行得通。


原帖由 准备买悉尼公寓 于 5-8-2010 23:45 发表
呵呵,咱做的不是纯软件的,代码只是其中一部分而已

你永远不会知道这行程序里面为什么要写个H0001,因为这个是往硬件的寄存器里面写的,如果你没有看过这个芯片的手册的话~~

整个铲掉重来,那不如继续雇着我, ...
回复  

使用道具 举报

28#
发表于 6-8-2010 00:07:27 | 只看该作者
我还想说的是,我喜欢在家呆着,不断的玩老婆,不断的打孩子,而不想开车去公司上班。
如果我不把自己绑在一个产品上,我可以认为我还能干别的,但同时我干的不踏实。
我自己做的软件和硬件产品都由我自己维护,同样我就有更大的时间和空间来做自己的事。
到目前为止,自从产品发布了之后,经过大约20次升级,我基本上每次只要干一天,就能混上一个月。
我不想搞其他东西,已经有5年多了。老板也不理我在干什么。
我的目标是天天在家睡觉,之后还正常拿钱,完全不操心工作的事情。
我不担心老板开我,除非他和钱过不去。

上一个类似产品寿命40多年了,还在用,我这个,至少也得30年吧
回复  

使用道具 举报

29#
发表于 6-8-2010 00:08:39 | 只看该作者
睡了,明儿再玩~
回复  

使用道具 举报

30#
 楼主| 发表于 6-8-2010 10:32:10 | 只看该作者
这也是一种生活方式,在乎自己怎样选择。

我很多年前也曾想过类似的问题。当时几乎所有的同事大致上就这样干活,这样过日子,
最关键的地方,老板很欣赏他们。相对地,老板见到我基本上都觉得恶心,因为老板提出来的东西,
我几乎90%以上说“不对”。所以我的日子过得极不得意。

有一年,老板疯了,因为他可能因为产品问题要面临投资失败,
就把我拖出来赌一把。我拉了一队人做了两个月,之后的半年里,产品成功的卖出,把全公司的亏损
全部赚回来,然后以几倍的收益大赚特赚。到底赚了多少,我不关心,总之之后整整两年内公司的销售都很开心。

不过不到一年,老板又开始看着我觉得恶心,因为我成天无所事事,N套产品在外面跑,我都不需要理会,
而我提出的产品计划老板又没兴趣,我提出用类似的方式整改全公司的产品,他也没兴趣。
最后我的团队队员一个个的走了,我也走了。直到现在,这个产品还继续帮他赚钱,不知道他还记不记得我。

或者你会说,产品在继续赚钱就没事啦。但赚一百万是赚,赚一千万也是赚,一个能赚一千万的产品最后只有
一百万的收益就是失败。

现在,我在这里,我又是同样的方式做事。有一天我和主要的投资股东开玩笑说,我们这个产品,说不定
会全世界到处卖,数以百计、千计地卖license,他说,有可能吗?别开玩笑了。很快他就知道这是不是一个玩笑了。


原帖由 准备买悉尼公寓 于 6-8-2010 00:07 发表
我还想说的是,我喜欢在家呆着,不断的玩老婆,不断的打孩子,而不想开车去公司上班。
如果我不把自己绑在一个产品上,我可以认为我还能干别的,但同时我干的不踏实。
我自己做的软件和硬件产品都由我自己维护, ...
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 22-8-2025 03:06 , Processed in 0.044578 second(s), 47 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表