まさ@ブログ書き込み中

自由に生きるための英語、プログラミング、考えごとについて色々書いています。

Webエンジニアを目指すならISUCONが役に立ちます

f:id:masaincebu:20180830193207j:plain

今回は、僕がWebエンジニアとして必要な知識をつける際に活用した「ISUCON」について簡単に書いていきたいと思います。

 

もくじ

  • ISUCONとは

  • ISUCONではWebに関する広い知識が求められる

  • スコアが出るのでモチベーションが続きやすい

  • さいごに

 

ISUCONとは

ISUCONとは株式会社LINEが主催する「Iikanjini speed up contest」(いい感じスピードアップコンテスト)の略で、競技プログラミングの一種です。

ISUCON公式Blog

 

コンテストへは2〜3名1チームで参加し、与えられたお題のWebアプリケーションの処理のスピードアップを図ります。

※ISUCON8は確か個人で参加することも認められていた気がします。

 

最初に与えられるアプリケーションはわざと処理が遅くなるように作られており、そのアプリケーションのボトルネックを見つけ出し、改善してスピードアップさせていきます。どれだけ改善されたかはベンチマーク(計測器みたいなものです)を走らせて、アプリケーションのスコアを見て確認できます。

 

予選は全国でオンラインで開催され、本戦は東京の会場で行われます。

 

ISUCONではWebに関する広い知識が求められる

さきほど「アプリケーションを効率化する」という風に説明しましたが、厳密に言えばアプリケーションだけでなく、データベースや、サーバーを効率化することもISUCONでは許されています。

 

そのため、ISUCONで勝ち抜くことやスコアを上げることを目指すとすれば、アプリケーション以外の知識も求められます。

 

実際、ボトルネックがWebサーバーであれば、アプリケーションをいくら改善してもスコアはたいして上がりませんし、データベースの設計が問題であればいくらWebサーバーをいじっても効果は薄いです。

 

ISUCONで勝つことを目的にすることで、Webのしくみについて勉強したり、サーバーやアプリケーション、データベースなどについて理解を深めるきっかけになります。

 

アプリケーションのコードは何の言語で書かれているかは毎年発表されてみないとわからないのですが、例えばISUCON7ではPerl、Ruby、Go、PythonやNode.js、PHPなど複数の言語で実装されていて、エンジニアが得意な言語をチューニングできるように用意されています。

 

スコアが出るのでモチベーションが続きやすい

Webエンジニアにとって必要な知識を学ぶ時に大きな壁となるのがモチベーションの問題です。

 

アプリケーションを書くためのプログラミング言語を勉強するならまだしも、Webの知識やサーバー、データベースについて独学で学ぶには忍耐が必要だったりします。すぐに役に立つイメージがつかないからです。

 

その点、ISUCONをやっていればアプリケーションを改善できればスコアが上がるので自分の知識が役に立ち、結果が変わるという経験ができます。

 

さいごに

Webエンジニアとしての知識を蓄えるためには、ISUCONで予選を勝ち抜くのを目標にしてみるのも手なのかと思います。

 

ISUCONで必要となる知識はWebエンジニアに必要な知識に近いですし、知識がスコアに結びつくのでゲーム感覚で点数アップを目指しながらいろんなことを学べます。

 

個人でISUCONの模擬試験をやる時にはセットアップが少しややこしいかもしれませんが、セットアップ方法に関してはリポジトリやブログに丁寧な説明が載っていることが多いので参考にしてください。

 

さいごに、僕が触ったことのあるISUCONの模擬試験のうち、いくつかのリポジトリのリンクを貼っておきます。参考になれば幸いです。

GitHub - catatsuy/private-isu

GitHub - yahoojapan/yisucon: Yahoo! JAPAN の社内 ISUCON である Y!SUCON です。