Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Discussions


Index du Forum » Discussions » Que pensez-vous de la norme C imposée par certaines écoles ?
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Que pensez-vous de la norme C imposée par certaines écoles ?

Posté le 31/12/2015 14:33

Plusieurs fois sur le forum ou le tchat ont éclaté des débats sur la norme de programmation en C qu'imposent certaines écoles d'informatique (42, Epitech, etc), qu'on peut appeler plus simplement la Norme. Pour rappel, en voici quelques points :

ne pas utiliser de boucle itérative (for), mais les remplacer par des boucles conditionnelles (while)
ne pas utiliser la forme do { ... } while(...) mais seulement while(...) { ... }
ne pas utiliser de switch, mais selon le contexte des empilements de if, ou des tableaux de pointeurs, etc
pas plus de 5 fonctions par fichier
pas plus de 25 lignes et 80 colonnes par fonction
pas d'opérateurs ++, --, +=, -=, *=, /=, etc
+ diverses conventions d'espacement, indentation et nomination des variables

Et si vous avez le courage : Norme de 42

Qu'en pensez-vous ? Pensez-vous qu'elle impose légitimement une rigueur, ou qu'au contraire elle bride inutilement les étudiants ?


NOTE : les premières réponses ont été importées d'un autre topic, d'où les dates antérieures.


Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 02/01/2016 02:11 | #


Dark storm a écrit :
... à Epitech ou 42 ils aient des DS papier où la forme est notée. ....

Epitech est très stricte, si tu ne respectes pas les normes, alors tu risques d'avoir une note en dessous de 0/20, c'est que qu'un étudiant d'Epitech m'avait dit il y a 5 ans.

Après concernant les normes, je code un peu comme je veux, tant que ça reste lisible.
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 02/01/2016 10:44 | #


D'abord, merci à vous d'entretenir le débat avec des opinions favorables aux écoles, je ne crois pas qu'il y avait grand-monde (excepté Cake) sur le forum pour le faire.

Matoux42 a écrit :
Comme on dit a Epitech, on ne met pas à la norme, on code à la norme ...

Pour ma défense, il aurait été utile de la part de l'élève de me mettre au courant de l'existence de la Norme avant de me faire écrire le programme

Cakeisalie5 a écrit :
Beh justement, y a quelque chose qu'on appelle la libft : c'est une lib qu'on fait évoluer selon nos besoins, dans laquelle on ajoute ce qu'on veut, et qu'on peut utiliser dans tous les projets (je n'ai encore vu aucune exception). Et d'ailleurs...

Dark storm a écrit :
Z'avez raison les gars, c'est une bonne idée de mettre à la benne le code de ceux qui l'ont pondu pour vous. Après tout, réinventer la roue, c'est tellement plus amusant.

Oui, et autant la réinventer mal : parce que je ne crois pas que des élèves débutants utilisant des Normes d'écriture adaptées à l'apprentissage soient capables de produire du code aussi optimisé que des professionnels qui maitrisent leur sujet.

Cakeisalie5 a écrit :
Dans ces citations, vous évoquez ici l'utilisation d'une telle Norme dans le cadre d'un gros projet, professionnel. Nope, nope, nope, et re-nope.- On en revient au début. Ces Normes sont là pour faire partir les étudiants sur un chemin, sur une base. Heureusement que ceux-ci vont en dévier !

Et je répète le même argument : arrêtez de prendre les élèves pour des imbéciles. Vous êtes bien assez intelligents pour comprendre ce qu'est une boucle while, une boucle for, un switch, et pour comprendre des programmes qui utilisent les uns ou les autres.
Et si l'école pense que vous n'êtes pas capables de le faire, alors je suis désolé, elle n'est pas partie pour vous apprendre de solides bases. Non mais comment voulez-vous qu'une fois leur apprentissage terminé les élèves se mettent à utiliser la boucle for si on ne leur a pas appris à le faire ? Et si vous me répondez qu'ils sont capables de le faire spontanément, alors ils sont capables de la comprendre leur premier jour de piscine.
J'ai appris à utiliser for ou while le premier (ou peut-être le deuxième) jour où j'ai fait du C, j'avais pas encore 10 ans et j'ai compris sans sourciller.

Cakeisalie5 a écrit :
Dans ces citations, vous évoquez ici l'utilisation d'une telle Norme dans le cadre d'un gros projet, professionnel. Nope, nope, nope, et re-nope.

Je re-cite ça parce que je ne comprends pas à quoi sert cette école si elle est là pour vous donner un niveau de débutant mais pas un niveau professionnel ?

Dark storm a écrit :
L'excellence, c'est de maitriser les deux, pas de faire impasse sur un point qui fait chier.

C'est tellement bien dit, j'ai pas pu m'empêcher de le citer.

Cakeisalie5 a écrit :
On a le droit d'utiliser selon les cas le open/close, le write/read, le malloc/free. Avec ces bases, on peut faire beaucoup de choses, tu ne penses pas ?

Oui, vous pouvez par exemple réimplémenter FILE pour pouvoir lire des fichiers foireux de tetriminos en moins de 25 lignes. Ben alors, besoin d'écrire des sous-fonctions ?

Dark storm a écrit :
Sinon, y'a une moulinette de dispo sur le Web ? Voire si y'a pas des failles dedans, histoire de s'amuser un peu

C'est un script Perl, je crois, basé sur des regex qui vérifie un paquet pas possible de points différents. Pour les bugs, j'en ai cité un sur les passages de structures.

D'ailleurs Cake, Matoux42, vous en pensez quoi de ce bug ?
Lephenixnoir a écrit :
struct s_object;
void f(struct s_object argument);

est invalide (outre le scope global). C'est respectueux de la Norme, mais pour que la moulinette passe il faut écrire :
struct s_object;
typedef struct s_object t_object;
void f(t_object argument);


Matoux42 a écrit :
Concernant le nombre de ligne, c'est quelque chose que je considère pas comme critiquable: il force à synthétiser et organiser son code, et, je vous montrerais bien deux de mes codes, avant et après Epitech, la différence est sans appel.
Je n'ai jamais codé aussi proprement que depuis que je suis Epitech. En plus, quand on sais ce qu'on veut mettre dans une fonctions, la faire en 25 ligne est assez facile.

Je crois que le problème concernant ce point est que les programmeurs ayant de l'expérience en C savent écrire et maintenir des fonctions de plus de 25 lignes sans problème, et que par conséquent ils le font sans retenue, et qu'ils ne comprennent pas la restriction.
Je ne sais pas quelle taille font les plus grosses fonctions que j'ai écrites mais une chose est sure, c'est de l'ordre de 200 lignes. Bon, et alors ? Je n'ai aucun problème à les écrire, les comprendre, les commenter, les maintenir, et si j'estime qu'il faut les séparer je les sépare. C'est tout.
Je considère que si l'école estime ses élèves incapable de gérer des fonctions de plus de 25 lignes, elle ne peut pas leur apprendre à écrire du code de professionnel.

Matoux42 a écrit :
Comme l'a dit Cakeisalie5, et comme tu l'a si bien repris après, Dark storm, que ce soit 25, 50 ou 100 lignes, et que ce soit 5 10 ou 50 fonctions, ce qui te choque, c'est le côté manichéen de la chose. Mais à ce moment là, aurais-tu une solution pour la moulinette ?

