結論
型が言えるようになろう。
概要
必要な知識はちゃんとあるはず。それでも、プログラミングが遅い。バグが多い。
そういう人を何人か見た。
その人たちに型が言えないという共通点があると思った。
まず、型が言えないとはどういう状態か説明し、解決策を提案する。
自己紹介
多分本当に速い人。
業務のプログラミングは速い。
AtCoderで容問を速解きするだけなら相当上位。
本題
型が言えないとはどういう状態か
例えば、極単純な電卓アプリの型を考えてほしい。
二つの数値に四則演算をして計算結果を画面に表示するとする。
この際、値域や未入力の状態やゼロ除算の対応やカーソル位置などは全部置いておこう。
この電卓の型を言うならこんな感じだろう。
{
input1: number,
input2: number,
method: "+" | "-" | "*" | "/",
output: number,
}
一応、オペランドだとかそいういう用語が存在するがそういうのも置いておこう。
とりあえずこれで十分なはずだ。
当たり前だと思った人はこちら側の人間だ。おめでとう。
どうも、大多数のプログラマーはこれができないらしい。
かなり適当な統計だが、どうも職業プログラマーの半分強の人はそうっぽい。
では、その人たちはどうしているか?
実装を書きながら必要に応じて型定義を書くしか無いのだ。
こういう人がプログラムを書くとどうなるか。
全体の流れを型で見通すということができないので、そこかしこにparseIntが氾濫する。
手戻りが多すぎて時間がかかる。
本来Aという処理とBという処理をどうつなげるか考えて型を書くから静的型付き言語は間違えにくいのに、Aという処理を書くことに集中している時に型を書き換えるから間違いが増える。
そこをどういう値が通過するかは言えるが、どういう値が通過することはないかを言えないので、極力狭い定義をしようとしない。
型が言える人とはどんな感じか。
自分の場合であれば、作るアプリにどういう機能があるかわかっていたら、こういうものはだいたい事前に全部列挙できる。
- RDBの定義
- RESTのエンドポイント
- いろんなオブジェクトの型
- 各クラスにどんなメソッドがあるか
- URL設計
- 何をDIしないといけないか
先に列挙しておいて型と型をつなぐように実装を書いている。
だからあんまり間違えないし、ほぼ何も考えなくても正しいコードになっている。
僕だけの特殊技能ということでもないようだ。できる人はみんなほぼ無意識にできるっぽい。
どうすればいいか
練習するしか無いんじゃないかと思う。
gitの練習サイトのようなものがあるから、似たような練習アプリを作ってあげたらいいんじゃないかな。