您对您参与的软件进行了哪些成功的转换/重写?过程中涉及哪些语言和框架?有问题的软件有多大?最后,您从参与该过程中学到的最重要的一两件事是什么。
这与这个问题有关
您对您参与的软件进行了哪些成功的转换/重写?过程中涉及哪些语言和框架?有问题的软件有多大?最后,您从参与该过程中学到的最重要的一两件事是什么。
这与这个问题有关
我要在这里“最深奥”:
我重写了 20,000 行 Perl 以在每个文件中使用“use strict”。我必须在需要的地方添加“我的”,并且我必须修复在此过程中发现的错误。
我从中学到的最重要的事情是,“它总是比你想象的要长。”
我必须在一夜之间把它全部完成,这样其他编码人员就不会同时编写新的、未修复的代码。我以为它会很快完成,但没有,第二天早上 6 点我仍然在破解它。
不过,我确实在其他人开始工作之前完成并签到了!
由于各种原因,我为一家房地产公司将一个大型 Java Web 应用程序重写为一个 ASP.Net 应用程序。
我学到的最大的一点是,无论原系统有多么微不足道的功能,如果它不在第二个系统中,客户就会认为重写是失败的。编写新系统时,期望管理就是一切。
这是重写如此困难的最大原因:对客户来说似乎很容易(“只需重新做我已经拥有的并添加一些东西。”)。
我认为对我来说最酷的是 MAME 到 iPod 的端口。这是嵌入式硬件的一次很棒的学习经历,我和很多很棒的人一起工作。官方网站。
将理论上可移植的 C 代码跨架构转换为理论上可移植的 C 代码,以支持硬件更改,从而为公司每单位节省 X 美元。
大小各不相同——这是一种常见的需求,我做过大大小小的项目。
我学会了编写更便携的 C 代码。优雅是伟大的,但当涉及到它时,编译器会照顾性能,并且代码应该尽可能简单和可移植。
我正在将内部项目管理系统重写为更标准的 MVC 模型。它在 LAMP 堆栈(PHP)中,我接近第一个里程碑。
我目前从中学到的东西是程序在开始时感觉多么简单,我尽量不增加复杂性,直到我不得不这样做。
例如,我首先对所有功能进行了编程(就像我是管理员用户一样),然后在整理好之后,添加限制的复杂性(用户级别等)
我将一个 30,000 行的 MS-DOS C++ 程序移植/重新设计/重写为一个长度相似但功能更全面且可用的 Java Swing 程序。
我学会了永远不要再从事涉及 C++ 或 Java 的工作。
我将一个价值几百个屏幕的客户端服务器 Powerbuilder 应用程序移植到一个 ASP.NET 应用程序 (C#) 中。
由于性能和可维护性问题,我在前一年将大量嵌入式 SQL 从 Powerbuilder 脚本移到了存储过程中。
虽然这会让很多人畏缩,在数据库中有很多业务逻辑,这意味着 Powerbuilder 应用程序相对“轻”,当我们构建 .Net 前端时,它可以利用 SQL 代码库并拥有许多功能已经构建和测试。
并不是说我会推荐以这种方式构建应用程序,但在这种情况下它确实对我们有利。
我们的应用程序框架中有一个代码生成工具,用于读取基于文本的数据文件,大约有 20 个其他应用程序使用了它。
我们想使用 XML 数据文件而不是结构化的基于文本的文件。原始代码已经过时且难以维护。我们用 XSLT 脚本和实用程序库的组合替换了这个工具。对于实用程序库,我们可以使用旧工具中的一些代码。
结果是所有 20 个应用程序现在都可以使用过时的基于文本的文件格式或新的基于 XML 的格式。我们还提供了一个转换生成工具,可以将旧数据文件转换为新的 XML 数据文件。
在推出一两个版本后,我们现在决定不再支持旧的基于文本的格式,每个人都可以将他们的数据转换为 XML。
我们几乎不需要手动转换,
将主要的公司应用程序从标准 C++ 转换为标准 C++。我们进行了数百万美元的销售,以使其能够在 AIX 上运行,在查看之后,我们决定转换为标准 C++ 与转换为 IBM 的传统 C++ 一样容易。
我不知道行数,但源代码运行到数百兆字节。
我们使用标准的 Unix 工具来做到这一点,包括 vi 和各种编译器。
花了几个月的时间。大多数修复都是简单的,被编译器捕获并且几乎是机械修复的。其中一些要复杂得多。
我认为我的主要收获是:不要太聪明地使用尚未标准化的语言编写代码,否则事情可能会以意想不到的方式发生变化。我们不得不对 C++ 流的一些巧妙改编/滥用进行大量挖掘。
十年前,我管理的一个团队将 CAD 系统从 DOS 转换为 Windows。DOS 版本使用自制库对于图形绘制,Windows 版本使用 MFC。在转换时,该软件大约有 70.000 行 C 代码。我们在这个过程中学到的最重要的东西是抽象的力量。所有特定于设备的非便携式例程都被隔离在几个文件中。因此,使用 Windows API 调用直接访问帧缓冲区来替换对基于 DOS 的库的调用相对容易。同样,对于输入,我们只是将检查键盘和鼠标事件的事件循环替换为相应的 Windows 事件循环。我们继续我们将不可移植(这次是 Windows)代码与系统其余部分隔离的政策,但我们还没有发现这特别有用。也许有一天我们会将系统移植到 Mac OS X 上,并再次心存感激。
一些。但我提到一个。
它是一种性能建模工具。部分德尔福1,部分涡轮帕斯卡。它需要重写,否则它将无法生存。所以我们开始时是一个 2 人的团队,但只有我活到了最后。我在截止日期前就准备好了;-)。
我们做了几件事:
我们真的把它弄干净了,它最终得到了丰厚的回报。这么大的学习经历。
为一家处理合法发票的公司重新编写了一个系统——原始系统是一个 VB 怪物,不知道好的 OO 原则——所有东西都混在一起了。HTML 执行 SQL,而 SQL 编写 HTML。其中很大一部分是一个自定义规则引擎,它使用 XML 之类的东西作为规则。
两个团队进行了重写,耗时约 9 个月。一个团队负责 Web 前端和后端工作流程,而另一个团队(我所在的团队)重新编写了规则引擎。新系统是用 C# 编写的,并且是先测试完成的。完成后向系统添加新规则非常简单,而且都是可测试的。在此过程中,我们将公司从 VSS 转换为 SVN,实施持续集成,自动化部署,并教其他开发人员如何进行 TDD 和其他 Scrum/XP 实践。
通过该项目管理期望是至关重要的。拥有精通软件的客户非常有帮助。
将大规模(端到端)测试与全面的单元和集成测试相结合,帮助了很多人。
将用 PHP 编写的 vBulletin 转换为 C#/Asp.NET。我对这两种语言都非常熟悉,但 PHP 无疑是构建该软件的赢家。后面最大的痛苦是需要做一个与 PHP 的 eval() 等效的 C# 来调用模板。
这是我尝试转换的第一个挑战。我了解到我需要更多的 C# 经验,并且有时从头开始编写它只是更简单的方法。
我使用同事开发的工作流引擎将一个完全用 Perl 编写的动态构建过程转换为 C#/.Net 解决方案(它仍处于测试阶段 - 所以我必须进行一些改进)。这让我有机会将故障安全和故障转移功能添加到构建过程中。
在您询问之前 - 不 - 无法使用 microsoft 工作流基础,因为您无法在其运行时动态更改流程。
我学到的是:
最后,它涵盖了来自 3 200 个 LoC Perl 文件的大约 5k - 6k(包括 wf 引擎)的 LoC 来源。但这很有趣——而且最终要好得多;)
将用 Fortran 77(尽管是在 90 年代编写的)编写的模拟移植到 C/Java,因为原来的模拟只适用于小型数据集。在多次解释为什么在程序开始时将整个数据表移动到内存中无法扩展之后,我学会了喜欢大 O 表示法。