技術書典7でコンピュータ将棋本、および、自然言語処理本を頒布します

Qhapaq開発チームは2019年9月22日開催の技術書典7に参加します。良ければ是非足をお運びください。

 

techbookfest.org

 

以下、頒布物について簡単に紹介をさせていただきます。

頒布物は全て電子書籍です。QRコード入りの紙を頒布する形式です

※:これら頒布物について、ネット通販も行う予定です。

 

【頒布物情報】

各種頒布物の立ち読みページはgithubで公開しています(自然言語処理本だけは現在進行形でデスマしているので目次しか出せていませんが)。

https://github.com/qhapaq-49/Kusokappa/releases/tag/wabidlc

 

【(既刊)科学するコンピュータ将棋 LTS版 700円】

コンピュータ将棋に関する基本的な理論を纏めた教科書的な本です。約85ページ

 

【(既刊)科学するコンピュータ将棋別冊 Qha学習 2018年版 300円】

2018年に登場し、今となっては評価関数のスタンダードになったNNUE関数を始め、2018年の将棋ソフトの最新事情を解説した本です。約40ページ

 

【(新刊)科学するコンピュータ将棋別冊 Qha学習 2019年版 振り飛車特集  300円】

将棋ソフトによる振り飛車の解析と強い振り飛車ソフトを作る方法論について解説した本です。約30ページ

 

【(新刊)家庭用PCで始める自然言語処理 300円】

できるだけ少ない計算資源で実現可能をコンセプトに要約や文章生成の解説を行います。具体的には一晩で1万以上のPVを叩き出しQhapaqの公式サイトをダウンさせた要約エンジンIMAKITAと、最近流行りのAttentionの応用を扱います。

 

【各種割引】

イベント中は以下の割引を行います。

新刊を二冊購入された方については100円の割引を行います(600円→500円)

・将棋神やねうら王をお持ちの方については振り駒割を行う予定です

頒布物の購入価格が振り駒で出た歩の数 x 100円になります。(元の購入価格が500円未満の方については x 50円)。皆で先手を取ってQhapaqに沢山お金を払おう!

 

・会場販売限定ですが、レフェリー割があります

以下の本(名刺)を持ってきた方には100円引き、1000円以上購入される方については200円引きとします(マニア向け補足:レフェリー割の重複はありません。お許しください)

Short Coding ~職人達の技法~2007/8/9 Ozy、 やねうらお

Windowsプロフェッショナルゲームプログラミング2002/5/31 やね うらお

ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books) 2008/11/14 やねうらお

ショートコーディング 職人達の技法 2014/3/11 Ozy、 やねうらお

解析魔法少女 美咲ちゃん マジカル・オープン! | やねう解析チーム

やねうらお氏の名刺

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS) 2016/8 池 泰弘

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS) 2007/4/25 池 泰弘

コンピュータ将棋のアルゴリズム―最強アルゴリズムの探求とプログラミング (I・O BOOKS) 2005/2 池 泰弘

池 泰弘氏の名刺

 

【更新履歴】

9.18 頒布物のリストを作成 レフェリー割について記載

【人間の棋譜からの転移学習】最強クラスの振り飛車評価関数 shinderella を公開します

技術書典7の宣伝も兼ねて現在開発中の振り飛車の評価関数を公開します。

その名もshinderella(振デレラ)です。よろしくお願いします。

 

【ダウンロードは此方から】

Qhapaq Research Labのデータベースからダウンロード可能です。

Cute(0815、体感的に変態棋風)、Cool(0825、体感的にオールラウンダー)からお選び頂けます。shinderellaは、やねうら王上で動かせるNNUE形式の評価関数です。やねうら王の導入についてはuuunuuun氏のページなどを参考にしてください。

 

【shinderellaの強さ】

現在公開されている最強の振り飛車関数である、NNUEkaiFや振電改と同等程度の強さであると考えられます(スクショはcuteのもの。coolは測定中)。ただし、W@ndreの中の人氏が言及しているように、振り飛車ソフト間にも相性問題があるので厳密なレーティングは難しいと思われます。

f:id:qhapaq:20190827213110p:plain

KristallWeizenは振り飛車が苦手な傾向

 

f:id:qhapaq:20190827213153p:plain

逆にillqhaやorqhaは振り飛車を許さない傾向にあるようです

 

f:id:qhapaq:20190827215746p:plain

orqhaから学習したのにorqhaよりも振り飛車側の勝率が高くなっている

 

