神話のような競技プログラミング–学ぶ必要はありません

投稿のタイトルに注目したので、競技プログラミングについての私の見解を詳しく見ていきましょう。

競技プログラミングとは何ですか?

競技プログラミングはスポーツです。高速で、最小限のメモリを消費し、多くの場合、実際には読み取れないコードの問題を解決する必要があります

それは主に彼らがそれらの会社に配置されるのを助けるので、それは大学生と大企業に入ろうとしている人々の間で非常に人気があります。残念ながら、仕事で決して使用しない知識があるため、何百万人もの人々が雇用されています。

システムが壊れています

ヘンウェンの別の例を次に示します。

私が考えることができる例はたくさんあります。

自作の作成者– macOSを実行しているほとんどすべての人が使用するパッケージマネージャー?拒否されました。WhatsAppの作成者?FacebookとTwitterによって拒否されました。

では、ここで何が起こっているのでしょうか。これらの人々は、これらの多国籍企業で働くのに十分な資格を持っていませんか?

いいえ、答えは、これらの人は便利なツールを開発し、一流のコード品質で優れたソフトウェアを書くことができるということですが、おそらく30分の制限時間内にバイナリツリーを反転するアルゴリズムを(再)発明することに失敗します。

これまでに書かれた最高のコードのいくつかは、30分で書かれませんでした。今日でも使用されているLinuxカーネルで記述された最高のアルゴリズムのいくつかは、Linusによって30分で記述されませんでした。Stripeのような最高のUIのいくつかは、30分で設計されませんでした。

では、ランダムな会社のランダムな人事担当者が30分であなたの価値をどのように決定できるでしょうか。

これは、企業があなたの「実現可能性」を判断する方法です。過去に行った作業とはまったく関係のないトイプロブレムを解決できるかどうか、または将来行う可能性があるかどうかを確認することによってです。

これは修正できますか?

知りません。不平を言ったり、怒鳴ったりすることはできますが、正直なところ、企業が応募者を迅速かつ正確に評価する方法がわかりません。

早くしたいのなら、上記のような良い候補者をたくさん失うでしょう。良い候補者を失いたくない場合は、面接が長すぎる可能性があります。会社が許容できるよりもはるかに長くなります。

競技プログラミング!==実世界のプログラミング

企業への面接は、就職後は使わないものを覚えて学ばなければならない試験です。

グーグルマップで動作するためにダイクストラのアルゴリズムを学ぶ必要があるかもしれないと思いますが、真剣に、グーグルは彼らのコア製品の1つを会社に新しい誰かに引き渡すつもりだと思いますか?あなたはあなたがあなたの仲間から何の助けも得られないと思いますか?

Googleのcorアルゴリズムのいずれかではなく、製品または分散システムのインターフェースに取り組んでいる可能性があります。これは、あなたの「競技プログラミング」の知識のすべてが役に立たないことを意味します。

現実の世界では、競技プログラミングの用途はほとんどありません。実稼働Microsoftサーバーで実行されているアルゴリズムは、短くて意味のない変数名を使用して読み取り不可能なコードで記述されていません。文書化されておらず、速度のみを目的として最適化されており、読みやすさやメンテナンスはありません。

多くの場合、自動化ツールを使用して、縮小化とパフォーマンスの向上を実現します。あなたが競争力のあるコーダーであるなら、醜いコードを書くという悪い習慣を身につけた可能性があります。

誰でもマシンのコードを書くことができます。問題は、人間のためのコードを書くことができるかということです。

しかし、希望があります

このようなインタビューに座って、DSAと競技プログラミングだけを学ぶために3〜5か月間準備したおもちゃの質問を解決できることを願っています。

別の方法があります。それは、より少ない企業や人々で機能しますが、それを楽しんで、その過程で多くの現実世界のことを学ぶでしょう。また、そのために「競技コーディング」を学ぶだけの人よりも便利です。

何かを構築します。何でも。そして、その上にさらに構築します。強力なポートフォリオを持っています。企業に役立つ完全なスキルセットを用意してください。技術スタックを習得する–所有する。プロジェクト、ブログ、経験を持って、あなたが履歴書にあることを示してください。つながりを築き、人々とネットワークを築き、彼らの推薦を求めます。

多くの場所で、競技コーディングは面接をクリアする唯一の方法ではありません。あらゆる種類の企業を運営しているあらゆる種類の人々がいます。私のPoVに同意し、会社を経営している人は、「競争力のある」知識だけで人を雇うことはありません。

あなたの仕事はあなたが想像もできなかった場所にあなたを連れて行くことができます。最も簡単な方法は、常に群衆をフォローすることです。しかし、少なくともあなたが十分に野心的であるならば、良いことは簡単にはなりません。適切な量​​の野心と勇気を混ぜ合わせると、驚異的なことができます。

世界は、人類を前進させるために、雇用されることができる人々ではなく、進歩するために優れたプログラマーを必要としています。

DSAと競技プログラミングを混同しないでください

最初はこのセクションを書きたくありませんでしたが、あまりにも多くの人がこれを混乱させることはわかっていました。DSA-データ構造とアルゴリズムは何か違うものです。ヒープ、マップ、配列、ベクトル、リンクリストなど、これらはすべて、実際のプログラミングでも非常に役立ちます。

楽しい部分は、あなたも経験を積んでその理解を深めることができるということです。50時間の大きなDSAコースを使用して、「ヒープ」について明示的に学んだことはありません。また、プログラミングを学んでいる場合は、それについて非常に深く理解する必要もありません。

プログラミングではなくコンピュータサイエンスを学びたい場合は、DSAの詳細が必要です。違いを理解してください。コンピュータサイエンスは理論です。プログラミングは実用的です。

存在するもの、存在するアルゴリズム、および存在するデータ構造に注意してください。それらすべてを学んだり暗記したりする必要はありません。同僚やインターネットの助けを借りて手に入れることができれば、めったに使われないことを覚えたり学んだりするのは、めちゃくちゃばかげているように聞こえます。

私の物語

アイムないおそらく唯一のCSはでコーディング競争力に触れたことがない私の大学では学部、競争力のコーダの大学

どうして?私は4-5年前にそれを試し、それを嫌っていたからです。どうして?毎日3〜5時間かけて問題を解決しているのを見ることができたので、何もできませんでした。次の質問に取り組むことについて、もう1つか2つは知っていましたが、影響を与えるにはそれで十分でしたか?群衆から目立つのに十分でしたか?

私は何をしていたのですか?すでに解決された質問に時間を無駄にしているように感じました。みんな違うかもしれませんが、自分がプログラムしたものを他の人が使っているのを見ると嬉しいです(それまでにWeb開発者として始めました)。

現実の世界では絶対に使わないことを学ぶのに時間を無駄にするのは我慢できませんでした。私は当時、GoogleのCodeJamとFacebookのHackerCupに参加していました。しかし、すぐに私はより良い言葉がないために退屈して欲求不満になり、実際にそれに戻ることはありませんでした。就職やインターンシップは私には関係ありませんでした。

私はキャンパスで一度Googleのインタビューに座った。彼らは、最初のラウンドがあった他のすべての会社とは異なり、最初のラウンドとして履歴書の最終候補リストのラウンドを持っていました、それを待って、競争力のあるコーディングラウンド。さて、7年間のWeb開発とシステムの経験が無駄になりました。

とにかく、グーグルにとって、私は7.5のGPAで最終候補に挙げられた唯一の人でした(最高のGPAはインドで10です)。残りの10〜15人は8.5または9を超えていました。

私は再び競争ラウンドを通過することはありませんでしたが、それはあなたの履歴書だけでグーグルのような会社の最初のラウンドに侵入することが可能であることを私に教えてくれました。したがって、それに取り組むことが重要です。

結論

TL; DR –人生で成功するために競技コーディングを学ぶ必要はありません。あなたはそれを習得するためにあなたがとても好きなことを学ぶ必要があります、そしてあなたはあなたの分野で無敵です。それで全部です。

意見や意見がありますか?TwitterやInstagramで私とつながり、話しましょう!