エラーは恥ずかしくないし役に立つ

技術

TL;DR

エラーを恐れるな、むしろ出しまくれ。それができるのは初心者のうちだけ。

エラーが出にくいライブラリ?

とある質問サイトでこんな質問がありました。曰く、「某言語である分野をやりたいが初心者に向いていて、エラーが出にくいライブラリはどれか?」と。質問には具体名が入っていましたが、そこが本題ではないのでぼかしています。しかし、エラーが出にくいライブラリって何?

ここのサイトは質問が長いと怒られるのか紋切り型の意味がわからない質問が多いのが特徴。回答を書くには想像の翼を広げまくる必要があります。今回もエラーが出にくいライブラリってなに?ってところがよくわかりません。まあ、自分も初心者の頃はエラーが出るとドキッとした気がするので、エラーが出るのがイヤなのでしょう。
初心者あるあるですが、エラーが出るとどうすればよいか分からないとか、エラー=失敗で悪いこと、エラーを出さないのが良いことみたいな捉え方をする人が多いのかな、と想像します。

それにしても、エラーを出すかどうかは本人次第なのですが。ライブラリの方で意図を察していい感じで処理してほしいということなのでしょうか?まあ、そういうところもよく分からないで質問しているのかもしれません。

エラーが出ることのありがたみ

それなりの経験を積んだ状態で大量のエラーを出していたらそりゃ恥ずかしいですが、初心者のうちはエラーなんて出るのが普通です。むしろ、そこにこそ成長のタネがあります。実行時エラーでもコンパイルエラーでも同じですが、エラーが出たで済まさずに、それに対する対応を調べて学ぶことで自分の引き出しが増えるのですから。ですので、むしろ積極的にエラーを出せと言いたいです。

特に実行時エラーを出せるものなら出してみて、それに対してどう対応すればエラーにならないようにできるか、ということをしっかり学んでほしいです。プログラマというとコーディング能力ばかりをやたらと強調する方もいますが、コーディングなんてプログラマの仕事の一部に過ぎません。エラーを出す才能、エラーに対応する才能も重要です。

実際、エラーになるというのはすごくありがたいことだったりします。仕事でプログラムとかしていれば、エラーにはならないけど何かうまく動かないなんてことはよくあります。よくあっちゃ困りますけど「稀によくある」パターンです。

エラーが出る不具合なんて、その場所を見るか、そこから周囲を見回せば原因にたどり着けるので問題のうちに入りません(いや、入るけど)。問題なのはエラーにはならないけど動作がおかしく、どこに問題があるのか分からないパターン。それと、エラーが出たり出なかったりするパターン。
この2つに比べれば、コンパイルエラーだろうとランタイムエラーだろうと、エラーが出るだけ涙が出るほどありがたいです。

コーディングテストってのはよく聞きますが、自分が採用する立場ならエラー対応テストをやりたいです。そういうのあるのでしょうか?まあ、それなりの難易度のものを用意するのもちょっと面倒ですけど。

いい感じの危うさ

対人関係とかそうですが、あえて明確にしないで宙ぶらりんにしておいた方がよい関係というのもありますよね。コンピュータについても「いや、そこは察してよ!」と思うことはよくあります。いや、それは無理だろうと思うのですが、そうはいっても思ってしまうのが人情というもの。

例えば、前職で触っていたRPAツールは型の概念がありませんでした。数値と文字はツールの方でいい感じで解釈してくれます。が、ここで1つ問題が。「3月4日」のつもりで「STR="3/4″」みたいなコードを書くと、なんと計算して0.75にしてくれやがるのです。正直、最初に遭遇した時には頭を抱えました。

これ自体はツールの仕様がおバカなだけで、普通のプログラミング言語はここまで抜けてないという反論がたくさん来そうです。実際、これでよくあんな高額な使用料を取るなぁと思ったものです(まあ、これが致命的というわけでもないのでよいのですが)。ただ、ここまで酷くはないとしても、ツールやライブラリにお任せというのは本当はそのツールやライブラリの仕様をきっちりと押さえないといけません。そうでない丸投げは単なる責任放棄です。その結果、後になってよく分からない問題が出てきたりして、解決に時間がかかった挙句、このツールやライブラリはこういう仕様だったということをちゃんと理解していなかったためということこそが恥ずかしい話です。

ちなみに、上記のツールの抜けた仕様の件はオチがあります。バージョンアップの際にさすがにこれは問題と思ったのか、修正されました。が、そのためプログラムの見直しが必要になるという新たな問題が。コードの書き方が変更されてしまったおかげで、問題がある部分もない部分も全てまとめて変更しなければならなくなりましたとさ、ちゃんちゃん。ふざけんな!

エラーは恥ずかしくないし、役に立つ

エラーは友達!とまでは言いませんが、エラーを毛嫌いして避けるのではなく、学んでいる間は積極的にエラーを出し、エラーとのよい付き合いをしてもらいたいところです。

実際、昔のBASICなんてただ一言「syntax error in XXX」みたいな無味乾燥な一言で済まされてましたけど、今時の言語は懇切丁寧ですよね。
例えば、宣言しただけで使ってない変数や関数があれば、警告を出したりしますし、言語によってはエラーにします。Go言語なんで論理型の変数に対して「flag == true」とか書いたりすると「flagだけでよいよ」と警告してくれます。

問題の箇所にテキストベースで下線を引いた上で、ここはこうすべきみたいなサジェスチョンまでしてくれる言語もあるのですから、エラーをうまく活用すべきです。ユニットテストのテストケースではまずエラーを出してから、対象のコードを書き始めるなんて考え方もありますが、まずはエラーを出してみるというのは実は大切なことだったりします。

「来た、見た、勝った」はカエサルの名言ですが、「(コードを)書いた、(エラーが)出た、直した」が重要です。エラー出さずに一人前になった奴がどこにいるものか!とかどこかで聞いたことあるようなセリフを出しつつ、エラーの数だけ強くなれるのではないかと。

結論:エラーを出してスキルアップ!

ある言語の習いたての頃にエラーを出すのは別に恥ずかしいことではないです。どんどんエラーを出しましょう。最近の言語はエラーから得られることも多いです。警告も全部潰せとは言いませんが、示唆を含むことも多いので目は通しましょう。失敗は発明の母とも言います。エラーを重ねることで、ここはこうしてはいけないのかとか、なんでこれはいけないんだろう?という疑問を持って調べたり対応することで、スキルアップできます。

レッツ、エラー!

技術プログラミング言語

Posted by woinary