プログラミング
ソフトウェア、第一原理から
Software, from First Principles (fazamhd.com)
要約
現代のデバイスのシームレスな体験の裏には、物理学、化学、数学、工学、プログラミングなど、数世紀にわたる人類の創意工夫があります。この複雑さを理解することは、デジタル環境をナビゲートし、技術をより良く利用し、デジタルセキュリティを確保するために不可欠です。この記事では、専門用語を避け、第一原理思考を用いてソフトウェアの「魔法」を解き明かし、その仕組みを理解することが、コンピュータサイエンスの学位を持つ者だけのものではないことを示します。
全文翻訳
スマートフォンやラップトップを使用しているとき、その下にある物理的な現実の途方もなさを忘れがちです。そのシームレスな体験の裏には、物理学者、化学者、数学者、エンジニア、プログラマー、デザイナーによる数世紀にわたる努力があります。あなたのデバイスの中には、文字通りの岩石が、ほぼ完璧に精製され、微細な回路で刻まれたものが入っています。これらの回路内の電子の流れを制御するだけで、私たちは岩石に計算させ、記憶させ、思考させることができ、精神的な労力を省くことができます。単一の操作は1ナノ秒未満で完了し、デバイスはあなたがまばたきする間に数十億回の計算を実行できます。これらすべてが非常にシームレスに機能するため、ユーザーとして私たちはすべての複雑さから解放され、目の前のタスクに集中できるようになります。
(1998年、Intel Pentium II Dixonプロセッサのダイの顕微鏡写真。各長方形の領域は、データを保存したり、計算を実行したり、特定の回路をアクティブにしたりする、約2平方センチメートルのシリコンにエッチングされた独立した機能ブロックです。目でもメモリとロジックを区別でき、左側の大きくて均一なグリッドはキャッシュメモリ(数百万個の同一の記憶セル)であり、右側の不規則なブロックは計算回路です。出典: Wikimedia Commons)
しかし、私たちはその仕組みを無視することができますが、ソフトウェアが私たちの生活のより多くの部分を支配するにつれて、そうすることがますます困難になっています。実際、デジタル世界は今や、物理世界と同じくらい私たちの日常の意思決定に影響を与えています。物理環境を理解するために物理学や生物学の基本を学ぶのと同じように、デジタル環境をナビゲートするためにはソフトウェアの理解が不可欠になっています。この基本的なリテラシーなしでは、私たちの時間と注意を引きつけ、それらがどのように機能するかを知らないことから生じる不安を餌にするように設計されたシステムによって、受動的に管理されたり搾取されたりするリスクがあります。この理解と明晰さがあれば、私たちはテクノロジーをより良く利用し、デジタルセキュリティについて情報に基づいた意思決定を行い、さらには私たち自身の特定のニーズのためにソフトウェアを構築する主体性を得ることができます。
この記事の目的は、ソフトウェアの「魔法」を取り除き、その仕組みを理解することがコンピュータサイエンスの学位を持つ者だけのものではないことを示すことです。これを達成するために、私はできるだけ専門用語を避け、必要な概念のみを導入し、第一原理思考を用いてそれらを構築していきます。裏側では、コンピューティングは技術仕様の乾燥したリストではなく、人間の創意工夫と実践的な問題解決の魅力的な物語であり、新しいレイヤーが前のレイヤーの上に構築されていきます。この物語をたどることで、あなたは明確なメンタルモデルを構築し、デバイスを使用する際に舞台裏で何が起こっているのかについて、より良い明晰さを得ることができます。テクノロジーがどのように機能するかだけでなく、あなたを保護するために組み込まれた目に見えないセーフガードも理解できるようになります。私はこの記事を可能な限り簡潔に保ち、これらのアイデアがどのように形成されたかを示すために必要な歴史的文脈のみを保持しました。
私たちの世界のほとんどの問題解決は、天気を予測したり、飛行機の飛行経路を計算したり、橋の構造的完全性をチェックしたりするなど、数学的な計算を伴います。元々、「コンピューター」は単にこれらの計算を手作業で行う数学者の部屋であり、一部の計算には数日かかりました。戦時中や宇宙開発競争の時代には、弾道ミサイルや宇宙ロケットの軌道を計算することが、何千もの複雑な方程式を解くことを必要とし、さらに重要性が増しました。わずかな誤差でもロケットが爆発したり、ミサイルが目標を外れたり、橋が崩壊したりする可能性があるため、これらの計算は何度も検証する必要がありました。このプロセスは非常に遅く、高価で、エラーが発生しやすかったのです。
(1949年、エドワーズ空軍基地のNACA高速飛行試験場コンピューター室。「コンピューター」は機械よりも前に職業名であり、これらの数学者は手作業で試験飛行データを処理していました。出典: NASA)
信頼性が高く迅速に計算を実行できる機械が緊急に必要とされていました。科学者たちは、数え方をシミュレートできる物理プロセスを探し、その初期の試みの一つが、連動するギアとレバーから作られた機械式計算機でした。しかし、それ自体にも問題がありました。機械部品は時間とともに摩耗し、絶え間ないメンテナンスが必要で、根本的に遅かったのです。
(1642年、パリの工芸博物館にあるブレーズ・パスカルが発明した機械式計算機「パスカリーヌ」。各ダイヤルは10進法の1桁を設定し、結果は上の窓の列に表示されます。シミュレーターの下部と同じ数字のホイールとキャリー機構を備えています。出典: Wikimedia Commons)
下のシミュレーターは、機械式計算機の基本的な構成要素を示しています。各10進数(百、十、一)の数字ホイールの列で、車のオドメーターと全く同じです。1を加えると、一の位のホイールが1桁前進します。9から0にロールオーバーすると、キャリーピンが作動し、十の位のホイールを1桁前進させます。十の位のホイール自体が9だった場合、そのキャリーピンも作動し、百の位のホイールを同じように引きずります。各ホイールは、キャリーピンを介して一緒に回転します。ホイールは通常のギアのように常に接触しているわけではありません(それだとすべて同じ回転速度にロックされてしまいます)。キャリーピンは、10回転に1回だけ、その瞬間に次のホイールに係合するために伸びてきます。さらに多くのホイールを追加することでより大きな数をサポートでき、回転方向を変えたり、より多くの機械部品を追加したりすることで、他の計算もできると想像できます。
Mechanical CounterValue: 0000123456789Hundreds0123456789Tens0123456789Ones各ギアはクリックごとに1歯前進します。9から0に戻るとき、そのキャリー歯が下のピニオンをトリップさせ、次のギアを1歯前進させます。Increment (+1)autoplayreset
本当の飛躍は、機械部品から電気へと移行し、電気スイッチを基本的な構成要素として採用したときに起こりました。家庭の物理的な電気スイッチのことではなく、電圧を印加することで自動的に制御されるスイッチのことです。電気スイッチには2つの状態があります。開(電流が流れない、0または偽を表す)と閉(電流が流れる、1または真を表す)。これらのスイッチを異なる方法で配線することで、論理的な決定を下すことができます。これらの構成の最も基本的なものは、論理ゲートと呼ばれます。ANDゲート(直列): 2つのスイッチを順番に配置した場合、スイッチAとスイッチBの両方が閉じている場合にのみ電気が流れます。ORゲート(並列): 2つのスイッチを並べて配置した場合、スイッチAまたはスイッチBのいずれかが閉じている場合に電気が流れます。NOTゲート: 「通常は閉じている」(デフォルトで電流を流す)ように設計されたスイッチで、電圧が印加されたときにのみ切断され、電流を遮断します。
Switch CircuitsAND (Series)OR (Parallel)NOT+-A0B0bulbA B │ bulb0 0 │ 00 1 │ 01 0 │ 01 1 │ 1click terminal A or B to toggleSwitch A = 0, Switch B = 0 ⇒ Bulb = 0Series Circuit: スイッチAとスイッチBの両方が閉じている(1)場合にのみ、電球に電流が流れます。これらの3つのゲートの組み合わせを使用して、どれほど複雑であっても、あらゆる論理規則を構築できます。任意の論理規則を、入力の組み合わせを出力(ONまたはOFF)にマッピングするテーブルと考えてください。このテーブルをハードウェアで再現するには、出力がONになる行にのみ焦点を当てる必要があります。各ON行の回路を構築するには、ANDゲートを使用してその正確な入力の組み合わせを検出します。その行でOFFになるべき入力がある場合は、まずNOTゲートを通して実行します。これにより、OFF信号がONに反転し、ANDゲート(すべての入力がONの場合にのみ発火する)が満たされます。最後に、最初のターゲットの組み合わせまたは2番目の組み合わせが満たされた場合に全体の出力がONになるため、すべての行検出AND出力を単一のORゲートに供給します。すべての論理規則はテーブルとして表すことができ、任意のテーブルはこの正確な方法を使用して構築できるためです。