Moi ce qui me choque, ce n'est pas la restriction mais sa faiblesse : tu m'imposes 5 fonctions et 25 lignes, je gueule. Tu m'imposes 100 lignes et 10 fonctions, je marmonne mais je code.

Matoux42 a écrit :
Je ne commente pas mes codes, (sauf pour organiser mes headers) et, de toute manière, la norme n'autorise pas de commentaire à l'intérieure des fonctions.

Ça c'est bien LE point que je trouve contradictoire dans leur norme !
Pour la petite histoire, j'ai envoyé un mail à Mathieu du staff de 42, et on a discuté pas mal (enfin je vais plutôt dire qu'il m'a expliqué, pour être rigoureux) les raisons de la norme, et à part le coup des commentaires je dois avouer que leur ensemble est cohérent autour d'une idée : Les élèves apprennent.

Mais je suis désolé, après 4 ans les élèves ont suffisamment appris pour approcher du niveau qu'ils utiliseront dans leur vie professionnelle, et là ils savent utiliser une boucle for ! Et ne me dites pas qu'ils ont le droit, ça ne se produit que dans les projets en langage non imposé... qui n'arrivent pas avant la troisième ou la quatrième année ! Et tout le code imposé en C doit continuer à suivre la Norme...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Matoux Hors ligne Membre Points: 17 Défis: 6 Message

Citer : Posté le 02/01/2016 10:51 | #


Dark storm a écrit :
Enfin, la manière dont je vois ça, c'est comme apprendre le français en disant "Avec 500 mots vous pouvez tout faire, utilisez pas les autres sinon vous serez perdus."

Bah, c'est le principe du primaire, et je te signale que beaucoup commence à coder à Epitech ; ).
Comme je l'ai dit à un ami hier, le principale défault d'Epitech est qu'elle est trop ouverte. Ainsi, la tête de promo à un niveau de prépa, et la queue, on se demande franchement ce que ces gars foutent dans une école d'info.
Dark storm a écrit :
Sinon, ça vous dérange pas d'être noté par des machines sur la prétendue qualité de vos codes ? Je suis sur que je suis capable d'écrire un truc ignoble qui respecte la Norme. Et à l'inverse écrire un truc très propre qui ne le respecte pas…

La plupart des projets sont notés d'abord par la moulinette (sortie, temps, norme, triche) puis par un responsable pédagogique (pour les mêmes choses et pour les bonus) lors du pitch. Certains projets sont notés uniquement par un responsable (les rush et les colles).
Dark storm a écrit :
Faut vraiment aimer chier du code pour pouvoir se contraindre à faire exactement comme un type a décrété. Ouais, je suis bien content d'être libre de mes choix algorithmiques. x)

A celà je répondrais deux choses : il faut vraiment aimer la france pour y rester malgrés toutes les loix de merde qui y sont votés (je ne parle pas politique, je pense que quel que soit le bord politique, il y a forcément quelque loix qui peuvent ne pas plaire). Et, si un jours tu rentre dans une entreprise où on t'impose des normes de codage, que feras-tu ?

Matoux42
Ad augusta per angusta !
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 02/01/2016 10:57 | #


Matoux42 a écrit :
Dark storm a écrit :
Enfin, la manière dont je vois ça, c'est comme apprendre le français en disant "Avec 500 mots vous pouvez tout faire, utilisez pas les autres sinon vous serez perdus."

Bah, c'est le principe du primaire, et je te signale que beaucoup commence à coder à Epitech ; ).
Comme je l'ai dit à un ami hier, le principale défault d'Epitech est qu'elle est trop ouverte. Ainsi, la tête de promo à un niveau de prépa, et la queue, on se demande franchement ce que ces gars foutent dans une école d'info.


A ma demi-journée aux portes ouvertes d'Epitech à Paris, un étudiant m'a effectivement dit que quand il est arrivé dans cette école, il ne savait rien coder, il ne savait même pas ce que c'était. Pourquoi faire cette école du coup ? x)


Matoux42 a écrit :
Et, si un jours tu rentre dans une entreprise où on t'impose des normes de codage, que feras-tu ?


Dans ce cas-là, j'imagine que tu respecteras ces normes mais premièrement, je connais pas énormément d'entreprises, de réputation, qui imposent des normes, surtout de ce genre et deuxièmement, même si tel était le cas, c'est dans le cadre de ton activité professionnelle, pas dans le cadre de tes débuts ou de ton apprentissage le plus complet, c'est totalement différent
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 02/01/2016 11:07 | #


Parce que j'ai pas le choix, et que j'essaie de faire en sorte, à mon échelle, que ça change. J'estime ne pas subir la démocratie, contrairement à cette Norme si je devais la suivre. Bref, recentrons le débat sur la Norme.
Et pour ma défense, je doute que les règles imposées par une entreprise se rapprochent ne seraient-ce que d'un dixième de celles de la Norme.

Matoux42 a écrit :
La plupart des projets … sont notés par un responsable

Apprends leur le principe du DRY
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Cakeisalie5 Hors ligne Ancien administrateur Points: 1965 Défis: 11 Message

Citer : Posté le 02/01/2016 11:54 | #


Lephenixnoir a écrit :
Dark storm a écrit :
Z'avez raison les gars, c'est une bonne idée de mettre à la benne le code de ceux qui l'ont pondu pour vous. Après tout, réinventer la roue, c'est tellement plus amusant.

Oui, et autant la réinventer mal : parce que je ne crois pas que des élèves débutants utilisant des Normes d'écriture adaptées à l'apprentissage soient capables de produire du code aussi optimisé que des professionnels qui maitrisent leur sujet.

Votre premier programme était parfait, peut-être ? Les projets réalisés à 42 n'ont pas ambition à être mis en prod. Ils sont là pour nous entraîner, et peu importe l'école, on nous a toujours donné des exercices qu'on n'a pas réalisés comme des professionnels qui ont Bac+8, pour nous entraîner.

Lephenixnoir a écrit :
Et je répète le même argument : arrêtez de prendre les élèves pour des imbéciles. Vous êtes bien assez intelligents pour comprendre ce qu'est une boucle while, une boucle for, un switch, et pour comprendre des programmes qui utilisent les uns ou les autres.

Mais si on autorise ceci, on peut utiliser, je ne sais pas, des labels/goto, et puis carrément coder en Python et autoriser tous les opérateurs et les librairies disponibles. "mé kak tu par tro lou1" : ah bon ? cet argument pourrait pourtant permettre de partir aussi loin. Le but ici est de restreindre le langage pour que l'on se concentre sur l'algo.

Lephenixnoir a écrit :
Non mais comment voulez-vous qu'une fois leur apprentissage terminé les élèves se mettent à utiliser la boucle for si on ne leur a pas appris à le faire ?

Spoiler : on n'apprend pas grand chose à 42. 42 nous encourage simplement à aller chercher de l'info par nous-mêmes pour réaliser nos projets.

Lephenixnoir a écrit :
Je re-cite ça parce que je ne comprends pas à quoi sert cette école si elle est là pour vous donner un niveau de débutant mais pas un niveau professionnel ?

Elle est là pour nous faire progresser. Par "gros projet, professionnel", j'entends un projet où tout le monde prend ses petites libertés, où tout le monde code un peu comme il veut, utilisant ce qu'il veut, excepté éventuellement quelques petites contraintes, et où au final, on n'arrive pas beaucoup à se comprendre, ce qui n'est pas nécessaire. Or, à 42, quand on code à plusieurs, comprendre le code des autres, c'est utile dans le sens où ça t'aide à progresser.

