プログラミング
「作る」と「関係する」の文化
Cultures of Making and Relating (blog.khinsen.net)
要約
この記事は、プログラミングの歴史を5つの文化(数学、ハッカー、エンジニアリング、マネジメント、ヒューマニスト)として分析した書籍『Cultures of Programming』に基づいて、これらの文化をテクノロジー全般および科学研究の慣行に関連付けて考察しています。著者は、これらの文化を「ソフトウェアを作る」文化と「ソフトウェアに関係する」文化の2つに大別し、プログラミングに限らず科学分野にも同様の対立や進化が見られることを指摘しています。特に、ハッカー文化とエンジニアリング・マネジメント文化の間の緊張関係、そして科学ソフトウェアにおけるこれら文化の変遷に焦点を当てています。
全文翻訳
『Cultures of Programming - The Development of Programming Concepts and Methodologies』は、Tomáš Petříčekによる最近の書籍で、5つの相互に関連する文化の視点からプログラミングの歴史を分析しています。この本には多くの興味深い洞察が含まれているので、ぜひ読んでみてください。少なくとも、最初の章だけでも読んでください。この記事では、これら5つの文化をテクノロジーのより広い世界と、科学研究の実践に関連付けようと試みます。この本で特定されている5つの文化は次のとおりです(私の要約):
数学的文化:コンピュータープログラムを、その特性が証明可能な数学的実体と見なします。
ハッカー文化:プログラミングを、実行中のマシンとの対話と見なします。
エンジニアリング文化:プログラムを、確立されたベストプラクティスに従った構築が、望ましい特性と経済的制約との間のトレードオフである技術的成果物と見なします。
マネジメント文化:ソフトウェアを、適切な組織構造によって品質が左右される工業製品と見なします。
ヒューマニスト文化:計算とプログラムを、人間の思考と表記法の拡張および外部化と見なします。
個人は通常、プログラミングに対する主要な態度を定義する主要な文化を採用しますが、文脈に応じて他の文化の視点も取り入れます。
私の最初の観察は、これら5つの文化が2つのカテゴリーに分類されるということです。ハッカー、エンジニアリング、マネジメント文化はソフトウェアを「作る」ことに関わっています。数学的文化とヒューマニスト文化はソフトウェアに「関係する」ことに関わっています。これら2つのカテゴリーは完全に独立しているわけではありません。たとえば、ソフトウェアが特定の形式的に証明可能な特性を持つことを気にするなら、ソフトウェア構築のすべての段階でその要件を考慮に入れるべきです。
私の2番目の観察は、これらの文化がプログラミングに特有のものではないということです。これは、エンジニアリングとマネジメント、つまり製造業をかなり長い間牽引してきたデュオにとっては最もわかりやすいかもしれません。エンジニアリングは技術的側面、マネジメントは人間の努力の調整に焦点を当てています。ハッカーについては、彼らを職人の生まれ変わりと見ています。彼らは、常に感覚からのフィードバックを統合しながら、手で何かを作るという同じアプローチを持っています。彼らはまた、一人で、または小さな自己組織化されたチームで働き、正式な教育よりも実践を通して学ぶことを好みます。ハッカーによって作られる特注の職人的ソフトウェアと、エンジニアとマネージャーの協力によって作られる工業的なマスマーケット向けソフトウェアの間のトレードオフは、オーダーメイドのワードローブとイケアの家具の間のトレードオフと非常によく似ています。
数学的文化は、学術分野としての数学そのものというよりも、数学に関連する形式的なアプローチをソフトウェアに適用することに関わっています。対照的に、ヒューマニスト文化はソフトウェアに関する文脈的推論を強調します。形式化には非文脈化が必要であり、これが形式的に証明可能な特性と文脈的に関連する特性との間に緊張を生み出します。簡単に言えば、形式手法はいくつかの特性について厳密な証明を提供できますが、それらの特性はアプリケーションの文脈で最も関連性が高いとは限りません。形式的推論と非形式的推論の間の同様の緊張は、他の知的分野にも存在します。たとえば、多くの科学分野では、研究において定性的(非形式的)アプローチと定量的(形式的)アプローチの両方を使用しており、どちらか一方を好むサブカルチャーが存在します。
初期の科学者は、職人やハッカーと同じ精神で働いていました。一人で、または小さなチームで、ものを作る(器具、実験装置)ことと観察することの間を交互に行い、個人の自律性を尊重しながら研究を支援する非階層的な機関(学会)で組織されていました。より最近では、一部の科学活動が産業化され(この以前の投稿を参照)、管理原則に従って組織されています。したがって、科学は、ハッカー文化とエンジニアリングプラスマネジメント文化の間の緊張の独自のアナログを持っています。マネジメント文化は、主に資金提供者によって外部から課せられるものと見なされており、研究の本質的に探索的な性質とは特に深刻な不一致です。
科学ソフトウェアは、プログラミングの文化と科学研究の文化の両方を受け継いでいます。1950年代から1970年代にかけての初期の数十年間、科学は依然として支配的に職人芸であり、その実践者はソフトウェアの作成においてハッカー文化を採用していました。これは通常、Fortranコンパイラ以外の依存関係を持たない小規模から中規模のFortranプログラムでした。少数の研究者は、このソフトウェアをジャーナル記事のように公開およびレビューすることにおいてヒューマニスト文化を採用しました。研究ソフトウェアのレビューに関する私の記事を参照してください。ソフトウェアのサイズと複雑さが増すにつれて、再利用可能なライブラリの重要性が高まり、1970年代のLINPACKがその初期の例です。ソフトウェア開発は研究そのものとは異なる活動となり始め、エンジニアリング文化が支配的になり、最終的には研究ソフトウェアエンジニアという独立した職業の確立につながりました。しかし、研究プロジェクトの一部として作成されるソフトウェアでは、ハッカー文化が引き続き優勢であり、今日では計算ノートブックやワークフローの形式をとることがよくあります。
定量的科学における数学の重要性を考えると、数学的文化が研究ソフトウェアにおいてわずかな役割しか果たしていないことは驚くべきことです。私の推測では、これはソフトウェアのための成熟した形式手法の不足によるものです。定量的科学は、最先端の数学研究よりも、数十年前からよく理解されている数学に主に依拠しています。この原則をソフトウェアの形式手法に適用すると、標準的なソフトウェア開発ツールで広く利用可能な唯一の形式手法として、コンパイラによる静的型チェックが残ります。科学者は、静的型チェックを受け入れるか軽蔑するかという点でソフトウェア開発者と違いはありません。これはおそらく、エンジニアリング文化とハッカー文化の間の緊張の最も目に見える表現でしょう。