コードの可読性とか抽象化とか悪ふざけとかで悩む話

[当方執筆の技術情報に関するライセンス、免責事項、禁止事項](https://qiita.com/EarthSimilarityIndex/items/6b9bb2ccacb38aae15b1)

****

こんにちは。悪ノリ100％のコードから書き始めることが多いESIです。

悪ふざけと可読性と抽象化をどのぐらいの塩梅にするか、毎回悩みます。

# Esolang
悪ふざけの追求におけるひとつの極限として、各種難解プログラミング言語が思い浮かびます。
実用性を度外視することで「プログラミング」とは何かについて思索する契機ともなりますし、一種の現代芸術として捉えることも可能でしょう。Brainf*ck とか Befunge とか Shakespeare Programming Language とか、一笑に付せない凄みを感じます。

# 自前主義
そして四角い車輪の再発明に至る。

ところで、人が何かを学ぶという行為には「車輪を再発明する」プロセスが入っていますし、自己複製機械としての「自己複製する車輪」を仮定すると、車輪を生み出すプロセスの無限の再発明過程がそこに現れます。私は何を言っているんだ。

## 車輪の再発明の類型のうち、肯定的に捉えても良さそうなもの
### 生命現象
#### 収斂進化
基本的に「親から子」にのみ「遺伝」は発生します。例外としては遺伝子の水平伝播。遺伝情報が基本的には水平的にやりとりされないため、車輪の再発明が出来ることは生命存在の存続における必須技能と言っても良いでしょう。

### 個人
#### 数学の教材としての証明問題
三平方の定理の証明バリエーションとか大好き。みんなよく考えるよなぁ。
認知症予防にも良いのではないでしょうか。老人ホームで証明問題を嗜む老人達の中から未解決問題の解決の糸口をつかむ者が現れる未来をふと夢想しました。

#### Minecraft で ○○ を再現
制約は創造の始まりかもしれない。

# 単純化しすぎる？
"Make everything as simple as possible, but not simpler." by アインシュタイン

## 適切な抽象化作業の程度
単純に短ければ短いほど良いコードとは言えないようです。時と場合によって適切な単純さ・複雑さが求められるのでしょうが、私の辞書に「臨機応変」の文字はない！……威張ることではありませんね。しかし本当に難しい。

抽象化（及び悪ふざけ）の適切な配分には、今後も中心課題として挑みつづける必要がありそうです。

# 言語の壁
まるで初めて聞く外国語のようだ。 by 親

## 自然言語とプログラミング言語
~~面倒くさい作業は親に丸投げしようとして~~年取った両親の老後の楽しみのひとつとしてプログラミングを始めてもらおうと試みていますが、比較的平易とされるスクリプト言語で書かれたプログラムであっても異質さを感じてしまうとのこと。

原因について考えつづけていますが、まず、人間の脳とチューリング機械では設計が違います（面白いことに、これが[遺伝子発現のメカニズム](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%B3%E3%83%88%E3%83%A9%E3%83%AB%E3%83%89%E3%82%B0%E3%83%9E)と[チューリングマシンのアルゴリズム](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%9E%E3%82%B7%E3%83%B3#%E6%A6%82%E8%A6%81)の間であれば相当程度相似性を見出すことが可能です、たぶん）。

外国語であれば、目的意識 -- 例えば好みにストライクなあのこを口説く、のような -- さえはっきりしていれば労せず習得出来るのにもかかわらず、プログラミング言語の習得に困難を感じる人がいるのはこの辺に原因があるのかもしれません。

ところで、身近な（手動）デジタル計算機として「そろばん」があります。これを改変し、4ケタ（ないし8ケタ）の2進数を扱える手動式計算機械とすることで電子計算機、ひいてはアルゴリズム、そしてプログラミングへの理解を深めることが出来ないか、~~両親を実験台にして~~模索するつもりでいます。

# なぜ悪ふざけにこだわるのか

>遊びをせんとや生れけむ、戯れせんとや生れけん、遊ぶ子供の声きけば、我が身さえこそ動がるれ。

※ 梁塵秘抄より。NHKの教育番組「にほんごであそぼ」での朗読が心に残っています。

人間は何を以って人間か？知性は何を以って知性か？

いつの日か、機械がただ楽しむために遊び始める時、その時こそが、機械が真に知性を獲得した瞬間と言えるでしょう。

いつの日か、人が笑い遊ぶことを忘れ去る時、その時こそが、人が人たる時代の終焉と言えるでしょう。



# 参考文献
シェルスクリプト Tips | UNIX & Linux コマンド・シェルスクリプト リファレンス
https://shellscript.sunone.me/tips.html

シェルスクリプトの書き方
https://www.allbsd.org/~hrs/blog/2017-01-01-shellscripting.html

プログラマーの君！ 騙されるな！ シェルスクリプトはそう書いちゃ駄目だ！！ という話
https://qiita.com/piroor/items/77233173707a0baa6360

今すぐBrainf*ckを始めるべき10の理由
https://qiita.com/Ark/items/d87e711d2a988d02de2e

今後必要にはならないプログラミング言語
https://qiita.com/hogefuga/items/24209878230a71fb4d20

Minecraftってチューリング完全らしいよ
https://qiita.com/hnymA/items/f1da7172f2693617c3c3

抽象化の能力と限界
https://qiita.com/jkr_2255/items/f2a5961997a37b42ac9d

適切に抽象化されたコードとはなにかって話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
https://nekogata.hatenablog.com/entry/2013/01/29/225900

プログラミングにおける過度な抽象化についての、若干のメモ - Line 1: Error: Invalid Blog('by Esehara' )
http://bugrammer.hateblo.jp/entry/2013/07/23/005601

MESSAGE | KOJIMA PRODUCTIONS
http://www.kojimaproductions.jp/#message

ヨハン・ホイジンガ - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%A8%E3%83%8F%E3%83%B3%E3%83%BB%E3%83%9B%E3%82%A4%E3%82%B8%E3%83%B3%E3%82%AC

エイダ・ラブレス - Wikipedia
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A4%E3%83%80%E3%83%BB%E3%83%A9%E3%83%96%E3%83%AC%E3%82%B9