コンピュータを動かすためには「プログラミング」という作業が必要である、ということは多くの方がご存じであると思います。この作業によって書かれた「プログラム」によって、コンピュータを動作させるための「ソフトウェア」が構築されています。スマートフォンに入っている「アプリ (アプリケーション)」もソフトウェアの一種です。
大規模なソフトウェアを構築するためには、口絵に示したようなプログラムをある程度の量書かなくてはならないわけです。ドラマや映画、アニメに登場するスーパーハッカーには私も憧れるわけですが、彼らのように猛烈に沢山書けばよいかというと実際はそんなことはなく、きちんと部品分けして、ある程度整然と書く必要があります。
ここでは部品とは、自動車で言うところのエンジンとかステアリングユニットくらいの感覚で考えてください (ボルトやナットなどではなく)。
部品分けすると何がうれしいかというと、予め作っておいた部品を再利用したり、組み立てたりすることで、物が作れるということです。何もないところから物を作ることに比べると、はるかに効率的です。
このようなことはプログラミングやものづくりに限ったことではなく、勉強や仕事においても同様のことがいえるのではないでしょうか。もう少し掘り下げてみましょう。
部品は再利用できると言いましたが、例えばアプリの画面に配置されている「ボタン」などはこれに当たります。このボタンというものの見た目や挙動はアプリを問わず共通しています。見た目は「押せそう。」と思わせますし、押し込んで離したら何かが起こるという挙動をしています。あるアプリでは押し込んだ瞬間に何かが起こるのに、別のアプリでは押し込んで離したら何かが起こる、というのでは使う側も困ります。勉強でも公式を覚えたりしますが、公式を使うことで例外なく必要な解が導けるでしょう。仕事では書類の様式が定められているのに似ています。
しかし沢山の部品を集めてきても、その「組み立て方」が成っていなければ、役に立ちません。公式を覚えていても、大きな問題を解くには解法が身に付いている必要がありますし、ワークフローが確立されていなければ書類の様式も意味を成しません。
部品を役立てるには、目的に合わせた組み立て方が必要です。プログラミングの世界 (もっといえば、ソフトウェア工学の分野) では、その組み立て方のことを「フレームワーク」といっています。プログラミングに身を投じていると、ウェブアプリケーションや業務用ソフトウェア、ゲームなど、様々なソフトウェアを作ることを目的としたフレームワークに出会うことができます。すでに確立されているフレームワークを導入することで、開発者は部品の組み立て方に苦慮することなく、ある程度のソフトウェアを作ることができます。
似たような目的のものを作るのであれば、同じフレームワークを利用することができます。つまり、部品だけでなく、フレームワークも再利用することができるということです。
このようにプログラミング (ソフトウェア開発) は「部品」と「部品の組み立て方」という再利用可能な2種類の要素に支えられているわけです。このおかげで開発者は、継続的なソフトウェア開発を維持し続けることができるのです。
プログラミングやもの作りだけでなく、勉強や仕事、趣味や健康管理なども継続的でありたいわけですが、さまざまな物事の継続性を維持するには、モチベーションだけでなく、この2種類の要素に似たものも必要であると考えています (※)。問題の解法が分かっていれば、問題ごとの特異な部分の解決に集中できますし、また勉強の進め方についてもノートの作り方など、知識のまとめ方が確立されていれば、新しい知識を得ることに集中できます。ワークフローが確立されていれば、現在の業務課題を解決することに集中できます。つまり、「組み立て方」の存在によって、先に進むために本当に必要な労力だけを費やせばよいことになります。これなら、頑張りが結果に結びつきやすくなり、無策でいるよりは続けられそうです。
※ 時には気合いを入れて「えいやっ」と片づけてしまうことも必要でしょう。その辺はバランスですね。余談ですが、局面ごとに「部品の組み立て方」を検討したうえで取り組むのか、「えいやっ」と片づけてしまうのかをうまく選択するための考え方もまた、長い目で見たときの「組み立て方」なのかもしれません。
ものを長続きさせることの苦手な私は、さまざまな活動にフレームワーク的な考え方をあてはめられないか試行錯誤する日々ですが、皆さんが何かを長続きさせるための秘訣はどのようなものでしょうか。