KDOC 355: プログラミングを仕事の梃子として使うとよい
この文書のステータス
- 作成
- 2025-05-01 貴島
- レビュー
- 2025-05-02 貴島
概要
卓越したプログラマーは仕事の梃子としてコードを使う率が高いように見える。 並の人は、たとえばRails開発なら、Railsの機能開発以外でコードを使うことはあまりない。
並の人の例。
- 不整合データを調査する → SQLを使って各条件を調べる。合っているか手動で確かめる
- 不整合データを削除する → 調査する、各環境のコンソールで逐次実行を繰り返す
- 使われてないファイルを削除する → 逐一grepして削除していく
- リレーションの不整合を調査する → 1つ1つ地道に見ていくか、grepで頑張る
- バージョンを上げる → バージョン番号をgrepして置換
卓越した人の例。
- 不整合データを調査する → Rakeタスクで1発で必要なデータをすべて出力する。タスク内にチェック処理を入れて検証する
- 不整合データを削除する → 調査 → Rakeタスクで一発で不整合をすべて解決する。各環境でタスクを実行するだけ
- 使われてないファイルを削除する → 使われてないことを検知+削除するスクリプトを書く
- リレーションの不整合を調査する → リレーションを検証するコードを書く
- バージョンを上げる → リポジトリ全体で一括置換
そうやって使うのか、と驚かされることが多い。とても創造的に見える。コードを自由に手足のように使っている。
つまらない単調な仕事があったとき重要なのは、あの人も同じように仕事を進めるだろうか、と考えることだ。卓越したプログラマーは100倍の速度で終わらせている、なんてことはよくある。つまらない仕事があるというより、自分でつまらなくしている可能性がある。
具体的にどうすればそうなれそうか考えてみると、1.)2次元的なコードを書くことへの慣れ、2.)道具を作るマインドに思える。 2次元的というのはコードを生成して実行するコード、みたいなことだ。xargsを使いこなせること、といってもいい。1次元的はターミナルに直に打って1つ結果が返ってくるようなこと。またライブラリとかの、ほかのプログラマーが使う用のコードを書く側(使う側ではなく)である側面も技術や想像力といった面で重要なようだ。具体的に思いうかべている超強い人は、Railsの上位のコントリビューターだった。
並のプログラマーは、エンドユーザ(つまりサイトをブラウザで利用してる人)に向けてプログラムしている。だから、具体的な問題な問題に対する解決が多く、梃子がきかない。抽象的な問題の解決に不慣れに見える。 卓越したプログラマーは、ほかのプログラマーに向けて抽象的な目的や手段を使ってプログラムしているから、抽象的な問題を解決するのに慣れている。梃子をきかせて、巨大な成果を上げる。
関連
- KDOC 51: 1次情報を読む人々。卓越した人々の観察が共通している