6

在我的工作中,我继承了一个广泛的、设计不当的网络投资组合。大多数页面都是用 Perl 编写的,因为网站上摄取、处理和显示的大多数数据都以平面文件的形式出现,然后必须在我们的 MySQL 和 Oracle 数据库中进行细致的正则表达式和数据库化。

作为该环境中第一个受过 IT 培训的经理,我自己负责清理网站并为开发过程制定一些结构。我得到的选择之一是选择是否继续使用 Perl。Java 有大量内部人才,PHP 很容易学习。我考虑过让开发人员放手,让他们选择他们想为他们的页面使用的任何语言,但是如果选择 PHP 的人被公共汽车撞到并且没有其他人可以修复它,这听起来可能会很麻烦。

随着岁月的流逝,雇用 Perl 程序员变得越来越困难,维护以前的开发人员的遗留 Perl 代码的复杂性可能只是让页面启动和运行,这变得非常耗费资源。另一位以前的(非 IT)经理更专注于快速周转和立即满足页面,而不是确保第一次就正确完成(此后他在我们的分支机构之外被提升)。

生产服务器是solaris。MySQL 拥有我们的大部分数据,但新项目已经开始越来越多地使用 Oracle(用于 GIS 数据)。Web 服务器普遍采用 Apache。我们生活在一个与常规互联网断开连接的内部网中。我们的开发以敏捷、迭代的方式进行。

无论选择何种语言推进,都有资源可以对现有的开发人员进行再培训。无论如何,进入我们环境的数据将不得不被正则表达式死掉,所以 perl 不会很快消失。我向社区提出的问题是,对于上述定义的 Web 开发环境,以下语言的优缺点是什么:Perl、PHP、Java、Python 和 -- 在此处插入您最喜欢的语言 --。如果让您重来一遍,您会选择哪种语言设置?

编辑和澄清: 让我澄清一下我原来的帖子。我不会把所有东西都扔掉。我有机会将船的航向调整到我认为更好的航向。即使我选择了一种新语言,perl 代码也会在未来一段时间内出现。

假设地说,如果我选择汇编作为我的新语言(哈哈),我可能不得不通过将老开发人员发送到一些基本的汇编类来让他们加快速度。新页面/项目将使用新语言,旧页面/项目必须与新页面/项目配合得很好。有些有一天可能会被重写成新的语言,有些可能永远不会改变。

Perl 中可能永远存在的将是我们多年前编写的用于从平面文件中筛选和数据库信息的解析脚本。但这没关系,因为它们不与网页交互,它们与数据库交互。

谢谢大家的意见,到目前为止它非常有帮助。

4

6 回答 6

13

与语言本身相比,您的问题似乎更多的是遗留代码和非正式的开发方法。因此,如果您已经拥有 Perl 开发人员,为什么不开始现代化您的方法和代码库,而不是切换到新语言并创建异构代码库。

现代 Perl提供了很多好的实践和强大的工具:强调测试,使用Test::*模块和WWW::Mechanize,数据库交互可以通过普通的DBI完成,也可以使用 ORM 模块,如优秀的DBIx ::Class ,带有Moose的OO现在与更现代的语言相提并论,mod_perl使您可以访问 Apache 中的大量功能。Perl也有很多MVC 框架。引起广泛关注的是Catalyst

投资一些Perl Best Practices的副本,为一些现代开发方法的课程带来合适的培训师,并开始改变您团队的文化。

如果你很难找到已经精通 Perl 的开发人员,你总是可以雇佣优秀的 PHP 人员并培训他们,这应该不会太难。至少他们愿意学习一门新语言将是他们灵活性和改进意愿的良好标志。

总是很想将代码的状态归咎于其编写的语言,但在你的情况下,我不确定情况是否如此。许多大公司似乎在使用 Perl 管理庞大的代码库时没有问题,名单很长,但主要的 Web 公司都在那里,还有一些金融机构。

于 2009-02-21T07:25:03.130 回答
5

我会请一个非常擅长的人Perl,至少看看当前的设计。他们将能够告诉您Perl代码到底有多糟糕,以及需要做些什么才能使其处于良好状态。

那时我会开始考虑我的选择。如果Perl代码是可以挽救的,那就是聘请精通Perl. 还要培训一些现有的员工来帮助现有的代码库。如果您没有精通代码的人PerlPerl您的代码库可能会变得比现在更糟。

只有当它的形状很糟糕时,我才会考虑放弃它而改用另一种语言。那是什么语言,那是你必须自己考虑的事情。

ps 我有点偏见,我更喜欢Perl

于 2009-02-21T18:01:24.753 回答
1

如果正则表达式很重要,我会选择一种支持良好的语言。

如果您使用 java,您将无法从 perl 代码中复制粘贴您的正则表达式代码,因为斜杠必须被转义。所以我会投票反对java。

我对 php 的熟悉程度不足以了解其正则表达式功能,但鉴于您的选择,我会选择 python。您可以在 python 中创建更清晰的代码。

红宝石也是一种选择吗?它还具有良好的 perl(如 regex 支持)和 rails 支持开箱即用的敏捷 Web 开发。

于 2009-02-21T06:34:59.770 回答
1

首先让我指出MySQL 的空间扩展与 GIS 一起使用

其次,如果你有一群 Perl 程序员需要在新站点上拖拽,那么你最好的选择是选择他们不会有太多理解困难的东西。显而易见的“东西”是PHP。当我学习 PHP 时,我在几年前就学过一些 Perl,并且很快就学会了 PHP。

切换到 Java 或 .Net(甚至 Ruby on Rails)之类的东西将是设计上的一个更加戏剧性的转变。

再加上 Apache 服务器,您已经设置好了环境,并且您可以相当容易地将任何开发作为 Perl 和 PHP 的组合进行。

至于你问题的最后一部分:如果你可以重来一次,你会做什么?对我来说,这是一个独立且基本上不相关的问题。事实是你没有倒带和重新开始,你只是......重新开始。因此,遗产支持、过渡、技能发展和所有其他问题远比任何假设的问题重要得多,即如果所有其他条件都相同,那么在完美世界中你会选择什么。

爱它或恨它,PHP 很受欢迎,而且很快就会无处可去。找到熟练的人来做这件事并不太难(好吧,困难在于将他们从自学的牛仔脚本骑手中过滤掉,他们认为自己可以编码但不会),而且与基于 Web 的 Perl 相差不远。

于 2009-02-21T06:42:40.907 回答
1

如果您的开发人员表现出色,他们将能够处理向他们抛出的任何问题。决定使用什么语言是一个相当棘手的战略立场,但我建议您在介绍任何更多(即不要)之前仔细考虑。

当然,除非你用你所拥有的东西绝对不能做(或不能理智地做)。

于 2009-02-21T19:04:56.363 回答
0

我认为选择单一语言是关键,如果您的数据库主要是 MySQL,那么 PHP 似乎是显而易见的选择。它自然适用于您的数据库,它是开源的,并且有大量的文档、源代码,不需要编译等。

人们来来往往,任何网站都会随着时间的推移而发展。如果你有能力制定一些指导方针和规则,我会选择一些宽容、普遍和容易(呃)学习的东西。

我还建议把它写下来,这样将来的人们就不会重新发明轮子。

于 2009-02-21T06:20:13.847 回答