Lephenixnoir a écrit :
D'ailleurs Cake, Matoux42, vous en pensez quoi de ce bug ?

Je ne sais plus si je l'ai déjà rencontré. Je le testerai demain sur un Mac.
D'ailleurs, petit détail : la moulinette ne passe pas la norminette (me semble-t-il), c'est le devoir de tes correcteurs, parce que c'est eux qui doivent analyser ton algorithme. [De l'Art du Peer-Correcting]

Dark storm a écrit :
Faut vraiment aimer chier du code pour pouvoir se contraindre à faire exactement comme un type a décrété. Ouais, je suis bien content d'être libre de mes choix algorithmiques. x)

Ton code, tu le fais, tu fais quelque chose de fonctionnel, et rien n'oblige les autres à le lire. Et surtout, les autres ne proviennent pas d'un seul milieu, et ont tout le temps qu'ils veulent pour comprendre ton algorithme.
A 42, pour valider un algorithme, tu dois le faire corriger 3 fois (5 fois pour la libft uniquement) par des gens qui sont de 42. Une correction prend 15/20 minutes. Alors s'entendre sur des règles de rédaction, ça ne peut que faciliter la lecture, et rendre la correction plus fluide.

J'en profite pour revenir sur les :
Dark storm a écrit :
parce qu'un type a décrété que au delà de x fonctions dans un fichier, c'est sale.

Dark storm a écrit :
Sinon, ça vous dérange pas d'être noté par des machines sur la prétendue qualité de vos codes ?

