美しいソフトウェアをなぜ、どうやって書くか の続編的なネタ記事です。
ノロケ成分が含まれるので苦手な方はご注意ください。美しいコードを書く話を見に来た方は上記記事にまとめてあるのでそちらをどうぞ・・!
yomeはエンジニアではないですが、多分腕利きのコード書きになれるセンスをなぜか持ち合わせているようです。
というか、めんどくさいから楽にする方法考えるとか、まぁ個人的なことになってくるのでアレですが、まさにプログラマ三大美徳を実践している感じがあるのです。
しかし、大学生のときにプログラミングを学んだ以後もうコードは書きたくないと長らく言っていました。
**理由は「クソコード」。**一体どういうことなのか、実例を紹介します。
インデントやスペースがバラッバラなコード
想像ですが、下記のようなPHPコードが授業の中で登場したり、他の学生の提出物に現れていたようです。
for($i = 0; $i < 100; $i++) {
$hoge +="Number is $i";}
return hoge;
本人談(意訳):
なんでそろえへんねん!!なんで汚いままにするねん!!!
訳注:
例えプログラミング初学者でも、テキストとして汚く感じるものは受け付けないようです。
我々プロはそれだけもっともっと気をつけていくべきだということだと思います・・。
HTMLのtableタグをデザインに使う
これはとあるバイト先のウェブサイトでそういう箇所があったそうです。
<table>
<tr>
<td><img src="..." / alt="ロゴ画像"></td>
<td>Hoge Home Page</td>
</tr>
<tr>
<td><img src=".../counter.cgi?id=..."></td>
<td>ようこそ</td>
</tr>
</table>
本人談(意訳):
tableは表を組むものであってそれをデザインに使うのは意味わかんねぇぇぇ!!!
訳注:
例えその方法で実現できたとしても、本来の意味を歪めるような方法で解決しようものなら、それは気持ち悪く見えるようです。
ホームページビルダー(死語)はもう二度と使われるべきでないんでしょうね・・。
コメントだらけのコード
これはわりと現実味があるコードだと思います。エンジニアなら誰しも一度は見たことがあるのでは・・。
コードは多分全然違いますが意味はこんな感じです。
# ユーザの一覧を取ってくる
users = User.where(...)
# ユーザの情報を吐き出す
user_info_text = users.map do |user|
# ニックネームを取得する
user.nickname
end.join('、') # くっつける
本人談(意訳):
コード読んだら分かることをなんでコメントで書くねん!!!
訳注:
初学者でも、コードはコード自身の意味を表現するということに敏感だったようです。
コメントするべきことは、コードに現れないこと、だけですよね。
順番を変えると壊れるコード、やり方がいろいろある言語
もう覚えていないらしいけど、Perlでおそらくuse宣言?周りの順番を変えるとぶっ壊れるケースだった模様。
これはプロでも気をつけてても作りこんでしまうことがたまにある気がするので、自戒的な意味も込めて載せておきます。
あと、Perlの口語的なTIMTOWTDIなやり方はつらいと言っていました。
そしてyomeはエンジニアにはならなかった・・。
yome「人のクソコードを見るだけで吐き気がした。コードはもう書きたくない。」
Why クソコード people!!!!!!?????????
対策
この話を聞いて、とりあえず間違いないと思ったのがPythonです。
Pythonはインデントにも意味があるから汚くなりようがありません。
Pythonはその思想というか禅、特にTIMTOWTDIの逆の「(何かをやるとき)1つの、できればたった1つの明確なやり方があるべき」という考え方が、そしてライブラリがなんでもそろうバッテリーインクルーデッドからして、圧倒的に初学者に向いているはずなのになんでPerlとかPHPとかJavaなんだろう・・?とたまに思います。
個人的にモダンなリスト処理のやり方の多くをPythonから学んだと思うし、いい言語だと感じたのでおすすめしたら今yomeは勉強しているみたいです。
yomeは頑張って勉強するからいつかペアプログラミングしようね と言っています。 // レビュー対応のため追記
IT業界の未来のために、ぜひ美しいコードを書いてください、心からお願い申し上げますm(_ _)m
コードの1行1行に、それを読む人、使う人への愛を込めて・・。
(余談ですが、"PYTHON"と書かれた本を見て「これは絶対読まない」と確信したそうですw)