自分の知識を体系的にまとめたい病
2001・2年から自分のウェブサイトを作っていて、最初はゲームの攻略・裏技情報を思い思いに書き連ねるところから始まり、「ホームページ作成支援」みたいなコンテンツを繰り出し、ポケモン GBA 世代の攻略情報はかなり熱を入れて執筆していた。自分の知っていることをウェブサイトに書く、という行為がもはや「毎日歯を磨く」レベルで習慣化している。
僕は元から、お金や人気のためにウェブサイトを作っていない (原動力がそこだったらもうちょっとセルフプロデュースするでしょw)。父がホームページを作っていたのを、ぼくもやるーと真似っこしたのが始まりで、ゲームをやる、アニメを見る、といった趣味と同列の存在だ。趣味なのである。
自分はなぜウェブサイトを作るのか?何が楽しくて続けているのか?色々考えてみると、自分の全ての知識の一覧を作りたいんじゃないか?とセルフ分析している。
ゲームの攻略情報をまとめていた時は、「自分のサイト上に、ポケモンの全ての情報が掲載されている状態にしたい」と思ったし、自分がゲームを進めていって発見したことは「ウェブサイトにも書かなきゃ!自分の頭の中にあるだけじゃダメだ!」という謎の義務感・使命感で、急いでウェブサイト更新をやっていた。繰り返しになるが、アクセス数やお金を稼ぎたいから、という動機ではない。「ポケモンサイトランキング」みたいなサイトで上位に行くのは嬉しかったし、「Yahoo! カテゴリ」に掲載されるサイトにしたいと思った時期もあって、モチベーションの一要素ではあった。でも根本の動機は、そういうところにはない。
思えば、小さい頃から「勉強ノートを綺麗にまとめる」ことが好きなタイプだった。自分はコレだけの知識を理解したんだ、コレだけの情報を把握している、そういう「勉強の成果」みたいなのを自分で見える化して、自分で見返すのが好きだった。今の自分を絶えず何らかの形で記録・アウトプットし、それを整理して並べるのが好きらしいのだ。「ひとりアーキビスト」みたいな感じ?
どこからこの性格が生まれたのかなーと思うと、2つ思い当たる。
一つは、カメラ好きの父の影響。小さい頃から、家の中でも Hi-8 ビデオカメラを回すような家庭だったので、撮影することも、被写体になることも、どちらも日常だった。近所で火事があれば「ちょっと写真撮らなきゃ!」、旅行先で交通事故現場を目撃すれば「ビデオ回そ!」。人によっては不謹慎だと思うような現場でも、とにかく記録をしたい、という思いが強かった。こうした思いはインターネットに出会う以前からなので、撮った写真を誰に見せようとも考えていなかった。というか、他人に見せるという発想もなかった、なのにやたら写真を撮っていた。ビデオテープのシールに連番を書き、日付・旅行先を書いて貼り付け、そのビデオテープを時系列順にケースに並べていったりするのが、気持ちよかった。父自身が几帳面で神経質な性格だったので、まず父がそうやっていたのを横で見ていて、自分もそうやると気持ちが良い、という感じで受け継いでいった。
もう一つは、銀行員だった母の影響。割と幼い頃から「家計簿」を自分で付けることを教えられていた。最初は「『繰り越し』って何?」レベルの年齢・知能だったが、「いつ何を買った」「いつお小遣いをもらった」という記録が溜まっていき、現状の残高を一目で確認できたり、その推移を眺めたりするのが段々気に入っていた。丁寧で几帳面な性格とともに、文字によって日々の記録を付ける習慣は、ココで母から受け継いだモノだと思う。
種類や程度は違えど、僕は両親から、「記録すること」「情報を理路整然と整理すること」を学んできたのである。そしてそういう自分の性格が、WWW の「情報のインデックス同士をリンクする」という概念とたまたま合致して、ホームページ作成にのめり込んでいったのだと思う。
サイトのコンテンツの階層構造を試行錯誤しては、どういうツリー構造だと情報が整理できるか、自分がスッキリできるか、よく考えてきた。例えばこのサイトでずっと扱っている「ポケモン」というコンテンツは、実は管理が難しいコンテンツだったりする。
- 「ビデオゲーム」>「ポケモン」という階層でコンテンツを置くと、「アニメのポケモン」はどう結んだらいいのか?
- かといって、「ポケモン」を最上位の階層に置くと、ポケモンに関する情報は子階層に「ゲーム」「アニメ」などと整理しやすくなるが、
「ビデオゲーム」から掘り下げて行った先にもポケモンの各ゲームタイトルへのリンクは作りたい。
しかし、そうすると遷移元が複数できるので、「戻る」リンクや「パンくずリスト」の実装が難しくなる- (コレを2002年当時に、エンジニアでもないガキが悩んでいた事柄だと思うと、自分はエンジニアになるべくしてなったのかもしれないな…)
このサイトの場合は、次のように対応していった経緯がある。
- ある時、ゲームのポケモン以外の「ポケモン」コンテンツを、全て捨てた。アニメは段々見なくなっていてコンテンツの更新が追いつかなくなっていたこともあったので、ゲームのポケモンの情報のみ扱うことにフォーカスしたのだ
- コレにより、「アニメのポケモン」についての考慮が要らなくなり、「ポケモン」を「ビデオゲーム」の子階層に配置することで全ての整合性が取れるようになった
- しばらくはこうして「ゲームのポケモン専門のサイト」にシフトしていたが、ココ数年、このサイトの Archive.org を追っていると、「何も捨てることはないだろう、当時の記録として残しておくべきだ」という思いになり、捨てたコンテンツをサルベージし始めた
- どうしても情報の階層構造が揃わないのだが、諦めて2つの重複する「親階層」を持つことにした。それが、以下の2つの「ポケモンフリーク」トップページの存在に至る
/games
配下の「ポケモンフリーク」/pokemon
配下の「ポケモンフリーク 総合窓口」
そう、情報の整理を諦めたのである。「総合窓口」はあるのだけど、ことゲームの情報に関しては /games
配下で別途管理する、ということで、ポケモンのゲームの情報に到達するための動線が複数出来ることを、妥協したのである。
今日はこの、整理を妥協したポイントについて、やっぱり諦めきれなくてムズムズしている、という話をする。w
2016年から始めた技術ブログ「Corredor」。「ブログ」という媒体は2004年ぐらいから断続的に試してきたが、自分はずっと苦手意識を持っていた。ブログの原則は「情報が時系列に蓄積される」であり、よくある個人サイトのような、「メインメニュー」→「コーナーのトップページ」→「目的のコンテンツ」のような、カテゴリ構造が相当組み立てづらいのだ。だから今まで長続きしなかった。
そこで、「Corredor」は「技術関連の学習記録」という名目に設定したことで、「今日学んだこと (Today I Learned)」が時系列に書き連ねられていく構成で、違和感を減らせた。
表向きはそれで納得していたのだが、ほとんどタグクラウドのような使い方で雑に振っていた「カテゴリ」については、ずっと「綺麗に管理したい」と「綺麗に管理するのは無理だしある程度雑に扱うべ」の間を行き来していてモヤモヤしていた。「Java 7」を前提とした Tips 記事、「Java 8」で登場した新構文の解説記事、これらは全て「Java」というカテゴリに入っていて良いが、バージョンごとのカテゴリもあると探しやすいので、「Java 7」「Java 8」カテゴリも作っていて、結果的に1つの記事が「Java」「Java 8」の2つのカテゴリを持つ、みたいになっていた。しかし、はてなブログの「カテゴリ」の都合上、「Java」>「Java 8」という親子関係はなく、カテゴリの関係が兄弟関係なのがずっと気になっていたりしていた。
「Corredor」ブログは5年間継続し、その間に様々な知識を学び、ブログ記事にしたためていった。ブログを運営していた5年間のうちに、自分が身につけたスキルセットは想像以上に広範囲になっていた。
どの職業でもあることだと思うけど、情報・知識そのものと、その活用方法や活用範囲には差があって、以前も「技能と技術」の違いを調べたが、まさにソレ。
- 技能・スキル
- 「プログラミング言語の基本的な構文」は、一つの正解がある。条件分岐は
if
と書く、ファイル削除はrm
コマンド、といった情報は、「自分で考えて工夫する余地」はなく、適切な場所で繰り出せればそれで良い - 「豊富なスキル」というのは、「覚えている量」といえる。役立つスキルを素早く覚えるためには、OJT や現場経験が有効なのかもしれないが、教科書で覚えた量と出し方が上手ければそれでも良い
- 「プログラミング言語の基本的な構文」は、一つの正解がある。条件分岐は
- 技術・テクニック
- 「配列の処理速度を速くするための手法」は、有名なアプローチがいくつか存在し、対象のデータ特性などに応じて自分がうまく選択・調整しないといけない
- 「高度な技術力」「〜〜をうまくやるテクニック」は、「個々の知識・スキルの組合せ方の上手さ」だと思う。知識があることは前提として、どう組み立てると良い成果が出せるか判断できないといけないので、色んな現場を経験しないと身につきづらいかもしれない
- 過去記事 : 「技術」と「能力」と「技能」の違い
自分自身、「スキル (技能)」「技術 (テクニック)」「知識 (ナレッジ)」「ノウハウ (知恵)」という言葉をデタラメに使っていて混同してきたのだが、これらは分けて捉えた方が良いな。自分が覚えたこの情報は、「知識」レベルの話なのか、テクニック的なこと、ノウハウ的なことなのか、という区別は、結構重要かもしれない。
プログラマ・エンジニアとして仕事をしていくと、色んな分野で「ナレッジ」「スキル」「テクニック」「ノウハウ」を求められた。
- プログラミング言語を読み書きする基本的なスキル
- リソース効率の良い実装テクニック
- フレームワークやライブラリ固有のスキルやノウハウ
- アプリケーション、ネットワーク、システム全体の設計のスキル (どういう関数・クラスで別けると見通しが立ちやすいか)
- 作った後の保守性を高めるためのノウハウ (命名規則、ドキュメンテーション)
- 顧客のぼんやりした要望をヒアリングしてシステム化していくための、顧客折衝スキル
- 相手を気持ちよくさせつつコントールしていくためのテクニック
- 個人の生産性を上げるための、時間管理術、言語化スキル、プレゼン能力など
今頑張って分類してみたけど、この分類もなかなか追いつかない。
でも、僕がやりたいのは、こうした僕の頭の中にある全ての情報を、体系的に表現することなのだ。
Corredor を中心としたブログでの蓄積は、はてなブログ閉鎖後、本サイトの Blog コーナーに引っ越しした。時系列の TIL は、今後も発生するだろし、今回のようにコンテンツとは言い難い駄文を書き捨てる場所としても、ブログは捨てがたい。
一方で、体系的にまとめたいという欲求は、Tech のページにみられる。断片はブログに書いたこともあるけど、「その1ページを見れば、それに関する情報が全て得られる」というまとめ方をしたいのだ。
自分自身が今どれだけの知識を有しているのか、どんなテクニックを持っているのか、自分でも全量が分からない。だからカテゴライズも苦戦するのだが、情報の二重化は避けたい。体系的にまとめられていないことになるからだ。
この感覚、思い、伝わるかなぁ…。脳のシナプスがよしなに連携してくれていることを、自分の手で文字に書き起こして、ハイパーリンクによって紐付きを表現したいワケだ。
大変だろうけど、そうやって情報が整理できて自分の「ナレッジデータベース」ができたら、メチャクチャ気持ち良いと思う。書類をトントンってやって、ピッタリ紙が揃うと ンーーーー↑↑ って気持ちよくなるのと同じで、単なる自分の趣味嗜好である。
独りで時間はあることだし、日々の仕事でのイライラをより有益な時間に昇華させるためには、「おめーらそんなんじゃダメだぁ!?」っていう怒りではなく、「こういう原則・基礎知識があって、こういうテクニックが有名です、これらの組み合わせで自分はこうしたノウハウを活用しています」みたいな感じで、体系的にまとめ直す方が良いだろう。
人によっては、仕事のイライラやもどかしい気持ちを、ゲームや運動で解消したりするのだろうが、僕の場合はそれが「ウェブサイトに体系的なインデックスを作り上げること」で解消できそうなので、やっていきたい所存である。
さて、どうやって整理していくか。
まずは「Tech」配下の既存コンテンツを再度カテゴリ別に別け直すか。できれば「Tech」のトップから全てのページに飛べるようにしたいね。
- 知識 (ナレッジ)
- 知恵 (ノウハウ・テクニック)
みたいな区分けが必要か。そんで、レイヤーを考えていかないといけない。
- プログラミング言語別、一部はフレームワークなども
- ネットワーク、インフラ、ミドルウェア、アプリ、ぐらいの区分で、設計技法とか運用ノウハウとか
- もっと全般的に、システム開発と、運用保守業務という大きな括りでのノウハウもありそう
- エンジニアの仕事としてのテクニックというか、仕事術みたいな話もあるかしらん
- 仕事色を減らして、レイヤーをまたいだ「一般人向けの解説」みたいなのも書いていたりする
この辺をどう分類するか。
原則の最上位階層を「開発工程」にするのが、色々と収まりが良さそう。
- 「プログラミングネタ」は、「実装」「テスト」配下になりそうだが、階層が深くなりすぎるので最上位で始めても良いかも。
- 「仕事術」や「初心者向け解説」の類は「開発工程」に収めづらいので、個別に最上位階層に置く
って感じかな。
過去にブログ記事として書いてきたネタも多数あるので、それらの情報は流用できるといいなぁ。愚痴っぽい私語を削って、有益な情報に絞って記事をリライトしていくかな。
どれだけブログ記事を「Tech」に取り込んでいくかが難しいところ。日々書き連ねている「Bash で○○するコマンド」みたいな単発ネタは、「Tech」で取り込まなくてもいいかな。そういうネタは必要に応じてチートシート的にまとめ直したり、ベストプラクティス集として列挙するのが良いかしら。
設計や仕事術として「こうした方が良いと思う」みたいな愚痴記事は、リライトできればリライト、無理そうなら「Tech」側で書き直して、ちゃんとナレッジベースになるようにしていきたい。
以上、思考整理のために駄文を書き連ねた。
自分は自分のナレッジベースを作るのが気持ち良いので、ウェブサイトを作り続けている。現在は目下、「Tech」と「Blog」の兼ね合いで整理したい欲が高まっているので、やってく。w