Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将COBOL程序员转变为现代程序员_Cobol - Fatal编程技术网

如何将COBOL程序员转变为现代程序员

如何将COBOL程序员转变为现代程序员,cobol,Cobol,我在一个公司环境中工作,在这个环境中,人们的思维方式被那些开始使用COBOL IMS和CICS编程的人所主导。如今,它们中的大多数都使用更现代的语言(如Java)编程。但是,如果你看看他们的代码和设计决策,没有什么变化 方法多屏长 大量的全局变量或它们的现代化身——单例模式 在方法开始时,大约有30个变量定义 全局而非参数 不是使用工厂方法,而是使用一个巨大的switch语句 由于“剩余空间足够”而误用数据库表列 这些人并不笨,他们大多数都很聪明。但向他们解释现代编码实践就像向盲人描述颜色

我在一个公司环境中工作,在这个环境中,人们的思维方式被那些开始使用COBOL IMS和CICS编程的人所主导。如今,它们中的大多数都使用更现代的语言(如Java)编程。但是,如果你看看他们的代码和设计决策,没有什么变化

  • 方法多屏长
  • 大量的全局变量或它们的现代化身——单例模式
  • 在方法开始时,大约有30个变量定义
  • 全局而非参数
  • 不是使用工厂方法,而是使用一个巨大的switch语句
  • 由于“剩余空间足够”而误用数据库表列

这些人并不笨,他们大多数都很聪明。但向他们解释现代编码实践就像向盲人描述颜色一样。你有没有经验或技巧教他们一种更现代的方法而不冒犯他们?

给他们买一本“代码完成”并让他们写一份读书报告。

了解代码外观的最好方法是阅读好的代码。试着用你自己的编码风格来树立一个榜样,并在代码评审过程中温和地指出他们的错误。这本质上只是一个观点问题;正如俗话所说,如果你唯一的工具是锤子,那么每个问题看起来都像钉子。这些程序员用他们有经验的语言来看待一切,所以即使在编写Java时,他们的思维过程也是用COBOL。他们的编码风格仅仅是他们思维过程的反映


除此之外,让每个人都阅读完整的代码。

让他们编写Java;并且有很强的代码审查标准。当他们的多页方法因为不是好代码而无法通过代码审查时,请向他们解释为什么它不是好代码。在某些时候,他们可能会变得恼火;我不认为真的有可能在没有烦恼的情况下改变已经“养成”了很长一段时间的习惯。但只要评审员保持理性和一致性,他们就会逐渐认识到这一点。经验确实是解决这类问题的唯一办法,而这也是获得经验并将其指导的唯一途径(而不是从错误中吸取教训)

< P>我意识到,我和COBOL程序员之间可能永远不会有一次思想交流,很多年前,我还是一名教C和C++的商业培训课程的讲师。我刚刚完成了关于malloc()和free()的课程,大多数赌客都很满意,这时课程上的一个COBOL家伙过来问:

“但是这种‘记忆’是什么?我为什么要用它呢?”

更具建设性的一点是,纽约的经验是,COBOL程序员经过培训,能够思考两件事:

  • 记录
  • 你对记录所做的事情
这实际上离OO不太远,我认为您需要了解的基本思想是,会有微妙不同的记录类型,您需要对它们执行不同的操作,最好的处理方法是将记录和创建对象所需的操作放在一起。

以及完整的代码(可能在那之后),让他们阅读(至少是介绍)。它讨论了标准代码的气味以及如何修复它们


然而,听起来他们需要的是如何以面向对象的方式进行思考的概述。我不确定哪本书最适合这样做。

每次用一个反例来解释为什么你的方式更好,更少痛苦,帮助他们按时回家,等等。一次一个反例是非常重要的不过,如果你真的想有机地培养一种文化,那就需要时间。例如:

  • 非常长的方法:看,我看了你的长方法,发现你在两个地方使用了相同的逻辑。我打破了这一点,现在你不必重复输入相同的代码两次。另外,我们只需测试这部分代码一次
  • 全局变量和每个方法开头的许多定义:请看,我已将您的变量移到更接近其使用点的位置。现在,我编写的这段测试代码表明,使用系统终止空指针的代码不会对我的产生副作用
  • 巨开关:有时候,巨开关很难避免(有时候你不应该)。也就是说,如果你试图构造一个对象,“工厂”这个词很能说明问题。看,我的工厂方法有效地做了与你的工厂相同的事情,但我让多态性(例如)更换一些交换机案例管理。代码更少=bug更少=我们准时回家

顺便说一句,我从未成功地将阅读任务分配给工程师(尽管凯西提出了重构,这正是这类事情的极好来源).对我来说,有效的方法是阅读书籍,使用建议的技巧,展示成功以及它如何让我的生活变得更轻松,然后,当“你怎么知道如何解决所有这些问题?!”的挫折感出现时开始,告诉他们有一本操作手册。聪明的人会很快从你手中把它撕下来,你会在这个过程中失去皮肤。

你能让他们开始编写好的代码吗?做一些小的修改吗?

我强烈怀疑他们的思维方式是“什么工作”的,而不是“什么是最好的方法”心态。如果他们所做的似乎奏效,也许他们没有你想象的那么糟糕

我同时使用COBOL和.Net代码。根据我的个人经验,我遇到过很多这样的例子,我想以比我的主管更好的方式做一些事情,而我的主管完全是COBOL思维。在很多情况下,他提倡一种简单的选择,这种选择可能并不优雅,但却是正确的决定。一个