在特定语言上标准化发布/工具组

2024-10-16 20:45:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一家嵌入式软件公司的六人构建和发布团队的一员。我们还支持许多开发工具,如Atlassian的Fisheye、Jira等、Performe、Bugzilla、AnthillPro和一些自制工具(如我的Django发行说明生成器)。在

大多数时候,我们的团队只为较大的应用程序编写小插件(例如:在Anthill中自定义工作流)、长期实用程序脚本(为QA打包一个版本)或像Perforce触发器之类的东西(不要让人们签入某个特定的分支,除非他们的更改描述中包含错误号;而是针对活动目录进行身份验证Perforce的内部密码)。这是我们问题的规模,尽管我们有时会处理一些稍微大一些的问题。在

我的老板技术水平相当高,他要求我们用一两种语言进行标准化,这样我们就可以更容易地互相替代了。他提倡bash脚本和Perl,因为它们的通用性和简单性。我明白他的观点——我们主要是做“胶水”的,为什么不使用“胶水”语言,而不是为更大的项目设计一些东西呢?由于我们使用的一些工具都是基于Java的,所以我们有时确实需要使用一些能够说JVM的东西。(对于这些项目来说,阻力最小的是BeanShell和Groovy。)我对语言的倡导感到非常渴望,但我尽量避免说“我们应该使用Python,因为我喜欢它,Perl很恶心。”

相反,我试图想出一个定义问题集的好方法:我们用脚本解决什么问题?我们是否会从我们团队的公共功能库中获益,或者我们的大多数项目更孤立?期望我的同事学习什么是合理的?什么语言最容易开发和修改?在

你们能给我一些有用的方法来解决这个问题吗?既有利于我自己的思考过程,也有助于我促进同事之间的头脑风暴?在


Tags: 工具项目方法脚本语言atlassianjira公司
3条回答

在我加入谷歌之前,Google已经在Python上对此类任务(以及更多)进行了标准化;据我所知,Python在JVM和.NET上的出色实现等巨大优势甚至没有在决策中起到任何作用——这都与可读性有关。当时(在某种程度上,甚至现在)谷歌的理论是,每个工程师都必须能够在需要时调整代码库的每一部分——当然包括构建脚本、蜘蛛(当时是在Python中)等等。已经精通C++和java的工程师需要学习更多的“脚本”语言(Python、Perl、Bash、AWK、SED等等),这是根本无法理解的: > EME>必须被选择。考虑到这个限制,Python是一个明确的选择(在其他约束下,Perl也可能是——但我看不出Bash、Awk和Sed的不可避免的混合体会在这样的基础上竞争!_)——这就是我后来在那里工作的原因;—)。在

考虑到Python、Ruby、Perl、PHP、Bash+Awk+Sed与。。。大致相同,选择一个显然是个赢家--而且Python具有清晰的可读性,在JVM和.NET上的强大实现是一大亮点。说真的,我只能把Javascript(客户端工作中不可避免的,现在有很多强大的实现,比如V8)看作一个可能的“竞争对手”(不幸的是,JS不可避免地为向后兼容性背负了很多包袱——除非你可以使用一个类似use strict;的约束来帮助实现这一点,否则这肯定是一个重要的缺点)。在

我认为我不能解决你的问题。你对工具、方法和流程的选择更受社会约束的影响,比如你的老板想要什么,你想要什么,然后是技术优势。这不一定是坏事。在

简单的回答是“使用最能让开发者满意的东西”。如果每个人都喜欢Python而不是Perl,不管出于什么原因,他们可能会用Python完成更多的工作。如果他们更喜欢Ruby而不是Python,那也是一样。在

作为您选择的一部分,您需要评估以下几点:

  • 开发人员已经知道了什么?在
  • 他们最愿意学什么?在
  • 你的团队每周能花多少时间学习新事物(例如午餐研讨会、正式课程等)?在
  • 社区中大多数人使用什么来使用您需要支持的工具?例如,Fisheye有一个javaapi,以及一些Perl和Python的REST示例。如果你在写鱼眼扩展,Java似乎是其中的赢家。如果你只是在访问鱼眼数据,任何语言都可以使用其余的东西。在
  • 你的代码库已经有多少了?你可以替换什么,你需要继续支持什么?我发现很多公司无法回答这个问题,因为每个开发人员似乎都添加了两种他们没有告诉任何人的新技术。:)
  • 您需要支持哪些平台?有些语言有特定于平台的问题,我指的不仅仅是Windows和Unix。您是否有必须支持的旧硬件?你的工具能用吗?在
  • 你能为公司的其他部分带来多少好处?其他团队在用什么?在
  • 提倡一种工具的人是否对它了如指掌?我问What are five things he hate about your favorite language?如果人们不能说出五个与他们的语言或工具错误的有效的东西,他们就没有足够的经验。在

