著者:miyati
ページ数:60

¥350¥0

この本を、競技プログラミングを未経験の人達へ届けたい。
その思いから執筆が始まりました。
日本の将来の優秀なエンジニア達の大きな、最初の一歩となります様に願っています。

はじめまして。
競技プログラミングにドハマりした、弱小エンジニアの「みやち」です。

ある人は、この本を開き、数秒で閉じるでしょうし、
またある人は、物足りなく、
続きがすぐにでも欲しい、ボロボロになるまで使い込んだと聞く。
星の数で評価をするなら、星5の人も、星1の人も山の様に発生する、
これはそういう類の本です。

そういう運命を辿るのは、多くの技術書では避けて通れない道であることを
理解しています。少しでも星5の人たちを増やす様な構成にするのではなく、
「対象読者」をしっかり伝え、読まなくても済む人達には、読まないで済む様に
案内をしたいと思います。

本題の、「対象読者と、内容」についてですが、
この本はRubyを使って、競技プログラミングに立ち向かう、
競技プログラミングに慣れるためのとっかかりになるという目的を持った本です。
他にも、この本に隠された命題がいくつかあります。

この世に出版されている競技プログラミングの他の本はとても難しく、
初学者や、入門者が読んですぐにわかる様な、そういう類の本ではありません。
筆者もいくつか読んでみましたが、「Rubyで書かれていない」、
「アルゴリズムの勉強のレベルと言っても高いレベルの要求」、
「競プロのガチ勢が勉強する本」、
そして、一番誤解を受けやすそうな内容として「仕事の役には立たないかも」
この様な印象です。

これらの本は、以下の様な所に焦点が置かれています。
・どうすれば競技プログラミングで戦える様になるか?
・良く出る・頻出のアルゴリズムの書き方
・計算量が少なく、最速で正確なアルゴリズムの考え方

それぞれの本について書かれている筆者達の目的もわかりますし、そうならざるをえない
のも頷けます。
これらは、中級以上の読者が対象で、初心者がここから入るのはとても難しく、
「初心者は他にやることがあるだろう?出直してきな」、そういう意図が、
(私の邪推かもしれませんが・・)見えてしまっています。

私は初心者に近いです。あまりコードを書いてこなかったことが原因で、
良いコードも、速いコードも、書くのが苦手です。

でも、継続的な技術向上はさせたいと思っています。
(ここでは何が良いコードなのかの議論は置いておきます)

基本的なプログラミングの利用方法の本は一冊以上通読した、ある程度文法は覚えた。
そういう人たちが、更にその後のステップとして、続けて行くのに、
あまり恥ずかしいことがなく、続けやすく、ハマりやすい、
一部ゲーム的な要素を持ちながら、技術を習得していける様な、そんな何かを、
ずっと探していました。

学校の勉強では、そんな何かはいくつか見つけました。
くもん式、これが一番上記に近い様な感じです。
その他、ゲーミフィケーションを取り入れた勉強方法などです。

それがプログラミングに置き換えると、途端に数が少なくなります。
初心者以上、中級者以前の人たちが学ぶ様な本。それが圧倒的に少ない。
日本では、初心者は溢れているけどそれほど中級者が多くはなく、
中級者は上級者が読む様な本を読むことができるからです。

プログラミングの勉強で、中級者目前の人が学習するのはどんなことが良いのだろうか?
どんなことを行えば自分がスキルを身につけるのに良い結果をもたらすだろうか?
そう考えて探し回った結果、見つけたのが競技プログラミングでした。

競技プログラミングの良い点をいくつか挙げてみます。

・一流の人達と同じ土俵で戦える、ですが負けっぱなしじゃない
・色やランクがあり、数的・視覚的レベルアップの要素を持っている
・開催されるコンテストの成績によっては、賞金が出る(!)
・年齢制限なし(!)
・就職活動の一部を兼ねている場合がある
・過去のコンテストで出題・回答された他の人が書いたソースコードが読める
・技術が身につく、早くコードを実装できる様になる

良いことづくし、そう思いませんか?
いいえ、人によっては、悪い要素とも取れることもあるかもしれません。

・数学的要素がある程度必要
・IT技術としては、学べる要素が少ないかも
・仕事で使わない要素ばかりなので、費用対効果が低い
・私はもうこのレベルにはいない、負ける気がしないからやる意味がない