【shinderellaの面白さ】

orqhaやillqhaといった既存の評価関数に対して、人間の棋譜を転移学習させることで作成しています。教師局面数は10万弱であり、学習時間は約3分です。教師が少ないゆえか程よく過学習しており、中々に変態じみた将棋を指してくれるのが特徴です。

あと、shinderella_cuteはorqhaから学習したのにorqha同士を振り飛車の初期局面から戦わせた場合よりも勝率が高くなっています(orqhaミラーでの後手振り飛車勝率は3割未満)。

 

f:id:qhapaq:20190827212747p:plain

32金が好きな傾向にある

f:id:qhapaq:20190827212845p:plain

端歩も好きな傾向にある。時々初手16歩とかもやる

 

【最後に宣伝】

技術書典7ではコンピュータ将棋振り飛車特集本を頒布します。ネット通販もやる予定ですので何卒よろしくお願いします。

将棋ソフトの勝率から見る振り飛車迫害の歴史

振り飛車は不利飛車である。きのこたけのこ戦争の煽り文句で出てきそうなこの文言は今や将棋界の暗黙の了解になりつつあります。

タイトルホルダーを居飛車に独占され、勝率の上でも居飛車に押されプロ棋士にwebニュースで冬の時代到来と言われてしまうなど、振り飛車にとって厳しい時代が到来しています。

さて、人間にとって振り飛車が冬であるように、コンピュータにとっても振り飛車は冬の状態を迎えているのでしょうか。本稿では将棋ソフトの振り飛車の歴史を紐解いていきます。

 

【将棋ソフトの振り飛車の黎明期(1990〜2000年初頭)】

意外にも(?)、この頃の振り飛車は将棋ソフト界隈のエース戦法の一つでした。というのも、当時の将棋ソフトは水平線効果で序盤、中盤の挙動が怪しく、序盤で変な悪手を指させないためには「初手、3手目は76歩、66歩として角交換を避ける」などの特別な処理を人間が逐一組み込まなければならなかったからです。

この頃もプロ棋士の間では居飛車のほうが主流ではあったのですが、能動的に戦型を選びやすい振り飛車のほうが調整が簡単などの事情で振り飛車を得意とする将棋ソフトが多々いました。

この時期無敵を誇った金沢将棋振り飛車を得意戦略としており、大会の大一番などで振り飛車を多用している他、市販版の金沢将棋も最強レベルでは振り飛車を積極的に狙ってきています(uuunuuun氏のレーティングサイトからvs 技巧などの棋譜を閲覧可能)。

この頃の将棋ソフトは評価関数と戦型が密接に関係していたため、戦型の良し悪しを判断するのは難しいですが、振り飛車党のソフトの活躍を加味すれば互角に近い戦いができていたと考えられます。

 

Bonanzaの到来と居飛車の躍進】

コンピュータの序盤戦事情は2009年のBonanzaの公開に伴い大幅に改善されました。Bonanzaは評価関数をプロ棋士棋譜から学んでいるため、様々な戦型への対応が可能であり、序盤の精度はまだまだ荒削りではあったものの、アマチュア有段者でも苦戦する程度の精度を持っていました。その結果、手動調整が難しいという理由で敬遠されていた居飛車の戦型も採択しやすくなりました。

とはいえ、当時のソフトは振り飛車を圧倒できるほど居飛車が上手く指せたわけでもなく、人間による手調整の結果振り飛車を採択することもままありました。事実、渡辺竜王(当時) vs Bonanzaの対局や、清水女流王将(当時) vs あから2010の戦いでは将棋ソフト側は振り飛車を採択しています。

 

強化学習振り飛車の苦難】

将棋ソフトにおいて本格的に振り飛車が迫害され始めるのは電王トーナメント以降、特にAperyややねうら王といった強豪ソフトがオープンソースになってからです。戦型選びの細かい手調整から開放されたことに加え、ユーザ数に立脚したデータ収集が進んだ結果、振り飛車は勝率の上でも居飛車に押され始めてしまいます。2016年頃のAperyでの振り飛車の勝率は後手ノーマル四間飛車で45%弱であり、この頃から開発者間で振り飛車を避けるように定跡を調整する(初手を26歩に固定する)戦略が流行し、大会から振り飛車の姿が激減しました。

 

【絶望の時代へ】

HoneyWaffleなどの振り飛車をコンセプトとした将棋ソフトの登場で振り飛車は完全に絶滅こそしなかったものの、2017年以降も振り飛車の旗色は悪くなり続けています。ソフトがソフト自身の棋譜から学ぶ強化学習が主流になった結果、将棋ソフトは定跡オフでも振り飛車を指さない完全な居飛車党へと転向してしまいました。そして、2017年頃の振り飛車の勝率は後手ノーマル四間飛車で40%前後にまで減少してしまいました。

更に2018年に生まれたNNUE関数によって、より複雑な盤面評価が実現した結果、2019年現在、後手番の振り飛車の勝率は30%を切るレベルにまでなってしまいました。下図はorqha1018で後手ノーマル四間飛車を指し継がせた際の勝率です。30%を切るどころか25%すら切ってしまっています(たややんさんの検証結果を加味すると、流石に勝率が悪すぎる気がしますが、3割を切るのは間違いないと思われます)。

 

f:id:qhapaq:20190825003648p:plain

対局結果スクショ。うそやん

 

f:id:qhapaq:20190825004226p:plain

初期局面スクショ。この局面ですでに後手の勝率は25%ない

 

【纏めと今後の展望】

20年前には将棋ソフトのエース戦略であった振り飛車は今となっては野球の打率並の勝率になってしまいました。将棋ソフトは多様な手を受け入れ戦型の多様化をもたらしてくれると信じていた身としては大変悲しい話です。

 

しかし、盤面評価精度の向上に伴い、振り飛車に特化した盤面評価の効果が顕著になり始めています。振り飛車に特化した関数は数%ではありますが、居飛車党のソフトよりも振り飛車の勝率が高く、更に良いことに、一部居飛車党のソフトには互角以上の戦いをすることさえもできています。今後の改善によっては振り飛車の更なる躍進もあるかも知れません(ないかもしれません)。

 

 

 

【最後に宣伝】

技術書典7で本を出します。お題は「コンピュータ将棋における振り飛車の研究」です。これに伴い現在振り飛車の評価関数を育成しています。現在の時点でorqha1018に対して勝率35%、KristallWeizenに対して勝率50%まで到達しています。振り飛車ソフトの研究というニッチなネタにどの程度ニーズがあるかは解りませんが、宣伝してくれると嬉しいです。

評価関数は今週末 or 技術書典のサークルカット公開に合わせて公開する予定です。よろしくお願いします。

 

f:id:qhapaq:20190825005532p:plain

現在育成中の振り飛車ソフト。正直何を考えているのか理解できない

リレー対局で最強将棋ソフトの三すくみを解消する話

【最強将棋ソフトの三すくみ】

第29回世界コンピュータ将棋選手権(WCSC29)が終了し、入賞ソフトたちの評価関数が公開されました。準優勝のKristallweizenや、初参加+デスクトップPCで7位入賞の水匠、有志作成の最強関数であるillqha4などが公開されました。

様々な関数が公開されれば「どの関数が一番が強いのか」を知りたくなるのが人間の性。ところが困ったことに、今の評価関数は上位の評価関数について三すくみ状態にあるというのです。

三すくみに参加しているのは前述のKristallweizenillqha4、そして2018年末からSOTAに居座っていたorqha1018(illqhaをベースに筆者が改造したもの)です。(因みに水匠、水匠改も同じぐらい強い)

評価関数の表現力が有限である以上、相性問題はあってもいいのですが、最強ソフトを使って検証をしたい人たちにとってはなんとも落ち着きの悪い話です。そこで本稿では三すくみを起こしているソフトたちを殴り倒すことを目指してみます。


【リレー対局】
将棋ソフト同士の相性問題については、WCSC29の覇者であるやねうらお氏による考察が既に存在しています。

yaneuraou.yaneu.com

端的に言えばorqhaは定跡offでは強い一方で特定の戦型を指定した上での対局ではあまり強くないということです。orqhaは少数高精度のデータで学習を行っているため、序盤の戦型選びに特化した作りになっている可能性は高いです。

しかしこれ、言い換えれば序盤に特化した将棋ソフトを作れているとも言えます。それならば、序盤だけorqhaに指させて、終盤を他ソフトに指させればもっと強い将棋ソフトを実現できるのではないでしょうか?


【実験】
というわけで、定跡オフ、1手1秒、スレッド数4で「序盤30手はorqha、それ以降はKristallweizen」というクソコラエンジンを作成し、orqhaと戦わせてみました。

三すくみの図曰く、この状態ではorqhaが勝ち越しそうですが

結果:
[クソコラ] 270 - 227 [orqha] (引き分けは除外。もとい、対局設定をミスってカウントしてくれなかった)

と、クソコラ関数が勝ち越す結果になりました。統計的にはまだ微妙に怪しいレベルですが、やねうら仮説が正しいこと、リレー対局をすれば将棋ソフトがまだまだ強くなるだろうことが示唆されました。


【実験用コード】
こちらからダウンロードできますやねうらお氏が開発中のやねうら王用のpython wrapperの「あやねる」の拡張エンジンとなっています。pythonが自力でかけないと使うのは難しいと思われます。

# リレー対局の有効性が示されたら本家やねうら王にも実装されるかも.....知れません


pythonわからない】
序盤の考察にはorqha、終盤はKristallweizenを使おう(多分 水匠やillqha4もいいぞ!


【技術書典にでます(宣伝)】
次の技術書典にQhapaqも出ます。今回はコンピュータ将棋本(棋譜解析や最弱将棋エンジン開発を中心にした技術を紹介する予定)と機械学習本(Gigazineに掲載された文章要約エンジンIMAKITAなどの機械学習ネタを突っ込んだ本)を頒布予定です。

長文を3行ぐらいで纏めてくれるChrome拡張 IMAKITA on Chromeを作ってみました

半年ぐらい前にGigazineデビューした文章要約エンジンIMAKITAが遂にChrome拡張になって帰ってきました。

 

chrome.google.com

 

唐突ですが皆様は偉い人の長話に苛々したことはないでしょうか。言いたいことは短いのに枝葉をつけた長文を送られるのにウンザリしたことはないでしょうか。

 

そんな皆様の声(?)を受けて、半年前に長文を3行ぐらいで纏めてくれる(厳密には、文章全体の中で特に重要度の高い文を抽出してくれる)エンジン IMAKITAを作ってみました。

https://www.qhapaq.org/imakita/

 

IMAKITAは私の想像以上に好評であり、なんとGigazineにも掲載してもらえました。そして、多くのユーザから「ハイライト機能が欲しい」「逐一サイトにデータを貼り付けるのが大変だ」というアドバイスをいただきました。

 

そこで、IMAKITAをブラウザ用のアプリにすることにしました。使い方は至ってシンプル。テキストを選択して右クリックからIMAKITAを呼び出すだけ。簡単!!

 

【使用例】

ニコニコニュースを参考に、いかがでしたかブログの王道である「綾瀬はるか 恋人」で検索し最初に出たページを圧縮してみました。要約する行数は7行、各々の要約文の長さは10文字以上になるように設定した結果が以下のとおりです。

 

----------

綾瀬はるかの本名や年収は?熱愛中彼氏と結婚?髪型がかわいい – ロバ耳日誌 https://robamimireport.com/ayaseharuka-honnmyou/
綾瀬はるかの本名は?
綾瀬はるかさんの本名は蓼丸綾というみたいですよ.
読み方は「たでまる あや」です.
綾瀬はるかの年収はどのくらい?
綾瀬はるかさんはほぼ毎日テレビに出ていますよね.
CM1本あたりのギャラは4500万円ですから、CMだけで7億2000万円ですよ!
 
 
ドラマや映画にも出ていますから、10億円を超えていると考えられますね.
ちょっと綾瀬はるかさんの髪型画像を集めてみました.
綾瀬はるかさんは前髪を常に短く作るのが特徴ですよね.
童顔の人が真似すると幼くなりすぎてしまうので注意が必要です.

---------

 

本名と推定年収と髪型に関する要約が綺麗に抽出出来ました。彼氏については結論が出ていなかったからかAI様は完全にスキップしてしまいました。

 

【機能について補足】

生成された要約はクリップボードに自動的にコピーすることが出来ます。キュレーションサイトを圧縮して呟くという賽の河原遊びも楽々出来ることでしょう。

 

要約分に対応する文字をハイライトする機能も実装していますが、jqueryの仕様なのかhtmlタグが入っていると上手く機能しません。解決方法知ってる人教えてください><

 

また、本家IMAKITA同様、多言語にも対応しています。英語、フランス語、スペイン語、ドイツ語に対してもテキストから原語を自動で推定し、要約を生成してくれます。

 

形態素解析(文章の単語を区切る機能)の精度が悪いため、恐らく本家に比べると精度がやや劣ります。

 

【ソースコートと論文】

IMAKITA on Chromegithubでコードを公開しています。また、技術的解説文書もアップされています(日本語版の解説記事も書く予定ですが予定は未定ですorz)。

新時代のクラスタシステム ~MultiponderとPreponder~

第29回世界コンピュータ将棋選手権に参加された皆様、感染してくださった皆様、改めてお礼申し上げます。Qhapaq di molto(QDM)は5位入賞という結果を残すことが出来ました。

 

本大会でQDMはPreponderを使ったクラスタシステムを構築しました。Preponderは前年度優勝ソフトであるHefeweizenが採用したMultiponderを発展させたシステムです。本稿ではQDMの躍進の屋台骨となったPreponderについて解説していきます。

 

ソースコードは此方からどうぞ

github.com

 

【システムの概要】

【Ponder】

コンピュータ将棋におけるPonderとは相手の手番中に先の展開を予想しておくことを意味します。人間の将棋でも予想外の手に慌てふためいたり、逆に自分の手を相手に読まれた結果、とっておきの一手が即指しで返されてしまったりすることがあると思いますが、コンピュータ将棋でも同様のことが起こります。

従来の将棋ソフトの多くは自分の指し手を決める際に相手の返しの手を一つ予想しておき(予想手)、相手の手番中に予想手を指された後の局面を検討します。予想手が当たれば相手の思考時間を自分の持ち時間に加えられるし、外れればその読みは破棄します。予想手の一致率はソフトの相性にもよりますが5割強程度と考えられています。

f:id:qhapaq:20190507190246p:plain

Ponderのイメージ図

 

【Multiponder】

一方、Multiponderでは予想手を複数用意し、それぞれの予想手について先の展開を読みます。予想手を5〜6程度用意すればほぼ全ての局面で相手の手を当てることが出来ます。複数の計算ノードを用意し、それぞれに局面を割り振ることで、実効的な持ち時間を3割程度増やすことが出来ます。

f:id:qhapaq:20190507190205p:plain

Multiponderのイメージ図

【Preponder】

PreponderではMultiponderに加え自分の手番中に2手先の展開を読ませることで実効的な持ち時間をさらに増やすことができます。2手先を読む都合上、Multiponder程の的中率は出ませんが、当たると時間を大幅に稼ぐことが出来ます。Preponderが外れた(自分の手が予想手と一致しなかった)場合はPreponderはMultiponderと等価になります。

 

f:id:qhapaq:20190507190145p:plain

Preponderのイメージ図

【実験結果】

Qhapaqの自己対局でPonder、Multiponder、Preponderを比べた所、PreponderはPonderだけの時に比べ実効的な持ち時間が5割増し程度になることが解りました。大会当日でもPreponderによって序盤から長考をした結果、有利な戦型持っていけたケースが多かったと考えています。

f:id:qhapaq:20190507190112p:plain

Ponder, Multiponder, Preponderの比較

 

数値計算屋がFortranを捨てるべき3つの理由

パンチカード時代の負の遺産として数値計算系を中心に今も生き続けている言語Fortran。本稿では仮に数値計算用途であってもFortranを使うべきでない理由を説明することで、悪しき文化の終幕を促進したいと思います。

因みに筆者は量子系を中心にした数値計算を生業としています。C++Pythonがメインですが数値計算ライブラリの拡張などの用途でFortran77も90も触ったことがありますし、Fortran製のライブラリは頻繁に利用しています。

あくまで筆者の経験に基づいたものでありFortranを使っている技術者からすれば反論もあるものとおもいます。

 

【1.教材として不適切である】

Fortranの長所として計算向けに設計されているため、行列や複素数の計算が簡単であるという点がよく挙げられます。確かに、Fortranの計算はC++などに比べ直感的で簡単です。しかし、高度なプロダクトを開発する上でボトルネックとなるのは実装ではなく、エラー処理やバグ取りなどの設計/実装後の処理です(*)。バグ取りという観点においてFortranは最悪です。まずユーザが少ないので些細な文法ミスでも原因を探すのに苦労します。C++であれば大抵のバグは誰かが引いていて何らかの記事があるものですが、Fortranでは逆に、大抵のバグの解決方法はQiitaやstackoverflowには記載されていません。

更に悪いことに、Fortranで書かれ現役で使われているライブラリの多くは前時代的で劣悪なコード設計となっています。変数の文字名が1文字であったり、関数の名前が名前から機能を推定するのが不可能なレベルであることはザラです。例えば行列計算でお馴染みのblasの関数の一つ"sgemv"をsingle精度で計算されるgeneralなmatrixとvectorの積であると初見で理解できる人はいないでしょう。この手のネーミングはコードの長さに厳しい制約があった時代の負の遺産であり、今のコーディング規約的には真似するべきではありません。この他にも、Fortranの規約を守っていないため古いgccでないとコンパイルできない量子計算ライブラリ(**)や、入力ファイル、出力ファイル、中間ファイル(全部で10個以上ある)を全て同じディレクトリに置きたがるディレクトリ汚しなど、負の遺産はデザインやUIにも深く根付いています。即ちFortranは先人から学べば学ぶほどクソコードが再生産されるという悲劇的な仕様を持っているのです。


*自身の経験に加え https://www.quora.com/How-much-time-does-a-programmer-spend-on-debugging などを参考にしています。より統計的なデータがあったら教えてください。

** Quantum EspressoかWannier90のどちらかだと記憶しています。どちらだったかは覚えていません。そして再現実験はやりたくないです許してください。


【2.計算が早い言語としての価値が急激に失われている】

Fortranの第二の長所として計算が高速であることが挙げられます。Fortranは用途を狭くする代わりにコンパイラの最適化が行いやすく、他言語で書かれたエンジンに比べ高速で動作することが多いのです。しかし、計算が早いことのメリットは年々小さくなってきています。

高速化の究極的なメリットは時間の節約です。しかし、計算機の普及と計算手段の増加に伴い、計算そのものの高速さは急激に重要度を失っています。クラウドを使えば計算時間をお金で買うことができますが、コーディングそのものはお金で高速化することは出来ません。前世紀と違い、今は人間の時間のほうがコンピュータの時間よりも遥かに高額です。それ故、計算機言語にも学習がしやすく、再利用できる先人の財産が多いといったユーザフレンドリーさが求められています。コミュニティが小さく、学習環境が劣悪なFortranはこの観点においてライバル候補に比べ遥かに劣っています。

また、昨今の計算のニーズの多様化に伴い、高速化の手法にも多様化の波が訪れています。GPUやTPUの躍進に加え、将来的には量子アニーリングマシンが出てくるかも知れません。Rustのように堅牢性と速度を両立した言語も生まれつつあります。幸い、FortranはまだCUDAのサポートは受けられているようですが、早いといえばFortranと言われる時代は何時終わってもおかしくありません。


【3.Fortranのライブラリを拡張するのにFortranの知識は必要ない】

私自身は量子物理系の数値計算屋としてFortranのライブラリを解析/拡張したことがあります。先人のライブラリの流用はFortranの利用が正当化される数少ないケースです。しかし、Fortranで書かれた100のプロダクトを101にする上でFortranの知識は重要な要素にはなりません。

というのも、先人のライブラリを拡張する上で一番時間がかかるのはコードを書くことではなく、ライブラリの意図を理解することだからです。そして、先人のコードを読む上で重要なのはFortranの知識ではなく、ライブラリの実装が糞であるか否かに依存した運の良さと、クソコードの設計思想を脳内でエミュレートしてコードの意味を忖度する勘の良さだからです。

C++erがFortranのコードを読む上で理解しなければいけない文法はそう多くありません。モジュールの読み込みのルールと、配列のdimensionが可変であることあたりを理解していれば大体読むことが出来ます。コードを書くとなると配列が1スタートであるとか、多次元配列のアクセス順序がC++と異なるとかを覚える(そして苛つく)必要がありますが、コードを読む作業に比べれば誤差みたいなものです。

できるだけ既存ライブラリを書き換えない形で拡張が出来ないかを考え、無理だったら祈りながらコードを読み、書くべきコードが理解できたら検索とコピペを繰り返して実装するぐらいがFortranとの適切(かつ、合理的な)付き合い方だとおもいます。


【4.最後に】

私はFortranを激しく嫌っていますが、Fortranが生み出した様々なプロダクトの恩恵を享受してもいます。素晴らしいプロダクトを生み出してくれた先人たちには感謝しているし、尊敬もしています。ただその一方で、計算機系の研究室に入ったからFortranでプログラミングを勉強するという行為は絶対に避けるべき愚行であると考えていますし、乳歯が生え変わるようにFortranはその役割を次の言語に託し滅びるべき時代に入ったと思っています。

億万長者になった暁にはFortran製のライブラリを滅ぼしてくれる計算系研究者に科研費をばらまくのでその時はよろしくお願いします。いや、それまでに滅んでいてくれFortran