更长的答案

人们倾向于把这一点简化为一种技术性的争论,因为他们害怕承认自己的偏见,也不敢审视自己为什么会这样想。您的老板可能会喜欢bash和Perl,因为这是他开始工作时所做的大量工作。您可能喜欢Python,因为您对Python的工作方式有着个人的亲和力。我喜欢Perl,因为我喜欢它的灵活性和数据量。就像任何社会环境一样,不同的人会被不同事物的不同部分所吸引。仅仅因为你喜欢巧克力并不能让香草变邪恶。我可以给你很多很好的论据,为什么Perl是有用的,但这并不意味着其他东西不能给你同样的价值。在

我们用脚本解决了什么问题?在

你必须自己回答这个问题。:)

我们是否会从我们团队的公共功能库中获益,或者我们的大多数项目更孤立?在

这在Python、Perl、Ruby、Java以及几乎任何您可能选择的语言中都是一件好事。我认为你的这部分要求是语言不可知论的。不管你选择哪一个,你可能都想这么做。在

期望我的同事学习什么是合理的?在

一个好的开发人员应该能够使用几种不同的语言,至少达到学徒水平。这些语言应该包括那些对人们如何表达问题有着巨大不同假设的语言,例如set{smalltalkperlclispjava}。在

我雇佣和合作过的最好的开发人员总是希望为工作使用正确的工具,而不是让工作适合工具。他们可能有他们最喜欢的语言,但他们并不抱怨(太多)使用一种更有意义的工具。在

然而,许多“开发人员”似乎认为,他们得到报酬是为了玩他们最喜欢的工具。你需要把他们转变成那些认为自己有工具箱的人创造商业价值的问题。在

记住,你永远不会停止学习。作为一个开发者,你不必选择一种语言,然后用你的生命捍卫它,在疾病和健康等方面抛弃所有其他语言。优秀的开发人员将继续跟踪新技术并评估它们对任务的有用性。仅仅因为你选择了一种工具而不是另一种工具,并不意味着你会停止关注。在

不管你选择什么,总有人会抱怨的。不要寻找让每个人都快乐的解决方案。除了摆脱那些不高兴的开发人员外,没有一个是可以的。在

什么语言最容易开发和修改?在

一个精通任何语言的熟练实践者都会认为他所选择的语言是最容易开发、修改和维护的。不熟练的实践者往往把问题归咎于语言和工具。有些语言有更陡峭的学习曲线,有些语言有更大的收益。一个人对眼前的满足的容忍是一个重要因素。在

也就是说,不同的语言发展了不同的文化和不同的工具集。Perl的人喜欢vi或emacs,Ruby的人喜欢TextMate,Java的人喜欢Eclipse或IntelliJ。这并不总是正确的,但是围绕工具发展的文化通常比工具的技术细节更重要。如果您的开发人员喜欢某个特定的类型的工具,他们可能会喜欢这种语言,这种语言的文化是围绕这种工具构建的。在

有些过程和工具需要更多的时间来适应或需要更多的教育,但如果使用得当,它们会有更大的优势。其他工具可以让您更快地开始工作,但可能不会为您提供一条通向更大、更大目标的道路,例如跨团队开发。但是,诀窍是不要对工具进行编码,这样就不会陷入任何特定的工具集中。在

两点:

  • “ew Perl gross”有点像是一个都市传奇。您可以用Perl编写非常干净的自文档代码,而且您可以用几乎任何语言编写代码。它是开发人员的属性,而不是语言。在

    仅仅因为你在写胶水代码,并不意味着代码就必须像一些胶水黑客一样糟糕。

  • 从许多比较Perl和Python的线程来看,在我看来Perl的CPAN比Python的repository更具扩展性,但我没有Python的经验,无法通过实际的比较来证实。在

    但是,有一件事我知道。5秒后搜索,CPAN has a JIRA module。不管这对你是否有利,这取决于你自己。

相关问题 更多 >