可読性、理解容易性、正しさへの迷いは作業者のバックグラウンドに依存する
#プログラミング #理解容易性
プログラミングにおける可読性
コンピュータ・プログラミングにおける可読性(readability)とは、プログラムのソースコードを人間が読んだときの、その目的や処理の流れの理解しやすさを指している
ソースコードを保守するのは人間であるため、その可読性は重要である(ただし、未熟なプログラマが、よく使われるイディオムによる簡潔なコードを「可読性の低いコード」と見なしてしまうことがあり、読む人間のスキルもまた重要である)
コーディングスタイルの規則の大部分はコードの意味には何ら関係なく、主に可読性に関するものである。例えば以下のようなものである。
字下げスタイルの違い
コメント
問題の分割の仕方
各種オブジェクトの命名規則(変数名、クラス名、手続き名など)
@mizchi: 可読性って読み手のバックグラウンドで変わるものだから、最初にその旨を宣言した上でガイドラインを示すべきだと思った / 他17件のコメント https://t.co/ESPJyks0KV “AtCoder高橋社長がLINEのコーディング試験を見て驚いた理由―。「競プロとこんなに違うとは……」” https://t.co/37tmrWE4bn
@mizchi: 極端な話、 for 文より再帰ループのが読みやすいと評価する人もいるので ....
@mizchi: 競プロに慣れた人は競プロのショートコーディングを一種の慣習として読みやすいと感じることもありえるわけで、そこでチームワークのための可読性って言葉を使うのは主観の押しつけ後出しじゃんけんだと思いました
@mizchi: あと細かい話だけどライブラリ書いてるとき、それをアプリケーションに組み込んでるとき、業務コード書いてるとき、OSS書いてるときで良いコードの指標は違うよね
@mizchi: なんでこの記事に噛み付いてるかと言うと、今まで一つのコーディングスタイルしか知らない人が、別のベストプラクティスに対して普通はこうでしょって主観を押し付けるのを何度か見てるからです
よくわかるkoushisa.icon
ベストプラクティスのワーストなところ
自分の趣味のスタイルやほぼ起こり得ないエッジケースのために、貴重なリソースを無駄にしている可能性
チーム開発で言う可読性は定量的でも定性的でもない主観の塊
全てのモノゴトはその時点での観測者の環境や立場に相対的である
だから可読性をプログラムの評価指標に使うのは難しい
良いコードとは何か
最終的には一番経験の浅い人に合わせるようになり、個別状況への最適化は捨てるしかなく十分に一般化された(尖りがない)ものしか残らない
へんなコーディング規約が生まれる
プロチームなのにキャッチボールも出来ない人が入ってきたら困る
「この〜を導入すると、なんとこうなりました!どうです?わかりやすいと思えませんか?」 - mizchi's blog
何が言いたいかと言うと、「指標の伴わない変更に意味はない」「APIの呼び方を変える程度のラッパーライブラリやヘルパーには、特に意味がない」ということです。
ここからプログラミングの話に絞りますが、特にショートハンドしたいだけの場合、ショートハンドするAPIの実装は、必ず本来の機能を呼び出す脱出ハッチも必要となります。
よく練られていない「わかりやすさ」は、次第にこの脱出ハッチを使うことを要求するようになり、結果として捨てられることになります。この破棄までの過程は、結果的に「技術的負債」と表現されるわけです。
~
というわけで、「わかりやすさ」の主張には慎重になってほしい、という話でした。
使いやすさの正体とは普段利用しているモノの形や構造の中の規則から生まれる予測容易性
他のやつのことは知らんが自分にとって認知負荷が低い
@sugimoto_kei: プログラミング界隈は、コードの「読みやすさ」というものにこだわり過ぎだと思う。読みやすさは読み手の経験や知識に大きく依存する。僕の読みやすさとあなたの読みやすさは違う。むしろ、コードが場当たりではなく明確なモデルに基づいているか、関心が分離されているかといったことを問うべきだ。
「読みやすく書け」というのは実践的なガイドにならない
ユーザーの場当たりな要望に対応しつづけると、どんなアプリもゴミアプリになる
関心事の分離
専門性が品質を担保する
属人性は低い方がよいが、属"技能"性はそうではない
変更容易性など幻想
語は私たちが与えた意味を持つ