(et une autre citation qui exprimait ça plus clairement mais que j'ai perdue)
C'est faux. Un code non à la Norme n'est pas sale, de piètre qualité, pour autant. C'est simplement qu'il ne respecte pas la Norme, et n'est donc pas forcément adapté dans le contexte de 42, et donc qu'il ne sera pas aussi facilement lisible qu'un code normé pour quelqu'un qui a l'habitude de lire un code à la Norme à 42.

"Un type a dit" que les codes à 42 devraient être comme ça (même si en fait c'est toute une équipe), parce que poser des règles ne pouvait que fluidifier les relectures et les peer-reviews.
Je ne dis pas que la Norme est parfaite et n'est pas un peu trop restrictive. Je soulève juste son utilité un peu oubliée. Je ne la soutiens pas à 100% (même si je reprends certains points de cette Norme pour mes codes personnels parce que je trouve ça plus propre).
(et putain j'écris un peu trop de pavés dans ce topic)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 02/01/2016 12:28 | #


Cakeisalie5 a écrit :
Votre premier programme était parfait, peut-être ? Les projets réalisés à 42 n'ont pas ambition à être mis en prod. Ils sont là pour nous entraîner, et peu importe l'école, on nous a toujours donné des exercices qu'on n'a pas réalisés comme des professionnels qui ont Bac+8, pour nous entraîner.

Je ne dis pas le contraire, je dis qu'une fois que vous avez implémenté votre version de printf() ils n'ont qu'à vous laisser utiliser printf() !! x)

Cakeisalie5 a écrit :
Mais si on autorise ceci, on peut utiliser, je ne sais pas, des labels/goto, et puis carrément coder en Python et autoriser tous les opérateurs et les librairies disponibles. "mé kak tu par tro lou1" : ah bon ? cet argument pourrait pourtant permettre de partir aussi loin. Le but ici est de restreindre le langage pour que l'on se concentre sur l'algo.

C'est toi qui te contredis là. On a parlé de règles trop strictes, on n'a pas dit qu'on voulait le bordel. Si quelqu'un me rend un programme avec un goto, je veux bien lui mettre 0, ça je trouve que c'est légitime -- la programmation, c'est pas non plus de la pseudo-algorithmique, c'est sérieux à la base.
Coder en Python ? On parle de norme de C là, je crois que tu dérives pas mal dans l'exagération... ce débat est sérieux à la base.
Et je ne sais pas si j'ai vraiment lu « et puis carrément [...] autoriser tous les opérateurs [...] disponibles » ? Ben évidemment, non mais si tu enlèves les opérateurs tu enlèves une partie du langage, je ne sais pas si vous vous en rendez compte de ça ! >_<
Et pour les bibliothèques, je ne trouve toujours pas légitime de vous empêcher d'utiliser la stricte totalité de la lib standard du C -- après vous l'avoir fait réimplémenter si bon leur semble.

Cakeisalie5 a écrit :
Spoiler : on n'apprend pas grand chose à 42. 42 nous encourage simplement à aller chercher de l'info par nous-mêmes pour réaliser nos projets.

Ah oui, j'oubliais que ces écoles avaient aussi le don majestueux de faire payer plusieurs milliers d'euros une année d'étude pour mettre à la disposition des étudiants un mac, une Norme qui fait débat, et quelques ressources pédagogiques comme des sujets d'exercices. Mais je dérive.

Cakeisalie5 a écrit :
Ainsi, la tête de promo à un niveau de prépa, et la queue, on se demande franchement ce que ces gars foutent dans une école d'info.

À propos de prépa, je vais faire une remarque pas forcément cool sur les écoles de code mais que je pense fondée : beaucoup disent que ce sont des écoles qui apprennent à « chier du code » ; je n'irai pas jusque-là mais je trouve que l'idée est vraie.
J'ai autour de moi pas mal de bouquins liés à l'informatique (Mathématiques à l'usage des informaticiens, The Art of Computer Programming -- la Bible de l'informatique, rien que ça) et je peux vous garantir qu'une base mathématique solide est nécessaire pour faire des algorithmes intelligents.
Plein de résultats autour de la cryptographie, des algorithmes de tri ou de l'informatique en général descendent de la théorie des groupes, des probabilités, ou autres concepts mathématiques importants. Parce que oui, un algorithme c'est mathématiquement très défini, modélisable entre autres par un quadruplet contenant un ensemble d'états courants, deux ensembles d'états d'entrées et de sortie, et d'une fonction répondant à tout un tas de propriété comme la stabilité sur l'ensemble des états de sortie, etc.
J'ai lu de ces bouquins, il y a par exemple de la théorie sur les algèbres de Boole (oui, au pluriel), concernant des fonctions polynomiales sous formes disjonctive et conjonctive parfois canoniques, bref, pas forcément des choses qu'on n'enseigne pas chez 42 ou Epitech, mais aucun de ces résultats n'est connu d'élèves qui sortent du lycée.
Alors vous comprendrez j'imagine, que rajouter une telle Norme de C me fait douter sérieusement de la capacité de ces écoles à former des programmeurs professionnels compétents -- indépendamment de tout apport de connaissance extérieur, ce que je dis n'est en aucun cas un jugement mais l'opinion que je suis en train de développer.

Cakeisalie5 a écrit :
Alors s'entendre sur des règles de rédaction, ça ne peut que faciliter la lecture, et rendre la correction plus fluide.

Hmph, moi je repère beaucoup plus facilement une itération sur un tableau quand je vois une boucle for qu'un while, et je comprends bien mieux un switch qu'un bloc de else if donc je suis obligé de regarder attentivement toutes les conditions avant de me rendre compte qu'elles sont toutes de la même forme et que switch aurait très bien fait le boulot.
Je parle pas d'optimisation non plus. Alors des conventions de correction oui, mais encore une fois les étudiants qui corrigent des programmes sont suffisamment intelligents pour comprendre for et switch !

Cakeisalie5 a écrit :
C'est faux. Un code non à la Norme n'est pas sale, de piètre qualité, pour autant. C'est simplement qu'il ne respecte pas la Norme, et n'est donc pas forcément adapté dans le contexte de 42, et donc qu'il ne sera pas aussi facilement lisible qu'un code normé pour quelqu'un qui a l'habitude de lire un code à la Norme à 42.

Je crois que l'idée développée par Dark storm est que cette Norme ne vous aide même pas toujours à écrire du code propre. J'ai déjà rencontré des cas pour lesquels couper une fonction de plus de 25 lignes était à la fois stupide et passablement dangereux au niveau du code.

Cakeisalie5 a écrit :
"Un type a dit" que les codes à 42 devraient être comme ça (même si en fait c'est toute une équipe), parce que poser des règles ne pouvait que fluidifier les relectures et les peer-reviews.
Je ne dis pas que la Norme est parfaite et n'est pas un peu trop restrictive. Je soulève juste son utilité un peu oubliée.

Je pense que personne ici ne doute de l'utilité d'une norme de code pour la rédaction en groupe et la correction. Je citerai d'ailleurs la norme de développement du noyau Linux de kernel.org qui comporte beaucoup de formatage à cause du grand nombre de contributeurs, mais qui n'impose jamais rien sur le langage en lui-même.
Pour moi, et pour pas mal d'autres je pense, une norme efficace porte sur la présentation et pas le code, sur l'orthographe et pas sur la rédaction.

Cakeisalie5 a écrit :
(et putain j'écris un peu trop de pavés dans ce topic)

Je ne crois pas qu'il y ait de trop gros pavés, et tout le monde a le droit de se faire entendre.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 02/01/2016 12:30 | #


Cakeisalie5 a écrit :
Mais si on autorise ceci, on peut utiliser, je ne sais pas, des labels/goto

Eh, on peut faire une distinction entre un code propre et un code sale quand-même, on n'a pas dit qu'au nom de la liberté on pouvait coder n'importe comment ! Les label/goto c'est assez unanimement considéré comme dégueu.

Cakeisalie5 a écrit :
qu'il ne sera pas aussi facilement lisible qu'un code normé pour quelqu'un qui a l'habitude de lire un code à la Norme

Cet argument peut justifier qu'on mette certaines règles, mais il ne justifie pas certaines aberrations comme l'interdiction du for.
De plus comment parler de lisibilité alors que la Norme de 42 indique :
Norme de 42 a écrit :
Il ne doit pas y avoir de commentaires dans le corps des fonctions.


Cakeisalie5 a écrit :
Ton code, tu le fais, tu fais quelque chose de fonctionnel, et rien n'oblige les autres à le lire.

Tu sais, j'ai déjà travaillé en groupe, et je me contentais de faire un code propre et commenté, on ne s'est pas amusé à créer une Norme pour le projet. Aussi c'était du Caml, on voit généralement assez bien ce qui se passe dans ce langage (même si le prix à payer est que ce langage est très dûr).

Cakeisalie5 a écrit :
et puis carrément coder en Python et autoriser tous les opérateurs et les librairies disponibles

Ben, en exam on pourrait laisser l'utilisateur choisir le langage comme à Prologin, mais c'est un autre débat
Python est pas mal pour apprendre l'algorithmique hein, il est juste moins usité dans le monde professionnel à cause de ses performances.

Ajouté le 02/01/2016 à 12:33 :
Lephenixnoir a écrit :
Ah oui, j'oubliais que ces écoles avaient aussi le don majestueux de faire payer plusieurs milliers d'euros une année d'étude pour mettre à la disposition des étudiants un mac, une Norme qui fait débat, et quelques ressources pédagogiques comme des sujets d'exercices. Mais je dérive.

42 est gratuite
Mais d'autres comme Epitech sont chères.
Matoux Hors ligne Membre Points: 17 Défis: 6 Message

Citer : Posté le 02/01/2016 12:37 | #


Je ne me rappelais plus que j'avais un compte PC, c'est donc avec ce compte que je vais répondre dorénavant.
Lephenixnoir a écrit :
Oui, et autant la réinventer mal : parce que je ne crois pas que des élèves débutants utilisant des Normes d'écriture adaptées à l'apprentissage soient capables de produire du code aussi optimisé que des professionnels qui maitrisent leur sujet.

Quand tu fait un gâteau, tu ne prétends pas en faire un meilleur que le pâtissier du coin, mais réussir à mieux cuisiner par la suite.
Lephenixnoir a écrit :
Cakeisalie5 a écrit :
Dans ces citations, vous évoquez ici l'utilisation d'une telle Norme dans le cadre d'un gros projet, professionnel. Nope, nope, nope, et re-nope.

Je re-cite ça parce que je ne comprends pas à quoi sert cette école si elle est là pour vous donner un niveau de débutant mais pas un niveau professionnel ?

Lephenixnoir a écrit :
Mais je suis désolé, après 4 ans les élèves ont suffisamment appris pour approcher du niveau qu'ils utiliseront dans leur vie professionnelle, et là ils savent utiliser une boucle for ! Et ne me dites pas qu'ils ont le droit, ça ne se produit que dans les projets en langage non imposé... qui n'arrivent pas avant la troisième ou la quatrième année !

La réponse :
Moi, dans un post précédent a écrit :
MAIS la norme (je le répète pour la 42è fois) a un but pédagogique, et n'est donc pas appliquées aux exams et à certains modules, et n'est faite que pour le C. En C++ par exemple, la seule chose, me semble-t-il, est que l'on ne peut pas utiliser le "using namespace".

En effet, à partir de la Piscine C++ de deuxième année la norme n'est quasi plus utilisé, et en troisième, quatrième et cinquième année, ce n'est plus q'un "mauvais" souvenir. La deuxième année étant, dans sa première moitié un stage, et dans sa deuxième moitié, réservé en grande partie au C++, la norme n'est obligatoire que pour les projets de la plupart des modules de première année.
Lephenixnoir a écrit :
D'ailleurs Cake, Matoux42, vous en pensez quoi de ce bug ?
Lephenixnoir a écrit :
struct s_object;
void f(struct s_object argument);

est invalide (outre le scope global). C'est respectueux de la Norme, mais pour que la moulinette passe il faut écrire :
struct s_object;
typedef struct s_object t_object;
void f(t_object argument);

Jamais entendu parlé, et, dans mes souvenir, j'ai déjà utilisé la première version sans avoir de problème.
Lephenixnoir a écrit :
Je crois que le problème concernant ce point est que les programmeurs ayant de l'expérience en C savent écrire et maintenir des fonctions de plus de 25 lignes sans problème, et que par conséquent ils le font sans retenue, et qu'ils ne comprennent pas la restriction.
Je ne sais pas quelle taille font les plus grosses fonctions que j'ai écrites mais une chose est sure, c'est de l'ordre de 200 lignes. Bon, et alors ? Je n'ai aucun problème à les écrire, les comprendre, les commenter, les maintenir, et si j'estime qu'il faut les séparer je les sépare. C'est tout.
Je considère que si l'école estime ses élèves incapable de gérer des fonctions de plus de 25 lignes, elle ne peut pas leur apprendre à écrire du code de professionnel.

Je l'ai déjà dit, mais on ne met à la norme, on code à la norme. Avant Epitech, et même au début d'Epitech, je faisait moi aussi des fonctions de presque 100 ou 200 lignes. Par exemple, le mini projet de fin de première semaine de piscine, le sapin, je l'ai codé à la z**b*, et j'avais donc plusieurs petites fonctions de moins de 25 lignes, mais ma fonction principale (pas le main, mais la fonction qu'appelle le main) faisait plus de 120 lignes. J'ai eu un peu de mal à la "mettre à la norme', et je pensais, à ce moment là, commet toi par rapport au nombre de lignes. J'ai depuis recodé ce projet, en faisant directement des fonctions de moins de 25 lignes, sans aucun problème, et sans me sentir limité. En fait, c'est un peu comme pour les rédactions de français : tu pourrais être tenté de faire comme plan
I) ...
II) ...
III)...
Certains prof accepteraient, mais la majorité te demanderaient de reprendre les différentes idées de chaque partie pour redécouper en faisant une rédaction mieux organisée :
I) a) ... b) ... c) ...
II) a) ... b) ...
III) a) ... b) ... c) ... d) ...
C'est la même chose, tu ne peux pas dire qu'une fonction de plus de 100 lignes ne contient pas plusieurs sous ensembles !
Eltoredo a écrit :
A ma demi-journée aux portes ouvertes d'Epitech à Paris, un étudiant m'a effectivement dit que quand il est arrivé dans cette école, il ne savait rien coder, il ne savait même pas ce que c'était.

