J'ai récemment eu un entretien d'embauche dans lequel ils m'ont donné une heure pour écrire du code réel. Ce n'était pas énorme, probablement moins de 100 lignes. Après environ 45 minutes, je l'ai compilé, exécuté et mis au travail. J'ai peut-être passé 5 à 10 minutes à résoudre des erreurs de compilation et quelques bugs mineurs, mais dans l'ensemble, tout s'est très bien passé. (Incidemment, j'ai reçu une offre de leur part.)
Cependant, ce qui m'a intriguée, c'est qu'après avoir remis le code complet, l'intervieweur m'a dit que la seule chose que j'avais mal fait était de "ne pas compiler au fur et à mesure". Je lui ai demandé quelle était la différence et il m'a répondu "qu'aurais-tu fait si tu avais fini le code et qu'il ne compilait pas à temps".
A mon sens, cet argument est invalide, car "obtenir du code à compiler" pour une longueur de code donnée implique généralement de réparer un nombre constant d'erreurs de compilation et prend un laps de temps relativement constant, qui devrait être identique si vous le faites après terminez d’écrire le code ou si vous l’entrelacez avec votre temps de codage. Au contraire, interrompre votre codage pour rechercher les points-virgules manquants serait probablement préjudiciable à votre efficacité. Sauf dans des circonstances extrêmes, lorsque j'expérimente des obscurités autour de cas tels que des fonctions virtuelles dans des classes dérivées, etc., il semble raisonnable de s'attendre à ce qu'un code écrit par un développeur expérimenté compilera, moins les erreurs de frappe occasionnelles, et même si ce n'est pas le cas
Dans un autre incident similaire, on m'a donné une base de code incomplète lors d'une interview et on m'a demandé de le terminer et d'apporter les modifications nécessaires pour le faire fonctionner. J'ai commencé par lire le code existant, puis après quelques minutes (avant même d'avoir fini de le lire), l'intervieweur m'a dit que c'était suffisant. Quand je lui ai demandé ce qu'il aurait fait (c'est-à-dire "qu'est-ce que j'ai fait de mal"), il m'a répondu qu'il aurait commencé par obtenir immédiatement le code à compiler.
Pourquoi est-ce même pertinent? À mon avis et selon mon expérience, la compilation d'un code est essentiellement aléatoire, impliquant par exemple la disparition de points-virgules et ayant peu à voir avec la justesse du programme sous-jacent. (Pour moi, se concentrer sur la compilation revient à faire passer un article par un correcteur orthographique sans relecture pour vérifier la grammaire.)
Si vous me donnez un morceau de code incomplet, la première chose que je ferai sera de le lire. Je ne vais même pas essayer de le compiler avant de savoir ce que fait le code et de savoir que l'algorithme est correct.
Quoi qu'il en soit, il ne s'agit que de quelques incidents récents, mais en général, j'ai entendu de nombreux développeurs parler de la compilation de leur code au fur et à mesure, mais personne n'a été en mesure de me dire l'avantage de le faire. Je comprends les avantages de tester votre code au fur et à mesure, mais pourquoi compiler?
Ma question est donc la suivante: y a-t-il quelque chose qui m'a échappé? Y a-t-il un avantage à compiler au fur et à mesure? Ou est-ce une sorte de mythe propagé par la communauté des logiciels selon lequel vous devez compiler votre code fréquemment?