Skip to the content.

プログラマー脳

コードをよりよく読むために

コーディング中の混乱を紐解く

コードを速読する

convention に従った命名: カウンタ変数が i とか、swap に使うための一時変数が temp とか

context があるかないか: チェスの盤面を記憶するとき、実践にありそうな盤面なら熟練プレイヤーはよく覚えることができ、平均的プレイヤーはそれに比べると劣る。 でたらめな盤面だとどちらも大差ない結果になる。

プログラムでの実験:

image

プログラミング言語の文法を素早く習得する方法

忘却曲線、他の隣接概念との関連付け、とかその辺のよくある話。

複雑なコードの読み方

認知的負荷の種類

コードについて考える

コードの深い理解に到達する

変数の役割

プログラミングに関する問題をよりうまく解決するには

長期記憶においてソースコードのメンタルモデルの形成を行う

想定マシン: 変数に「格納する」というが、変数という箱のようなものが実体として存在するわけではない。が、比喩として優れているからこのように表現する。 時間が「流れる」という表現と同じ。このように既知のものに例えて理解すると長期記憶として自然に獲得することができる。

誤認識:思考に潜むバグ

既知の事実を他のことを理解する際に使ってもいいけど、それが本当に本質的に一致しているのか、それともたまたまそのときは偶然似ているようなものに見えただけなのか、には注意が必要。

比喩で理解するのはいいけど、いつまでも比喩レベルの理解じゃ困りますよ、といういつものやつ。

よりよいコードを書くために

よりよい命名を行う方法

  1. 名前に含めるべき概念を選択する
  2. それらの各概念を表す単語を選ぶ
  3. それらの単語を使って命名を行う

汚いコードとそれによる認知的負荷を避けるための2つのフレームワーク

  1. 構造的アンチパターン: 「リファクタリング」で語られる code smell の話
  2. 概念的アンチパターン: 命名が悪いというやつ
    • 命名よりも多くのことをやる・ものを持つ
    • 命名未満のことしかやらない・ものしか持っていない
    • 命名と全く異なることをやっている・ものを持っている

複雑な問題をより上手に解決するために

調べなければわからないことを減らす。反射でできることを増やす。

ショートカットとかをうまく利用する。

他人のソースコードとそのコードの目的を学ぶ。

などなど。

コーディングにおける共同作業

コードを書くという行為

割り込みからの復帰を助ける行為

フローライトやチャットツールのステータス設定でそもそも割り込みが発生しないようにする

より大きなシステムの設計と改善

CDCB: コードベースの認知特性

新しい開発者のオンボーディング

意味波 (semantic wave): 概念について抽象的で一般的なレベルの理解をする -> 具体的にはどのようにすればいいのかを学ぶ -> 異なる文脈で応用するために抽象化する

image

関連するアンチパターン

オンボーディングの際に行う活動

これらを並行してやってもらうのではなく、一つずつ指示して分解して実施してもらう。

ホームへ戻る