Contents
paizaとは
paizaというサービスをご存知でしょうか。
エンジニア向けの新卒就活や転職サービスで、コーディング試験に合格することでランクが付与され、ランクに応じて企業からスカウトが来て、面接に進めるというユニークな仕組みとなっています。
書類選考がなくいきなり面接まで進めるので、書類選考で落とされがち、技術以外のアピールが苦手という人が主なターゲットになっており、エンジニアを目指す理系学生の間で、使用する人が増えてきています。
Web系の有名な企業としては
- ワークスアプリケーションズ
- free
- ビズリーチ
- ミクシィ
- Sansan
- コロプラ
- ドリコム
- グリー
- アカツキ
などがpaizaを利用しています。最後の方はゲーム系ばっかりになってしまいましたね。 ゲーム系は技術志向の強い会社が多いので、学生の実力がハッキリわかるpaizaを利用するメリットが十分あります。
paizaでSランクを取っても大したことがない?
手前味噌ではありますが、自分は完全にプログラミング未経験から3ヶ月の勉強でSランクを獲得しました。
ランクはSからEまで別れており、一番上のSランクになればプロフィールを大して埋めなくてもスカウトは凄まじく来ます。Sランクだったこともあり就活をした3ヶ月でスカウトは60件近く頂きました。
paizaでSランクをとると
- ほぼ全ての企業で書類選考なしに面談に進める
- スカウトが凄まじくくる(1日2件ペースとか)
- 周りの理系の学生からめっちゃ驚かれる
- 大してプログラミングができなくてもできる扱いされる
などといった良いことがあります。
こんなの大したことないって? そうなんです。大したことないんです。ぶっちゃけSランクなんて取ったって何の自慢にもなりません。Atcoderでも水色の下の方くか緑の上位くらいです。
Sランクを余裕でとっていても「技術足りないよね」というフィードバックとともに1次面接であっさり落とされることも日常茶飯事です。
このピラミッドは公式サイトのもので、paizaの運営元はSランクは上位2%なんて謳っていますが、完全な嘘っぱちです。
ちょっとできる人がコツさえ掴めば簡単に到達できてしまうので、Sランクで上位10%以上はあるのは確実だと言ってよいでしょう。
数十題の問題を見て分析したところ
- Sランク プログラミングに向いている可能性はあり
- Aランク Sランクと対して変わらない
- Bランク もうすぐ入門者から初心者になれる
- Cランク以下 論外だしエンジニア向いてない
というのが妥当なランクごとの実力だと思います。
勿論最初は誰だって一番下のEランクなのですが、paizaを初めて3ヶ月経ってのCランクは基本的なスキルは十分ではなく「文法以外何も学んでいないようですね」というのが妥当な判断ではないかと思います。
paizaでSランクを取るまでにやったこと
- 標準入力と標準出力を覚えた
- 四則演算をprogateのスライドで眺めた
- 変数の代入の仕方を覚えた
- エディタで色々実行してみた
- if文と繰り返し処理の書き方を覚えた
- 配列のメソッドを10個くらい覚えた
- 2次元配列の作り方を覚えた
- 文字→数字の変換の仕方を覚えた
- 正解率の高い問題からLet’s try!
これだけです。3ヶ月でアルゴリズムに関しては上記の9つのこと以外はやっていません。配列はかなり使うのでググったりして重点的に勉強していました。
これだけ理解してしまえば自称上位2%に入れてしまうんです。随分と甘っちょろい世界ですね。
使った教材はProgateとドットインストールです。他にもこちらのRubyリファレンスには非常にお世話になりました。競プロの登竜門と言われる蟻本も当時は難しすぎて意味不明でした。
- 深さ優先探索と幅優先探索の違い
- 2分探索
- 連想配列の作り方
- 動的計画法
- 変数と定数の違い
- ダイクストラ法やワーシャルフロイド法
- オブジェクト指向
- グローバル変数とローカル変数の違い
- 累積和の計算
- 計算量の細かな検討
は正直全く理解していませんでした。(もちろん今は理解しています。)
当然、paizaにも難しめのアルゴリズムを使う問題は多数ありますが、
「たった1問でも該当ランクの問題をクリアしてしまえばランクアップできる」
というシステムがある以上、難しいことを理解していなくてもランクを上げる事は可能です。
同じランクの問題でも難易度はまちまちで、Sランクの問題でも超絶簡単なこともあるので、片っ端からやっていけば絶対にどれかは解けるだろうという仕組みになっています。
やったことがあまりにも少なすぎてつまらないので、初心者がつまづきやすいポイントを分類して、解決方法を考えてみました。
ランクが上がらない人がつまづきそうなポイント
それでも全員がAランクかSランクに上がれないという事は、つまづくポイントがあるのです。
アルゴリズムに限っていえば初心者の段階でつまづくポイントはだいたい決まっています。
あまりにも基本的なことなのであえてまとめる人は少ないのですが、自分なりの見解を述べていきます。
- 標準入出力の壁
- 具体性の壁
- 分解の壁
- 戦略の壁
この4つさえできてしまえば、アルゴリズムに関しては入門者を脱して初心者になったといえます。Sランクを取ることも難しくなくないでしょう。
標準入出力の壁
与えられた数字や文字を読み取って正しいフォーマットで返せなければ一番下のEランクから脱出できません。
paizaはこの辺りの説明がやや不親切なので、ググるのが下手な人、読解力がない人はここで脱落することになります。
「標準入力」や「標準出力」という言葉を知らないとググることも難しいでしょう。「検索能力の壁」か「読解力の壁」と言えるかもしれません。
エンジニアならググり力は必須なので一回の検索ワードで辿り着けなくても10回くらいは検索し直す癖を付けましょう。
具体と抽象の壁
ある程度検索して調べれば便利な書き方がわかるようになったとしましょう。ここで抽象化ができずにつまづく人がいます。
こちらのサイトに数学的思考力についてとても詳しく乗っているのですが、ここに当たるのは「抽象化する力」と「具体化する力」です。
数学ができる人には当たり前のことですが、高校数学でつまづく人はここの抽象化する力が足りなくて詰まる可能性が高いでしょう。
「具体化」というのは与えられた問題の設定の中でいい感じに数字を当てはめるだけです。paizaは必ずテストケースが必ず用意されているのでここは問題ないでしょう。
「抽象化」は具体例の中から必要な情報だけを抜き出して、常に当てはまる公式を作るかです。提出するコードは、全てのテストケースを通らなくてはいけないので一般化が必要です。
ランクはDやCに上がったけどそこから上がれないという人は、抽象化が苦手な可能性が高いです。
残念ながらこれは出来ない人は出来ません。そういう人はアルゴリズムには向いていないので、アプリ開発やデザインの方にシフトしていくことをオススメします。
分解の壁
「困難は分割せよ」
これはデカルトの有名な言葉です。一見難しい問題でも一つ一つ要素を抜き出すと、簡単な問題の組み合わせに分解できることがほとんどです。
paizaでいうとAランクかSランクかのレベルです。このレベルだと上級者でもある程度は時間を使います。
ある程度抽象化はできるのに分解ができない人は、圧倒的に手を動かす量が足りません。
頭の中で必要な要素を抜き出すだけではなく、紙とペンを用意して具体例を書きまくって、どんなに些細なことでも気づいたことをメモしていきましょう。
20個くらいメモしていってそのうちの3つを組み合わせれば問題が解けた、くらいが普通ですし、上級者が難問を解くときもそんな感じです。
ここまでくると段々とアルゴリズムの面白さがわかって来ます。
戦略の壁
困難を分割できるのに、ランクが上がらない人は明らかに戦略を誤っています。
- Bランクを完璧に解けるようになってから上のランクに望もうとしている
- デバックをこまめにせずに時間を無駄遣いする
- 無駄に難しいアルゴリズムを学ぶ
- 難易度の高い言語を使う
- よく使う処理をパッケージ化しない
- テストケースを通さない
など、実力とはまた違うところでつまづいている可能性が高いです。
賛否両論あると思いますが、ランクを上げることを考えれば、とにかく正解率の高い問題を狙って集中して解くのが効率的です。
自分の実力以上のランクをとってしまったら、それに恥じないように必死に勉強して追いつけばよいのです。
アルゴリズムをある程度マスターしたら、実務に応用する努力も必要ですね。
こちらのサイトにある教材はアルゴリズムを実際の開発に応用する際のバイブルと言われており、個人で作ったとは思えないくらい詳細にまとまっています。
まとめ アルゴリズム以外の能力も鍛えよう
ここまでにアルゴリズムについて色々と書いて来ましたが、アルゴリズムや競技プログラミングは就職活動だけで見るとコスパが悪いです。
数学が化け物みたいにできる世界中の猛者に勝って、ようやく就活では即戦力に近づきます。
ある程度できると「意欲と素質はあるな」「論理的思考力はありそう」くらいの評価になりますが、そこから実力を上げるのはなかなかキツイです。
paizaでSランクを取れるくらいになったら
- アプリやサービス開発
- コンピューターサイエンスの知識
- インターンなどの実務経験
など別の方向にシフトしていった方が話せるネタも多くなって就活に有利となります。
エンジニアの就活で最もコスパのいいのは、自分でサービスを作って公開することか長期インターンの経験です。それを主軸におきたい場合は以下の記事を参考にしてください。
プログラミング未経験者が半年で自社開発のWeb系企業に内定する戦略アルゴリズムや競技プログラミングはよほど熱量がない限りは趣味で十分です。
エンジニア就活で使い倒したおすすめサービス、アプリまとめ
素晴らしい記事、ありがとうございます。
業務でプログラミングはしますが、最近HackerRankの存在を知って圧倒されている状況です。
回答がビット演算など考えもしない答えばかりで、自分には数学的思考力がないのかと挫折ぎみです。