在某些任务中可以使用贵公司不支持的语言吗?


27

我在一家支持多种语言的公司工作:COBOL,VB6,C#和Java。
我在主要工作中使用这些语言,但是我经常发现自己要用Python编写一些次要程序(例如脚本),因为我发现它是完成此类任务的最佳工具。

例如:分析师给了我一个复杂的CSV文件来填充一些数据库表,因此我将使用Python对其进行解析并创建一个数据库脚本。

有什么问题?
我看到的主要问题是这些快速且肮脏的脚本中的一些部分正逐渐变得越来越重要,并且:

  1. 我的公司不支持Python
  2. 它们不受版本控制(我以其他方式对其进行备份)
  3. 我的同事不了解Python

分析人员甚至已经开始在电子邮件中引用它们(“启动导出脚本...”),因此比我最初想象的需要更多的时间。

我应该补充一点,这些脚本只是不属于主项目的实用程序;他们只是帮助在更短的时间内完成琐碎的任务。对于我自己的小任务,它们有很大帮助。

简而言之,如果我是偶然的彩票赢家,我的同事将需要在没有这些脚本的情况下保持项目的生命。例如,他们会花费更多时间手动修复CSV错误。

这是常见的情况吗?难道我做错了什么?我该怎么办?


22
如果您的同事仅因为脚本是另一种语言而无法找出脚本,那么您会遇到更大的问题
CaffGeek 2011年

1
我同意乍得的观点。Python尽可能接近伪代码。
工作

2
@Chad eheh不错,但问题可能是另外一个;Python sdk不属于开发计算机的默认安装。为了安装它,我已经向正确的sysadmin支付了很多咖啡;)。
systempuntoout 2011年

3
@systempuntoout,开发人员应该能够在法律限制内的计算机上安装所需的工具。因此,PowerShell已预先安装了PowerShell,我尝试将其替换为Python,但并非完全相同。每当我尝试做一些简单的事情时,边缘的盒子都会把我打在脸上。Python只是把事情做好了,如果公司的无人机没有做到这一点-太糟糕了!
工作

1
将它们置于源代码管理中。只是一个小角落的地方,而是把他们英寸

Answers:


42

您需要使情况正式化,因为它实际上并不需要到这一点。但是,这些事情发生了,因此您需要向老板解释,您创建了这些脚本供个人使用,但是它们已经“逃脱”到更广泛的发行中。承认(如有必要)您有过错,因为没有尽快提请他注意。

至少应将脚本置于“以防万一”的源代码控制之下-至少,如果您不可用(无论出于何种原因),您的同事都可以访问这些脚本。

然后,您要么需要说服上司,Python就是实现这些目标的方式,要么接受您将不得不以受支持的语言重新编写它们。如果用Python编写脚本和培训同事的成本低于重写脚本的成本,您甚至可能会赢得争论。


8
+1,同意。我可以看到这种事情很容易发生,但在OP方面不一定是“一件坏事”或“一个错误”。这可能是从OP承担一个“一次性”微型项目的任务开始的,他选择了一个很好的工具python来快速清除项目桌面,但后来发现自己一次又一次地执行任务...
Angelo

我现在住这个。我用Python破解了一个概念证明,以帮助我弄清楚一些糟糕的旧C代码,并实际上使整个混乱局面取代了旧C代码,但在使新更改生效后被要求重写为C 。我确实设法保留了一些Python,我使用Python + Flask和我的管理器编写了一个小型Web应用程序,并且不断使用它来分析正在运行的C代码的操作。因此,仍然希望Python在这里得到正式采用。:)
约翰·盖恩斯(John Gaines)

6

关于您该做什么,我无法给您完整的答案。我只能提出一个建议,您可以从以下建议开始:

将脚本检入所有(必需)开发人员都可以访问的存储库中。但是,请务必注意以下事实:您已经为自己的目的首先编写了这些脚本,即执行要执行的任务。然后添加您仅签入这些脚本以允许其他人使用它们。

之后,您只需要查看其他人对此的反应即可。


尽可能对它们进行评论。帮助快速查看正在发生的事情,而不是试图弄清楚您正在做什么。
JD Frias 2010年

5

我在工作时遇到了类似的问题。我听说“什么是PHP?” 几年前。他们不了解或不在意学习MS堆栈之外的任何内容。如果python是适合这项工作的工具,我会告诉我的主管,并准备好进行比较和解释为什么python是正确的选择。这将令人沮丧,但是我想大多数人都会同意python是文本操作的不错选择。


5

您需要做的第一件事是与团队和老板交谈。现在,您有一个巨大的卡车因素(如果您被卡车撞到,没有其他人可以轻松维护您的脚本)。看起来让脚本执行这些任务似乎很重要,但是任何需要编辑和维护这些脚本的人也很重要。您需要解释使用Python如何增加价值-如何节省时间,精力,资源,金钱等。

其次,将其放入项目的版本控制中。现在。您为项目制作的任何内容都不应超出该项目的版本控制范围。

为抵制做准备-人们通常不喜欢变化。自行运行,使用不受支持且未知的(团队/组织)技术是个坏主意,而无需咨询至少其他开发人员并确定最佳方法(对于项目,而不仅仅是您自己),以便所有人自动化使用。

我认为这可能是一个很好的例子

寻求宽恕比获得许可要容易。

听起来您已经完成工作,但是现在您将不得不应对这些影响。


4
“”“使用不受支持和未知的(对团队/组织而言)技术自行运行是一个坏主意,而没有咨询至少其他开发人员并确定自动化这些技术的最佳方法(对于项目,而不仅仅是您自己)供所有人使用的任务。“”“-我不同意。如果Joel Spolsky走这条路线,他将无法为Excel创建VBA。到目前为止,这还不是唯一的例子。
工作

@Job我无法说出VBA for Excel的确切开发情况,但这听起来像是涉及了高级研发或原型制作。先进的研发和生产系统之间存在差异。您永远不能在黑暗中独自工作,与团队隔离。我不反对引入新技术,但重要的是,每个人都必须知道这些新技术是什么,它们的优点,缺点以及如何在项目中部署它们。在黑暗中单独做某事通常是一个坏主意,并且使一个项目处于危险之中。
Thomas Owens

@Thomas我是团队
systempuntoout 2011年

@systempuntoout现在可能是对的。但是会在6个月内吗?还是一年?即使您目前独自一人,软件开发也不应该被视为一项单独的任务-您需要考虑未来的开发人员或工作维护者。
Thomas Owens

@托马斯你是对的; 正如上面的一些评论中所述,我已经移植了许多C#(公司支持的语言)脚本
systempuntoout 2011年

3

我的经验法则是:

任何可能影响他人工作的事物都应尽快与您的同行和上级讨论。

但是,如果只为您和您一个人,只要它不会对公司的基础架构或安全性造成任何损害,您就可以自由完成自己的工作。


1
您怎么知道它适合您还是他人?在工作中,您可以重新分配,也可以退出。您在工作中产生的任何东西(大多数情况下)都不是您的,而是属于公司或客户的。如果他们无法理解或维护它,那么所浪费的时间就是您花费在开发它上的时间,加上花费别人的时间来理解它(也许是开发一个新的解决方案)的时间。工作中产生的所有东西都应视为他人的东西。
Thomas Owens

1
如果在您从事该工作期间,它提高了您自己的个人生产力,那么该公司已经从该脚本中获得了价值,这不是浪费,无论以后是否被其他人重用。
Nate CK

@Thomas Owens-通常只有一次任务-完成后就完成了-或者在开发过程中进行了一些棘手的测试和测试,以解决一些棘手的问题-完成后,它们就完成了-实际上是一次性的。
矢量

并且如果其他人以后需要执行相同或相似的任务(根据我的经验,这很有可能)?他们必须重新发明轮子。为解决问题或学习库或框架而投入大量的原型工作是一回事。花时间开发工具来执行任务,然后将其丢弃是另一回事。问题所指的工具类型是针对可能必须多次执行的任务的,如果其他人执行这些任务,他们会因为没有工具来帮助他们(或需要开发这样的工具)而浪费时间。
Thomas Owens

@Thomas Owens-理所当然-包括在我所说的内容中,“可能会影响他人的工作”。
矢量

2

您有两种选择:

  1. 使其成为标准
  2. 转换为标准工具

取决于组织#1可能具有挑战性(毕竟限制标准技术的列表可以避免培训和支持技能要求的组合爆炸式增长)。

第二种选择将帮助您提高技能,并且您可以找到第三方(并且可能是具有商业友好许可的开源软件)来完成某些工作。例如,搜索“ LINQ to CSV”应会获得一些有用的匹配。

顺便说一句,VB6的开发人员工具(IDE,编译器)不受支持(甚至没有安全修复程序),因此标准无论如何都可能需要更新。(VB6运行时是当前Windows版本的一部分,并已包含在安装中)。也许可以将其用作方法1的辅助工具:由于供应商的依赖性,标准工具集需要设定一个移动的目标。


2

如果您被赋予一项任务,并且只有按时完成任务的唯一方法,您实际上就别无选择。我认为让主管人员知道您在做什么是明智的。您不应该超出必需的源代码控制范围(除非它绝对根本不起作用?)测试和文档。

有时一家公司可能不得不让一个开发人员开始寻找新的开发领域。不幸的是,这些代码可能比其他任何人都无法更快地投入生产。


信不信由你,在发布此问题并收到许多有见地的建议之后,我已经在C#中移植了几个脚本。
systempuntoout 2011年

1

好吧,我不得不承认,使用20种不同的语言会很臭,很多。

您有一个Bash脚本,该脚本调用Python脚本,该Python脚本调用Perl脚本,该Perl脚本调用一个Java二进制文件,该Java二进制文件调用C dll。

然后,整个管道中的风扇受到撞击,然后您进行检查-DAT KODEZ是什么?尤其是在Perl中...简单的调试,例如编码问题,变成了噩梦般的混乱。您无法有效调试7种语言中的5种,这变成了真正的痛苦。

或者,您必须添加一个简单的更改,但是由于Perl遇到了麻烦,Java遇到了麻烦等等,您创建了10个错误。

超过7条语言的链一次启动了一个步骤。

小心踩一下,这是龙...


使用正确的工具不会让人发臭,这是Unix构建事物的方式。Windows的方法是启动Excel。锤子和钉子的古老故事……
mouviciel 2011年

1

如果这些是您自己使用的工具,那么您可以自由地做任何可以提高工作效率的事情。

实际上,应该鼓励您制作和使用这样的工具,这些工具最终将扩展您的手臂。

最终,他们将意识到拥有这样的工具的重要性,无论用什么语言编写,都将开始在他们的工作环境中实施。


在工作中,我认为您不应将任何事情视为“为了自己”。它们是支持项目的工具,并且有一个团队致力于该项目。您明天可以辞职,被解雇,重新分配或丧命,现在您的责任落到了别人身上。如果他们不能使用和维护您的工具,那么浪费在制造它们上的精力(浪费了公司的钱)。
Thomas Owens

3
@Thomas:我将自己和自己使用的脚本当作我的。它们是我手臂和思想的延伸。这就像在说“你不能这样想,你只能那样想”。我认为您的想法并不重要,只要您能够执行要求执行的操作即可。
Jose Faeti 2011年

对我而言,这是极其不专业和不道德的。软件工程师的道德责任之一是为客户和雇主的最大利益行事,只要它不会危害公众。另一个道德责任是公平和支持同事。当您将工具用于项目时,将工具保留给自己就违反了这两个原则。
Thomas Owens

3
@Thomas:我并不是在谈论为项目编写特定的编程语言。我说的是“用一个命令重命名10000个文件”之类的东西,而愚蠢的程序员则一步一步地做这些事情,而我却可以用一个自制的脚本来做到这一点。我没有与项目中专门涉及的任何内容进行交互。它们不是特定于项目的工具。
Jose Faeti 2011年

3
@Thomas:关键不是要知道是否存在这样的实用程序,而是要知道如何通过制作这样的实用程序来使您的工作自动化。您将始终需要一些新脚本来帮助您执行日常任务。强迫程序员使用现有的工具或其他人提供的工具,就像割断了翅膀。我无法想象在这样的地方工作。无论如何,我理解你的观点。之所以提出我的答案,是因为OP已经处于这种情况下,我认为最好的方法是尽快与所有团队分享制作/使用特定工具的想法,然后再做出决定。
Jose Faeti 2011年

1

当要求您编写代码时,通常会指定或隐含该语言(公司规则)。

但是,当您必须执行一些一次性任务(例如将数据导入数据库)时,您可以自由选择自己认为最合适的工具,因为您必须正确,快速地执行操作,并且结果很重要,不是工具。

因此,我将使用该规则:

1)如果要求您执行某些任务,例如数据导入,则可以使用tools / language / etc。那对我来说将是最方便的,而对这项任务来说将是最快的。

2)如果要求您编写工具来完成某些任务,例如导入一些数据,我将与经理讨论使用哪种语言/工具(当使用隐含标准语言时,例如公司使用[几乎]仅Java)。

3)如果任务似乎是一次性的,但是可以重复,则应与经理联系,将其从1)更改为2),然后从首选语言重写为公司支持的语言。


0

我想您无权决定(否则您不会问这个问题)。您的老板对这个问题有何看法?您应该与他交谈并尝试说服他Python是必经之路...

当然,问题在于您离开时会发生什么。无法维护代码可能是足以停止使用Python的原因。或者,您可以开始教育您的同事使用这种语言...

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.