🆓

イントロダクション

Coding InterviewCatとは

Coding InterviewCatはゼロからコーディング面接における基礎やテクニックを効率的に学び面接を突破できるようになるLeetCodeを活用した学習教材です。はじめにLeetCodeを知らない方に向けて書きますがLeetCodeとはGAFAなどのテック企業のコーディング面接で出題された類似問題を解くことができる学習プラットフォームで、コーティング面接対策 = LeetCodeに取り組むと言われるまでこの界隈では有名になっています。
しかし、LeetCodeは体系的にCSを学んでいない人にとって扱い辛いプラットフォームになっています。途中で挫折する方も多いのではないでしょうか?LeetCodeのEasyレベルとは全くEasyではないのです。下の画像のTwo Sumという最も有名で簡単な問題でも複数回答を最適解を考察しながら解くことは難しいです。
Coding InterviewCatにはLeetCodeに取り組む上で必要なデータ構造とアルゴリズムの基礎・テクニック別の例題集とそのLeetCode類似例題問題が数多く用意されています。またコーディング面接に対する心構えや学習ロードマップもあり、この本に書かれている事を実践していくだけでスタート前と後とでは大きく実力が異なっているような設計となっています。共著者の@green_tada_24さんは「自分と同じくらい強くなれるように書いた」と意気込むくらいには我々も本気で教材開発に取り組みました。
さらにDiscordでのサポートも用意しているので、同じようなコーディング面接に臨む仲間やLeetCodeの問題で理解できなかった部分に関しても質問する事ができます(条件あり)。
世の中に様々なアルゴリズムとデータ構造(DSA)に関する本が登場していますが、”コーティングテスト・面接に特化した”ものはCracking the Coding Interviewがとても有名です。ではCracking the Coding Interviewを買えばいいんだよね?という声も聞こえてきそうですが、Coding InterviewCatはLeetCodeを効率的に活用できる点において差別化しています。実際の問題を解くならCracking the Coding InterviewよりLeetCodeの方が実行環境などもあり良いですからね。
少なくとも日本語コンテンツとしては唯一無二の教材であると我々も自信を持って断言する事ができます。Coding InterviewCatを活用する事でLeetCodeを効率的に扱えるようになり、是非皆さんのコーディング面接の突破にご活用下さい。
LeetCodeの問題(Two Sum)
LeetCodeの問題(Two Sum)

Coding InterviewCatを作った背景

アルゴリズムとデータ構造(DSA)はソフトウェアエンジニアの面接にとって最も重要な要素の一つです。しかしDSAは多くの方が苦手にしてるのではないでしょうか?何故なら我々ソフトウェアエンジニアの業務プログラミングにおいてこれらを深くまで意識する事はないからです。
我々が学ぶDSAは標準ライブラリやミドルウェアの中に既に実装されています。我々は抽象化したインターフェースを利用する事でDSAを深く意識せずとも活用して恩恵を受けているわけです。例えば、我々は普段MySQL・PostgreSQL等のリレーショナルデータベース(ミドルウェア)を通して大量のデータの中から目的のデータを効率的に探索しています。リレーショナルデータベースを支える技術の中にはB-treeなどのバランス木をベースにしたインデックスが活用されています。
また、私がこれまで経験した業務プログラミングは数多くありますが、動的計画法などの難しいアルゴリズムは活用できた例はほぼないと言っても間違いはありません。もちろん最適化などを責務とするアルゴリズムエンジニアの方であればその頻度は多くなりますが、テック企業のソフトウェアエンジニアの中でもそのような職務はマイナーであって、多くのソフトウェアエンジニアはアプリケーション開発やツール開発に従事しています。BFSやDFSなどの基本的なアルゴリズムは使う事はありますが、その程度です。
知識として暗記すれば良い分野と違い、DSA関連のコーディングテストの問題はすぐに解けるようにはなりません。また文字で読んでも頭で理解できないという感覚をエンジニアなら誰しも経験があるのではないでしょうか?つまり見るだけで解けるようになるのではなく、覚えた知識やテクニックを実践していく過程の中でこれらを習熟していきます。
Coding InterviewCatはコーディングの問題を解く上でのテクニック集を数多く盛り込んでいます。そこで学んだテクニックを元にそれを活用しているLeetCodeの問題を解くことで、身につけたものを習熟させていく設計になっています。この仕組みは、皆さんが高校時代に取り組んでいた数学の青チャートを元に考えました。青チャートでは例題のすぐ下に解答が書いてあります。この教材でも同様に例題に関しては自力で解いていただいても構いませんが、解答を先に見て、それを元にLeetCodeの問題を解いていただく方が効率的な設計となっています。
コーディング問題の中には基本テクニックを知らないと絶対に解きようのない問題が出るわけです。もちろん本番のコーディング問題では思考を巡らせて解法を考えるわけですが、今まで自分が解いたことがある問題から得られたテクニックを引き出しの中から取り出して、パターンマッチさせる方が再現性がとても高いです。閃きに頼る機会を極力へらす事。これを目標に頑張りましょう。しかし、基本テクニックを知っていたのに解けなかったというのは話が違います。この場合は思考力は足らなかったと反省し、よく問題に向き合いましょう。
読者の中には既にLeetCodeを数百問解いたが伸び悩んでいる方もいるかと思います。この様な方は意外と少なくありません。特に海外の方とかだと1000以上問解いている(LeetCodeに提出してacceptされた問題が1000問以上)のに全く成長してない方もいます。その様な方は今一度本教材を使用して正しい学習法で学んでいきましょう。DSAの分野は良くも悪くも数学に似ています。伸び方が左の図の様な線型ではなく、右の図の様にある程度の思考と練習の経過を経て急激に階段状に伸びます。思考のトレーニングを決してサボらない様にしましょう。
notion image
また特に伸びない方に見られるのは1問にかける時間の少なさです。DSAは量ではなく質がとても大切です。皆様は解けない問題に出会ったとき何分で諦めて答えを見ますか?そして答えを見て何分かけて復習しますか?もちろん個々人の学習の仕方に差はあって良いと思います。しかし単純に知識として知らなった場合を除いて、せめて20分は問題に向き合ってみましょう。紙やタブレットを使って図を書いたり、極端な例で考えたりして悩むことを恐れないでください。20分悩んで解けなくてもその20分は思考のトレーニングとしてきちんと機能しています。
上記の図の様にすぐに効果は見れませんが決してこれを軽視しないでください。そして復習には倍の40分以上使いましょう。ただ答えを見て一時的に理解して答えのコードを写経して提出して終わりとしてしませんか?「なぜ解けなかったのか」、「どこまでは理解していたのか」、「次似た様な問題を見たときにどう考えれば良いのか」まで意識して復習する様にしましょう。
そして最後にですが、コンテストに出ることをお勧めします。コンテストに出場する目的としては競技プログミングに強くなって欲しいということではありません。コンテストでは制限時間と程よい緊張感があります。その環境の元で時間一杯使って思考を行うのはとても良いトレーニングとなります。参加しやすいコンテストしてはLeetCodeでは毎週日曜日の昼に4問出題されるコンテストがあります。これにまずは参加してみましょう。
LeetCode Weekly Contest
LeetCode Weekly Contest

何が学べるのか?

この本は主に3つの内容を取り入れています。
1つ目はコーディング面接を行う上で基礎となるPythonの最低限の構文やデータ構造の使い方について話します。何故Pythonなのか?それは覚えるべき構文が少ない事、簡潔で読みやすい事、世の中に出ているコーディング問題の解法の殆どがPythonで書かれている事、面接官が読める可能性が高い事(過去のTwitterでの調査の結果50%がコーディング面接などでPythonを活用している)などが挙げられます。またLeetCodeの解法も基本Python/C++/Javaで書かれています。強制ではありませんが、長期目線を考えてPythonでの学習をオススメしています。絶対これというものはないので最後は皆さんの判断におまかせします。一番自信のある言語でゴリ押ししたいパターンもあると思います。
2つ目はコーディング面接に必要な基本的なデータ構造についての教材を用意しています。コーディング面接ではデータ構造に関する中身の実装の理解まで求められる可能性があります。また各データ構造の特性を知っていなければ非効率な解き方をしてしまいますので、必ずこのデータ構造の基礎を頭に叩き込んでおきましょう。
3つ目はLeetCodeを効率的に取り組む上で必要なテクニックを例題を通して学び、そのLeetCodeの練習問題に取り組む事ができます。イメージでは高校数学の青チャートを思い出して下さい。あれも例題に取り組んでから練習問題を解く形になってますよね。練習問題を取り組む上での注意点として写経はしないでください。自らの頭にあるイメージをコードに落とす訓練をしなければいけないのに、写経したら何の意味もありません。各練習問題にはヒントを用意しています。何も思いつかない場合は、ヒントに書かれた内容と例題を見て実装できるかチャレンジしてください。解答を見るのは最後です。
すべてを見るには

返金は購入日から1日以内に申し出て下さい。詳細はこちらからご確認ください。
また、このコンテンツ以外の他の永久アクセス権は付与されない事はご注意下さい。

支払いはによって保護されています

購入済の方はこちらからログインしてください

Loading...