表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
魔力ゼロですが、魔法はぜんぶコードなので問題ありません 〜前世プログラマーの少女、キーボードで異世界をデバッグする〜  作者: せい | 健康優良不良プログラマ
第1部 ③村を変える小さな発明

この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

PR
50/211

第50話 試作と失敗

四桁の加算機の組み立ては、思っていたよりずっと難しかった。


グスタフ親方には改めて精密歯車を追加で調達してもらった。前回の小箱の倍を超える数で、全部組み終えるまでに何日かかるか、初日の朝はまだ見当がつかなかった。


一日目。


一桁目の全加算器は、父と並んで組み直した。軸の高さを測り棒で揃え、噛み合わせを針金で確かめ、木の屑が一切残らないように作業台を拭く。父の指先は静かで正確で、わたしの頭の中の配線図を、現実の歯車に置き換えてくれる手だった。


夕方には一桁目が動いた。前回より歯車の音が滑らかだった。


二日目。


二桁目の全加算器を、一桁目の隣に並べて組んだ。繰り上がりの軸を、一桁目の AND の出力から二桁目の入力Bへ繋ぐ。図面の上では一本の細い軸でしかなかったが、現実では長さと角度をぴたりと揃えないと動かなかった。


「お父さん、この軸、長すぎる」


「ふん」


父は黙って糸鋸を取った。木の軸を爪一つぶん削って、もう一度差し込む。一発で噛み合った。


(——前世なら設計図の数字を直すだけで終わったのに)


(——ここでは、削るしかない)


二桁目を組み終えて、ハンドルを回した。


入力Aの一桁目に『一』。Bの一桁目に『一』。

一桁目の出力が回って、繰り上がりが二桁目に伝わる——はずだった。


歯車が動き始めた瞬間、一桁目の方が止まった。


「あ」


「動かんか」


「動かない」


父が机に頬杖をついて、機械を眺めた。それから細い指先で一桁目の中継歯車を軽く弾いた。


「噛み合わせがきつい。二桁目を繋いだら、負荷が増えた」


「……負荷」


「お前の歯車一つで動かしてる軸が、二つの仕事をしてる。重くなって、回らん」


頭の奥で前世の言葉が呼び覚まされた。


(——並列処理のボトルネック)


入力の歯車一つが、複数の処理に同時に動力を供給している。前世なら計算機の中で簡単に振り分けられた仕事。だがここではモーターも電力もない。手で回すハンドルの力だけが、すべての歯車を動かしている。


「歯車を、もう一段、増やすしか」


「ふん」


父はゆっくり頷いた。


◇◇◇


三日目。


中継歯車を一段増やした。Aの入力歯車から、まず大きな中継歯車に伝えて、そこから二桁分の処理に動力を分配する。模型機関の動力分配と同じ理屈。


組み直してハンドルを回した。


一桁目が動く。二桁目も動く。繰り上がりも伝わる。


「(……動いた)」


二桁の加算が、確かに機械の中で進行していた。


二回目を回した。三回目。四回目——


五回目で、一桁目の歯車がカタンと小さく外れた。


「止まった」


父が即座に手元を覗き込んだ。


「軸の遊びが大きい」


「遊び?」


「同じ動きを繰り返すと、軸が少しずつズレる。木の歯車は、金属より早くこうなる」


(——摩耗じゃない、最初の精度の問題)


(——前世のソフトウェアなら、何百万回繰り返しても誤差は出ないのに)


(——機械では、たった五回でずれる)


胸の奥で、軽い苛立ちが膨らんだ。前世の感覚が抜けない。コードのループは何回回しても結果が変わらない。だが歯車のループは、回した分だけ少しずつ歪んでいく。


父はじっと機械を見ていた。やがて立ち上がって、扉に向かった。


「グスタフを呼んでくる」


◇◇◇


四日目。


朝にグスタフ親方が工房にやってきた。


「お前さんたち、何を作っとる」


機械を一目見てから、ふんと鼻を鳴らした。


「親方さん、これは『数を足す機械』」


「足す機械」


「うん。一桁ずつ繰り上がりを伝えていく」


グスタフが屈み込んで、軸と歯車を指先で順番に追っていった。一桁目から二桁目、二桁目から三桁目——わたしと父が用意した三桁分の骨格を、ゆっくりと辿る。


「……三桁目で軸の高さが下がっとる」


「あ」


「机が水平じゃないんだろう。お前さんたちの机、奥の脚が古い」


机の脚を覗き込むと、確かに奥の二本がわずかに摩耗していた。前世なら床のレベルなど一切気にしないが、ここでは床の傾きが歯車の連結に直接影響する。


(——物理は、ぜんぶ繋がってる)


胸の奥で、前世のソフトウェアとここでの機械の違いが、また一つ刻まれた。


「アルベルト。机の脚に当て木を入れろ」


「ああ」


父がすぐに当て木の用意を始めた。グスタフは別の問題に取りかかる。


「嬢ちゃん。お前さんの軸、ぜんぶ俺んとこで作り直そう」


「えっ」


「同じ精度で、同じ長さで、四本まとめて作る。お前さんの今の軸は、長さの揃いが甘い」


「グスタフさん——」


「礼はいい。これは俺の仕事の範疇だ。お前さんの仕事は、設計だ」


それだけ言って、グスタフは机の上の軸を四本まとめて袋に放り込んだ。


「明日の朝、揃えて持ってくる」


◇◇◇


五日目。


朝、グスタフが約束通り精密な軸を四本持ってきた。長さは爪の幅の五分の一の誤差まで揃っていた。木材も、わたしが使っていた端材ではなく、しっかり乾燥した堅木に変わっていた。


「これで、回しても歪まん」


父が机の脚に当て木を入れて、水平を取り直していた。机の表面に水の入った小皿を置いて、傾きを確かめている。


(——前世の開発と、まるで違う)


(——だけど、本質は同じだ)


ソフトウェアでは「環境を揃える」というところを、ここでは「机を水平にする」と「軸の長さを揃える」で実現している。前世なら自動テストの環境構築だ。


組み直しに半日かかった。新しい軸、新しい机の水平、新しい中継歯車の配置。三桁目までを慎重に組み上げる。


午後、四桁目を繋いだ。


繰り上がりの軸が、一桁目から四桁目までを一本の鎖のように繋ぐ。前世の言葉なら『リップルキャリー加算器』。下の桁の繰り上がりが、波のように上の桁へ伝わる構造。


組み上がったのは、夕方だった。


入力 A の各桁に歯車。入力 B の各桁に歯車。出力の和の桁が四つ、左端に最終的な繰り上がりの桁が一つ。


「これで、四桁の加算ができる、はず」


(——〇〇〇〇から一一一一まで)


(——前世なら、0 から 15 まで)


机の隣で父が静かに立っていた。グスタフは作業台の縁に腰を下ろして、腕を組んでいる。


「やってみい」


父が短く言った。


入力 A を『一一〇一』に設定する。三桁目と二桁目と〇桁目を回した状態に。一桁目は〇のまま。

入力 B を『〇一一一』に設定する。三桁目を〇、それ以外を回した状態に。


(——足したら、一〇一〇〇)


(——前世なら、13 + 7 = 20)


(——二進数では、五桁目に繰り上がる)


手をハンドルに添えた。


工房の中の空気がしんと冷えた気がした。グスタフは動かない。父も動かない。


ハンドルを回した。


歯車が、ゆっくりと動き始めた。


■あとがき・解説


第50話は、四桁の加算機を組み上げるまでの五日間の試行錯誤を描いた回でした。並列処理で詰まる、歯車が外れる、机が傾いている。前世のソフトウェアにはなかった物理的な壁が、次々とリナの前に立ち上がってきます。父の糸鋸、グスタフ親方の精密軸、当て木で取り直す机の水平。今回は機械を「動かし続ける」ということについて、ゆるく解説していきます。


■この話で出てきた言葉


■「リップルキャリー加算器」——波のように繰り上がる


リナが四桁加算機の最後で完成させたのが「リップルキャリー加算器」と呼ばれる構造です。


リップルというのは「さざ波」のこと。一桁目の繰り上がりが二桁目に伝わり、二桁目の繰り上がりが三桁目に伝わり——繰り上がりが下の桁から上の桁へ、まさに波のように順番に伝わっていく方式です。リナがやったように、全加算器を桁の数だけ横に並べて、繰り上がりの軸で一本に繋ぐだけ。シンプルな構造で、桁を増やしたいだけ増やせます。


ただし弱点もあります。一桁目から四桁目まで順番に繰り上がりを待たないと、最終結果が出ない。桁数が増えると、結果が確定するまでの時間も比例して延びていく。前世のコンピュータでは、これを高速化するために「キャリー先読み」というもっと込み入った仕組みが使われていますが、リナがまず辿り着くべきは、いちばんシンプルなこの構造でした。


■「並列処理のボトルネック」——一つの動力で、いくつも動かそうとすると


二日目に二桁目を繋いだ瞬間、一桁目が動かなくなった場面。父が「お前さんの歯車一つで動かしてる軸が、二つの仕事をしてる。重くなって、回らん」と言い当てた、あの問題。


プログラマーの世界で似たことが起きるのが「並列処理のボトルネック」です。一つの資源(CPU、メモリ、ネットワーク回線)を、複数の処理が同時に使おうとすると、全体が遅くなる。前世のリナなら CPU の負荷分散で済んだ話を、ここでは「中継歯車をもう一段増やして動力を分配する」という物理的な解決で乗り越えました。


問題の本質は同じ。けれど解決の手段は、ソフトウェアと機械でまるで違う。リナはそのギャップを、五日間でしっかり胸に刻みます。


■「環境構築」——机の水平、軸の長さ、堅木の選定


三日目に歯車がカタンと外れた場面、四日目にグスタフが「机が水平じゃない」と気付いた場面、そして五日目に軸ぜんぶを精密に作り直して堅木に変えた工程。


前世のソフトウェア開発で言うと、これは「環境構築」にあたる仕事です。新しい仕組みを動かす前に、それが動く土台を整える作業。OS のバージョンを揃える、ライブラリの依存関係を解決する、テスト用のデータベースを用意する——目には地味で、新しい機能を作る仕事より評価されにくいけれど、これを怠ると後で必ず痛い目に遭う。


リナが机の脚に当て木を入れ、グスタフが軸を作り直すために半日を使った時間は、コードを書く時間ではなく、コードが動く前提を整える時間でした。物語の本筋から見れば「失敗続きの地道なエピソード」かもしれませんが、ここを丁寧に描けるかどうかで、第51話以降の「動いた」が本物になるかどうかが決まると思っています。


「物理は、ぜんぶ繋がってる」というリナの胸の呟き。床の傾きが歯車の連結に影響するという発見は、前世の彼女には新鮮な驚きだったはずです。


次の話もお楽しみに。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