Commentaires : On a demandé à ChatGPT de nous faire un site Web

L’objectif de l’objet est aussi de maintenir un contexte d’une entité x. negima n’est pas matts32 même s’ils ont les mêmes fonctions :slight_smile:

Mais oui, c’est souvent que l’objet est mal expliqué. Je résume toujours par c’est une boite, on lui donne des trucs et la boite nous en redonne d’autres. Ce qui se passe dedans, on s’en fiche (c’est une approche).

Mais le code donné par chatgpt et le cart, là non, c’est pas top même si ça fonctionne.

Ne pas comprendre ce qui se passe n’est pas si grave, il y a des mecs pour s’en occuper.
Je n’essaye pas de m’improviser médecin par exemple.

C’est pas en disant que c’est une boîte que les élèves vont comprendre. Durant la courte formation que j’ai suivi, le formateur nous a dit un truc similaire.

Le plus simple pour apprendre le php objet aux élèves, c’est de faire d’abord un petit site web de news avec les fonctions basiques CRUD (create, read, update, delete) en php procédural.

Puis de faire la même chose avec php objet.

Il n’y a pas de méthode plus efficace ! On devrait enseigner ça aux formateurs.

1 « J'aime »

C’est tellement efficace qu’après avoir appliqué cette méthode tu ne sais pas ce qu’est un objet et quel est l’intérêt d’en utiliser…

Et faut arrêter de croire qu’on peut devenir développeur en 3 mois de formation ou en suivant 2 tutos.

Les formations professionnelles ne permettent pas de mieux comprendre ce qu’est un objet.

L’intérêt des objets c’est de mieux organiser les fonctions.

Et pourtant il y a plein de gens qui savent très bien ce qu’est un objet. Et qui l’ont pas découvert spontanément sans qu’on leur apprenne…

Mais les objets, ça fait partie des concepts théoriques de la programmation, et les concepts théoriques, pour bien les apprendre il faut faire de la théorie. On peut apprendre un langage par la pratique et par l’exemple, mais la théorie ça s’apprend par des cours de théorie (et même pour un langage donné, il peut y avoir des aspects théoriques importants avant de se lancer dans la pratique…). Ce que zappent toutes les formations en ligne et autres formation rapides qui te promettent de devenir développeur en 6 mois mais se focalisent à 95% sur le code alors que le code n’est qu’une composante « mineure » du travail de développeur (en termes de temps).

Pour ça suffirait de les mettre dans différents fichiers.

On a bien parlé des définitions (encapsulation, abstraction, héritage, polymorphisme), ainsi que des concepts comme le MVC. Je crois que c’est pour mieux structurer ou organiser. C’est en gros des bonnes pratiques qu’on apprend aussi en php procédural. Donc pour moi, c’est toujours presque la même chose.

Tu vas me dire que j’ai toujours rien compris, mais cela ne m’a jamais empêché de faire tout ce que je veux et tout ce qu’on me demande.

Non. Avec l’objet tu peux structurer ton code pour le rendre bien plus facile à maintenir, faciliter le travail à plusieurs, le fiabiliser, etc… Tu ne pourras jamais arriver au même niveau sur ces points en 100% procédural.

Je vais te donner un exemple concret sur le côté « maintenabilité ».

Imagines que tu travailles en équipe sur une application. Il y a une partie de l’équipe qui travaille sur un système qui détecte des points sur un plan. Et on te demande à toi de faire une fonction qui prend l’ensemble de tous les points et renvoie pour chaque point celui qui est le plus proche.

Comment tu fais ça en procédural ?

Tu commences par demander à tes collègues comment ils représentent un point. Ce sera deux entiers. Ils te fournissent une fonction pour calculer la distance entre deux points. C’est donc une fonction qui va prendre 4 entiers en paramètre et en renvoyer un.

Toi tu dois faire une fonction qui prend en paramètre un nombre variable d’entiers (2 pour chaque point) et renvoie un nombre deux fois plus grand d’entiers (4 pour chaque couple point de référence/point le plus proche… pour simplifier, on part sur l’implémentation naïve où pour B le plus proche de A on va renvoyer à la fois AB et BA).

Donc, tu écris ta fonction (je le fait en pseudo langage français) :
calc_point_le_plus_proche(int[] coordonnees):
__nb_points = taille(coordonnees) / 2
__resultat = int[nb_points * 2]
__pour i de 0 a nb_points - 1:
____resultat[4i] = x = coordonnees[2i]
____resultat[4j] = y = coordonnees[2i+1]
____distance_min = -1
____pour j de 0 a nb_points - 1 et j != i
______x_a_tester = coordonnees[2j]
______y_a_tester = coordonnees[2j+1]
______distance_a_tester = calc_distance(x, y, x_a_tester, y_a_tester)
______si distance_min == -1 ou distance_min < distance_a_tester:
________resultat[4i+2] = x_a_tester
________resultat[4j+3] = y_a_tester
________distance_min = distance_a_tester
__retourne resultat

Bien entendu, tu peux le découper en sous-fonctions, mais ça ne changera rien à la maintenabilité du code.

Bon, tu as fini, tu as testé, t’es content, tout marche nickel. Tu le dit aux collègues. À merde, on a oublié de te dire, finalement on travaille dans l’espace, pas dans le plan, donc 3 entiers pour un point, voilà la nouvelle fonction pour calculer les distances.

Et hop, tu dois retravailler tout ton code, pour introduire une coordonnée z, adapter les index des array en conséquence (on saute désormais de 3 en 3 dans l’entrée, de 6 en 6 pour la sortie…), etc… Tu le fait, 2 jours plus tard les collègues reviennent, « bon, on a deux appareils d’acquisition différents, y en a un qui nous renvoie des coordonnées en cartésien, l’autre en polaire… alors on a ajouté un entier pour dire si le point suivant est en polaire ou en cartesien, et voilà les 4 fonctions pour calculer les distances, une si le deux points sont en cartesien, une si les deux sont en polaire, une si le premier est polaire le deuxième cartesien, une si le premier est cartésien et le deuxieme polaire… ». Là gros boulot, non seulement tu te tapes tous les décalages d’index et la variable supplémentaire pour le type de coordonnées du point, mais en plus pour ton calcul de « distance_a_tester » tu dois désormais faire un if avec cas, chacun avec une condition double, pour appeler la bonne fonction (parce que tes collègues sont des branleurs, ils t’ont fourni 4 fonctions au lieu d’une seule qui s’adapte en fonction du type de coordonnées de chaque point).

Puis finalement, quand tu as fini, on te dit qu’en plus on ajoute à chaque point une couleur (codée sur un entier) et un identifiant numérique. Tu n’en as strictement rien à foutre, ces éléments ne servent pas à un seul moment dans le traitement dont tu es responsable. Mais tu vas quand même devoir en tenir compte, puisqu’en entrée tu auras désormais 6 entiers pour chaque point et en sortie 12.

Maintenant, avec l’approche objet. Tes collègues sont responsables de la définition des objets de type Point, objets qui portent une méthode distance_vers() prenant un autre objet de type point en paramètre, et d’un objet CouplePoints qui contient deux points A et B.

D’abord, ton code de base devient tout de suite beaucoup plus simple, tu ne te soucies plus du tout de la façon dont est défini un point, tu n’as plus de calculs d’index, tu manipules beaucoup moins de variables :

calc_point_le_plus_proche(Point[] points):
__nb_points = taille(points)
__resultat = CouplePoints[nb_points]
__pour i de 0 a nb_points - 1:
____point = points[i]
____resultat[i] = CouplePoints(point, null)
____distance_min = -1
____pour j de 0 a nb_points - 1 et j != i
______point_a_tester = points[j]
______distance_a_tester = calc_distance(point, point_a_tester)
______si distance_min == -1 ou distance_min < distance_a_tester:
________resultat[i].B = point_a_tester
________distance_min = distance_a_tester
__retourne resultat

Mais en plus maintenant, quand tes collègues modifient la définition de Point, ce n’est plus ton problème, ton code ne bouge plus d’un poil. Parce que ton code n’a aucune dépendance sur la logique interne de l’objet Point. Ils peuvent introduire des systèmes de coordonnées différents, ils peuvent ajouter autant d’attributs qu’ils veulent sur les points. Ça ne changera rien à ton code. Ils peuvent même modifier le type de retour de la fonction distance, par exemple pour renvoyer un objet de type Distance qui combine une valeur et une unité, et mixer des points avec des distances en miles et d’autres avec des kilomètres, ça n’affectera toujours pas ton code (tant que sur leur type distance ils implémentent correctement l’opérateur < pour donner le bon résultat quelque soit l’unité).

