Article original : Mythbusting Competitive Programming – You Don't Need to Learn It

Par Mehul Mohan

Maintenant que j'ai votre attention avec le titre de l'article, laissez-moi approfondir mes opinions sur la programmation compétitive.

Qu'est-ce que la programmation compétitive ?

La programmation compétitive est un sport. Vous devez résoudre un problème avec du code qui est rapide, consomme le minimum de mémoire et est souvent pratiquement illisible.

Elle est très populaire parmi les étudiants universitaires et ceux qui essaient d'entrer dans de grandes entreprises, principalement parce qu'elle les aide à se faire embaucher dans ces entreprises. Malheureusement, des millions de personnes sont embauchées pour des connaissances qu'elles n'utiliseront jamais dans leur travail.

Le système est brisé

Image

Voici un autre exemple de Hen-Wen :

Image

Il y a des tonnes d'exemples auxquels je peux penser.

Le créateur de homebrew – un gestionnaire de paquets utilisé par presque tout le monde sous macOS ? Rejeté. Le créateur de WhatsApp ? Rejeté par Facebook et Twitter.

Alors, que se passe-t-il ici ? Ces personnes ne sont-elles pas qualifiées pour travailler dans ces multinationales ?

Non, la réponse est que ces gens peuvent développer des outils utiles et écrire de grands logiciels avec une qualité de code de premier ordre, mais ils échouent probablement à (ré)inventer un algorithme pour inverser un arbre binaire dans un délai de 30 minutes.

Certains des meilleurs codes jamais écrits n'ont pas été écrits en 30 minutes. Certains des meilleurs algorithmes écrits dans le noyau Linux, utilisés encore aujourd'hui, n'ont pas été écrits en 30 minutes par Linus. Certaines des meilleures interfaces utilisateur comme Stripe n'ont pas été conçues en 30 minutes.

Alors, comment une personne des ressources humaines dans une entreprise aléatoire peut-elle décider de votre valeur en 30 minutes ?

C'est ainsi que les entreprises jugent votre "faisabilité" – en voyant si vous pouvez résoudre un problème jouet complètement sans rapport avec tout travail que vous auriez pu faire dans le passé, ou que vous pourriez faire à l'avenir.

Peut-on y remédier ?

Je ne sais pas. Je peux me plaindre et crier autant que je veux, mais je ne sais honnêtement pas comment les entreprises peuvent évaluer rapidement et correctement une personne postulant à un emploi.

Si vous voulez que ce soit rapide, vous perdrez beaucoup de bons candidats comme ceux mentionnés ci-dessus. Si vous ne voulez perdre aucun bon candidat, l'entretien pourrait durer beaucoup trop longtemps – bien plus longtemps que ce que l'entreprise peut se permettre.

La programmation compétitive ≠ La programmation du monde réel

Les entretiens pour les entreprises sont plus un examen où vous devez mémoriser et apprendre des choses que vous n'utiliserez pas après avoir obtenu le poste.

Vous pensez peut-être devoir apprendre l'algorithme de Dijkstra pour travailler sur Google Maps, mais sérieusement, pensez-vous que Google va confier l'un de leurs produits phares à quelqu'un de nouveau dans l'entreprise ? Pensez-vous que vous n'aurez aucune aide de vos pairs ?

Vous travaillerez probablement sur l'interface du produit, ou sur des systèmes distribués plutôt que sur l'un des algorithmes centraux de Google. Cela signifie que toutes vos connaissances en "programmation compétitive" sont inutiles.

Vous trouverez presque aucune utilité pour la programmation compétitive dans le monde réel. Aucun algorithme tournant sur les serveurs de production de Microsoft n'est écrit en code illisible, avec des noms de variables courts et sans signification, non documentés et optimisés uniquement pour la vitesse et non pour la lisibilité ou la maintenance.

La minification et l'amélioration des performances viennent plus tard, souvent avec des outils automatisés. Il y a des chances que, si vous êtes un codeur compétitif, vous ayez développé la mauvaise habitude d'écrire du code laid.

N'importe qui peut écrire du code pour les machines. La question est, pouvez-vous écrire du code pour les humains ?

Mais il y a de l'espoir

S'asseoir pour des entretiens comme celui-ci et espérer résoudre une question jouet pour laquelle vous vous êtes préparé pendant 3 à 5 mois en apprenant uniquement DSA et la programmation compétitive est une façon de faire.

Il y a une autre façon – cela fonctionnera avec moins d'entreprises et de personnes, mais vous l'apprécierez et apprendrez beaucoup de choses du monde réel en cours de route. Vous serez également plus utile que ces personnes qui n'apprennent que le "codage compétitif" pour le plaisir.

