* 「自分で書いたプログラムを自分で使おう」論 -(by [[K]], 2020.06.10) ** (1) はじめに -ここを読む前に前提として''[[p20200311a]]''を読んでください。ここの話はこの話の続きにあたります。 ** (2) このページのテーマ -最近、世間では「自分で書いたプログラムを自分では使わない」というのがよくあるケースになっているように思います。自分で使わないことをもったいないとすら思っていなくて、当然だと思っているように感じられることすらあります。 -しかし私はその考え方は間違っていると思います。それをここに書きます。 ** (3) 本題 -とはいえ、話は簡単です。 -まずプログラムを作ったとして、それが誰にも使われなかったら、そのプログラムは無駄です。作る過程で、開発者のスキル向上はあったかもしれません。それはよいことですが、しかしそんなスキル向上も、もし別の「無駄になるもの」を作るためにのみ使われるのなら、結局は大いなる無駄です。・・・開発に何ヶ月かけようとも、プログラムが何万行に及んでいたとしても、それは「作っているときに楽しかった」以上の意味はありません。 -これに対して、もしあなたが10行程度のスクリプト(バッチファイル)を書いて、それを10回以上使ったことがあるとしたら、そのスクリプトは間違いなく有用です。たとえその開発に10分間しかかかっていなかったとしても、有用です。文句なく有用です。あなたはそのプログラムのおかげで(わずかかもしれませんが)生活を豊かにできたのです。 -もちろん、プログラミングは楽しむためだけにやっているとか、楽しむことが第一で他のことはそれほど重視しないという人はいるかもしれません。その場合はそれはそれでいいと思いますので、私の指摘はあたりません。 -プログラミングは楽しいです。でももし同時に役立つようにもできるのなら、それに越したことはないですよね。一石二鳥です。もしそう思うのなら、この先も読んでみてください。 ---- -自分で使うかどうかはともかくとして、「作ったプログラムがたくさんダウンロードされて、多くの人に使ってもらえたらうれしいな」と考える人は結構たくさんいるように私には感じられます。私もその気持ちはわかります。 -しかし、例えばWindowsの開発元であるマイクロソフトが、実は普段はLinuxを使っています、という話が「仮に」あったとしたら、あなたはどう思うでしょうか。私は、Linuxはそれほどすごいのかーと思います。・・・一般に、開発元が自作のツールを使わずに競合作品を使っている場合、それは「このツールはダメなんです」と主張しているのと同じ効果があると思います。・・・こんな状況で、そのツールを使いたいと思うでしょうか。いいえ、競合作品のほうを使いたくなります。 -だからこそ、もし自分の作品を他の人にも使ってもらいたいと思うのなら、まず自分自身が使うべきなのです。・・・もしなんとなく使う気になれなかったら、どうしたら自分が使う気になれるのか、どんな機能が足りないのか、それを真剣に考えるべきです。 -「こんな機能を付けても、どうせ自分以外の人は使わないだろうな」と思うことはあるでしょう。いいんです、それでいいんです。まずは自分が自分のために作っているのですからそれでいいんです。他人にも使ってもらうのは、その先にあることなので、最初から意識していてもしょうがないのです。 ---- -「自分のために作る」を意識するようになると、プログラマとしてのレベルは格段に上がります(少なくとも私はそうでした)。見た目とかはそれほど重要ではなくなります(最後にはやるんですが、とにかく後回しにするようになる)。かっこいいアルゴリズムよりも、シンプルで確実に書けるアルゴリズムを重視するようになります。新規性で悩むこともありません。 -そして、自分が作ったものを使わなくなってしまったときには、何度も「どうして自作のものを使わないのか、どうすれば自作のものを使うのか」をよくよく考えるようになります。そうやって自問自答することで、良いものを生み出す打率が向上するようになります。私はそう思っています。 ** (4) SecHack365のトレーナーとして -私は以前はセキュリティキャンプの講師をしていました。今はSecHack365のトレーナーをしています。どちらの立場でも、セキュリティに強い開発者の育成が私の使命でした。 -しかし私はどちらの時も、セキュリティより前に、「よい開発者」を目指してほしいと思っています。だからプログラミングを楽しめるようになってもらいたいですし、自分で作ったものを自分で使うようになってほしいです。これらをマスターできれば、後はほっとくだけで優秀な開発者になるだろうと信じています。その上で、時間があればセキュリティについて教えればいいと思っています。 -しかし私はどちらの時も、セキュリティより前に、「よい開発者」を目指してほしいと思っていました。だからプログラミングを楽しめるようになってもらいたいですし、自分で作ったものを自分で使うようになってほしいです。これらをマスターできれば、後はほっとくだけで優秀な開発者になるだろうと信じています。その上で、時間があればセキュリティについて教えればいいと思っています。 -もし時間切れになってセキュリティについて十分に教えられなかったとしても、それはそれで構わないと思っています。だって優先度が違うからです。・・・私はそういう考え方の人間です。 ** (5) 蛇足「なんでも自分で作らないと気が済まない病」について -私が20歳くらいのときは、 あいつは何でも自分で作らないと気が済まない性格なんだよ -みたいな悪口が普通にありました。この揶揄の意図は、つまり他人の作っているものを信用できず、自分ですべてを作ってその中で暮らすことが目的になってしまって、もはや「良いものを作ったから使っている」わけではない、という意味です。 -ちなみに私もこんな風に言われたことは何回かあります(意に介しませんでしたが)。 -賢明な人間なら、自分が作ったものだろうと、他人が作ったものだろうと、とにかくよいものを使うのだ、そんな風に教わりました。 -また、独自仕様のものがポコポコと作られて乱立すると、互換性がなくていい迷惑だ、みたいに言う人もいました。 -私は自分が「なんでも自分で作らないと気が済まない病」だとは思っていません。私が作るときは無目的に作っているわけではなく、何らかの具体的な改善を目指して開発しているからです。しかし、そんな私が、他人からは「なんでも自分で作らないと気が済まない病」に見えるということもわかっています。そんな誤解を解くためにあれこれと言い訳するのは時間がもったいないので、私は言われるままにしています。 -私は、「自分が作ったもの、他人が作ったもの、どちらも分け隔てなく比較して、良い方を使う」という考え方が優れているとは思っていません。もし差が大差ないのであれば、自分の作ったものに愛着を感じて、そちらを優先したっていいじゃないですか。使っているうちに改善されて、いつかは素晴らしいものになるかもしれないのです。みんなが使っているものを、みんなと同じように使っているだけで、何かいいことがあるのでしょうか。 -また独自仕様のものを作っちゃいけないなんて、それはとんでもない迷信です。どんなにすごいものだって、最初はみんな独自仕様です。何でも好きに作ったらいいのです。そしてそれが嫌なら無視して使わなければいいだけなんです。・・・そうやって競い合って、良いものが残ればいいんです。競争を阻害するような考え方が蔓延したら、最後に行きつくのは二流品であふれる世界です。 ** (6) それで、川合は自分で作ったものをちゃんと使っているんだろうな? -私もいろいろ作っていますが、そのうち、長らく使い続けているものはごくわずかです。 -(6-1)アセンブラ ''nask'' --私が2002年に最初のバージョンを作り(Windows版)、その後「第二世代OSASK」に移植して、その後もずっと使っています。私にとっては一番信頼できて一番使いやすいアセンブラです。 --しかし最近は自作の「ES-BASIC」がアセンブラ機能を持っているので、naskではなくES-BASICのアセンブラ機能のほうを使うほうが多くなっています。 -(6-2)APIブリッジ ''efg01'' --efg01は、自作OSである「第二世代OSASK」のアプリをWindowsやLinux上で動かすためのAPIブリッジで、2008年に作ったものです。主に上記のnaskを動かすために使っています。 --ちなみにefg01は、第一世代OSASKを自分がほとんど使わなくなったことが最初の開発動機で、「どうすれば自作OSのために作ったものを自分が使い続けられるか」ということを必死に考えた末にひねり出したものです。 --結果的に、この目的はうまく果たせたと思います。 -(6-3)リンカ ''bim2bin'' --本来はOSASKのリンカなのですが、tek圧縮をするというおまけ機能があり、このおまけ機能のためにずっと使っています。2003年ごろに作ったものだと思います。 -(6-4)自作OS ''「はりぼてOS」'' --自作OSとしてかなり有名かつ定番になったと思うので、「自作OSでもこういうことができます」というアピールをしたいときは、よく使います。最近では、ES-BASICを「はりぼてOS」に移植してみたりしました。 --「はりぼてOS」は、2006年に作りました。 -(6-5)仮想マシン ''OSECPU-VM'' --これはソフトウェアを小さく作るための技術が満載です。OSECPU-VMそのものをデモ以外の目的で利用することは少ないのですが、この仕様を自分で再度確認して、現在の設計に生かすみたいなことがよくあります。2013年ごろに作りました。 -(6-6)自作のライブラリ ''blaライブラリ'' --もともとは2010年に作っていたblikeライブラリがベースになっていますが、そこから何度も手入れをして、2018年にblaライブラリとして生まれ変わりました。 --このライブラリは、WindowsやLinuxでグラフィックを簡単に扱うためのライブラリです。私のES-BASICの開発でもこのblaライブラリを使って開発期間を節約しました。 -(6-7)自作のライブラリ ''kcl03'', ''kll00'' --どちらも2019年に作ったライブラリで、C言語での開発を便利にするために作りました。他人に使わせる気はほとんどなくて、自分で使って自分だけいい思いをしようと思っています(笑)。いやだって、ライブラリとしてリリースしたら、ドキュメントは書かなければいけないし、気楽に仕様変更もできなくなるので・・・。 --kcl03は汎用ライブラリで、kll00は言語開発支援ライブラリです。どちらもES-BASICの開発で使われています。 -(6-8)自作言語 ''ES-BASIC'' --簡単なことをささっとやるだけなら、私はいつもES-BASICを使っています。「この命令は機械語ではどう書くんだっけ?」というときにnaskを使うことが多かったのですが、もうES-BASICができてからはそういうこともほとんどなくなりました。 --2019年の作です。 //SecHack365でなにをやってきたか //規模を誇るな、規模を恐れるな * こめんと欄 #comment