Mythbusting Competitive Programming - Sie müssen es nicht lernen

Lassen Sie mich nun, da ich Ihre Aufmerksamkeit mit dem Post-Titel habe, auf meine Ansichten zur wettbewerbsfähigen Programmierung eingehen.

Was ist wettbewerbsfähige Programmierung?

Wettbewerbsprogrammierung ist ein Sport. Sie müssen ein Problem mit Code lösen, der schnell ist, nur wenig Speicher benötigt und häufig praktisch unlesbar ist.

Es ist sehr beliebt bei Universitätsstudenten und solchen, die versuchen, in große Unternehmen einzusteigen, vor allem, weil es ihnen hilft, sich in diesen Unternehmen zu platzieren. Leider werden Millionen von Menschen aufgrund von Wissen eingestellt, das sie niemals in ihrer Arbeit einsetzen würden.

Das System ist kaputt

Hier ist ein weiteres Beispiel von Hen-Wen:

Es gibt unzählige Beispiele, an die ich denken kann.

Der Schöpfer von Homebrew - ein Paketmanager, der von fast jedem verwendet wird, der MacOS ausführt? Abgelehnt. Der Schöpfer von WhatsApp? Von Facebook und Twitter abgelehnt.

Was passiert hier? Sind diese Personen nicht qualifiziert genug, um in diesen multinationalen Unternehmen zu arbeiten?

Nein, die Antwort ist, dass diese Leute nützliche Tools entwickeln und großartige Software mit erstklassiger Codequalität schreiben können, aber sie können wahrscheinlich keinen Algorithmus (in) neu erfinden, um einen Binärbaum innerhalb von 30 Minuten zu invertieren.

Einige der besten Codes, die jemals geschrieben wurden, wurden nicht in 30 Minuten geschrieben. Einige der besten Algorithmen, die im Linux-Kernel geschrieben wurden, wurden von Linus nicht in 30 Minuten geschrieben. Einige der besten Benutzeroberflächen wie Stripe wurden nicht in 30 Minuten entwickelt.

Wie kann also eine zufällige HR-Person in einem zufälligen Unternehmen in 30 Minuten über Ihren Wert entscheiden?

Auf diese Weise beurteilen Unternehmen Ihre "Machbarkeit" - indem sie prüfen, ob Sie ein Spielzeugproblem lösen können, das in keiner Beziehung zu Arbeiten steht, die Sie in der Vergangenheit oder in der Zukunft ausgeführt haben.

Kann das behoben werden?

Ich weiß es nicht. Ich kann mich beschweren und schreien, was ich will, aber ich weiß ehrlich gesagt nicht, wie Unternehmen eine Person, die sich für eine Stelle bewirbt, schnell und korrekt bewerten können.

Wenn Sie schnell wollen, verlieren Sie viele gute Kandidaten wie die oben genannten. Wenn Sie keine guten Kandidaten verlieren möchten, dauert das Interview möglicherweise viel zu lange - viel länger, als sich das Unternehmen leisten kann.

Wettbewerbsfähige Programmierung! == Programmierung in der realen Welt

Interviews für Unternehmen sind eher eine Prüfung, bei der Sie sich Dinge merken und lernen müssen, die Sie nach dem Erhalt des Jobs nicht mehr verwenden.

Sie denken, Sie müssen möglicherweise den Dijkstra-Algorithmus lernen, um mit Google Maps arbeiten zu können, aber denken Sie ernsthaft, dass Google eines seiner Kernprodukte an jemanden übergeben wird, der neu im Unternehmen ist? Denken Sie, dass Sie von Ihren Kollegen überhaupt keine Hilfe bekommen werden?

Sie werden wahrscheinlich an der Benutzeroberfläche für das Produkt oder an verteilten Systemen arbeiten, anstatt an einem der Cor-Algorithmen von Google zu arbeiten. Dies bedeutet, dass Ihr gesamtes Wissen über "wettbewerbsfähige Programmierung" keinen Nutzen hat.

In der realen Welt finden Sie fast keine Verwendung für wettbewerbsfähige Programmierung. Kein Algorithmus, der auf Microsoft-Produktionsservern ausgeführt wird, ist in unlesbarem Code mit kurzen und bedeutungslosen Variablennamen geschrieben, undokumentiert und nur auf Geschwindigkeit und nicht auf Lesbarkeit oder Wartung optimiert.

Das Minimieren und Verbessern der Leistung erfolgt später, wobei automatisierte Tools häufig verwendet werden. Wenn Sie ein wettbewerbsfähiger Programmierer sind, haben Sie wahrscheinlich die schlechte Angewohnheit entwickelt, hässlichen Code zu schreiben.

Jeder kann Code für Maschinen schreiben. Die Frage ist, können Sie Code für Menschen schreiben?

Aber es gibt Hoffnung

Für solche Interviews zu sitzen und zu hoffen, dass Sie eine Spielzeugfrage lösen können, die Sie für 3-5 Monate vorbereitet haben, um nur DSA und wettbewerbsfähiges Programmieren zu lernen, ist eine Möglichkeit.

Es gibt noch einen anderen Weg - es wird mit weniger Unternehmen und Menschen funktionieren, aber Sie werden es genießen und dabei eine Menge realer Dinge lernen. Sie sind auch nützlicher als diejenigen, die nur "wettbewerbsfähiges Codieren" lernen.

Baue etwas. Etwas. Und dann bauen Sie mehr darauf auf. Haben Sie ein starkes Portfolio. Verfügen Sie über umfassende Kenntnisse, die für Unternehmen nützlich sind. Beherrsche einen Tech-Stack - besitze ihn. Haben Sie Projekte, Blogs und Erfahrungen, um zu zeigen, dass Sie das sind, was in Ihrem Lebenslauf steht. Bauen Sie Verbindungen auf, vernetzen Sie sich mit Menschen und fragen Sie nach deren Empfehlungen.

An vielen Orten ist die wettbewerbsfähige Codierung nicht die einzige Möglichkeit, ein Interview zu beenden. Es gibt alle Arten von Personen, die alle Arten von Unternehmen leiten. Eine Person, die mit meinem PoV einverstanden ist und ein Unternehmen leitet, würde nicht allein aufgrund ihres "Wettbewerbswissens" Mitarbeiter einstellen.

Ihre Arbeit kann Sie an Orte bringen, die Sie sich nicht vorstellen können. Der einfachste Weg ist, immer der Menge zu folgen. Aber nichts Gutes ist einfach, zumindest wenn Sie ehrgeizig genug sind. Das richtige Maß an Ehrgeiz und Mut zu mischen, kann Wunder bewirken.

Die Welt braucht großartige Programmierer, um Fortschritte zu erzielen und die Menschheit voranzubringen, nicht Menschen, die eingestellt werden können.

Verwechseln Sie DSA nicht mit Competitive Programming

Ich wollte diesen Abschnitt anfangs nicht schreiben, aber ich wusste, dass zu viele Leute dies verwirren werden. DSA - Datenstrukturen und Algorithmen ist etwas anderes. Heap, Maps, Arrays, Vektoren, verknüpfte Listen usw. sind alle auch in der realen Programmierung sehr hilfreich.

Der lustige Teil ist, dass Sie dieses Verständnis auch mit Erfahrung entwickeln können. Ich habe nie explizit etwas über "Haufen" mit einem großen 50-Stunden-DSA-Kurs gelernt. Und wenn Sie das Programmieren lernen, brauchen Sie auch kein sehr tiefes Verständnis dafür.

Eine gründliche DSA ist erforderlich, wenn Sie Informatik lernen möchten, nicht Programmieren. Verstehe den Unterschied, Informatik ist die Theorie - Programmierung ist praktisch.

Achten Sie auf vorhandene Dinge, vorhandene Algorithmen und vorhandene Datenstrukturen. Sie müssen sie nicht alle lernen oder auswendig lernen. Es klingt für mich wahnsinnig dumm, etwas auswendig zu lernen oder zu lernen, was selten verwendet wird, wenn ich es mit ein wenig Hilfe von Kollegen und dem Internet bekommen kann.

Meine Geschichte

Ich bin kein kompetitiver Programmierer, wahrscheinlich der einzige CS-Student an meiner Universität, der im College nie wettbewerbsfähiges Codieren berührt hat .

Warum? Weil ich es vor 4-5 Jahren versucht und es gehasst habe. Warum? Weil ich sehen konnte, wie ich jeden Tag 3-5 Stunden meines Tages damit verbrachte, Probleme zu lösen, die mir nichts brachten. Ich wusste noch ein oder zwei Dinge über die Annäherung an die nächste Frage, aber war das genug, um etwas zu bewirken? War das genug, um sich von der Masse abzuheben?

Was habe ich gut gemacht? Es fühlte sich an, als würde ich Zeit mit Fragen verschwenden, die bereits gelöst waren. Es mag für jeden anders sein, aber ich freue mich, wenn ich sehe, dass andere Leute die von mir programmierten Dinge verwenden (ich habe bis dahin als Webentwickler angefangen).

Ich konnte es einfach nicht ertragen, meine Zeit damit zu verschwenden, etwas zu lernen, das ich in der realen Welt niemals benutzen würde. Früher habe ich am Code Jam von Google und am Hacker Cup von Facebook teilgenommen. Aber bald langweilte ich mich und war frustriert, weil ich kein besseres Wort hatte, und kam nie wirklich darauf zurück. Einen Job oder ein Praktikum zu bekommen, ging mich nichts an, es tat es nie.

Ich habe einmal auf dem Campus für Google-Interviews gesessen. Im Gegensatz zu allen anderen Unternehmen, bei denen die erste Runde eine wettbewerbsfähige Codierungsrunde war, hatten sie als erste Runde eine Shortlisting-Runde für den Lebenslauf . Nun, da waren die 7 Jahre Webentwicklung und Systemerfahrung den Bach runter.

Für Google war ich die einzige Person, die mit einem GPA von 7,5 in die engere Wahl kam (der höchste GPA ist 10 in Indien). Der Rest der 10-15 Personen war über 8,5 oder 9.

Ich habe die Wettbewerbsrunde nicht wieder hinter mir gebracht, aber das hat mich gelehrt, dass es möglich ist, mit nur Ihrem Lebenslauf in die erste Runde eines Unternehmens wie Google einzusteigen. Deshalb ist es wichtig, daran zu arbeiten.

Fazit

TL; DR - Sie müssen keine wettbewerbsfähige Codierung lernen, um im Leben erfolgreich zu sein. Sie müssen etwas lernen, das Ihnen so gut gefällt, dass Sie es beherrschen, und Sie sind auf Ihrem Gebiet unschlagbar. Das ist alles.

Haben Sie Ansichten und Meinungen? Verbinde dich mit mir auf Twitter und Instagram und lass uns reden!