@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

プログラマにできるとよさそうなこと

十行程度のプログラムが読めること

  • プログラミング言語の文法を知っている
  • 分岐とループを追いかけることができる
  • 変数の状態変化を追いかけることができる
  • 関数呼び出しを追いかけることができる
  • 十行程度のプログラムを複数回書いたことがある

プログラムを読んでプログラムの動的な振る舞いを想像できる

  • プログラムの主な処理の結果を想像できる
  • 主な処理の終了条件がわかる
  • プログラムから主な処理を読み取れる
  • 似たようなプログラムを書いて、動かしたことがある
  • 既知のプログラムと読んでいるプログラムの違いがわかる
  • イディオムを知っている
  • イディオムを書いたことがある
  • プログラムがどう動くか知っている

重複したソースコードを関数に抽出できる

  • 重複したソースコードがわかる
  • 同じ入力と出力をもつコードブロックがわかる
  • コードブロック単位で入出力を比較できる

プログラムのある機能がソースコードのどの部分に依存しているか読み取れる

  • 機能の表示する情報が、プログラムのどこで管理されているかわかる
  • プログラムで管理している状態が、いつ初期化され、いつ変更されるのかわかる
  • 状態が、プログラム上のどこから変更されるのかわかる
  • ユーザ操作によって呼び出される関数が、ソースコードのどこにあるかわかる
  • 関数呼び出しが追える
  • 関数呼び出しが、複数の関数、モジュールを跨いでも見失わない
  • コールグラフの途中経過を抽象化できる
  • プログラム中のモジュールの大まかな役割分担を知っている
  • モジュール分割したプログラムを書いたことがある

バグの原因を特定できる

  • バグが起きた理由を説明できる
  • バグの原因を知っている
  • バグが起きない状態が作れる
  • バグが起きる状態が作れる
  • バグの再現方法を知っている
  • バグが起きる方法を試したことがある
  • バグが起きる方法が思いつく
  • プログラムのモジュール構成を知っている

ソースコードから書いた人の気持をエスパーできる

  • コメントや関数名、変数に惑わされずに、処理内容を追うことができる
  • 似たような失敗をしたソースコード書いた経験がある

作法にのっとって機能を実装できる

  • 特定のフレームワーク、ライブラリ、ツールをの使い方のどう変えれば、何が変わるかわかる
  • ツールに慣れ親しんでいる
  • ツールを使ったことがある
  • ツールを使ったプログラム書いて、その動きを試すことができる
  • ツールの使い方を調べることができる
  • ツールの名前を知っている

動くけど使いにくいプログラムを改善できる

  • UIを改善ができる
  • よいUIと悪いUIがわかる
  • よいUIを知っている
  • よいUIがどういうときによいUIか知っている
  • ユーザがプログラムを使う文脈を想像できる
  • ユーザがプログラムを使う文脈を知っている
  • ユーザになったつもりで、プログラムを動かすことができる

動くけど問題を解決していないプログラムを改善できる

  • 機能仕様のバグを検出できる
  • 問題を解決する機能を考案できる
  • ユーザがプログラムを使って解決したい問題を知っている
  • ユーザの抱えている問題を知っている
  • ユーザの立場を知っている

リファクタリングができる

  • モジュールの影響範囲のいびつさがわかる
  • モジュールの影響範囲のあるべき姿がイメージできる
  • モジュールの影響範囲のあるべきパターンを知っている
  • モジュールを実装したことがある

たくさんリファクタリングできる

大きなリファクタリングができる

自分の書いていないソースコードの重複を発見できる

  • 他人の修正を見ることができる
  • 他人の作業と自分の作業の関わりがあるか判断できる
  • 他人の作業目的から自分がやっていることと似たことをしていると想像できる
  • 機能からソースコードやモジュール構成をイメージできる

レールから外れたプログラムの設計ができる