Construisez quelque chose. N'importe quoi. Et puis construisez plus par-dessus. Ayez un portfolio solide. Ayez un ensemble de compétences complet qui est utile pour les entreprises. Maîtrisez une pile technologique – possédez-la. Ayez des projets, des blogs, de l'expérience pour montrer que vous êtes ce qui est dans votre CV. Construisez des connexions, réseauz avec des gens, demandez leurs recommandations.

Dans beaucoup d'endroits, le codage compétitif n'est pas la seule façon de réussir un entretien – il y a toutes sortes de personnes qui dirigent toutes sortes d'entreprises. Une personne qui est d'accord avec mon point de vue et qui dirige une entreprise n'embaucherait pas des gens uniquement sur leurs connaissances "compétitives".

Votre travail peut vous mener à des endroits que vous n'auriez jamais imaginés. La façon la plus facile est de toujours suivre la foule. Mais rien de bon ne vient facilement, du moins si vous êtes assez ambitieux. Mélanger juste la bonne quantité d'ambition et de courage peut faire des merveilles.

Le monde a besoin de grands programmeurs pour progresser, pour faire avancer l'humanité, pas de personnes qui peuvent se faire embaucher.

Ne confondez pas DSA avec la programmation compétitive

Je ne voulais pas écrire cette section initialement, mais je savais que trop de gens la confondraient. DSA – Structures de données et algorithmes est quelque chose de différent. Tas, Maps, Tableaux, Vecteurs, Listes chaînées, etc., tous ces éléments sont très utiles en programmation réelle également.

La partie amusante est que vous pouvez développer cette compréhension avec l'expérience, aussi. Je n'ai jamais explicitement appris le "tas" en utilisant un grand cours DSA de 50 heures. Et si vous apprenez à programmer, vous n'avez pas besoin d'une compréhension très très profonde de cela non plus.

DSA en profondeur est requis lorsque vous voulez apprendre l'informatique, pas la programmation. Comprenez la différence, l'informatique est la théorie – la programmation est pratique.

Soyez conscient des choses qui existent, des algorithmes qui existent et des structures de données qui existent. Vous n'avez pas besoin de les apprendre ou de les mémoriser tous. Cela me semble insensément stupide de mémoriser ou d'apprendre quelque chose qui est rarement utilisé alors que je peux l'obtenir avec un peu d'aide de collègues et d'Internet.

Mon histoire

Je ne suis pas un codeur compétitif, probablement le seul étudiant en informatique de mon université qui n'a jamais touché au codage compétitif à l'université.

Pourquoi ? Parce que je l'ai essayé il y a 4-5 ans et que je l'ai détesté. Pourquoi ? Parce que je me voyais passer 3 à 5 heures de ma journée, tous les jours, à résoudre des problèmes qui ne m'apportaient rien. Je connaissais une ou deux choses de plus sur la façon d'aborder la question suivante, mais était-ce suffisant pour faire une différence ? Était-ce suffisant pour me démarquer de la foule ?

Quel bien faisais-je ? J'avais l'impression de perdre mon temps sur des questions déjà résolues. Cela peut être différent pour tout le monde, mais je suis heureux lorsque je vois d'autres personnes utiliser les choses que j'ai programmées (j'avais commencé comme développeur web à l'époque).

Je ne supportais tout simplement pas de perdre mon temps à apprendre quelque chose que je n'utiliserais jamais dans le monde réel. Je participais autrefois au Code Jam de Google et à la Hacker Cup de Facebook. Mais bientôt, je me suis ennuyé et frustré, pour ne pas dire mieux, et je n'y suis jamais vraiment revenu. Trouver un emploi ou un stage ne me préoccupait pas, cela ne l'a jamais fait.

Je me suis assis pour des entretiens chez Google une fois sur le campus. Ils avaient un tour de présélection de CV comme premier tour, contrairement à toutes les autres entreprises où le premier tour était, attendez-le, tour de codage compétitif. Eh bien, voilà que les 7 ans d'expérience en développement web et en systèmes sont partis en fumée.

En tout cas, pour Google, j'étais la seule personne à être présélectionnée avec une moyenne de 7,5 (la moyenne la plus élevée est 10 en Inde). Les 10 à 15 autres personnes étaient au-dessus de 8,5 ou 9.

Je n'ai pas passé le tour compétitif à nouveau, mais cela m'a appris qu'il était possible de se qualifier pour le premier tour d'une entreprise comme Google avec juste son CV. Par conséquent, il est important de travailler dessus.

Conclusion

TL;DR – Vous n'avez pas besoin d'apprendre le codage compétitif pour réussir dans la vie. Vous devez apprendre quelque chose que vous aimez tellement que vous le maîtrisez et que vous êtes imbattable dans votre domaine. C'est tout.

Vous avez des opinions et des points de vue ? Connectez-vous avec moi sur Twitter et Instagram et parlons-en !