mattn氏が実践しているエンジニアリング最適なメモ術。アウトプットを継続するための方法論

2024年6月18日

mattn

大学卒業後、ソフトウェアハウスやSIerなどでソフトウェア開発に携わる。vi派生のテキストエディタVimの日本語化やプラグイン、Go言語などでOSS(オープンソースソフトウェア)の開発・コミュニティ運営に参加し、2019年からGoogle Developers Expert。2021〜2023年 GitHub Stars。著書に『みんなのGo言語』(2016年、2019年に改訂2版、技術評論社、共著)、『Go 言語プログラミングエッセンス』(2023年、技術評論社、単著)がある。関西在住。

X:@mattn_jp

GitHub

はじめに

前回はアウトプットとは何か、何のためアウトプットするのか、についてお話しました。筆者はこれまで、アウトプットのやり方で悩んでいる方々に、どうやったらアウトプットを上手く出来るようになるか、という質問を何回か受けたことがあります。そしてアウトプットに関する悩みは、意外と一般的な悩みであることも知っています。

ですので、ほかの皆が出来ているはずだから、自分が出来ないのは自分が一般的なエンジニアに及ばないからだ、と悩む必要は全くないのです。

前回にもお話させていただいたように、人によって置かれている状況はさまざまです。

しかしながら、ちょっとしたきっかけや習慣の改善をするだけで今よりもアウトプットできるようになるものです

今回は、筆者がどうやってアウトプットしているのか、どうやってモチベーションを継続しているのか。そういったお話をさせていただこうと思います。

いまアウトプットがうまく出来ないと悩んでおられる方にも、ほんの小さなルールに従うだけでアウトプットを持続することができます。ここでご理解いただきたいのは、この記事で紹介しているのはアウトプットを継続する方法であり、アウトプットの質や量を増やす方法ではないという点です。

筆者のアウトプット方法

やりかたは人によってさまざまだと思います。これから解説する内容が全ての人にとって正解ではありません。これは筆者が長年 OSS に携わってきた中で、一番自分にとって負荷がなかったやり方というだけの話です。

メモを取る

筆者のアウトプットの方法は昔からほぼ変わりません。それは小さな TODO リスト(やることリスト)をつくることです。

  • ・やることリストを積む
  • ・やることリストから選別する
  • ・やった結果をブログにする
  • ・やる予定がないやることリストを消す

とても簡単そうに見えるかもしれませんが、このメモを取る、TODO リストをマメに更新する、というのは意外と面倒です。人から言わせると一種のスキルとでも言えるくらい、得意な人と不得意な人に分かれます。もしそういったメモを取るということへの苦手意識があるならば、他の方法を探した方が良いでしょう。

やることリストを積む

まずは TODO を積みます。そんなに気合いを入れる必要はありません。ただ単にインターネットで見かけた面白そうなネタを、記憶から消えないように取り留めておくだけです。お好きなテキストエディタでお好きなフォーマットで書き留めてください。

オンラインツールを使うのでも良いと思います。

筆者は普段から Vim というテキストエディタと Google Keep を使っています。開発 PC では Vim を使い、memolist という Vim のプラグインを使ってメモを取るようにしています。

書いたメモは Markdown で保存されていて、メモを置いてあるフォルダは自動で Dropbox にバックアップされるようにしています。

このメモには思い付いた時に、1ファイルの単位で書き込むようにしており、特にこだわりもなく体裁もそれほど整えずに書いています。

これは、とにかく速くメモを取るための、筆者なりの方法です。大事なのは記憶から消えてしまわないうちにメモを取ること
ですので、 URL を残しています。
誰かが X(旧Twitter)で発言した有益な内容なのであれば、そのツイートの URL を貼っています。

当然ですが時間があるなら体裁も整えてメモするのが良いです。のちのち、これがブログ記事のベースになるからです。

zenn のスクラップブックは便利

