`
avidmouse
  • 浏览: 14379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

重写的理由

 
阅读更多

    系统运行一段时间后,总会找到重写的理由,理由大致如下:

  1. 有更新更强大的技术出现;
  2. 代码质量控制不好或原有设计有缺陷,出现了很多坏味道;
  3. 原有开发人员流失,新旧交接不好或新人不喜欢维护他人代码(又有几人愿意维护他人代码呢?);
  4. 政治原因;

    但真的必须重写吗?原有系统真的就那么不堪吗?

 

    话说3年前,还在上家公司,由于公司的不景气,很多同事离职了,服务器端的大部分代码落到了我的手里,当时刚刚被play framework和scala折服,男人的本性总是喜新厌旧的,于是,利用业余时间,用play 1.2 和scala重写了公司的核心业务模块。

    开始只是为了理清原有系统的积累了好几年的逻辑,经过两个月的废寝忘食,终于几乎重写了原有系统,代码量减少到1/10,逻辑更加清晰,架构更加合理。

    于是向外行CTO汇报了该工程的存在,CTO觉得这是自己的英明领导的伟大体现,竟然力挺该工程,测试后,出现了不少兼容性问题,坏就坏在“几乎”两个字上,程序可是爱憎分明,毫不将就的。还好我对原有系统比较熟悉(已接触该项目两年),经过差不多1个月的测试、debug,成功上线。

 

    虽然成功的重写了系统,但其中的辛酸,劳累,其中的风险,还是让人后怕的。这次成功,纯属侥幸,主要是因为:

  1. 业务简单,且我对整个系统比较了解;
  2. 代码量不大;
  3. 时间比较充裕;
所以一切还在可控范围之内,下边的故事,就是彻头彻尾的悲剧了。

 

    因为外行CTO被人发现只是滥竽充数后,新CTO的空降便顺理成章了,所谓一朝天子一朝臣,新CEO重金挖了许多高人,不乏新浪等大公司的墙角;可他们的问题是:对业务不了解;高人自由办法,CTO和新浪sir商量后,决定用PHP在一个月内重写系统,理由如下:

  1. 创业公司都用LAMP;
  2. 新浪就用LAMP;

    于是,我的工作变成了每天宣讲业务,不,是口述业务,然后由专人用叫做PHP的文法书写出来......

    新系统毫无架构可言,毫无模块可言,毫无设计可言,或许所谓高人,便是无招胜有招吧。

    后果可想而知,代码量翻了20倍不止,高人果然适合做大工程,只是迟迟无法上线,据说到现在,该系统也没有上线成功。

 

    这两天本想重写现在的某个系统,回想下这段往事,觉得还是重构比较合适,毕竟没到系统无法承受的地步,如twitter。

    冲动是魔鬼,重写需谨慎!

0
0
分享到:
评论

相关推荐

    C++重写String类

    在C++编程语言中,`std::string`是标准库中的一个强大且灵活的字符串类。...不过,除非有特殊理由,通常建议优先使用标准库提供的`std::string`,因为它经过了广泛的测试和优化,具有良好的兼容性和性能。

    c++String类的重写

    在C++编程语言中,`std::string` 类是...不过,除非有明确的理由,否则不推荐这样做,因为标准库的实现通常经过了大量优化,自定义可能会引入新的bug或降低性能。在进行这样的重写时,一定要谨慎,并进行充分的测试。

    安卓手机重写IMEI软件

    因此,除非有正当的理由(如IMEI损坏),否则不建议尝试重写IMEI。 在进行IMEI重写之前,必须了解所有潜在风险,并确保遵循当地法规。如果你不确定如何操作,最好寻求专业人士的帮助,以免对设备造成不可逆的损害。...

    SN_Write_Tool_v2.1504.00.zip_imei串号_lq重写sn_sn write tool下载_sn重写_

    《SN Write Tool v2.1504.00:IMEI串号与SN重写详解》 在移动通信设备领域,IMEI(国际移动设备识别码)和SN(序列号)是每台设备独一无二的...在没有充分理由和必要性的前提下,不建议普通用户尝试IMEI和SN的重写。

    公司请假理由大全.doc

    "公司请假理由大全" ...* 出门前发现工作总结有一个错字,为了追求完美我重写一份 * 皇历说今天太早出门会有血光之灾 这些理由可以根据个人的情况和需求进行选择和修改,以便更好地解决请假的需求。

    Basalt:重写Vinegar,但使用基于作业的系统

    玄武岩重写Vinegar,但使用基于“纤维”的作业系统。 当需要阅读OGL支持时,它将利用Vinegar的一些资产,例如其GL后端的不错的组件(我没有理由要这么做,除非找到很好的互操作性或其他理由)。 主要功能来自组织得...

    coreutils:GNU coreutils的跨平台Rust重写

    **正文** `coreutils` 是一个著名的开源项目,它是 GNU Core Utilities 的实现,包含了大量用于基本系统管理、文件处理和...随着 Rust 生态系统的不断发展,我们有理由期待 `coreutils` 在未来会有更多的创新和改进。

    重写NSUserDefault

    第二,同1相同的理由,对NSUserDefault我们不能过于频繁地触发文件同步写入的操作,这又为数据的及时更新和同步留下隐患; 第三,NSUserDefault也没有针对大size的数据块专门优化,从NSUserDefault的命名可以看出,...

    openpppg-config-test:重写OpenPPG配置

    您应该使用Doks的九个理由: 安全意识。 开箱即用地在上获得A +分数。 轻松更改默认的安全标题以适合您的需求。 默认为快速。 默认情况下,在上获得100分。 Doks删除未使用CSS,预取链接和延迟加载图像。 SEO...

    ISAPI_Rewrite3的安装和使用

    ISAPI_Rewrite3是一款强大的URL重写工具,由Helicon Tech公司开发,主要用于IIS(Internet Information Services)服务器。它允许网站管理员通过简单的规则集来处理HTTP请求,实现URL美化、动态页面静态化以及SEO...

    Guides:遵循一套编写好的代码的准则

    不要重写现有代码以遵循本指南。 没有正当理由,请勿违反准则。 当您可以说服队友时,一个很好的理由。 语言说明: “避免”表示除非您有充分的理由,否则不要这样做。 “不要”表示没有充分的理由。 “ ...

    Jim Pryor 哲学论文写作指南.pdf

    4. **重写,不断重写**:初稿完成后,需要反复修改和完善,直到论文达到预期的质量标准。重写过程中要注意语言的准确性、逻辑的严密性和论点的清晰度。 #### 三、次要点 - **理解材料**:通过与他人讨论来检验自己...

    阿里Java研发工程师面经知识点

    - 单一职责原则指的是一个类应该只有一个改变的理由。 - 开放封闭原则强调对扩展开放,对修改封闭。 - 里氏替换原则指出子类对象应当能够替换其父类对象。 - 依赖倒置原则要求高层模块不应该依赖于低层模块,二者都...

    高级java笔试题-trusted:10factortobuildtrustedsystem-构建可信系统的10元素

    『因为代码写得烂吧,质量上不去,自然需要找个好的理由来重写应用』。旧的代码不好维护,只是其中的一个理由。现在,加上了新的技术、新的架构,已然变成了两个理由了,也就是一个好的理由。 引子 1:代码到架构的...

    OpenYo:不要依赖像 Yo 这样的专有服务。需要一个免费的 Yo 实现。 (在 Rails 中重写 → https

    成功之际{ " code " : 200 , " result " : " API_TOKEN " }失败时{ " code " : 400 , " result " : "失敗の理由" }送哟用 user_ID 发送 Yo。 POST 请求它有 api_ver、api_token 和 username 参数。 api_ver = 0.1 ...

    Android阶段测试

    1、现有一Andriod项目,目录结构如图 1所示,现有一张用户自定义的.9.png图片,试问应放在哪个文件夹下,并试图给出理由。 (10.0) 正确答案: 应放在drawable中,图片资源可放在drawable或minmap中,虽说minmap...

    programming_guides:编程风格指南

    不要按照本指南重写代码。 不要在没有充分理由的情况下违反指导方针。 当您可以说服队友时,理由就很好。 注意语言: “避免”意味着除非有充分的理由,否则不要这样做。 “不要”意味着永远没有充分的理由。 ...

    Riplus主题,2023全新界面发布,付费资源素材下载查看系统,全新会员系统,注重会员体系分离,一键开启关闭会员系统/单独付费

    全新RiPlus主题发布,采用全新UI框架重写。完全兼容历史版本。建议备份好旧版本主题包和数据库后再升级最新版3.0版本,确保无误。新款升级时,因更新太多,部分主题设置需要重新设置和布局,采用了新的小工具模块化...

    指南:样式编程指南

    不要重写现有代码以遵循本指南。 没有正当理由,请勿违反准则。 当您可以说服队友时,一个很好的理由。语言说明“避免”表示除非有充分的理由,否则不要这样做。 “不要”表示没有充分的理由。 “ Prefer”表示一个...

    EditText如何禁止弹出输入法Demo

    需要注意的是,这些方法可能会影响到用户的交互体验,因此在使用时要确保有充分的理由,并且告知用户为何无法输入。在Android开发中,理解并灵活运用这些技术能帮助我们创建更符合用户体验的应用。

Global site tag (gtag.js) - Google Analytics