Zeph (./121) :
Avec un environnement de développement moderne tu peux en un clic (ou un raccourci clavier) aller à la définition d'une méthode ou d'une classe, et si le développeur n'a pas fait trop de zèle il n'y a pas 50 fichiers à parcourir, juste deux ou trois. C'est sûr que ça reste plus long que si la réponse était directement sous tes yeux, mais de toutes façons tu ne pourras pas avoir tous les chemins de code dans un seul fichier alors autant adopter une séparation claire. Où plutôt si, tu peux avoir tous les chemins de code dans un seul fichier en faisant exactement ce que tu fais et en se retrouvant avec des fichiers de 5000 lignes. Du coup au lieu de naviguer vers d'autres fichiers, tu fais des recherches au sein d'un même fichier pour essayer de localiser la partie qui t'intéresse au milieu d'un pâté de trucs sans rapport. Je ne trouve pas que ce soit tellement plus efficace, au contraire.
(sinon pour ./120 c'est une erreur de design, encore un problème différent mais ça ne justifie toujours pas cette horreur ^^)
Kevin Kofler (./122) :
surtout sur mon PC qui commence à dater
robinHood (./126) :Ce n'est pas parce qu'avoir trop de fichiers est mauvais qu'il faut s'obstiner à tout mettre dans le même. Et pas besoin de faire de la programmation orientée objet pour ça, des ensembles indépendants de méthodes, de types, de classes ou de ce que tu veux devraient se trouver dans des fichiers ou dossiers différents. On devrait au moins ne pas avoir de code de l'un des ensembles entrelacé avec celui d'un autre. Il y a plusieurs raisons à ça, parmi elles : réutilisation du code, changement d'un élément simplement en respectant l'interface et aussi développement simplifié (on trouve plus rapidement une fonction déjà existante quand elle se trouve à un endroit logique, ça évite de l'écrire plusieurs fois (comme on en trouve dans le code dont Kevin Kofler a donné un lien (en fait, ce sont des lignes répétées plusieurs fois noyées dans le reste, car il n'y a pas de méthodes qui font des tâches simples dans ce code)).
moi je crayonne kevin pour le coup, rien ne m'énerve plus qu'une foret de fichiers et de classes
Kevin Kofler (./122) :C'est au contraire une erreur grave de conception (en lisant le code, on voit surtout qu'il n'y a tout simplement aucun travail de conception). On pourrait fournir exactement les mêmes fonctionnalités avec du code beaucoup plus propre et avoir ainsi beaucoup plus de facilités pour faire évoluer le programme vers des fonctionnalités auxquelles tu n'as pas pensé lorsque tu as établi ce design limité.
Ce n'est pas une erreur, mais au contraire un design puissant qui permet des features uniques, et en particulier de faire ce qu'attend l'utilisateur (qui n'a pas été préalablement indoctriné par d'autres EDIs moins bien conçus), à savoir de compiler ce qu'il voit dans l'EDI, pas ce qu'il a enregistré auparavant.
vince (./124) :
3) Si tu comptes développer des softs plus complexes qu'un hello world alors il faudra songer à changer ton Oric(*) pour une machine mieux adaptée...
robinHood (./126) :
moi je crayonne kevin pour le coup, rien ne m’énerve plus qu'une foret de fichiers et de classes
RHJPP (./127) :
Ce n'est pas parce qu'avoir trop de fichiers est mauvais qu'il faut s'obstiner à tout mettre dans le même.
Et pas besoin de faire de la programmation orientée objet pour ça, des ensembles indépendants de méthodes, de types, de classes ou de ce que tu veux devraient se trouver dans des fichiers ou dossiers différents.
en fait, ce sont des lignes répétées plusieurs fois noyées dans le reste, car il n'y a pas de méthodes qui font des tâches simples dans ce code
Brunni (./128) :
Tes excuses sont mauvaises Kevin (mais je pense que tu le sais), si tu veux apporter une contribution à un projet la moindre des choses ce serait de le récupérer localement, déjà, puis de t'assurer que tu peux le compiler histoire de tester ta modif, ce qui te prendra de toute façon une bonne heure, alors l'indexation à côté...
GoldenCrystal (./132) :
T1 mais en plus les 5000 lignes de Kevin, c'est 5000 lignes avec quasiment aucun espace entre les blocs.
Et ça m'éclate car quand j'écris des fonctions qui font plus de deux scrollbars de long je ne suis pas très fier de moi, mais là j'ai l'impression que ça ne dérange pas trop l'auteur.
* pour que ce soit vraiment lisible faut qu'on puisse lire le code d'une fonction comme un paragraphe de texte (avec interprétation des idées du langage de programmation utilisé bien sûr) et qu'on en retire l'explication de ce que fait la fonction, sinon ça compte pas.
(On sait tous écrire du code avec des variables de une lettre, des tables de mapping cryptiques et des noms de fonctions indéchiffrables. Mais ce n'est pas ce qu'on peut considérer comme lisible)
Kevin Kofler (./133) :
(Et oui, je sais que les #define donnent du code plus grand, mais on n'est pas à l'octet près sur PC.)
Kevin Kofler (./133) :Il y en a encore, mais je ne vais pas te fournir le patch, tu comprendras que j'ai d'autres choses à faire
Il y a des #define tout au début pour ça, si tu trouves encore des duplications, envoie-moi un patch qui en fait des macros supplémentaires.
RHJPP (./127) :
Ce n'est pas parce qu'avoir trop de fichiers est mauvais qu'il faut s'obstiner à tout mettre dans le même. Et pas besoin de faire de la programmation orientée objet pour ça, des ensembles indépendants de méthodes, de types, de classes ou de ce que tu veux devraient se trouver dans des fichiers ou dossiers différents. On devrait au moins ne pas avoir de code de l'un des ensembles entrelacé avec celui d'un autre. Il y a plusieurs raisons à ça, parmi elles : réutilisation du code, changement d'un élément simplement en respectant l'interface et aussi développement simplifié (on trouve plus rapidement une fonction déjà existante quand elle se trouve à un endroit logique, ça évite de l'écrire plusieurs fois (comme on en trouve dans le code dont Kevin Kofler a donné un lien (en fait, ce sont des lignes répétées plusieurs fois noyées dans le reste, car il n'y a pas de méthodes qui font des tâches simples dans ce code)).
RHJPP (./127) :
C'est au contraire une erreur grave de conception (en lisant le code, on voit surtout qu'il n'y a tout simplement aucun travail de conception). On pourrait fournir exactement les mêmes fonctionnalités avec du code beaucoup plus propre et avoir ainsi beaucoup plus de facilités pour faire évoluer le programme vers des fonctionnalités auxquelles tu n'as pas pensé lorsque tu as établi ce design limité.
robinHood (./136) :Non, ça s'appelle de la généralisation. Quand tu fais tes fonctions qui gèrent de façon révolutionnaire ta liste chaînée d'images, ce serait dommage de ne jamais pouvoir les réutiliser plus tard telles quelles sans modification, ça te ferait pourtant gagner plein de temps. Ce n'est qu'un exemple évident, mais on se rend compte que la plupart du code peut être découpé en librairies réutilisables.
un code écrit pour qq chose ne doit pas l'être pour autre chose, sinon cela est du hack
robinHood (./136) :Oui, c'est pourquoi il faut éviter d'écrire plusieurs fois les mêmes choses et après chercher les différentes occurrences pour les remplacer par des macros comme ça semble avoir été fait dans le code que Kevin Kofler nous a montré. Et ce n'est pas terminé car il y a encore des répétitions. Mais il y a aussi le temps de débogage qui est limité. Devoir corriger plusieurs fois les mêmes choses ne fait pas gagner de temps. De plus, comme ces lignes équivalentes ont été écrites plusieurs fois, elles peuvent être affectées de bogues différents. Et même si les bogues sont les mêmes, il faudra les trouver plusieurs fois et les corriger plusieurs fois (plus ou moins bien à chaque fois), car n'étant pas au même endroit, les codes équivalents s'exécutent à des moments différents. On peut trouver un bogue un jour dans un code équivalent à un autre que l'on avait déjà corrigé des mois auparavant.
le temps de conception est limité
robinHood (./136) :Ok, comme ça ils ont la responsabilité de ce qu'ils obtiennent, si tant est qu'ils aient bien compris les implications. Aussi, sans qu'ils sachent déjà quelles seront les évolutions, il faudrait leur demander s'il est possible que des évolutions soient nécessaires ou souhaitées un jour.
je demande toujours les évolutions futures aux quelles ils aspirent
robinHood (./136) :
l'expérience permet de se passer de conception préalable, du moins en apparence, pour des choses simple on peu coder direct mais le papier + crayon est bien généralement incontournable, la réflexion avant l'implémentation est reine
RHJPP (./137) :
Oui, c'est pourquoi il faut éviter d'écrire plusieurs fois les mêmes choses et après chercher les différentes occurrences pour les remplacer par des macros comme ça semble avoir été fait dans le code que Kevin Kofler nous a montré.
Kevin Kofler (./139) :
S'il y a une chose que je n'utilise pas quand je code, c'est du papier!
RHJPP (./137) :
Non, ça s'appelle de la généralisation. Quand tu fais tes fonctions qui gèrent de façon révolutionnaire ta liste chaînée d'images, ce serait dommage de ne jamais pouvoir les réutiliser plus tard telles quelles sans modification, ça te ferait pourtant gagner plein de temps. Ce n'est qu'un exemple évident, mais on se rend compte que la plupart du code peut être découpé en librairies réutilisables.
Kevin Kofler (./133) :
La manière dont je travaille en général, c'est, je détarre les sources, je fais une copie, je fais mes modifications dans la copie, je fais un diff -Nur, je rajoute le patch au fichier .spec, je committe et pushe le tout dans le git de Fedora et je l'envoie au système de compilation Koji. Si ça ne compile pas, Koji me renvoie une erreur et je corrige le problème. Si ça compile, j'envoie le patch au projet upstream.
Kevin Kofler (./139) :
S'il y a une chose que je n'utilise pas quand je code, c'est du papier!
vince (./143) :
Je relève qu'il n'y a AUCUNE référence à des tests (fonctionnels ou même unitaires) avant de commiter...
Kevin Kofler (./139) :Et donc, la conception/spécifications, tu n'en fais jamais ?
S'il y a une chose que je n'utilise pas quand je code, c'est du papier!
Kevin Kofler (./146) :... (no comment)
Si ça compile, ça passe dans updates-testing et c'est aux utilisateurs de tester la mise à jour.
Zerosquare (./147) :Kevin Kofler (./146) :... (no comment)
Si ça compile, ça passe dans updates-testing et c'est aux utilisateurs de tester la mise à jour.