zenn という技術者向けブログサービスがありますが、zenn のスクラップブックという機能を使うと、公開メモのような物が作れます。そちらを使っても良いでしょう。スクラップブックを使うとメモがいつの間にかアウトプットになってしまうので、やり方によってはとても便利になるでしょう。

筆者も今は Vim というテキストエディタを使っていますが、いずれ他のツールにスイッチするかもしれません。

メモは引き出し

さて、よく「プログラミングの勉強をしており、私もメモもしているのに全然上達しない」と仰る方がいます。それはおそらくメモの取り方が間違っているのだと思います。

そう思っておられる方の全てが当てはまるわけではありませんが、多くの方はメモが引き出しになっていないのが理由だと思います。

昔の人はよく「書くことで脳に刺激が与えられるので記憶できるようになる」と言いました。確かにその効果はあり、受験勉強等でよく言われる話でした。しかしプログラミングで必要なのは「この情報があったかどうか、あるならどこにあるのか」だけでいいのです。そしてそれを引き出すのはデジタルデータであればよく、検索できることが最も重要になるのです。紙のノートに書いた情報は検索できません。あとから検索できるようになっていないデータは取っても意味がありません。

大事なのは、引き出しをたくさんつくることだと思っています。

よく「やることリスト」として、ブラウザのタブを残すという方法を使っておられる方がいます。気持ちはすごく分かります。新しいプログラミング言語を見つけた時に「あとで触ってみるぞ」という気持ちでブラウザのタブとして残しておくというのは、誰しもがやりそうなことです。しかし、ブラウザのタブには優先度がありません。補足情報もありません。検索もできません。また、不意に消してしまう可能性もあります。

筆者にとってはブラウザのタブはベストな方法ではありませんでした。

やることリストを選別する

さてメモを取ることで、中にはもっと手を動かして深堀してみないと情報が確かかどうか分からないものもでてきたと思います。そういったストックしておいた情報を時折、整理するなどして見つけてきては、深堀してみる。そして成果がでればブログといった形でアウトプットする、という方法を筆者は繰り返しています。例えば今から取れる自分の時間が1時間くらいしかない時には、ササッと調べものだけして終えたいというケースもあるでしょう。

そんな時に「1時間くらいで終わりそうなこと」を探しています

ですので、やることリストは溜まる一方です。中には数ヵ月前にメモして残している物もあります。しかし、おおよそそれくらい長くストックしておいたものは、今後も着手することはおそらくないですし、それくらい賞味期限を過ぎてしまったものはアウトプットしたとしても他の皆の興味を集めないと思います。

前号でも書いた通り、アウトプットを持続するモチベーションのひとつは、ブログ等を書いて周りからリアクションを貰うことです。せっかくブログを書いたのですから、少しでも多くの人に読んでもらいたいものです。

筆者が最近、メモに残しているリストはおおよそ以下のようなものです。

  • ・Kubernetes の面白そうな Helm
  • ・Go 言語の面白そうなライブラリ
  • ・WASM を使った技術
  • ・新しいクラウドサービス
  • ・新しいプログラミング言語

これはあくまで筆者の「最近の興味」なので、数週間または数ヵ月後には変わってきているかもしれません。当然ですが、これらの情報を全て消化できる訳ではありません。1日は24時間しかありませんし、起きて活動できる時間なんてたかだか半日です。仕事をしていれば自分の時間はほぼありません。多い人であれば毎日2〜3時間程度、少ない人であれば1週間に2〜3時間程度、自分の時間が取れればいい方で、その限られた時間でこれらのストックを全て消化するのは無理なのです。

そして実際に手を動かすタイミングでは、何をやりたいのか決まってないことの方が多いはずです。例えば新しいプログラミング言語を習得したいとしましょう。そのプログラミング言語で何ができるのかすら、調べられていません。もしかするとそのプログラミング言語は誕生したばかりで、実は大した機能を持っていないかもしれません。そういった場合にはボツになってしまいます。早めにそれがメモを残しておくべきものなのかを把握し、残しておく必要がないのであれば、思い切って削除してしまうといいです。そういった情報は検索を遅くし、さらには情報のメンテをする時に邪魔になってしまいます。

インプットの際に使ったゴミを残しておく

これも筆者独自のやり方なので全ての人に当てはまらないかもしれません。

新しいプログラミング言語やライブラリを深堀したい時、以下のようなフォルダをつくり、その中にゴミのようなコードをたくさん書き溜めます。

~/dev/xxx-sandbox

※ xxx はプログラミング言語名やフレームワーク名

とても単純なコードです。helloworld、JSON を読み込む、ソケット通信をする、そんなレベルのコードがたくさん残っています。ゴミコードですが捨てる必要はありません。むしろ、その単純なレベルのコードは取って置いておくと良いでしょう。きっともう1度見返すことになるかもしれません。

定番のやることを決めておく

さて、新しいプログラミング言語を見つけ、それでもやることを思いつかない、そんなこともあると思います。
そういう場合には、お決まりのパターンを見付けておくと良いです。例えば以下のような物です。

  • ・他のプログラミング言語との比較ベンチマークを取る
  • ・JSON パーサを実装する
  • ・LISP インタプリタを実装する
  • ・HTTP サーバを実装する

実はこれらは筆者がよくやる、お決まりのパターンです。

Go 言語では LISP エンジンを実装しました。Zig 言語では LISP エンジンも JSON パーサも実装しました。過去に C言語 で LISP エンジンを実装したことがあります。また C++ では JSON パーサも実装しました。

これらは単純に「ネタが見つからないから」という理由だけで、お決まりのパターンをやっている訳ではありません。そのプログラミング言語が、JSON パーサや LISP エンジンを実装できるだけの言語機能を持っているのであれば、おおよそ実用のために必要な機能を持っているはずという確認の意味と、それを実装してみることで、対象プログラミング言語の文字列処理や数値演算といった基本文法などが自ずと身に付けられるという理由です。そして、JSON パーサの実装や LISP エンジンの実装は、実は各言語でそれほど大きな違いがないのです。あるプログラミング言語で書いた JSON パーサの仕組みは言語が変わったとしても、それほど大きな違いにはなりません。

このようにお決まりのハック方法を数個つくっておくことで何を作ったらいいのか分からなくて時間だけが過ぎていく、ということもなくなるでしょう。

AI に手伝ってもらうのはアリ?

さて、ここまで色々と「手を動かすこと」についての解説をしてきました。手を動かすことはとても大事だと筆者は感じています。
その一方で、昨今では AI により、日本語で質問すればおおよそ正解の様な物が得られる様になってきました。

「分からないことは都度 AI に質問してしまえばいいのでは?」
「AI が情報の引き出しになるのならわざわざ手を動かす必要ないのでは?」

そう考える人もいると思います。筆者は AI について否定的な立場ではありません。実際に ChatGPT はとても便利ですし、アルゴリズムを調べる際にはとても便利です。
ただし、筆者はコードを書くためには AI を使っていません。これは一種の「サムライ」スタイルでしかないので、真似はしない方が良いかもしれません。

エンジニアの寿命とは考えることをやめた時だと思っています。死なない為には考え続けることが必要で、その為には手を動かし続けることが重要だと信じているからです。

もしプログラミング言語でコードを書かずに、ずっと AI と対話し続けるというのが当然の時代が来たら、筆者は耐えられないかもしれません。今の筆者のスタイルでは、自分で引き出しをつくり、引き出しを深堀する時に AI に手伝って貰う。そういう用途に使うのが便利だと思っています。

おわりに

今回は技術者に実際に筆者がやっているインプット・アウトプットの為の情報収集方法と、その中でどうやってお題を選んでいるのかといった話をしました。文中でも説明させて頂いた通り、これはあくまで筆者のやり方です。皆さんには皆さんのやり方があるはずで、そのやり方を見つけ出すのが、安定したアウトプット活動のための第一歩です。まずは色々な方法を試し、自分なりの方法を見つけ出してください。

関連記事

人気記事

  • コピーしました

RSS
RSS