---
title: ソフトウェア
date: 2024-04-10T23:55:29.000Z
updated: 2026-01-08T14:51:03.450Z
url: https://baku89.com/ja/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2
---

# ソフトウェア

ソフトウェアの「柔らかさ」を、プログラミング概念の習得無しに理解するには？

[『コントロールについて』細金卓矢](/%E3%80%8E%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%80%8F%E7%B4%B0%E9%87%91%E5%8D%93%E7%9F%A2) を読んでいて感じたのは、ツールの機能を表現の可能性空間における部分集合として捉えるのは、ハードウェアに根ざした発想かもしれないということ。

真に柔らかい（soft）ソフトウェアは、それ自身がもつ表現の可能性空間への干渉・拡張手段や空間外へのホッピング能力を、それ自身の機能として提供する。だからソフトウェアとして設計されたツールが可能とする表現を「全体集合の中の小さな円」のような静的なイメージで捉えることに限界があるのでは。逆に言えば、現状存在する（細金さんが使われるような映像制作）ツールはそれだけ「ハードウェア」的に設計されているとも。

※ ソフトウェア的な性質を備えたツールを含めて空間的に捉える方法として「ツールは距離関数を規定する（[操作距離](/%E6%93%8D%E4%BD%9C%E8%B7%9D%E9%9B%A2)）」という考え方を推したい。細金さんの言うモデルは、円の中はユークリッド距離に近くなるが、円の外への距離は無限大になる（つまりどれだけ手数を掛けてもそこには到達できない）と一般化できる。

> ツールを熟知しないとその可能性空間の限界を認識できないように、「ソフトウェア」が本来可能とする可能性空間からなる可能性空間の限界や、現状のツールがカバーする可能性空間の恣意性を認識するには、現状（文字列ベースかどうかは兎も角）プログラミング概念に触れるしかない、という辛さ

[@baku89](https://x.com/_baku89/status/1775828759482147272)

表現の可能性空間があるように、「可能性空間」の性質にも様々な可能性があり、それらは「可能性空間の可能性空間」を成す。ソフトウェアの発明によって、可能性空間の基底の取り方や位相、探索のしやすさそれ自体が、操作可能な対象だとみなされるようになった。（パラメトリック・デザイン、オープン規格によるツールの直交性）

> これは本当にそうで、計算機がかなり特殊な発明だったことの一つの現れだと思います。\
> ただ、新しいのは人がソフトウェアを自由に作って実行できるようになったことだけで、その前段階として関数とか再帰とか概念自体はあったし、ハードの道具設計に使われてきたノウハウから学べることもありそう。

[@arcatdmz](https://x.com/arcatdmz/status/1776188426624340397) [#加藤淳](%E5%8A%A0%E8%97%A4%E6%B7%B3)

<https://x.com/arcatdmz/status/1776188426624340397>

ソフトウェアという考え方や、ソフトウェア上の概念コンピューターやプログラミングの成立以前から存在した。

- 数学的概念としての関数、再帰
  - ラムダ計算、集合論、圏論

- シャガード織機、解析機関

- 道具の[Orthogonality](/Orthogonality)

  - モジュラー・シンセサイザー
  - 工作機械におけるバッテリーやマルチツール、ビット

### 自然言語におけるプログラミング/ソフトウェア概念

[『プログラミング言語学をめざして』](/%E3%80%8E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E5%AD%A6%E3%82%92%E3%82%81%E3%81%96%E3%81%97%E3%81%A6%E3%80%8F)

- 多義動詞はアドホック多相だよね
  - 2を「足す」と、砂糖を「足す」。同じ「足す」でも、その目的語いかんで、算術の加算、料理において素材をブチ込む行為と、異なる操作を表すことができる。

- アドホック多相は、実装はプログラミングへの慣れが必要だが、利用は案外直感的。

  - Substance Designerの「Invert」ノードは、入力するテクスチャのチャンネル数や色深度に応じて自動的に「カラー画像用」「モノクロ画像用」「HDR用」といった異なる内部実装がディスパッチされる。
  - 多相性の無いビジュアルプログラミング環境は、データの形ごとに異なる種類のノードを使い分ける必要がある。Redshiftにおける `Vector3 Mix` `Scalar Mix` `Color Mix` のように。

- 代名詞は変数名

- 頻用する概念や操作のまとまりに名付けをすること（造語）は、カプセル化、サブルーチン化

- 言語における「節」は、クロージャ、あるいは無名関数。
  - 「『みじん切りにする』ことをすべての野菜に対して行う」 → 高階関数
    - `[onion, tomato, ginger].map(vege => chop(vege))`

- 言語は文法構造に対して言及できる → [True Macros](/True_Macros)
  - 「『矢を射る』の『を』は動作の対象であることを表す接続詞である」

### Texturalなプログラミングを経ずとも、期せずしてプログラミングと同等の表現力を手にした例

- 数値や変数名など、textualな表現を見ずとも、パラメーターを操作したり、互いに紐づけたりするUIは、パラメトリックな思考を育みつつも、教義のプログラミング（コーディング）の習得を必要としない。（[名付けの不要さ](/%E5%90%8D%E4%BB%98%E3%81%91%E3%81%AE%E4%B8%8D%E8%A6%81%E3%81%95)）
  - e.g. Fusion 360のConstraints機能
- After EffectsのEssential Graphicsは、字幕やタイトルのテンプレート機能に始まったが、実質的はクラスとして機能している。
- UI系ツールのコンポジション機能もOOPですよね

### 3つのソフトウェア

これまで、地球上には3つのソフトウェアが生まれた

1つめが遺伝\
2つめが言語\
で、3つめが文字通りの「ソフトウェア」

Hsgnさんいわく、2.5として社会が存在するのでは?

個人的には、それは言語による構築物\
ちょうどInternetがソフトウェアによる構築物であるように

言語は生き物に固有の生得的なもの、hard-wiredされたものから次第にソフトウェアとしての性質を経てきた

その本質は情報の構造化と伝達にあるのだが、\
最初は生物個体内の細胞間を流れるホルモン、\
生物個体間でやりとりされるフェロモン、\
鳴き声やジェスチャー、\
で、人間が言葉を発明し、言語によって「言語」そのものを表象出来た時から、\
それはソフトウェアとしての性質を完全に備えるようになった
