文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

暗記をやめると人生が楽になる

私は以前は暗記人間で、テストも暗記で乗り切ってしまうタイプでした。しかし現在はほとんど暗記しません。今回は「暗記」をテーマに考えてみようともいます。


f:id:treeapps:20180418112610p:plain

会社で仕事をしていて成果を求められるとします。その成果を出すため、暗記によって成果を出すか、論理的思考によって成果を出すか、皆さんはどちらのタイプでしょうか。私は昔は暗記派で、今は完全に論理的思考によってアウトプットを出します。

暗記はアウトプットの出力が速いが辛いししんどい

暗記と論理的思考によるアウトプットの出力速度ですが、間違いなく暗記の方が速いです。理由は簡単です。暗記は論理的思考のように論理を展開する過程を全てふっ飛ばして、いきなり答えを出すからです。全ての過程を飛ばせる点が暗記の利点だと思います。

しかし暗記というのは非常にしんどいものです。ホリエモンのように苦もなく?暗記をできてしまう人もいますが、大抵の人にとって、物事を暗記する事はしんどい・辛い事です。暗記の対象が自分の興味のない事なら尚更しんどいですね。例えばよく「社訓を丸暗記して毎日言わされる」なんて、苦行以外の何者でもありませんよね。

そして暗記というのは量に限界があります。パソコンのHDDと同じように、人間の記憶の容量には限界があるので、これを記憶すれば裏でいつの間にか別の記憶が失われたりします。これは年齢が上がるにつれ、徐々に記憶量は減っていきます。

論理的思考は最初はつらいが後が楽

一方論理的思考ですが、最初は暗記よりもずっとしんどいと思います。

よくあるのが、「このタスクを期限までにこなさないといけない。これをやるためには◯◯さんに◯◯をいつまでに依頼して、◯◯が◯◯までできていないといけない。そして納品する事を考えるとお客さんに事前に◯日〜◯日の間にテスト環境で検証して貰わないといけない」といった感じのものです。

最初のうちは「あれをするためにはこれをしないといけない」といった事が思いつきもしないので、上司から学んだり、少しづつ経験を積まないといけません。しかしその経験値がある程度積み上がると、全く事前情報が無くとも自力で何とかできてしまったり、突発的なトラブルが発生しても対処できるようになります。

暗記タイプはトラブルに弱い

IT業界の例で例えると、例えば障害発生時にその差が顕著に現れます。

なんかエラーが起きた! → 障害復旧手順書はどれかな → 無いんですけど!! → どうしようどうしよう・・・・

となりがちなのが暗記タイプの方です。IT業界では障害というのは大抵意図しないものが原因で起きるので、暗記のしようがなかったりして、暗記では対応が遅れたりする事があります。今まで見たこともないようなエラーが突然起きる事も結構あるので、突発的な事に大して暗記というのは力を発揮しにくいです。

一方論理的思考の場合は、

なんかエラーが起きた! → このログとあのログを見る → NullPointerException起きてるな → このロジックのここがヌルポと言うことは意図しないデータが混入した → 不正データを除外して復旧

というように、順に追いかけて行って一つづつ原因を潰していきます。勿論のこのフローを暗記しても完全ではありません。状況によってログが出力されなかったりして、原因を特定する過程が毎回異なったりするからです。その場合も、

エラーが出てるのにログが出ていない → そもそもログ出力できる状態ではなかったのでは? → サーバのリソース状況を確認するとload averageがぶっ飛んでいた

というように、論理的思考の場合は過程が異なっていても、結局答えにたどり着けます。

暗記タイプは未知の事象に弱い

IT業界の例で例えると、新規に自分の会社に派遣社員の方が来て開発環境を構築して貰う時に以下の質問を沢山されます。

データベースの接続先とIDパスを教えて下さい

新たな職場、新たな環境で仕事をするので、新たに環境設定を聞きたくなりますが、これでは論理的に思考できていません。勿論教えるべきであると思いますが、教えてもらう相手が多忙で暫く手が離せない状況等に陥った場合、「教えて貰えなかったのでできませんでした」という残念な結果になるし、自分で見つけ出すことができないという結果が残ります。

これを論理的思考で解決しようとすると、「データベースの設定は大抵database.confとかjdbc.propertiesとか、大体データベースに纏わるファイル名になっているからそれを探せばいい」「更に、環境毎に設定ファイルが分かれている事が一般的だから、恐らくdevelopフォルダの下にあるjdbc.propertiesに書いてあるのが接続先だな」等といった事は実は簡単に追う事ができます。これは暗記の力を必要とせずできる事です。

暗記タイプの方がやりがちな事

大体共通点があります。それは・・・


手順を全てメモり、メモった事を実行する事に終始する


という点です。所謂コピペですね。コピペは暗記と関連があります。コピペは人間の頭に記憶する代わりに、メモ帳に記憶するのです。暗記する場所が変わっただけなのがコピペです。

メモを取る事は非常に良い事だと思います。しかしここで問題なのはそのメモった手順の内容を理解しようとしない点です。内容を理解するためにメモるのではなく、次回コピペで済ませられるようにメモっているのです。

大体こういったコピペ屋さんは暗記タイプで、メモったコマンドを実行してエラーが起きても対応できないし、今自分が実行しているコマンドが何なのかも把握していなかったりします。

暗記をやめて人生が格段に楽になった

私の場合は社会人になってから暫くは暗記に頼ろうと足掻いていました。しかしIT業界はあまりにも覚える事が多く、あっという間に暗記という手法が打ち砕かれました。もう覚えてられないのです。そこで暗記する事をスッパリとやめ、論理的思考に頼るようにしました。すると覚えるべき事が非常に減り、突発的なトラブルが発生したとしても、大体何の材料もなく対処できるようになりました。

論理的思考をするようになってからトラブルに強くなった点が最も良かった点だと思います。IT業界の大半はトラブルでできているので、トラブルを解決できるとストレスも減ります。また、ミーティング等の場でも突発的な無茶振りにも耐えられるようになります。もしこれが暗記タイプだと、無茶ぶりされる内容を全部暗記しないといけないと思うと胃が痛くてキリキリしてしまいます。

雑感

こんな記事を書くと「じゃあ論理的思考はどうすれば身につくんだよ!」みたいな話になりますが、それは別サイトに色々書かれているので割愛します。

敢えて少し書いてみると、linuxのコマンドのオプションを例に挙げると、よく「-fとか-vとか、オプション多すぎるだろ!どうやって覚えるんだよ!」という経験ありますよね。そこは「オプションが何の略なのか」を考えると暗記量を減らす事ができます。例えば「-f」はforce=強制的で、「-v」はverbose=冗長、「-r」はrecurse=再帰的、というように大体何かの省略系になっています。

オプションだけでなく、コマンド名にもそれは当てはまります。「cp」は「copy」、「mv」は「move」、「chown」は「Change owner」、そのコマンドが何の略なのかを考えると、大体覚える必要はなくなります。

特にgithubやqiita等のオープンソースのソースコードを読む場合、開発者に教えて貰う事が難しいので、大体自分で全て把握する必要があります。「このコードはこのフレームワークが使われているのでここに環境設定がある」等と、自分で情報を探し出し、そのソースコードの設計思想等を紐解く必要があります。そういったケースでは暗記はほとんど役に立たないので、論理的思考を元に自力で内容を紐解かないといけません。

こんな感じで論理的思考で覚えるべき事を減らしていくと、生きていく、というか社会生活が格段に楽になると私は思っています。

世界一やさしい問題解決の授業―自分で考え、行動する力が身につく

世界一やさしい問題解決の授業―自分で考え、行動する力が身につく

ロジカル・シンキング―論理的な思考と構成のスキル (Best solution)

ロジカル・シンキング―論理的な思考と構成のスキル (Best solution)

思考・論理・分析―「正しく考え、正しく分かること」の理論と実践

思考・論理・分析―「正しく考え、正しく分かること」の理論と実践

論理的に考える技術〈新版〉 「思考する力」は構想と発想、そして接続詞の理解で驚くほど伸びる! (サイエンス・アイ新書)

論理的に考える技術〈新版〉 「思考する力」は構想と発想、そして接続詞の理解で驚くほど伸びる! (サイエンス・アイ新書)