SQLの難しさと重要性についてのメモ。
SQLが好きな言語という人が少ない
Twitter上でのエンジニアの投稿をみているとSQLが嫌いという人をみかける。おそらくは「やらされるから」だとは思う。SQLの苦手意識がどのように芽生えるのかを考察してみた。
プログラミングコンテンストでSQLは登場しない
多くののプログラミング言語は、標準入力から値を受け取って処理をして標準出力に出すという形式でテストができるが、SQLはそうはいかない。学習インフラが整ってないというのがつらい。そもそもプログラマーからみてもSQLをプログラミング言語と呼ぶべきかどうかは迷う。
単体テストしづらい
SQLには引数と戻り値の束を使った単体テストという概念がない。
データ量に応じて探索アルゴリズムが変わる
- テストとうよりももはや実験
- テストデータ作成の腕前が超大事
- スキルと言うより場数
メモリの中でテストができない
必ずストレージが必要。関数型原理主義の「副作用を避けよう」というパラダイムの中では真逆のアプローチ。副作用を避けたいというのはエンジニアの都合であって、ユーザは「ちゃんとデータを残しなさいよ」というのが本音。だからいつまで経ってもエンジニアは「素人はわかってない」と社会を逆恨みする。社会は副作用だらけだ。
データを切り離してフロントエンドの開発ができる時代でもある
php+mysql でエンジニアリングをしていた時代に比べると、graphQLなどの出現でSQLを触らずにフロントエンドが開発できるようになってきた。
進化が少ないためベテランを追い越すのが難しい
SQL自体の進化がすごく遅い。構文がシンプルで実際には「これくらいのデータ量になるとフルスキャンの遅さが目立つ」や「これくらいのデータの散りっぷりがないとインデックスが効率よく使われない」などの場数が大事になってくる。経験がものを言う世界だと実質年功序列な世界でもあるため、「頑張って勉強して追い越す」のが難しい。
以上すべてのデメリットは「参入障壁」として強い
- ベテランになる意味がある
- テストではなく実験が大事なので習熟が必要で自動化が難しい
- 作ったデータを眺めるのは「保守」として毛嫌いされている
- プログラミング言語の寿命よりもデータの寿命の方が遥かに長い