全体としてみれば、そういうこともあるかもしれませんが、
この本は文法書や、入門書を読み終えたくらいの初学者や初心者、初級レベルの方を
対象にしています。しかも、入門書を読んだくらいでは、すぐに中級者になることが
出来ないのを、みんな知っています。そこを埋めるために学習するコンテンツです。

私はプログラミングを「学ぶ」のに、上記の様な悪い要素を考える必要はないと
考えています。全ての道は、「技術向上に伴う楽しさに繋がっている」、そう
思っているからです。
ご自身が、入門書を終えた程度だと言う認識であれば、是非本書を手に取ってみて
ください。
本書は、バッティングセンターでひたすらバットを振る。あの感じです。
(理解されないかもしれませんね・・・)

プログラミングで挫折してしまう多くの理由は、
続けられなくなってしまうから、の一点につきます。
それが精神的なものであったり、技術的なものであったり、人間関係であったり、
内容は様々です。

競技プログラミングは、自分が出来ない問題だと思うことがありこそはすれ、
他人にけなされたり、貶められたり、結果が出ないからと言って何か損する
と言うことはありません。
どうやってレベルアップしていこうか?どれを身につければ良いんだろう?
悩みながら進むのも、ある種ゲームじみています。
話しかけなければ、人間関係に悩むこともないでしょう。
プログラミングで挫折した人も、
競技プログラミングでの挫折は、「続けないこと」以外には、
「楽しめない」くらいしかないでしょう。楽しくなかったらやらなければ良い。
私はそう考えています。
コンテストを楽しめる様に、圧倒的に成長してください。
圧倒的な成長の「最初のスタートダッシュ」を本書がお手伝いします。

なるべく平易に、わかりやすくなる様にコメントをつけました。
なぜそうなるのかを徹底的に習得して頂きたいと思います。

そして、重要なのは、基本が身についたら、
それを徹底的に「速くコーディングする練習」をすることです。
速さは、競技プログラミングに置いて、最高の美徳です。
コーディング速度もそうですが、プログラムの演算結果も速いことが求められます。

慣れてきたら、コーディング一文字を減らすことまで考える様になってくるでしょう。
仕事では、そこまでする必要がないと言われるかもしれませんが、
徹底的に短いコードはそれだけで価値があります(少数派だとしても私はそう思います)。

仕事においては、時には、それがメンテナンスする人の負担になることもありますが、
時と場合を考えてやって行きましょう。このあたりが、良いコードの
議論に繋がるでしょう。

自分が書いたコードが、良いコードかどうかわからない?

なるほど、確かにそうですね。私の技術向上の一部の悩みはここにありました。
「他人に採点されたくない、だけど、他人の良いコードは見たい」。

それも、競技プログラミングの中に限ってですが、解決できます。
良いコードの見分け方も、この本では書いて行きます。
そして一般的に「良いコードがどんなコード」であるかの「一例」、
「一つの解」も示して行きたいと思います。
更に、皆さんはそのコードより良いコードを考え、書いてください。

私の役目は、理解しやすい入門に毛が生えた難易度の本を世に送り出し、
競技プログラミングの初学者や入門者を少しでも増やすことだと思っています。

学校でもプログラミングの授業が始まることがあるでしょう。
その時教えるのは、この本の様な、極めて平易で、答えの一例があり、
解説もできる。そう言った内容の本が求められるはずです。
(まだ書いていませんが、次に書く本の内容が決まってしまいました。笑)
競技プログラミングで、論理的思考力と、思考速度は間違いなく向上します。

正直言うと、
私は、小学生や中学生に競技プログラミングで賞金をとってもらいたい。
その経験は、成功体験となり、やがて業界を引っ張る様な優秀なエンジニアに育つと
確信しているからです。
一度賞金を取れる様なレベルまで這い上がることができれば、その先のコンテストでは、
無双(荒稼ぎ)できる可能性だってあります。
そして、企業のコンテストのスポンサーには、小学生枠、中学生枠などを設けて頂き、
優秀な人材が育つ様、後押しして頂けると嬉しいです。
スポンサーと言っても、1位の人に10万円とか、そう言うレベルです。
義務教育を受けている学生にとってはそれはとても大金です。
そして、将来、その子達がスポンサー企業で働く様になるかもしれません。

Amazonの文字数の制限により、これ以上は記載できません。スミマセン。。

  Kindle Unlimitedは、現在30日間無料体験キャンペーンを行っています!

この期間中は料金が980円→0円となるため、この記事で紹介している電子書籍は、すべてこのKindle Unlimited無料体験で読むことが可能です。

Kindle Unlimited 無料体験に登録する