C'est justement l'ambition de ce genre d'école, même si je reconnais que je ne comprends pas comment des "passionnés" d'informatique peuvent ne jamais avoir codé.
Eltoredo a écrit :
je connais pas énormément d'entreprises, de réputation, qui imposent des normes

Dark storm a écrit :
je doute que les règles imposées par une entreprise se rapprochent ne seraient-ce que d'un dixième de celles de la Norme

Bah, figurez vous que beaucoup de tek2/tek3 m'ont dit avoir été dans des entreprises avec des norme plus ou moins proche de celle d'Epitech, parfois plus restrictive, parfois ne portant que sur l'indentation, mais des normes quand même !
Cakeisalie5 a écrit :
Mais si on autorise ceci, on peut utiliser, je ne sais pas, des labels/goto

Je ne suis pas d'accord avec le reste de l'exemple, mais le début est pertinent : pourquoi ça serait con d'interdire certain mots clés et pas d'autres ? Il y a surement pas mal de barbus qui ont contribué à la création du C, et si goto et label existe, il doit surement y avoir une bonne raison à la base !
(Edit)
Louloux a écrit :
Les label/goto c'est assez unanimement considéré comme dégueu.

Oui, c'est sur que la majorité est un très bon argument puisqu'elle à toujours raison ...
Louloux a écrit :
De plus comment parler de lisibilité alors que la Norme de 42 indique :
Norme de 42 a écrit :
Il ne doit pas y avoir de commentaires dans le corps des fonctions.

Bah, vu que les fonctions font max 25 lignes, un commentaire au début et/ou à la fin, c'est suffisant, non ?

Matoux(42)
Ad augusta per angusta !
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 02/01/2016 12:44 | #


Lephenixnoir a écrit :
je peux vous garantir qu'une base mathématique solide est nécessaire pour faire des algorithmes intelligents

Entièrement d'accord, et je doute que vous alliez chercher ça par vous-mêmes dans des écoles comme 42, alors les écoles d'informatique gagneraient à avoir un recrutement un peu plus sévère sur le niveau en maths (les élèves motivés se bougeraient et auraient l'école quand-même), et d'ensuite instituer des cours de maths sur tout ce qui est nécessaire pour comprendre des théories algorithmiques un tant soit peu complexes.
Matoux Hors ligne Membre Points: 17 Défis: 6 Message

Citer : Posté le 02/01/2016 13:08 | #


Lephenixnoir a écrit :
je peux vous garantir qu'une base mathématique solide est nécessaire pour faire des algorithmes intelligents

Je suis entièrement d'accord moi aussi, et j'ai d'ailleurs toujours était passionné par les Maths et l'info. Je pense que si j'avais eu le niveau pour faire une bonne prépa, j'aurais très certainement choisi d'en faire une pour essayer de viser l'ensimag. J'aurais pu aussi faire une licence Maths/info, mais je trouvais que ce genre de cursus était trop généraliste. La seule chose que je regrette à Epitech, c'est l'absence quasi totale de maths, et surtout la complaisance de la plupart des élèves dans cette absence de Maths. D'ailleurs, beaucoup pense à Epitech que Maths et info n'ont rien à voir.

Matoux(42)
Ad augusta per angusta !
Cakeisalie5 Hors ligne Ancien administrateur Points: 1965 Défis: 11 Message

Citer : Posté le 02/01/2016 13:08 | #


Lephenixnoir a écrit :
Je ne dis pas le contraire, je dis qu'une fois que vous avez implémenté votre version de printf() ils n'ont qu'à vous laisser utiliser printf() !! x)


De une, avec notre version de printf, on peut ajouter des options qui n'étaient pas là à la base pour se faciliter la vie, comme dit dans le sujet, partie bonus. De deux, ça enlève une partie de l'intérêt du sujet, puisque coder une fonction dont on ne va pas se servir après, c'est dommage.

Lephenixnoir a écrit :
On a parlé de règles trop strictes, on n'a pas dit qu'on voulait le bordel.

Louloux a écrit :
Eh, on peut faire une distinction entre un code propre et un code sale quand-même, on n'a pas dit qu'au nom de la liberté on pouvait coder n'importe comment !

Sauf que ce que vous considérez comme des règles correctes, d'autres vont considérer ça comme des règles trop strictes et d'autres encore comme le bordel. C'est une notion subjective.

Lephenixnoir a écrit :
beaucoup disent que ce sont des écoles qui apprennent à « chier du code » ; je n'irai pas jusque-là mais je trouve que l'idée est vraie.

Louloux a écrit :
je doute que vous alliez chercher ça par vous-mêmes dans des écoles comme 42, alors les écoles d'informatique gagneraient à avoir un recrutement un peu plus sévère sur le niveau en maths (les élèves motivés se bougeraient et auraient l'école quand-même)

C'est pas complètement faux qu'on chie du code. Après, tu peux faire ce qui est demandé et ne pas creuser (c'est extrêmement dommage, m'enfin), et tu peux creuser et t'intéresser à toutes les notions abstraites qui sont derrière. M'enfin, ça dépend des gens, et ça n'a pas grand chose à voir avec la Norme, du coup, c'est un peu du H-S.

Lephenixnoir a écrit :
Alors vous comprendrez j'imagine, que rajouter une telle Norme de C me fait douter sérieusement de la capacité de ces écoles à former des programmeurs professionnels compétents

La technique argumentative est un peu douteuse là pour le coup o_o

Lephenixnoir a écrit :
Hmph, moi je repère beaucoup plus facilement une itération sur un tableau quand je vois une boucle for qu'un while, et je comprends bien mieux un switch qu'un bloc de else if donc je suis obligé de regarder attentivement toutes les conditions avant de me rendre compte qu'elles sont toutes de la même forme et que switch aurait très bien fait le boulot.

Oui, toi, qui n'es pas à 42 et n'es donc pas habitué à voir de ce genre de codes
Je ne sais pas forcément ce qui les a poussé à interdire les for/switch derrière. Ce que je sais, c'est que dans les faits, on s'en passe sans souci.

Lephenixnoir a écrit :
les étudiants qui corrigent des programmes sont suffisamment intelligents pour comprendre for et switch !

Oui, mais tu comprends, c'est tombé sur face
Et ok, vous déplorez for et switch, mais ceux-ci sont si facilement remplaçables que je ne vois pas pourquoi vous y tenez tant. On s'y habitue en peu de temps, réellement. Et ce n'est pas parce qu'il n'y en a pas que les codes sont moins bons derrière pour autant.

Lephenixnoir a écrit :
Je crois que l'idée développée par Dark storm est que cette Norme ne vous aide même pas toujours à écrire du code propre. J'ai déjà rencontré des cas pour lesquels couper une fonction de plus de 25 lignes était à la fois stupide et passablement dangereux au niveau du code.

Peut-être parce que le code n'était pas forcément pensé à la Norme dès le début.

Louloux a écrit :
De plus comment parler de lisibilité alors que la Norme de 42 indique :
Norme de 42 a écrit :
Il ne doit pas y avoir de commentaires dans le corps des fonctions.

Si ton code est suffisamment bien divisé, un commentaire en haut de la fonction devrait suffire à expliquer son fonctionnement.
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 02/01/2016 13:11 | #


Matoux a écrit :
Je ne me rappelais plus que j'avais un compte PC, c'est donc avec ce compte que je vais répondre dorénavant.

J'ai mis les messages à ton compte.

Matoux a écrit :
Quand tu fait un gâteau, tu ne prétends pas en faire un meilleur que le pâtissier du coin, mais réussir à mieux cuisiner par la suite.

Quand tu cuisines, tu ne fabriques pas ton propre four, car des gens compétents en ont fait pour toi.

Matoux a écrit :
C'est la même chose, tu ne peux pas dire qu'une fonction de plus de 100 lignes ne contient pas plusieurs sous ensembles !

Diviser son code, c'est bien et nous l'encourageons aussi. Mais un correcteur peut savoir si ta fonction est trop longue, si elle peut être divisée, en revanche une limite objective n'existe pas. Seul un humain peut juger de la propreté d'un code.

Matoux a écrit :
Il y a surement pas mal de barbus qui ont contribué à la création du C, et si goto et label existe, il doit surement y avoir une bonne raison à la base

Le C a ses défauts, tu sais. Comme tout en informatique : c'est une science qui progresse énormément.
Mon prof pourrait te parler pendant des heures de tout ça, il est calé en théorie des langages et a participé au développement du Caml (dont il connaît les fondateurs, l'un ayant été son prof à l'ENS Ulm si je me souviens bien).

Matoux a écrit :
Oui, c'est sur que la majorité est un très bon argument puisqu'elle à toujours raison ...

Attaque trop facile. Tu te doutes bien que ce n'est pas de l'avis des autres que je tiens le mien à ce propos, mais parce que l'utilisation du label/goto se substitue à celle de boucles et produit un code moins lisible et surtout moins logique, moins algorithmique.

Matoux a écrit :
Bah, vu que les fonctions font max 25 lignes, un commentaire au début et/ou à la fin, c'est suffisant, non ?

En général, un codeur propre met en début de fonction (soit au dessus, soit en première ligne), une description de la fonction, des arguments qu'elle prend et de ce qu'elle retourne, éventuellement en tête de chaque boucle un invariant, à chaque "paragraphe" de la fonction (on organise la fonction en sautant des lignes) une courte explication de ce qu'il fait, puis à chaque instruction compliquée (i.e. difficilement lisible) une petite explication.
(bon après ça j'en fais pas un absolu, moi-même je code souvent de petites fonctions, donc avec seulement un commentaire en tête, mais pour des plus grosses c'est illisible)

Ajouté le 02/01/2016 à 13:13 :
Cakeisalie5 a écrit :
Sauf que ce que vous considérez comme des règles correctes, d'autres vont considérer ça comme des règles trop strictes et d'autres encore comme le bordel. C'est une notion subjective.

Ben, on n'impose à personne nos règles, nous. Même si cela ne nous empêche pas de juger de la propreté d'un code et d'en discuter avec son auteur.
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 02/01/2016 13:20 | #


Ce que je pense, et ce qui a d'ailleurs était repris dans vos arguments, c'est que 42 forme de très bon technicien, mais certainement pas des ingénieurs.
Des fois, j'ai l'impression d'entendre la filière STI2D de l'année dernière à qui l'on avait vendu la Lune et qui s'attendait au même résultat que nous en travaillant moins dure, qu'ils pourraient intégré une école d'ingénieur. Dans mon école, il y en a un seul, et il est en galère. Vous croyez qu'en faisant des choses plus sympa (ici coder) vous aurez la même chose que ceux qui font une classe prépa ? Dans les propos de certains on dirait.
Il y aura les très bons ingénieur, voir chercheur, ceux qui sorte d'école type Polytechnique, Centrale, les ingénieurs de bases, sortant d'école avec prépa intégré, et les techniciens. Mais sans faire de math, de marketing, de langues, qui sont les points forts de ces écoles grâce à la diversité d'enseignement, et même si ces écoles vendent du rêve, il faut toujours savoir faire la part des choses. Clairement, pourquoi moi qui m'embête à faire des maths, de la mécanique, de l’électricité toute la journée, j'arriverais au même résultat que vous à la fin de mon cursus ?
1337
Cakeisalie5 Hors ligne Ancien administrateur Points: 1965 Défis: 11 Message

Citer : Posté le 02/01/2016 13:27 | #


Xavier59 a écrit :
Ce que je pense, et ce qui a d'ailleurs était repris dans vos arguments, c'est que 42 forme de très bons techniciens, mais certainement pas des ingénieurs.

Je n'ai (enfin, je ne pense pas) jamais dit le contraire. Je n'ai pas intégré 42 pour programmer une fusée. Mais... c'est un peu hs x)
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 02/01/2016 14:10 | #


Louloux a écrit :
42 est gratuite
Mais d'autres comme Epitech sont chères.

Au temps pour moi.

Cakeisalie5 a écrit :
De deux, ça enlève une partie de l'intérêt du sujet, puisque coder une fonction dont on ne va pas se servir après, c'est dommage.

Qu'ils vous laissent utiliser printf() et votre fonction si tu veux ! Mais je suis désolé, on ne vous a pas fait coder une fonction de formatage, le sujet dit bien que vous codez printf(), rien d'autre. Donc bon, d'un côté...
Et puis si printf() possède certaines options et pas d'autres, c'est peut-être aussi parce que certains professionnels se sont penchés sur la question et ont des raisons pour avoir construit le standard comme ça non ? Tu crois vraiment que dans ton entreprise tu vas coder avec un fichier libft.a dans ton répertoire de travail ?

Cakeisalie5 a écrit :
Sauf que ce que vous considérez comme des règles correctes, d'autres vont considérer ça comme des règles trop strictes et d'autres encore comme le bordel. C'est une notion subjective.

Alors voilà une notion objective qui couvre une partie des problèmes :
→ Les règles de formatage et de notation nous sont acceptables. (les 25 lignes ne font pas vraiment partie de cette caractérisation)
→ Les règles de sémantique nous sont inacceptables.
Ça te va comme critère objectif ?

Cakeisalie5 a écrit :
La technique argumentative est un peu douteuse là pour le coup o_o

C'était pas un argument, juste une remarque du type « vous voyez, du mon point de vue, base mathématique absente + norme douteuse ça fait pas bon ménage ».

Cakeisalie5 a écrit :
Et ok, vous déplorez for et switch, mais ceux-ci sont si facilement remplaçables que je ne vois pas pourquoi vous y tenez tant. On s'y habitue en peu de temps, réellement. Et ce n'est pas parce qu'il n'y en a pas que les codes sont moins bons derrière pour autant.

S'ils sont dans le langage, c'est pour une bonne raison. Posez-vous cette question plutôt que de vous contenter de suivre la consigne !
→ Le switch est principalement là pour des raisons d'optimisation et de lisbilité (rien que ça !)
→ Le for touche presque à une question d'algorithmique : alors oui, itérer sur un tableau c'est une boucle, mais d'un autre côté, le nombre d'opérations est déterminé à l'avance (contrairement au while), la syntaxe est remplaçable mais en Python par exemple une boucle for ne peut pas raisonnablement facilement être remplacée par un while (de toute façon la puissance des itérables en Python rendrait ça considérablement stupide).
Le for existe pour parser des tableaux. Oui, c'est juste une question de rapidité de notation, de compréhension, de clarté, une syntaxe non triviale peut-être, mais je ne vois toujours pas la raison pour l'interdire. À moins que la Norme ait pour but de fixer une seule manière de faire une tâche, et ce quelle que soit la tâche ? J'ai du mal à y croire.

La lisibilité d'un langage ne repose pas sur la pauvreté de son nombre de mots, mais de la distinction et l'usage qu'il fait de chacun de ces mots et de la manière dont il leur donne un sens précis. C'est pareil avec for : oui, on peut faire la même chose avec un plus gros while, mais c'est comme faire des périphrases trois fois par phrase.

Cakeisalie5 a écrit :
Peut-être parce que le code n'était pas forcément pensé à la Norme dès le début.

Cette technique argumentative est particulièrement douteuse : tu es en train de me dire « ben ouais mais si le code avait été pensé à la Norme, ben il aurait pas de problème à respecter les règles de la Norme ». Évidemment.
Une bonne Norme devrait posséder une caractéristique essentielle :
→ Être une bonne solution dans un maximum de cas.
Et si on y regarde de plus près, les normes orthographiques, le décorum restrictif sur l'alignement du scope global et les opérateurs ramenés en début de ligne, ça n'est jamais une bonne ou une mauvaise solution.
Ce qui va influer, c'est le caractère sémantique et là où la norme influe sur le langage.

Alors tu vas me dire « une norme ne peut pas être parfaite partout », et tu auras tout à fait raison. C'est pour ça que la norme du kernel ne comporte que du décorum. Contrairement à la norme des écoles.

Cakeisalie5 a écrit :
Si ton code est suffisamment bien divisé, un commentaire en haut de la fonction devrait suffire à expliquer son fonctionnement.

Quand tu fais une opération particulièrement subtile, un appel de fonction avec un argument délibérément nul ou un appel de fonction par désindexation d'un tableau de pointeurs, en général t'aime bien mettre une ligne de commentaire.
Et je ne parle pas des formules mathématiques parfois un peu tordues pour lesquelles il est bon d'avoir une explication.

Matoux42 a écrit :
Il y a surement pas mal de barbus qui ont contribué à la création du C, et si goto et label existe, il doit surement y avoir une bonne raison à la base

Ça c'est plutôt une raison historique : et contrairement à for, c'est considéré comme une mauvaise pratique depuis des lustres. Et puis si vous avez bien étudié vous connaissez setjmp(). Non ? man 3 setjmp, je suis une école d'informatique moi, j'ai rien à vous apprendre.

Xavier59 a écrit :
Vous croyez qu'en faisant des choses plus sympa (ici coder) vous aurez la même chose que ceux qui font une classe prépa ? Dans les propos de certains on dirait.

Je ne veux ni caricaturer ni être méchant, mais j'ai l'impression que les écoles de code (je trouve ça plus correct que parler d'écoles d'informatique. Est-ce que je me trompe ?) forment des gens pour coder, pas vraiment pour réfléchir sur la théorie qu'on trouve derrière le programme.
Prenons la piscine de 42 de l'année dernière par exemple. Devinez qui était premier, et qui avait pondu un super algo de programmation dynamique intelligent pour le BSQ, alors que la plupart des programmes étaient juste naïfs ? Un mec de prépa.


Ajouté le 02/01/2016 à 14:16 :
Matoux a écrit :
C'est la même chose, tu ne peux pas dire qu'une fonction de plus de 100 lignes ne contient pas plusieurs sous ensembles !

Non, c'est vrai. Toutes les fonctions de plus de 100 lignes que j'écris contiennent des sous-ensembles de toute façon, sinon ce serait vraiment des gros pâtés difficiles à maintenir !
Mais séparer une fonction configure_node() de 120 lignes en 6 fonctions configure_node_name(), configure_node_children(), et 4 autres n'a aucun sens si les sous-fonctions ne sont appelées que par configure_node(). Il ne faut pas croire que découper en sous-module force la clarté, on peut écrire 1000 lignes dans un seul fichier -- je l'ai fait deux ou trois fois, notamment pour une implémentation de printf() et pour un petit moteur d'écriture naturelle de type TeX -- et avoir un ensemble parfaitement maintenable malgré quand même quelques soucis de scrolling de temps en temps (je ne pense pas que maintenir des fichiers de 1000 lignes soit une bonne idée, je suis juste en train de dire qu'un fichier de 1000 lignes peut être parfaitement propre et maintenable, contrairement à ce que prétend la norme).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Breizh_craft Hors ligne Modérateur Points: 1171 Défis: 7 Message

Citer : Posté le 02/01/2016 14:27 | #


Excusez-moi d'avoir lu certains messages diagonale, voire plus court.

Je peux finalement comprendre que certaines école, qui récupère des élèves de prépa, soient limitées les premières années. Je trouve simplement exagérée la Norme, ainsi que la durée pendant laquelle elle est appliquée. Je suis arrivé à l'IUT sans connaissances particulières, juste un peu de basic casio, d'algo, et mon esprit (trop) logique. Mais au début, je connaissais le for, le while, le do... sauf qu'on nous a fait faire quelques TP où l'un ou l'autre était interdit, pour nous forcer justement à remarquer rapidement quelle est la structure la plus adaptée. Il est parfois plus lisible et simple (les deux vont souvent ensemble, vive le KISS) d'utiliser un do ... while qu'un while classique. Et à la fin du premier semestre (c-à-d maintenant), on commence à voir les pointeurs, mais on sait déjà utiliser toutes les structures de boucle et conditionnelles, on a appris à utiliser les fonctions, les fonctions dans un fichier séparé...

En gros, on apprends au fur et à mesure, et on apprends d'abord en théorie (amphis), en pseudo-code, avec notre cerveau et du papier (TD), et enfin, en TP, on applique ça en C, avec bien entendu des aides pour les correspondances pseudo-code <> C. Du coup on réflchis en algorithmie, avant de commencer à voir quelle structure est nécessaire, et enfin l'appliquer. Et en général, le programme en C marche du premier coup, si on exclue les quelques erreurs d'inattention ou de syntaxe, on a rarement des erreurs d'algorithmie.

Et enfin, on remarque les limitations de nous-même avant de voir si qui permet de les éviter. Ainsi, on nous a obligé à faire des piles et des files avec des tableaux (à taille fixe donc), avant de voir les pointeurs, et comment ceux-ci permettent une meilleur gestion de ces structures (listes chaînées), ainsi que les avantages/incovénients que ça apporte, et comment les améliorer (ainsi, si on est sûr que la liste/pile sera petite, un tableau est plus simple et utilise moins de mémoire, et on a vu en amphi uniquement pour le moment, les listes chaînées circulaires, double-chaînées, ou double-chaînées-circulaires).

Ajouté le 02/01/2016 à 14:40 :
Et j'ajoute qu'à l'IUT, on voit pas que du C, et pas que de la prog. On a vu la modélisation de données, les maths discrètes, les bases de données, l'algèbre linéaire (oui les deux derniers sont les suites des deux premiers), on voit la conception de documents numériques (HTML/CSS pour le moment), et on a "initiation aux systèmes informatiques" : théorie de l'information, codage de l'information (UTF-8, IEEE 754, ASCII, compression, détection d'erreurs...), les OS (GNU/Linux en fait), les systèmes de fichiers (ext4 plus particulièrement), les différents composants d'un PC, leur fonctionnement, et leur utilité.

En langages, nous avons vu, mais à chaque fois dans une matière précise pour une raison précise, le C, le Python et le Bash pour le moment, ainsi que le HTML, le CSS et le SQL. Au second semestre, on va voir en plus, et au minimum, le Java (et la POO introduite en algèbre linéaire).
Breizh.pm – Un adminsys qui aime les galettes.
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 02/01/2016 17:51 | #


Concernant cette norme :

pas plus de 5 fonctions par fichier


Imaginez que vous voudriez programmer une structure de donnée, on va prendre comme exemple une arbre binaire de recherche, dans ce cas il faudrait programmer les fonctions/méthodes suivantes :

void CréerArbre()
void DétruireArbre()
bool EstVide()
void AjouterEntier(int i)
void SupprimerEntier(int i)
bool EstPresent(int i)
void RotationGauche(int i)
void RotationDroite(int i)
int Max()
int Min()
string ToString()

Comme on peut le voir, on a déjà 11 fonctions/méthodes, et j'en oublie certainement.
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 02/01/2016 18:40 | #


Là il va te sortir que la norme n'est pas appliquée en C++

Du troll ? Où ça ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Cakeisalie5 Hors ligne Ancien administrateur Points: 1965 Défis: 11 Message

Citer : Posté le 02/01/2016 19:10 | #


Lephenixnoir a écrit :
Et puis si printf() possède certaines options et pas d'autres, c'est peut-être aussi parce que certains professionnels se sont penchés sur la question et ont des raisons pour avoir construit le standard comme ça non ?

Pas parce que ce sont des professionels que ce qu'ils ont fait est forcément parfait. La preuve : chez Microsoft aussi, ce sont des professionels.

Lephenixnoir a écrit :
Tu crois vraiment que dans ton entreprise tu vas coder avec un fichier libft.a dans ton répertoire de travail ?

Pas forcément la libft, pas forcément dans le répertoire de travail. Mais qu'est-ce qui empêche la présence de librairies home-made ? Si les fonctions s'avèrent plus optimisées que les originales [parce que pensées différemment, pas forcément pour les mêmes buts/plateformes, etc], ou sont plus adaptées au travail actuel, pourquoi pas ?

Lephenixnoir a écrit :
Les règles de sémantique nous sont inacceptables.

Effectivement, c'est totalement objectif o_o

Lephenixnoir a écrit :
S'ils sont dans le langage, c'est pour une bonne raison.

Argument aussi valable pour les labels/goto, que vous réfutez pourtant.

Lephenixnoir a écrit :
Le switch est principalement là pour des raisons d'optimisation et de lisbilité (rien que ça !)

Pour des labels/goto à peine déguisés (avec des break en plus, yolo), ça, je veux bien le croire.

Lephenixnoir a écrit :
Le for touche presque à une question d'algorithmique : [...] le nombre d'opérations est déterminé à l'avance (contrairement au while)


size_t strlen(char *s)
{
    for (size_t l = 0; *s; l++);
    return (l);
}

Le nombre d'opérations est déterminé à l'avance, là ? Nope.

Lephenixnoir a écrit :
C'est pareil avec for : oui, on peut faire la même chose avec un plus gros while, mais c'est comme faire des périphrases trois fois par phrase.

Deux, si tu te débrouilles un minimum.

Lephenixnoir a écrit :
Une bonne Norme devrait posséder une caractéristique essentielle :
→ Être une bonne solution dans un maximum de cas.

Dans un maximum de cas là où elle doit être appliquée, à savoir dans les projets de 42, que ceux qui définissent la Norme définissent. Tu dis donc qu'il ne s'agit pas là de professionnels ?

Lephenixnoir a écrit :
Prenons la piscine de 42 de l'année dernière par exemple. Devinez qui était premier, et qui avait pondu un super algo de programmation dynamique intelligent pour le BSQ, alors que la plupart des programmes étaient juste naïfs ? Un mec de prépa.

CakeIsALie5 a écrit :
Xavier59 a écrit :
Ce que je pense, et ce qui a d'ailleurs était repris dans vos arguments, c'est que 42 forme de très bons techniciens, mais certainement pas des ingénieurs.

Je n'ai (enfin, je ne pense pas) jamais dit le contraire. Je n'ai pas intégré 42 pour programmer une fusée. Mais... c'est un peu hs x)



Smashmaster a écrit :
Imaginez que vous voudriez programmer une structure de donnée, on va prendre comme exemple une arbre binaire de recherche, dans ce cas il faudrait programmer les fonctions/méthodes suivantes [...] Comme on peut le voir, on a déjà 11 fonctions/méthodes, et j'en oublie certainement.

Dark storm a écrit :
Là il va te sortir que la norme n'est pas appliquée en C++

Nah mais on peut considérer que c'est des méthodes si on pense procédural et non orienté objet x)
Et ouais, à ce moment-là, on fait juste un ou deux fichiers, voire un fichier par fonction si tu fais une librairie.
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Matoux Hors ligne Membre Points: 17 Défis: 6 Message

Citer : Posté le 02/01/2016 19:54 | #


Xavier59 a écrit :
Clairement, pourquoi moi qui m'embête à faire des maths, de la mécanique, de l’électricité toute la journée, j'arriverais au même résultat que vous à la fin de mon cursus ?

Mmmh, c'est sur que tu vas te servir de tout ce que tu as fait en maternelle, au primaire, au collège et au lycée pour ta vie professionnelle ! Typiquement, on distingue deux types d'études, les études plutôt générales et les études plutôt spécialisée. Les classes prépas restent des études générales, donc avec des tas de choses que tu vas apprendre mais dont tu te servira plus par la suite. Epitech & cie ont pour ambition de retirer toutes les matières inutiles (malheureusement, ils ont un pitit peu jeté le bébé avec l'eau du bain en supprimant les maths !). Par contre on fait bel et bien de l'anglais (sur tout le cursus) et du marketing (en troisième et cinquième année il me semble).
J'aurais plein d'autres truc à dire, mais j'ai pas trop de temps actuellement, et Cakeisalie a +/- bien dit tout ce que je pense.

Matoux(42)
PS: on devrait continuer ce débat IRL autour d'un macdall, ça serait plus sympa ; ) !
Ad augusta per angusta !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 88 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd