twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux コミュニティ ブログ 未来のいつか 未経験プログラマがコボルコンパイラを作った話をした #compiler_study

未経験プログラマがコボルコンパイラを作った話をした #compiler_study

コンパイラ勉強会というちょっと心をそそる勉強会があったので参加した。勉強会っぽい勉強会(ってどんなだよ)に参加するのは久々だったので、つい出来心でLTでもしようかと思った。LTすれば定員オーバーでも参加できるだろうという下心があった。 https://connpass.com/event/103976/ LTのつもりでいたら、お時間30分も頂いてしまった。困った。モダンなコンパイラのことで話すネタを持っていない。こーゆー時はLLVMのことなどをさらっと話せるようになりたい。そこで温故知新、昔話でお茶を濁すことにした。ごめんなさい。「愚者は経験に学び、賢者は歴史に学ぶ」とかなんとか。*1 新卒で入社したDECでの最初のプロジェクトは日本語COBOLの開発だった。その話をネタにした。若い人はCOBOLという言語の出で立ちなどは知らないだろうから、昔話としてはちょうどいいと思った。COBOLの仕様はフリーだということを恐らく参加者は知らない。COBOL仕様書の謝辞の日本語訳を最初に紹介した。*2 未経験プログラマ(自分のことだ)が入社した頃(1980年代中頃)の実際使用していたマシンの性能は0.3MIPSだ。ムーアの法則によって、30年間で性能は100万倍くらい向上した。その当時、自分はムーアの法則という言葉すら知らなかったけど、計算機は速くなって、安くなって、小さくなった。 未経験開発者はソフトウェア開発のイロハを知らない。ソフトウェア開発をコーディングすることだと思っている。テストもしなければ、コード管理システムにチェックインもしない。そもそもコード管理システム(バージョン管理システム、今で言うところのgitみたいなもの)があるということも知らなければ、それを利用しないといけないという意義も知らない。コードを追加したり変更したらテストをしてコード管理システムにチェックインする。そーゆーことを知らない。 コードを書くことは開発プロセスのごく一部でしかない。 それよりも重要なことは開発環境を作って安定化することだ。ビルド環境を構築し、テスト環境を作る。毎日コードをビルドして毎日テストする。CI(Continuous integration 継続的インテグレーション)という言葉がない時代からCIのようなことを毎日行なっていた。 リグレッションテストを持つことによって、後方互換性を担保する。互換性を破壊するような変更は即座に発見される。コンパイラの開発だけではなく、OSの開発でも、ハードウェアの開発でもリグレッションテストは日々利用される。OSチームはOSの機能のリグレッションテストだけではなく、コンパイラや他の製品のリグレッションテストを実行することによって、OSの変更が他の製品に影響を与えていないか確認する。ハードウェア開発チームですら、OSやコンパイラなどのリグレッションテストを利用して互換性に影響を与えていないか確認する。 開発プロセスの中にバグ分析も組み込まれている。我々は自分が作った製品のバグについてあまりにも無知だ。どのようにバグを作り込んでいるか無頓着である。テストはそのバグを発見してくれる。そして学ぶ機会を提供する。我々はバグから学ぶスキルをもっと身につけなければいけない。 このようなプログラマとしての discipline を開発の中で学んでいく。身につけていく。コードを書いたらテストをする。バグを見つけたら記録して分析する。 30数年の経験で、変わったこと変わらなかったことがある。 計算機のコストが劇的に変化した。安くなったし、速くなった。 インターネットの登場で地球規模の開発が可能になった。地球の裏側の人と協同してプログラムを作ることが特別でもなんでもなくなった。 OSSが当たり前になった。OSSのライセンスが当たり前になった。コミュニティでの開発が当たり前になった。バザールモデルが広く知られるようになった。30数年前はそれが当たり前ではなかった。 もちろん、上記以外にもスマホが登場して世の中が変わった。 一方で変わらないこともいっぱいある。 ムーアの法則は何度も何度も終わったと言われたが、結局最初に提唱されてから50年以上現役でIT産業を牽引している。 プログラマの...

コンパイラ勉強会というちょっと心をそそる勉強会があったので参加した。勉強会っぽい勉強会(ってどんなだよ)に参加するのは久々だったので、つい出来心でLTでもしようかと思った。LTすれば定員オーバーでも参加できるだろうという下心があった。

https://connpass.com/event/103976/

LTのつもりでいたら、お時間30分も頂いてしまった。困った。モダンなコンパイラのことで話すネタを持っていない。こーゆー時はLLVMのことなどをさらっと話せるようになりたい。

そこで温故知新、昔話でお茶を濁すことにした。ごめんなさい。「愚者は経験に学び、賢者は歴史に学ぶ」とかなんとか。*1

新卒で入社したDECでの最初のプロジェクトは日本語COBOLの開発だった。その話をネタにした。

若い人はCOBOLという言語の出で立ちなどは知らないだろうから、昔話としてはちょうどいいと思った。COBOLの仕様はフリーだということを恐らく参加者は知らない。COBOL仕様書の謝辞の日本語訳を最初に紹介した。*2

未経験プログラマ(自分のことだ)が入社した頃(1980年代中頃)の実際使用していたマシンの性能は0.3MIPSだ。ムーアの法則によって、30年間で性能は100万倍くらい向上した。その当時、自分はムーアの法則という言葉すら知らなかったけど、計算機は速くなって、安くなって、小さくなった。

未経験開発者はソフトウェア開発のイロハを知らない。ソフトウェア開発をコーディングすることだと思っている。テストもしなければ、コード管理システムにチェックインもしない。そもそもコード管理システム(バージョン管理システム、今で言うところのgitみたいなもの)があるということも知らなければ、それを利用しないといけないという意義も知らない。コードを追加したり変更したらテストをしてコード管理システムにチェックインする。そーゆーことを知らない。

コードを書くことは開発プロセスのごく一部でしかない。

それよりも重要なことは開発環境を作って安定化することだ。ビルド環境を構築し、テスト環境を作る。毎日コードをビルドして毎日テストする。CI(Continuous integration 継続的インテグレーション)という言葉がない時代からCIのようなことを毎日行なっていた。

リグレッションテストを持つことによって、後方互換性を担保する。互換性を破壊するような変更は即座に発見される。コンパイラの開発だけではなく、OSの開発でも、ハードウェアの開発でもリグレッションテストは日々利用される。OSチームはOSの機能のリグレッションテストだけではなく、コンパイラや他の製品のリグレッションテストを実行することによって、OSの変更が他の製品に影響を与えていないか確認する。ハードウェア開発チームですら、OSやコンパイラなどのリグレッションテストを利用して互換性に影響を与えていないか確認する。

開発プロセスの中にバグ分析も組み込まれている。我々は自分が作った製品のバグについてあまりにも無知だ。どのようにバグを作り込んでいるか無頓着である。テストはそのバグを発見してくれる。そして学ぶ機会を提供する。我々はバグから学ぶスキルをもっと身につけなければいけない。

このようなプログラマとしての discipline を開発の中で学んでいく。身につけていく。コードを書いたらテストをする。バグを見つけたら記録して分析する。

30数年の経験で、変わったこと変わらなかったことがある。

計算機のコストが劇的に変化した。安くなったし、速くなった。

インターネットの登場で地球規模の開発が可能になった。地球の裏側の人と協同してプログラムを作ることが特別でもなんでもなくなった。

OSSが当たり前になった。OSSのライセンスが当たり前になった。コミュニティでの開発が当たり前になった。バザールモデルが広く知られるようになった。30数年前はそれが当たり前ではなかった。

もちろん、上記以外にもスマホが登場して世の中が変わった。

一方で変わらないこともいっぱいある。

ムーアの法則は何度も何度も終わったと言われたが、結局最初に提唱されてから50年以上現役でIT産業を牽引している。

プログラマの discipline も変わっていない。コードを書いたらテストをする。バグから学ぶ。他人の経験から学ぶ。そのようなイロハを私は最初のプロジェクトで学んだ。

プログラミング言語モデルやプログラミング環境もほとんど変わっていない。

LTにありがちな最初のスライドで自己紹介はしなかった。蛇足として最後に自己紹介をした。満60歳で定年退職をして大学院生になった話をした。

このおじさんは一体何者なんだ、モダンなコンパイラの勉強会でなんで今更コボルコンパイラの話をしているんだという疑問へのネタバレ的である。

変わったこと変わらないこと、経験したこと、学んだことなどをお話しさせていただいた。

発表の機会をいただいたフィックスターズの川井さんありがとうございました。楽しかったです。

Be a Hacker. Make the world better.


おまけ

自分の日記へのエントリを貼っておく。

*1:ビスマルクの言葉らしい。wikiquoteによれば、正確には「愚者だけが自分の経験から学ぶと信じている。私はむしろ、最初から自分の誤りを避けるために、他人の経験から学ぶのを好む。ということらしい。自分の理解が微妙に間違っていたことを学ぶ。勉強会はまさに他人の経験から学ぶことに他ならないから、一周遅れで正解にたどり着いた感じだ。 https://ja.wikiquote.org/wiki/オットー・フォン・ビスマルク

*2https://www.ibm.com/support/knowledgecenter/ja/SS6SG3_6.1.0/com.ibm.cobol61.ent.doc/PGandLR/rlpreack.html

Read more at 未来のいつか
Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ


Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!