先に明確な目的がある場合はその限りではないのだが、基本的に車輪の再発明はしないと 技術の発展は止まる のではないかという持論を持っている。
UnityやUnreal Engineのリリースにしてもより低レイヤーの理解がないと動作速度の改善など見込みようがないし、開発言語から何かをビルドする経験というのは決して無駄にはならない。
こういった、ちょっとズレたコメントが散見されることがあるので異論を呈したい次第
例:
>コメント欄にて
WindowsやLinuxにはtreeコマンドが存在しています。
treeコマンドと比較してあなたが作成したプログラムを利用するメリットは何ですか?
車輪の再発明をすべきケース
シンプルなケースで言うと、まず新しい外観のButtonコントロールやプルダウン型のテキストボックスを用意したいというのがあったとする。既にあるフレームワークで簡単に実現できるなら、ぜひそうすべきである。
しかし、フレームワークの仕様的にこのプロパティを公開していないから設定できないというコントロールもあったりする。WPFではコンボボックスなどがそうだ。Textプロパティがない。
Figma(https://www.figma.com/ja-jp/) というフレームワーク等あるんで、そういうものの扱いを学ぶのもいいけど。
こういう低レベルで根本的な振る舞いを定義したいケースでは、車輪の再発明をしてその根本レベルの動作を学ばないと、そこから発展させることは困難だ。
自分のアイディアが既存のライブラリやフレームワークで実現できない場合は是非車輪の再発明を試みよう。
車輪の再発明をすべきでないケース(時間の無駄という意味で)
・単純にゲームを作りたいだけとか、仕組みを学びたいだけならソースコードを見るだけで十分で、あとは豊富なライブラリを使えばよい
単純な学習目的での再発明
・プログラミングの写経は最も非効率的な学習方法でもある。
ワーキングメモリなどの不足ははっきり言って些細な事で、PC内のドキュメント類を整理すれば済む話である。
最近、フォーンアイルなるゲームと作者にまつわる逸話を知ったのですが、才能に欠ける人ほど避けるべき学習方法だと私は思います。
いろいろなソフトウェアや業界の動向を知ろう
そもそもの話、最新のフレームワークやツール類を使えば出来てしまう事もけっこうあったりするので(回り道が悪いとは言わないが)、こうした見聞を深めておくのはメリットも大きいです。
それらを知った上でその発展形を作りだすのを目的にしているなら、車輪の再発明はむしろ出来ないと話にならないのではないかというのが持論です。
ゲームの基本的な振る舞いだとか、ファイルの操作関連だとか、そういったものはライブラリ化、クラス化が施されてGUIでの統合開発環境(IDE)や言語内で自分で組めるわけですが、やはり低レベルで発展形を作ろうとするとそう容易ではないということです。
それはGrapeCityの高額な有償コントロールがある事からも明らかでしょう。
現行でよく使われるフリーソフトの大半が古いままという現実について
中には、古いソフトを最新のWindows11環境で動かそうとすると不具合が出るものもあります。こういったものを最新の言語で再実装するのは結構有用なのではないかと考えています。
CSharp、C++、FSharpにRustやGoなどいろいろあるんで、そういったものの再実装に挑戦してみてはいかがでしょうか。
例:現在手掛けてる「Twitter用に動画変換するやつ」の再実装(と魔改造)
ちなみにffmpegのライセンスの関係でソースコードの非公開は諦めました(笑)明らかに不便になりそうなので