情弱の情弱による情弱のためのプログラミング課題の潰し方

これは coins Advent Calendar 6 日目の記事です。

coins Advent Calendar 2017 の Adventar は こちら

coins Advent Calendar の前回の投稿は こちら ※5日目は未投稿です…。

自己紹介

こんにちは、coins17を代表するイキり人間、すだめ( @ITF_sudame )です。

僕がイキってばかりいるのは間違いないのですが、「イキリオタク」を自称していたところ「オタクではないよね」と指摘を受けました。世知辛い世の中ですね。

今回は空き日ができそうだったのでプログラミング課題の潰し方について思うところを書くことにしました。coins Advent Calendar ではありますが、coinsのっょぃ人向けの記事ではなく、「プログラミングの課題なんてやってられねえよ…辛いよ……」という皆様向けの記事となります。

注意事項

この記事はプログラミングで食っていけるような"""つよい"""人間が書いているわけではありません。

「それはさすがに違うわ」「何言ってんだこいつ」「クソして寝ろよ」と思うような点がございましたら、僕のTwitterにリプなりDMなりを送りつけてくれると嬉しいです。

また、coinsの皆さんは「いやいやいやwwwそんなこと言われなくても分かってるわwwww」と思われるかもしれません。思われた場合、あなたはこの記事の対象読者ではありません。ごめんなさい。それでも怒りが収まらなければ、僕のTwitterをスパブロするなりすればいいと思います。お手数おかけします。

課題を潰す手順

この章は読み飛ばして全く問題ありません。物好きな皆さんは読みましょう。

課題文を読む

まずは課題文を読みましょう。まずは課題文を読みましょう。大事なことなので2回言いました。

課題文を読まなくても解ける問題はあるでしょうが、課題文を読まなければ解けない問題が大半です。東大合格者の実に99.9%は問題文を読んでいるという統計結果もあります[要出典]。

後ほどの「詰まったときは」でも触れますが、課題文には落とし穴が潜みがちです。自分が何をすればいいのかをしっかり明確にしてから課題に取り組むと良いです(自戒)。

書く

書きましょう。

基本的に、初学者向けのプログラミングの課題は授業で習った範囲の記法・文法で解決できるはずです。

これまでの課題から引き続いた内容の課題である場合も多いと思いますので、前回までの課題と比較しながら書くのもよいと思います。

どんなエディタを使っても構いませんが、少なくとも行番号は表示しておくべきだと思っています。エラー箇所を探したりするのに必須です。他宗教の方もいらっしゃると思いますが、ご寛容に。

出す

書いたら出しましょう。書いたら出しましょう。書いたら出しましょう。書いたら出しましょう。大事なことなので4回言いました。

プログラミングの課題、なぜか書いた後満足して提出忘れがちです(体験談)。書き終わったらTwitterを開く前にmanabaを開きましょう。

詰まったときは

ここまで読んできて、「そんなことは読む前からやってるわ、○ね」と思った方が多いでしょう。

この章では詰まったときにどう対処したらよいのかをダラダラと書いていきます。

初手から書けません

隣の席の人に助けを求めよう。以上だ。

書いてみましたが、思い通りの結果になりません 思い通りの結果にならない場合、あなたが書いたコードのどこかが間違っていたり足りなかったりします。その抜け穴、「バグ」を探す作業(デバッグ)が必要です。

バグ探し、すなわちデバッグの方法は山のようにありますが、最もお手軽な手法は「printデバッグ」です。(このprintデバッグには批判も多いのですが、課題程度のプログラムならアリでしょう。)

やることは単純明快で、「ここミスってんじゃね?」と思っている変数を print関数(printメソッド) で出力してもらうだけです。もちろんJavaなら System.out.print() 、rubyなら p() 、Cなら printf() というように言語にあったものを使ってください。

(幼稚ですが)if文の分岐の中に print('こっちの分岐に来たよ!') と書くだけでも、プログラムがどう動作しているのかを確認するヒントになります。

また、何らかのIDE(統合開発環境)を使っているならば、デバッグ機能が搭載されていることがほとんどです。ここでは細かい説明は避けますが、ぶっ倒れるほど便利なのでぜひググって活用しましょう。

実行しようとするとエラーが出てしまいます

エラー文をよく読みましょう。授業で扱うような最近のプログラミング言語ならば、親切にエラー文を出してくれるはずです。エラー文のほとんどは簡単な英語(優しいものだと日本語化までしてくれる)なので、読んで読めないということはないはずです。英語がずらずらと吐き出されるので億劫ですが、まずは目を通しましょう。

エラー文を読み解くコツとして、 自分が実行したファイルの名前を探すというものもあります。多くの場合、ファイル名の後に数字が書いてあり、その数字はエラーが発生した部分の行数を表します。示された部分を重点的に読みなおしましょう。

エラー文の中には何を言っているのか分からない部分が多くあります。そんな時は エラー文をそのままコピーしてGoogle検索にかけましょう。大抵の場合、エラーの内容を解説してくれている記事が見つかるはずです。

質問したいです

友達や先生がその場にいるならば質問できるので問題ないでしょう。

問題はLINEやらTwitterやらで質問したいときです。こういった場合は、必要な情報をしっかり示して質問しましょう。質問に回答するときに最低限必要なものは次の3つです。

  • 課題文
  • 書いたプログラム
  • 実行した結果

以上を示して根気強く質問すれば、プログラミングが書けかつ忍耐強い人なら誰でも回答できるはずです。しかし人のプログラムのバグを探すのは相当な労力を要するので、断られたら諦めましょう。

実行できませんがエラーも出ません

諦めて寝ましょう。

イキっておきたいこと

coinsをはじめ身の回りに強い人々がゴロゴロいる中でこの記事を書くのは少々辛いものがありましたが、最後に少し言っておきたいことを連ねて締めさせてもらいます。

灯台の下は本当に暗い

暗いです。多くのバグは灯台の真下に澄ました顔をして転がっています。どうにもこうにも不可解なエラーが出たときや、バグを直しているにも関わらず変化が見られないときは、その前提が何か間違っていないか見直しましょう。

直しても直してもエラーが消えない、おかしいと思って15分ほど悩んだ結果、編集しているファイルと実行しているファイルが別物であることに気づくことなんでよくあることです(当社比)。

理由を付けて嘆こう

「できねええええ」と言っても何ができないのか分かりませんが、「ArrayIndexOutOfBoundsExceptionが消えねええええええええ」と嘆けば誰かが助けてくれるかもしれません。

Twitterには人の揚げ足を取りたくてたまらない人が大勢います。上手く活用しましょう。

ggrks

「ググれカス」ですね。

これは個人的な体験談ですが、プログラミングの学習は書いてググっての繰り返しです。エラーが出たらググる、関数やメソッドの使い方が分からなかったらググる、知らない用語が出てきたらググる…。悩んでも解決できないときは悩み続けるのではなく、ググりましょう。

ちなみに、ググると最初の方に公式ドキュメント、少し下に行くと技術者向けの記事、さらに下に行くとちらほら初心者向けの記事が出てくるというパターンが多いです。初めから公式ドキュメントを読めればそれに越したことは無いと思いますが、検索結果をいくつか開いて、理解できる記事を読めば(最初は)良いと思います。

最後に

競技プログラミングのトップクラス選手がいたり、某IT企業に就職している人がいたり、ニコニコしながらLANケーブルを引きまくったりしている人がいる環境で、大して書けない僕がこんな記事を偉そうに書くのは非常に肩身が狭いのですが、これを読んで少しでもプログラミングの課題が楽になればと願ってやみません。