[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] Recherche Développeur pour interview



	Salut à tous !

Le 22/02/2021 à 16:51, Gaëtan PERRIER a écrit :
> Il y a aussi des cas où le compilo ne fait pas une optim qui vu d'un humain est
> pourtant évidente ... Mais ok c'est assez rare.

	Oui, de plus en plus rare. Tellement rare que de toute façon un
compilateur bien utilisé produit désormais de toute façon un code bien
plus efficace qu’un code réalisé immédiatement en assembleur.

> Le déroulement d'une boucle n'est pas toujours opportun. L'architecture
> hardware derrière compte énormément pour savoir si il y aura gain.

	Oui, c’est ce que je disais : ça dépend totalement du contexte. Je n’ai
donné que quelques exemples pour lesquels je n’ai pas donné de détail,
mais il y en a plein d’autres. À chaque fois, alors, oui, ça dépend du
contexte, du matériel, de ci, de ça. C’est exactement ce que je dis : à
chaque fois, il n’y a rien de systématique, ça s’approche stochastiquement.

	Donc, c’est bien ce que je dis : les optimisations, ce ne sont que des
cas particuliers, dans tous les sens. Tellement que, sur un projet
complexe, les optimisations à la main sont vouées à l’échec.

	Donc, nous sommes bien d’accord : ça dépend complètement du contexte.

> Mais maintenant de plus en plus de compilo savent dérouler une boucle par eux
> même quand tu demandes une optim en vitesse. Ça évite de faire un code qui
> deviendra non portable si tu fais le déroulement dans le code lui-même.

	Oui, c’est très exactement ce que je disais…

> Non pas obligatoirement. Tu as des choses que tu peux faire par "calcul" plutôt
> que par du if ... then ... comme ça tu n'as de vidange du pipeline dans un des
> 2 cas. Etc.

	Oui, c’est ce que je dis : ça dépend du contexte, ça n’est jamais
systématique.

> Mais pour ça faut avoir un minimum conscience de comment fonctionne ce qui est
> en dessous ...

	Dans la plupart des cas, savoir intimement comment fonctionne un
processeur n’apporte aucune information pour savoir comment améliorer
son code. Par exemple, ça ne sert à rien dans un système à réseau de
neurones, dans des codes de simulations numériques, dans la gestion de
base de données, etc. Comme dit, comme tu l’as confirmé, dans ces cas-là
l’optimisation machine n’est pas accessible à un être humain.

	Dans la majorité des cas, ce qu’il faut, c’est bien réfléchir à ses
algorithmes et à ses structures de données, réaliser un code propre,
lisible et documenté, par ailleurs ne surtout pas faire d’optimisation à
la main. Déjà, parce que dans ce cas, le compilateur ne pourra plus
appliquer ses algorithmes d’optimisations, alors que le compilateur est
bien plus efficace qu’un être humain à cette tâche. Ensuite, parce que
ces optimisations augmentent statistiquement le nombre de bogues. Enfin,
parce qu’un code a une durée de vie très supérieure à la durée des
machines qui les exécutent et les optimisations ne seront plus les mêmes
et l’équipe qui maintiendra le code ne sera plus la même que celle qui a
initié le projet.

	En revanche, il faut apprendre à utiliser son compilateur, l’architecte
du programme doit prendre le temps de bien le configurer. Ce qui n’est
pas une question d’électronicien.

	Donc, dans la majorité des cas, il est faux de dire que pour réaliser
un bon code il faut savoir comment fonctionne le processeur. Au
contraire, à vouloir trop coller à un processeur particulier, on se
lance dans des optimisations vaines et qui vont dégrader le code.

	Bien entendu, ça ne veut pas dire qu’il ne faut pas connaître le
fonctionnement d’un ordinateur dans les grandes lignes, simplement que
la connaissance intime n’est en rien un plus dans ces applications.

	En revanche, il est vrai qu’il y a des domaines bien déterminés où il
faut connaître intimement l’architecture, par exemple : la programmation
système, la réalisation de compilateurs, l’embarqué. En revanche, dans
ces cas-là, la connaissance de l’algorithmique est essentielle également.

	Maintenant, le point de départ était le programme d’enseignement de la
programmation au lycée. Clairement, à ce niveau, la question est de les
préparer à aborder le plus large panel de situations qui peuvent se
présenter en informatique. Du coup, clairement, le plus important est
que les élèves aient une première approche de l’algorithmique. Dans ce
cadre, l’assembleur, qui oblige de se concentrer sur le matériel et avec
lequel il est beaucoup plus difficile de mettre en évidence les
algorithmes, est contre-productif, en plus de rebuter la majorité des
élèves. Python, au contraire, qui permet une première approche de
l’algorithmique et justement oblige à réaliser un code indenté donc mis
en forme, remplit vraiment très bien cet objectif.

	À bientôt.

-- 
Yoann LE BARS
https://le-bars.net/yoann/
Diaspora* : ylebars@framasphere.org


Reply to: