Help us understand the problem. What is going on with this article?

COBOL脳を解説する(1)

More than 3 years have passed since last update.

1.はじめに
 COBOLは現在も尚、企業システムにおいて重要な役割を果たしています。COBOLで書かれたシステムをJavaで書きなおすことを目的としたプロジェクトも一定数存在します。よって、COBOLエンジニアでなくとも、この言語について多少の理解を持っておくのは有益と考えます。
 この記事では、COBOLエンジニアの思考プロセスを解説することにより、モダンなプログラミング言語のエンジニアがこの言語を理解する助けになることを目的としています。今回は、COBOLの代表的な処理パターンである、順次アクセスファイルの読み書きを解説したいと思います。

2.COBOLエンジニアの頭の中
 COBOLエンジニアが何らかの処理を設計したりコーディングしたりする時の頭の中をシミュレーションしてみます。例えば、次のようなデータがあったとします(便宜上CSV形式で表現しています)。このデータのすべてのレコードのすべての値を10倍するという処理を考えてみます。

10,100,1000,10000
20,200,1000,20000
30,300,3000,30000
40,400,40000,40000
50,500,50000,50000

  モダンなプログラミング言語のエンジニアであれば、このデータを見た時、頭の中で瞬時に配列に格納するでしょう。
例えば、((10,100,1000,10000),(20,200,1000,20000),(30,300,3000,30000),(40,400,40000,40000),(50,500,50000,50000))
というような形で認識していると思います。この配列のすべての要素を10倍するというような処理が求められた時は、配列をハンドリングするための関数を作成して、そこにこの配列をそのまま代入するようなプログラムを想起するのではないでしょうか。一方、COBOLエンジニアの場合は、頭の中でまず、次の形でこのデータを認識します。数値なので各カラムはゼロ埋めされています。一度に認識するのは1レコードだけです。
000010000100001000010000
 次に、これをカラムに分解します。各カラムが何桁目で区切られているかは、プログラム中の最初の方で定義されていて、このエンジニアはそれを頭に入れつつ次のように分解し、1つ1つのカラム値に10を掛けます。
 10 * 10 = 100
100 * 10 = 1000
1000 * 10 = 10000
10000 * 10 = 100000
そしてこれを次のようなレコードにまとめた上で、アウトプットの順次アクセスファイルに1レコード書き込みます。
000100001000010000100000
そして、次のレコードを、1行読み、
000020000200002000020000
このように認識して、以下最後のレコードまで同様に処理していきます。
 上記の処理のように、ある断面を取ると、エンジニアの頭の中では1レコードしか存在していません。これは、コンピューターのメモリの中でも同じで、メモリの消費量が非常に少ない。COBOL当時のハードウエアの価格や技術水準を考えると非常に合理的な設計になっています。今後説明する予定のコントロール・ブレイクという処理でも、一度にメモリ上に存在するのは多くとも数レコードです。

3.最後に
 元々COBOLエンジニアの私が、Pythonを勉強した時のことです。そこそこ大きなテキストファイルを処理するプログラムを書いていました。最初はfor文を使って、1レコードずつ処理していました。ある時、テキストファイルの中身が配列に見えるようになったのです。私がモダンなプログラミング言語を理解し始めたのはその時だと思います。
COBOLエンジニアがモダンな言語を習得するためには配列の概念を理解しなければなりません。尚、COBOLにも仕様として配列という型はありますが、それはレコード内で繰り返しの処理を楽にプログラミングしたい時に使うのであって、モダンな言語の配列とは違うように思います。
一方、モダンな言語のエンジニアが何らかの理由でCOBOLやRPG、PL/1といったクラッシックな言語の理解が必要な局面もあるかもしれません。その場合には、「一度に一行」という原則を理解してください。そして、COBOLにおける配列の考え方は、あなたのそれとは違っていることを念頭においてください。

続編を書きました。
COBOL脳を解説する(2)

egoisangel
主に流通業界向けのSystem Integrationを担当しています。 記事の内容は私個人の意見であり、所属する会社や団体の意見や見解を代表して述べたものではありません。また掲載にあたり所属する会社や団体のレビューを受けておりません。この内容を使用する方の責任において使用してください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした