こんにちは。倉内です。
エンジニアの転職・就活の選考のひとつに「コーディングテスト」があります。(コーディング試験、技術面接などと呼ばれる場合もあります)
選考当日に口頭で答えたり、ホワイトボードに書いたりする形式を取られることも多く、いきあたりばったりで十分力が発揮できず悔しい思いをする方もいらっしゃいます。
企業によって出題方法や評価の観点は異なりますが、普段からプログラミング問題を解く、課題として出されることが多い定番のアルゴリズム、Webサイトやアプリ開発の基礎知識を学んでおくことも大切です。
そこで今回は、Pythonでコーディングテストの対策ができるサイトをご紹介します。
コーディングテストでPythonをおすすめする理由
企業から指定があれば別ですが、問題を解く際のプログラミング言語は自分で選択できます。
情報系の学生の場合、授業をC言語やJavaで受けていて、慣れている方も多いかもしれません。また、エンジニア経験のある方は、自分がこれまで使ってきた言語を選ぶことが多いでしょう。
その言語に十分自信があればよいのですが、そうでない場合は迷ったらPythonを使うことをおすすめします。
Pythonはとにかくシンプルで、基本的な文法の理解がしやすく、さらにコードの記述量もC言語やJavaに比べると少なくて済みます。たとえば「Hello World!」の出力を見るだけでもよく分かります。
C言語:
#include <stdio.h> int main(void){ printf("Hello World!"); return 0; }
Java:
import java.util.*; public class Main { public static void main(String[] args) throws Exception { System.out.println("Hello World!"); } }
Python3:
print("Hello World!")
コーディングテストには時間制限がありますので、プログラミング言語をコード量の観点で選ぶのもよいと思います。
paizaラーニングでは「Python体験編」(全編無料)や「Python3入門編」(一部無料)といった動画学習講座を公開しています。ぜひ活用していただければと思います。
どんな問題が出されるか
対策の話に入る前に、コーディングテストではどのような問題が出されるのか、いくつかのパターンがありますので確認しておきましょう。
定番アルゴリズムを問う問題
多数存在するアルゴリズムの中でも、エンジニアであれば知っておきたいものがあります。選考ではそれに関する問題をリアルタイムで解いたり、説明したりといったことを求められます。
具体的には「FizzBuzz問題」「フィボナッチ数列」といった基本的なものから、「クイックソート」「マージソート」などのソート、「最短経路問題」「巡回セールスマン問題」などの探索、そして簡単な動的計画法に関する問題などが多いようです。
情報系専攻の方や、すでにエンジニア経験がある方は聞いたことがある・問題を解けるという方も多いと思いますが、そうではない場合ひと通り確認しておくとよいでしょう。
計算量について問う問題
さきほどのアルゴリズムとも関連して、計算量について問われることがあります。
計算量とは、簡単に言うと計算にかかるコストの指標で、時間計算量を表現する方法としてO記法(オーダー記法)が使われます。O(N) や O(logN) といった表記を見たことがある方もいるのではないでしょうか。
実行結果は同じでも採用するアルゴリズム(と入力データ数)によって計算量が異なるため、「より計算量を抑えるためにはどのアルゴリズムを採用するか」を考える必要が出てきます。
基本的な概念や代表的なオーダー表記については、以下の記事で解説していますのでよければ参考にしてみてください。
プログラミング言語の基本知識
たとえば、「オブジェクト指向プログラミングとは」「クラスの継承とは」「ポリモーフィズムとは」といったプログラミング言語に関する知識を問われる問題です。
普段からコーディングをしていてもいざ説明するとなると難しいかもしれません。
自分の言葉で説明できるよう、あらためてプログラミング言語の基本的な知識についてはおさらいしておくとよいでしょう。
コンピュータサイエンスの知識を問う問題
コーディングとは少し違いますが、職種や企業の事業領域によってはコンピュータサイエンスの基礎知識を問われるような問題が出されることもあります。
たとえば「OSとはなにか、どんな役割をしているか」「コンピュータの一次記憶装置と二次記憶装置について説明しなさい」といったものです。
もしくはネットワーク技術(インターネットの仕組み)やセキュリティ、データベースなど業務をする上で土台となるような基礎知識を問われることもあるでしょう。
開発における問題解決の方法・考え方
エンジニアにとって論理思考ができるかは重要な要素です。合わせて、「どんな思考を持っているか」を見て、自社のエンジニアチームや会社自体の社風とマッチするかも判断されます。
簡単なWebアプリやサービス開発の課題を出して、実装したコードだけでなく、それに取り組む姿勢も評価対象になります。
また、「Webサービス開発にあたってこういう問題が発生したとき、どのような方法で解決するか」「解決が困難な場合、はじめにどのようなアプローチを取るか」などが問われることもあります。
前提条件を与えられて解決のために採用する技術やツールを問う場合もあれば、思考やふるまいを見られている場合もあります。口頭の場合、回答した内容に対してさらに深堀りされるので、その場での判断力なども問われます。
コーディングテスト対策ができるサイトと書籍
ここからはコーディングテスト対策についてお伝えしていきます。いずれも無料の範囲でも十分使えるので、ぜひいろいろ試してみてください。
LeetCode
LeetCodeは、GAFAをはじめ外資系IT企業のコーディング面接でよく出題されるプログラミング問題と似た問題を解くことができる学習サイトです。
実際のコーディングテストでここからいくつかピックアップされて出題されることもあるようです。
アルゴリズムやデータベースといったカテゴリを選択できます。また、問題にはArrayやSortingといったタグづけがされているので自分が練習したい分野の問題を選ぶことが可能です。
初めての方は難易度「Easy」から取り組んでみましょう。
公式の回答はC++とJavaですが、Discussを見るとPythonで解答コードの例を載せてくれている方がたくさんいますので、そちらを参考にして問題を解いていきましょう。
AtCoder
AtCoderは言わずと知れた競技プログラミングサイトですが、3000以上の過去問題にいつでも挑戦することができ解答・解説も用意されているため、コーディングテスト対策にもおすすめです。
過去に開催されたコンテストの解説はC++で書かれていますが、ソースコードはPythonも用意されています。
競技プログラミングにあまりなじみのない方は、登録後はまず初心者向け問題集「AtCoder Beginners Selection」や「practice contest」で問題を解いてみるとよいでしょう。
yukicoder
競技プログラミングの練習サイトという位置づけで、多くのプログラミング問題と解答・解説を参照できます。(定期的にコンテストも開催されています)
AC(Accepted:正解)した他ユーザーのコードを見ることができるため、分からなかった問題やもっと綺麗なコードを書きたい場合に複数のユーザーの解答を参考にすることができます。
paizaラーニング
paizaラーニングではプログラミング問題だけでなく、動画講座によりアルゴリズムやコンピュータサイエンスの基礎的な内容を学ぶことができます。
目的別のおすすめコンテンツをご紹介します。
レベルアップ問題集
スキルチェックと同等の問題を時間制限なしで解ける練習問題集です。
レベルアップ問題集では、ループや条件文、配列といった基本文法をおさらいできる問題から、ソート、線形探索などアルゴリズムに関する問題まで多様な練習問題を公開しています。
すべての問題の入力テストケースおよび一部問題では解答コード例・解説もご用意しています。ぜひご活用ください!
Codility
実際企業の選考に使われているコーディングテストのサービスで、練習問題は無料で挑戦することができます。
難易度はEasy、Medium、Hardの3段階でLessonsタブのメニューを見てみると、コーディングテストでよく出題される内容が並んでいることが分かります。
たとえば、ソートの問題であれば計算量を示すオーダーの表記もされており、解説もコーディングテスト対策に役立ちます。
Lessonsの公式の解答コードにPythonはありませんが、検索するとPythonで解いたものを載せてくださっている方もたくさんいらっしゃるので参考にするとよいでしょう。
CS50.jp
ここまではプログラミング問題を解けるサイトを中心にご紹介しましたが、このサイトはハーバード大のコンピュータサイエンス入門講座「CS50」を日本語翻訳したものです。
以下のように学べる内容は幅広く、これらを日本語(日本語字幕)で、しかも無料で学べる方法は他にはあまりないと思います。
おすすめ書籍4選
問題解決力を鍛える!アルゴリズムとデータ構造
アルゴリズムの紹介だけでなく、アルゴリズムを理解し、使いこなせるようになるために役立つ1冊。
コーディングテスト対策を始めたばかりの方が最初に手に取る書籍としておすすめです。
Pythonで学ぶアルゴリズムの教科書
競技プログラミングでは実行速度の関係から、コードはC++で書かれることが多く、アルゴリズムなどを学びたいときにPythonのコードが見当たらないこともあるでしょう。
この書籍では定番のアルゴリズムをPythonでどう書くとよいかを学ぶことができます。
世界で闘うプログラミング力を鍛える本
外資系IT企業のコーディングテスト対策にと言われることが多い本書ですが、計算量についての問題がとてもよく、そのあたりを理解したい人におすすめできる1冊です。
Pythonで解いたコードをGitHubにアップしてくださっている方もいるので、参考にするとよいでしょう。
プログラミングコンテストチャレンジブック
通称「蟻本」と呼ばれ、競技プログラミングに取り組む方にとっては必須の参考書です。
コーディングテスト対策にも役立ちますが、初心者の方が初めて読む1冊にしては難易度が高いので、ある程度ベースのコーディングスキルやアルゴリズムの知識がある方におすすめです。
まとめ
Pythonでのコーディングテスト対策におすすめのサイトと書籍を紹介してきました。
本文中にも書いたとおり、Pythonはシンプルでコード量も少なくて済むため、時間制限のある中で問題に解答することを考えるとよい選択肢と言えるでしょう。他の言語の経験がある方は特に習得も早いと思います。
ただ、普段からプログラミングや開発をしている人でも選考の場で答えたり問題を解いたりしようとすると、緊張もあってなかなかうまくいかないこともあります。
本来の実力を発揮するためにもしっかりと準備をして本番に臨みましょう!
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら