语言不受欢迎的开发中的问题(例如维护)


31

我正在团队中单独使用clojure(lisp)开发一些应用程序。它从小应用程序开始。没问题。但是,由于它具有功能并扩展了区域,因此它已成为重要的程序。

我担心维护等问题。我们团队中没有人知道Clojure或Lisp,也不对诸如此类的语言感兴趣。

因此,用不受欢迎的语言进行编程不是错误的做法吗?(为了我自己的乐趣?)我应该使用更多流行的语言吗?(至少像python)

我确定我是否要离开团队,而不是说我要离开。:)-没有人​​会维护它。该程序将被销毁,部分程序将使用其他语言进行开发。

尽管我非常喜欢使用clojure进行开发,但我发现这可能不适合我的团队。

你怎么看待这件事?我认为许多喜欢不受欢迎的语言的程序员都在关注类似的问题。


2
您没有关于使用语言进行本地开发的本地编程标准吗?
temptar,2012年

不,没有这样的标准。我刚刚告诉我的老板,它被接受了,没有任何评论。我认为我的老板只是尊重并允许我的决定。
Hybrid

12
“不受欢迎”不是大问题。“不支持”要糟糕得多。例如,Lisp击败了VB 6.0。
MSalters

1
如果应用非常重要,他们会用知道自己在做什么的人来代替您。仅仅因为您当前的团队有限,并不意味着他们找不到任何人知道这种语言。
JeffO

Answers:


22

我感到很痛苦,我想在函数式编程中做更多的编码(Haskell看起来很有趣!)。我觉得我只是刚刚摸摸表面,因为我还没有在商业环境中使用它。

我强烈建议不要这样做。如果仅使用某种语言进行编程,那么您将只能支持该语言。除非您想处理每个支持问题(即使您有其他截止日期/优先级),否则都应使用团队知道并可以支持的语言进行编码。当您在度假期间发生故障时会发生什么?如果想升职怎么办?

我建议您至少再有一名其他团队成员。向他们展示一些很酷的语言功能。如果有两个人在船上,它将变得可行,并且您将不会获得所有支持。


8
我不同意。如果另一种语言是适合该工作的工具,请使用它。现代软件开发中的许多附带复杂性来自程序员迫使其整个应用程序适合一种语言的情况。例如,如果您的语言并发性很差,那么使用另一种语言来处理消息传递可能是非常合适的。
2012年

@quanticle OP指出:“那么,用不受欢迎的语言进行编程是不对的?(出于我自己的乐趣?)。” 如果有充分的理由使用诸如并发之类的另一种语言,那么我同意这是值得的支持问题。
Tom Squires 2012年

1
@quanticle:事实恰恰相反:太多的语言(即不止一种)会导致冗余,重复的工作以及不必要地重新发明轮子。
ThomasX 2012年

是的,支持绝对重要。我喜欢您提出的邀请其他团队成员加入的建议。我会认真考虑这样的事情。
Hybrid

17

我确定我是否要离开团队,而不是说我要离开。:)-没有人​​会维护它。

可能是错误的。

如果程序具有价值,并且管理层看到了价值,那么他们将委派一个学习Clojure并维护它的人。

一直发生。

该程序将被销毁,部分程序将使用其他语言进行开发。

永远是对的。那么为什么要担心呢?

最终必须替换所有程序。


由于Clojure可以在JVM,CLR或javascript的任何一种上运行,即使Hybrid的任何同事都不希望使用clojure,也应该有可能以主流语言对源进行翻译(可能很丑陋)。在前一种情况下,通过反映字节码/ msil,在后一种情况下,通过捕获直接发出的js。
Dan Neely'2

2
@DanNeely-您认为有效的维护路径是通过(非常酷)的自制项目将Clojure编译为IL,然后将该代码反编译为C#?我并不完全相信这比要求某人学习该语言要容易。

我怀疑@TheMouthofaCow,特别是对于较大的应用程序,学习Clojure会更容易;但是大锤子的方法将使固执的单语程序员无需完全重写就可以进行修改。最终进行重构以消除反射残影可能会导致实际重写。但是将费用分散在许多修改上,而不是要求在添加第一个新功能之前全部完成。
Dan Neely'2

谢谢。这在我心中非常有帮助。当我以某种方式度过这种情况时,我也可以记住这种乐观的想法。
Hybrid

1
所有程序最终都必须替换。 ”哦,那是真的。当磁盘存储非常昂贵时,有许多正在运行的COBOL代码被写回,并且为了在Y2K(记住Y2K?)中生存而进行了修补,并且该代码仍在运行。实际上,大多数程序要么因废弃而死,要么基本上永生。因此,技术的选择实际上非常重要。因为您的后代可能正在维护这些程序。
罗斯·帕特森

10

我正好在您设想您的继任者的位置。我的任务是向使用Clojure和Erlang进行异步搜索的遗留程序中添加功能,并将其转变为可以进行分布式异步搜索的程序。当我从事这项工作时,我只知道Python和Java。

我对您的建议:使用最好的工具完成工作。如果那个工具是Clojure,那就这样吧。编程语言并不难学习。使用适合于手头任务的语言编写良好的代码总是比尝试执行该语言并非旨在执行的操作的代码容易阅读。对于您的后继者而言,阅读整洁的Clojure比修改Java更加容易。


5

在某些项目中采用新语言或“ 独立 ”语言是高风险的项目。

如果系统的那一部分有问题或必须解雇那一部分,那么您必须找到一名必须学习该语言技能的程序员。在这两种情况下,您都浪费了很多时间。

在某些情况下,此问题可用于通过将来的任务来提高团队的技能并使其多样化。


我同意,尽管Clojure的优势之一正在某种程度上影响我的团队。我也同意这是一个高风险。我要小心点 谢谢。
混合式

4

Clojure当前(在2007年出现)的安装基数很小,但它并不受欢迎-实际上,它可能是周围“最热门”的新语言。如果您找不到其他对它感兴趣的人,我会感到惊讶。

无论如何,是否采用新的语言始终应该是基于业务价值决定。您可以按照以下方式与经理讨论:

采用Clojure的优势:

  • 比您使用的其他语言更高的生产率-如您在短时间内以较少的代码行提供的大量有用功能所证明的那样
  • 我们已经有一个用Clojure编写的重要应用程序(您),因此值得培养Clojure技能来维护它(而不是进行昂贵的重写)
  • Clojure的使用将被视为具有创新性,并且可能是激励有才能的开发人员加入/留在公司的好方法。

采用Clojure的缺点

  • 一种额外的语言支持
  • 开发人员可能需要更多培训和时间才能上手

如果我是一位评估此决定的经理,我可能会希望Clojure提出更高的生产率的想法,以允许进行一些有限的实验,然后将决定推迟到团队很清楚地接受为止。在这种情况下,您可能需要成为倡导者,扮演好老师并帮助其他人加入。


3

别担心,要开心。

显然,程序具有价值,或者您不会扩展它。祝贺项目成功。大概您选择Clojure是因为这样做可以节省时间,从而节省了雇主的钱。如果您使用Java编写了该程序,则该程序将更加难以维护。即使您的同事可以更轻松地逐行理解该程序,他们是否能够维护和扩展该程序?


2

我想给你更多的力量!Lisp是计算机语言的祖父,并在今天仍然有用。我认为它不那么受欢迎的事实是由于它没有C#和Java的蓬松蓬松IDE,并且Windows中的主要编译器实现仅在Cygwin(yuk!)下运行。开发似乎是在Emacs中进行的,我想它可以在Linux或Mac上更好地发挥作用。

这个编码竞赛是由Lisp计划在2010年获得的:http//planetwars.aichallenge.org/

追溯到他们可以调试约1亿英里的实时生活的那一天:http//www.flownet.com/gat/jpl-lisp.html

您肯定会放弃维护的危险信号,但可以将其视为为其他人提供学习机会。如果您使用某种噩梦语言(例如MUMPS)或某种乏味的语言(例如TCL),那么我认为应该提出问题。但我认为您应该被视为一个试图秉承最好的传统的人:)


Tcl是一种不错的语言,我不会觉得乏味。只需查看Tkinter(在Python中),便可以知道它是一个不错的工具。
Francesco'2

@Francesco-我应该指出,我说的是Tcl,而不是Tcl / Tk。图形工具包可能很棒。我说Tcl很无聊,是因为几年前我在一个只使用Tcl的地方去了一次求职面试(他们雇用初级程序员,然后教给他们一种非常不适合市场​​的语言,使他们很难离开),并拒绝了这份工作,因为Tcl看起来很乏味。我并不是说它不起作用(可能是),我只是想,如果我不得不写Tcl超过两天的话,我最终会wing之以鼻。我支持那个。

2

有很多好的答案,但我想补充一点。

我遇到过类似的情况,但是语言不同。由于缺乏指导,我不得不通过反复尝试的方法来学习所有方法。正如您指出的那样,我从经验中学到的知识将成为一个问题,因为由于缺乏指导,人们可能不知道有效的方法。

我建议您与您的经理交谈以获取足够的帮助,以便将来避免任何问题。

祝好运!


2

在某些情况下,像Lisp这样的语言可以更快或更容易地实现使用其他语言很难实现的功能。它还会影响您处理问题的方式,从而为您提供团队中其他人可能没有的观点。对于能够理解和使用这些功能的公司而言,拥有更广泛的功能和对可能的可能性的更广阔的视野可能非常有价值。但是,这些功能的价格缺乏标准化。

许多公司尝试使用一种或两种语言进行标准化,因为这可以为他们提供更大的组织灵活性:他们可以将开发人员从一个项目转移到另一个项目,而无需重新培训他们,他们拥有关于所使用语言的内置知识储备,管理人员不必考虑在给定项目中使用一种或另一种语言的优缺点。当您只有一把锤子时,一切看起来都像钉子。

正如我所概述的,这两种方法都有其优点和缺点。通常情况下,没有正确或错误的方法。您只是在用另一套利弊交易。公司不必完全朝一个方向发展。在C ++或Java中执行大多数工作是完全合理的,但是不时地将脚趾插入Lisp或Python中以尝试它们,看看有什么用。听起来这可能是您的公司正在做的事情。

因此,继续前进(而不是Forth),尽可能多地学习,并成为Clojure专家,您的经理可以依靠该专家来获取同事可能没有的见解。而且不要为此感到难过……担心组织方面的事情是您经理的工作。


1

当您开始觉得维护很有可能成为主要问题时,我建议您以其他(更方便的)语言开始重写程序。

如果您成功地将其编写为闭包(据我所知,当您开始创建应用程序时并不知道),那么使用更熟悉/方便的语言来重写它就没有问题。闭包使用完全不同的概念,因此实现可能很难转换为另一种语言。但事实是,如果您有兴趣在关闭时编写新应用,那么您可能会发现将用过的概念和想法转换成另一种方便的语言很有趣。比较不同的语言及其功能可能会很有趣。我认为您的案例非常适合此类实验。


我做了很多。我将用Perl或Erlang编写一个看起来像一次性工具的工具,然后经常使用它,使其成为一个工具,因此我使用项目的主要语言(Java或C#)来重写它。
TMN 2012年

1

用“非流行”语言进行编程当然是没有错的。您为什么真正关心它们是否受欢迎?我对此完全同意@quanticle。如果Clojure或其他非主流语言是解决您所遇到问题的最佳工具,则应选择它。

我不明白为什么维护会成为问题。如果您应用单元,集成等。测试和记录代码,则对函数式编程感兴趣的任何程序员都将能够维护您的程序。恕我直言,您的同事不关心Clojure的事实不是拒绝使用Clojure的好理由,除非您需要遵守这是公司的政策。


0

在我看来,您离开后是否继续该计划并不关乎您。您可以使用编程语言制作老板喜欢的东西,对我来说听起来不错。老板应该做的是担心延续。


3
老板担心继续工作是你的工作。但是,确保老板知道他们应该担心的问题是您的工作。你应该和老板商量一下。
MarkJ 2012年

我同意,尽管如果老板决定不采取任何行动,OP不必为此担心。
Paul Hiemstra

0

组织辅导或培训课程。如果您的团队成员不想像专业人士那样行动并增加他们的知识,特别是如果该计划变得越来越重要,那么它就变得不那么容易了。在最坏的情况下,您可以与管理层交谈,他们也许可以要求这种培训课程。您可能看起来像个混蛋,但至少您不是唯一需要维护该程序的人。另一种选择是建议将一个熟悉clojure的第二位程序员添加到团队中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.