Résultat, le code est :

  • plus lisible => code plus concis, plus de calculs d’index, moins de variables,
  • plus facile à tester => pour les mêmes raisons,
  • plus facile à maintenir => il n’y a que si on change la définition de ta fonction qu’elle doit être modifiée, tout autre changement de définition dans l’application n’affecte pas ta fonction,
  • plus facile à réutiliser => ta fonction n’étant pas dépendante de la définition du point, elle peut être réutilisée pour tout type d’objet ayant une fonction distance()

Et le corolaire de tout ça, c’est aussi que le code sera plus fiable. Car un code plus simple, plus facile à tester et à maintenir, c’est un code qui a moins de risque de contenir des bugs et d’en introduire de nouveaux lors des évolutions.

norwy à écrit : « Le code web étant hautement réutilisable, on peut s’attendre à voir beaucoup de « développeurs » Web disparaître rapidement. »

Vous n’êtes apparemment pas développeur et ne travaillez pas non plus avec eux pour sortir une tarte à la crème pareille. Au café du commerce ça peut faire illusion… mais c’est tout.

Allez voir comment travaillent les développeurs et les designers qui produisent des sites pour les stratups, les grands comptes et même les PME. C’est du travail de niveau ingénierie (souvent dans ces secteurs, même les ingénieurs sont moins payés que les dev et les DA). En lien avec tellement de paramètres que ça dépasse votre entendement pour le coup ultra binaire (c’est pas la première fois il me semble). Avez-vous idée des outils d’automatisation et de production que ces professionnels utilisent ? Vous pensez que c’est le cœur de ces métiers ? Vous avez tout faux. Le travail de conception, d’idéation, de mise en œuvre est complexe. Très difficile de trouver des pros et c’est de pire en pire chaque année.

ChatGPT ne va pas faire baisser le nombre de développeurs comme Midjourney ne vas pas influer sur le nombre de designers. En fait pour les pros, ces outils apportent plus de problèmes que de solutions. Sauf pour faire de la bricole et de l’ultra basique. En même temps que les outils évoluent, la demande se complexifie. Et le souci pour les années à venir est plutôt de trouver des développeurs et des designers compétents, dans un marché de plus en plus tendu.

@Kriz4liD a écrit : « le métier de développeur évolue beaucoup trop vite, et avec ce que va bientôt proposer adobe sur Photoshop , les graphistes vont aussi devoir évoluer et s adapter au marcher ! »

Voir ma réponse à norwy ci-dessus.

En fait, ce sont les gens qui ne sont ni développeur, ni designer, ni ingénieur, qui pensent connaître nos métiers mieux que nous. Ce genre de raisonnement peut faire illusion… sur Facebook et Twitter. Mais pas dans la vraie vie.
Avec de tels raisonnements, c’est comme écrire que la tondeuse électrique allait remplacer les coiffeurs. Peut-être se renseigner un peu avant…

Juste un exemple, Photoshop n’est qu’un outil qui est utilisé en moyenne 10% du temps par les designers. Il n’a cessé d’évoluer depuis le début. Les nouvelles fonctions IA qui impressionnent le péquin ne font qu’apporter des gains de production éventuels, au mieux. C’est pas ça le travail de designer. Juste de la bidouille Photoshop. Dans le métier, les opérateurs qui ne font que ça ne sont pas graphistes, et ça ne représente pas grand monde. Et même eux auront peu l’usage des dernières nouveautés qui ne s’intégreront pas forcément dans le process. Il y a longtemps que certaines tâches ont été optimisées, ça donne juste un peu de temps pour faire le reste. Parfois, ça induit même du travail en plus en complément. Un peu comme si on fournissait une tondeuse un peu plus perfectionnée à un coiffeur.

1 « J'aime »

@ABC et @norwy : Merci de vous calmer; Messages supprimés, n’apportant rien au débat.

Tout à fait d’accord. Merci d’avoir supprimé ces messages.:+1: