「わからない」について考える

概要

エンジニアとして働いていると、日々「わからない」に遭遇する。
悩んだ結果わかれば良いのだけど、結論自分では解決できないこともままあり、その度に結構落ち込んだりしている。
「学びのための学び」についてまとめられている独学大全を読み返しながら、自分の「わからない」との向き合い方を整理して振り返ってみる。

参考

読書猿「独学大全」ダイヤモンド社

良い感じにできてること

  • 一つ一つの思考をSlackに書き出す様にしている。
    これはThink Aloudを声を出さずにやっている様なもので、自分の思考の一つ一つを手続き的にSlackのスレッドに書き殴りながら仕事をしている。
    実際これをやる様にしてから結構わかりやすく「わからない」ことへの対応力はあがった、と感じている。
    自分で思っているより自分は考えたことを覚えられていないし、一旦自分の外側に文字として出したものを読み直すことで事象をちゃんと捉えることができる。
    複雑になってきた時も「そもそも今何で何を調べてるんだっけ?」を辿りやすくなるのでやってて良いな〜〜といつも思っている。

  • 細分化して調べる。 とにかく不明点を分解していって、一つずつ理解することに終始する。
    「わからない大群」を目の当たりにするとお手上げになってしまうので、細分化して一個ずつわかることを増やしていく。
    個人的にわからないを潰していく作業と、バグの発生要因を突き止める作業は感覚的に似ていて、「変数を減らす」という言葉をよく使っている。
    確認できることとできていないことを細かく振り分けていくことにして、特定したい事象の範囲をどんどん狭めていく考え方は自然に身についている様に思う。

足りないなと思うこと

  • 調べ方
    「これがわかればよい」まで至ったときに、ネットの海からその情報を抽出していく作業がまだまだ苦手だなと思っている。
    これについてはこれ自体を1テーマとしてまたブログを書きたいと思っていて、まだまだ試行錯誤中である。
    調べて出てきた情報が今の自分にとって有用かをぱっと判断する力が弱いな、というのが現時点で思っている課題である。
    テキパキ情報の取捨選択ができれば求める情報にたどり着くまでの時間がだいぶ短縮されるはずなので。

  • 細分化して調べたものを有機的に繋げる(仮説を立て検証を繰り返す)
    これも独学大全に書かれている。個人的に仮説のパターンを整理して一つずつ検証していくのが苦手かもしれないな、と思っている。
    昔からマクロ的な視点が弱くミクロが強い(テトリスは得意だが将棋や麻雀が苦手)なので、細分化するとそれ単体に視野を絞って見てしまっているのだな、と思われる。
    とりあえず対策としてはSlack書き出しに仮説も書き出して漏れがない様トライしてくのが良いかなと思っている。

  • 忍耐 ぶっちゃけ圧倒的にこれが一番大事かつたりてないと思う。
    独学大全にも以下の様に書かれている。

未知との遭遇の多くは快適なものではない。時には自分の無知と無能を痛感し、自己嫌悪に陥ることもあるだろう。「わからない」状態に踏みとどまるのは決して楽なことではない。
読書猿. 独学大全絶対に「学ぶこと」をあきらめたくない人のための55の技法 (Japanese Edition) (Kindle Locations 6162-6163).

結局これなのだ。わからない状態があまりに続くと思考を放棄したくなる時がある。この状態に陥ると「文章を読んでも内容が入らない」とかそういう自体になってくる。
この向き合う辛さに対峙するために、モチベーションが何より必要だなと最近は思っている。
自分の目的のためにそれが超えなければならない辛さであることを理解して、向き合い続けていくことが何より大事である(と、いうことを自分に言い聞かせたいがためだけにこの記事を書き始めたまである)
あと、超スポット的な対策としては最近「詰まったら5分散歩」を実践している。
これはこれで脳がスッキリするし気持ちも落ち着くので非常に良いなあと感じている。

最後に

正直最後のことを自分に言い聞かせたいがために勢いで書いた感がある。
恥ずかしながらエンジニアになるまでまともに「勉強」をしたことがない人生だったので、まだ学ぶこと自体に体を慣らしていってる最中なのだろうな、と思っている。
あとこうやって実務で悩んでから独学大全読み直したら前よりちゃんと学びが多かったので、ちゃんとまた一通り読み直そうと思いました。

初見でわかりづらいJS記法まとめ

概要

初見で理解し辛かったJSの記法についてまとめます。

参考

以下の書籍を参考に勉強しています。良著です。
りあクト! TypeScriptで始めるつらくないReact開発 第3.1版【Ⅰ. 言語・環境編】

分割代入

const baseBallBear = { type: j-rock, member: 3 }

const { type, member } = baseBallBear;

// keyに対応する値が入る
console.log(type, member); // j-rock 3

プロパティ名のショートハンド

const humbertHumbert = folk;

const acousticBand = { humbertHumbert };

// 定数名だけを{}内に書くと、定数名と値が対応した連想配列になる。
console.log(acousticBand); // { humertHumbert: folk }

オプショナルチェーン ?.

  • 参照が nullish (null または undefined) の場合にエラーとなるのではなく、式が短絡され undefined が返される
  • rubyのぼっち演算子にイメージ近い。
const domico = {
  guitar: {
    firstName: 'Hikaru',
    lastName: 'Sakashita'
  },
  drums: {
    firstName: 'Keita',
    lastName: 'Hasegawa'
  }
};

console.log(domico?.guitar?.firstName); // Hikaru
console.log(domico.bass?.firstName); // undefined  bassがない時点でundefinedを返してくれる
console.log(domico.bass.firstName); // TypeError: Cannot read property 'firstName' of undefined

Null合体演算子 ??

  • 左辺が null または undefined の場合に右の値を返し、それ以外の場合に左の値を返します。
const drums = null ?? 'ドラム募集中';
console.log(drums); // ドラム募集中

const num = 0 ?? 100;
console.log(num); // 0

const number = 0 || 100;
console.log(number); // 100 論理演算子 || は、nullとundefined以外のfalsyな値についても右辺を返す。

// 上記より、|| より ?? を利用する方が、より厳密に利用できる。