blogこの広告は、90日以上更新していないブログに表示しています。新しい言語を覚えるには新しい言語をどんどん覚えていきたい欲はあるのですが、どのようにすればいいでしょうか。一番は、その言語で何か物を作ってみることだと思います。定番、「HelloWorld」から始まり、「FizzBuzz」書いてみたりします。標準入出力を学んだあと、ループや条件分岐を学ぶ感じですね。この後は競技プログラミングの簡単な問題で、文字列の扱いや配列の扱い、classの扱いまでやって、木構造なんかを作ってみるって感じで僕はやっています。今回新たなルートとして、ISHOCON1に実装を追加するってフェーズを付け加えました。略で、ISUCONと同じように与えられたアプリケーションの高速化を競うコンテスト(?)です。Japan社のY!SUCONなど共に挙げられるのがこのISHOCONです。ISHOCONは企業としてではなく、個人プロダクトとして公開されている点が特徴です。ISHOCONを選んだのかISHOCONは、本家ISUCONや他のISUCONクローンプロダクトに比べて、コード量が少ないことが特徴的です。その分初心者向けで、コードの全容を把握してからISUCONする(最適化していく)って感じでも、全然行けるようになっています。8時間あれば、僕一人でだいたい改善したいところは改善しきることができる分量です。本家ISUCONでは三人がかりでもこんなこと絶対に無理です。参考実装を作るのは、比較的楽な方だと思います。作者の人と会ったこともあるってのが、心理的な障壁を大きく下げてくれました。Crystalを選んだのかまず、Crystalとの出会いは、AtCoderで提出できる言語一覧にあった事でした。crystal-lang.orgとりあえずWebページ行ってみると、「C言語のように速く、Rubyの書き味を持つ」(Crystal-jpのSlackより引用)ってなってて、なかなか面白そうな言語があるなーって思いました。AtCoderで何問かCrystalを使って解いてみて、いい感じで使えたので、もうちょっとこの言語について詳しくなりたいと思いました。CrystalのWebページには、最初にWebサーバーでHelloWorldを返すやつを立ててみるところから始まっています。これはWeb向きの言語なのかなって思いました。深く学びたければ、Webサイトを作ってみるのが良さそうだと思いました。ISHOCON1のCrystal実装を作ろうと思ったのかCrystalでWebサイトを作れば、Crystalをよく学べるかなと思ったのはいいのですが、じゃあどんなWebサイトを作ればいいのってなります。僕はアイデアマンではないです。いいアイデアなんて浮かびません。普通のプロジェクトを別言語で書き直したところで、メンテナンスが面倒になるだけですし、一つのプロジェクトで複数の言語の実装があるなんて意味がわかりません。特殊例として、ISUCONに関してだけ言えば、複数言語による参考実装がないと困ります。主催者が考えるに、スコアが出せるかどうかは言語の問題ではない、と思うからです。どの言語だろうと勝つ人は勝ちます。速い言語遅い言語で勝負がつくようなつまんない問題は過去一度も出されませんでした。tagomoris.hatenablog.comISUCONに関して言えば、言語差はあまり関係ありません。競技プログラミングでもC++は強いけど、でもC++でないと絶対に勝てないかと言われればそうではないですよね。ISUCON的には参考実装言語が多ければ多いほどいいと思います。その分、「あの言語なら詳しいけど、参考実装にはないから、普段使い慣れていない言語を使わざるを得なくなって、点数伸びなかった」みたいな人を減らすことができます。作るのにそれだけコストがかかる上に、その言語の実装を誰も使わない事態が起こりうるので、本家ISUCONでは参考実装される言語がメジャーな言語に絞られるのは当然のことだと思います。ISHOCONに関して言えば、いつ始めても何時間やってもいいプロジェクトですので、いくつ参考実装があってもいいと思います。誰かが使ってくれたら嬉しいですけど、使ってくれなくても用意するだけで意味があるかなと思います。したらここからCrystalを勉強するユーザーが増えるかもしれませんしね。いうわけで、ISHOCONの参考実装を増やそう、面白そうなCrystalって言語を使ってみようってなりました。基本的にはロジックはGolang、テンプレートはERBがあるRubyを参考にしました。ERBライクなテンプレートを使えて、ルーティングとか基本的なことをやってくれるCrystalのWebフレームワークとしてKemalを使いました。kemalcr.com方針としてはGolang実装を見ながら、そのままCrystalに起こしていく感じですね。関数名とか変数名とか、なんとなくCrystalっぽそうな感じに変換しながらやっていきました。僕はCrystalでWebサイトを書くのはこれが初めてなので、変換ルールとかはかなり適当です。気に入らないところとかあれば、プルリクとかIssueとかを大歓迎しています。そんな感じで一気に実装していき、ベンチマークを通ればプルリクとして送ります。今後もISHOCON1に新しい言語実装を増やしてみたりしたいなーって考えてます。リクエストパラメータとかデータベースアクセスとか、AtCoderではできないような所をしっかりと学べますし(←そもそもAtCoderはそんなことを学ぶ場ではないですけどね)、何より作ってる時がとても楽しいです。一度Crystal実装のISHOCON1を試して欲しいですし、もしもうCrystalをマスターした方なら是非「ここはCrystalの流儀だとこうする」なんか送りつけてもらえるとありがたいです。参考実装を増やしてくれる人が増えたらなーって思います。色々な言語で実装されたWebサイトとか、なかなかユニークで面白いですよね。勉強にもなりますので、是非オススメします。最後になりましたが、こんなに面白いコンテンツを作っていただいた上に、レビューまでしていただいた@showwinさんにはとても感謝しています。ありがとうございました。コードコンテスト20...タイトルめっちゃ長いですね、ごめんなさい。応募用紙どうも、馬です。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事ISUCON8予選で惨敗してきた話ISHOCON2に参加して来たよ!ISHOCON1をScalaで書いたお気持ちWSLとファイルパーミッションとVSCodeの話ISHOCON1をCrystalで書いたお気持ち月別アーカイブ参加グループプログラミングはてなブログをはじめよう!Goryudyumaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。