Marc Boyer écrivit :Le 16-06-2010, Antoine Leca a écrit :Marc Boyer écrivit :Je ne nie pas ce que tu dis, mais à mon sens, la difficulité du
code actuel n'est pas l'algorithmique (a part certains domaines métiers),
et les grands plantages informatiques ne sont pas liés à des
pb d'algorithmes.
À mon avis, ce n'est pas propre au génie logiciel, cela s'étend à
l'ensemble des « sciences de l'ingénieur » (génie sans qualificatif a un
autre sens !) : savoir, la plus grand part des problèmes ne sont pas
techniquement difficiles, unitairement ; par contre ils sont complexes.
Je ne suis pas sûr. L'écoulement des gaz dans un réacteurs, c'est
compliqué.
Pas d'accord. Cela s'appelle équation de Navier-Stokes, et ce n'est pas
sorcier à comprendre (mais ne me demande pas de te l'expliquer, cela
fait trop longtemps que j'ai séché le TD correspondant :^)).
Le seul souci en l'occurrence, c'est que l'on ne connait pas de manière
de résoudre directement le problème, donc on fait le tour. Et c'est là
que cela devient complexe, le « comment faire le tour ».
On a la même chose avec le problème des n corps, ou avec Schröedinger.
Et le logiciel a cela de particulier qu'il a tendance a être
très sensible aux petites erreurs.
Moi j'appelle cela être fragile, et c'est exactement la même chose avec
p.ex. les pièces en titane au milieu de ton réacteur : pour obtenir les
performances voulues, surtout sur les avions de compétition^W militaires
on utilise les limites des matériaux mis en œuvre, mais on est alors à
la merci du moindre problème, par exemple des oiseaux qui visitent.
Avec les programmes c'est pareil, *sauf* que apparemment on ne sait
faire *que* fragile, on ne sait pas construire solide.
ÀMHA cela viendra.
Mais il est vrai que pour le moment, il semble préférable de produire du
logiciel fragile, plutôt que du solide. Est-ce parce que c'est
économiquement rentable? ou parce que les programmeurs préfèrent cela
(syndrome NIH)? ou parce que le logiciel n'est pas financé correctement
du fait de la différence entre le modèle économique (réitératif) et le
modèle productif (par clonage à coût quasiment nul) ?
Marc Boyer écrivit :
Le 16-06-2010, Antoine Leca <root@localhost.invalid> a écrit :
Marc Boyer écrivit :
Je ne nie pas ce que tu dis, mais à mon sens, la difficulité du
code actuel n'est pas l'algorithmique (a part certains domaines métiers),
et les grands plantages informatiques ne sont pas liés à des
pb d'algorithmes.
À mon avis, ce n'est pas propre au génie logiciel, cela s'étend à
l'ensemble des « sciences de l'ingénieur » (génie sans qualificatif a un
autre sens !) : savoir, la plus grand part des problèmes ne sont pas
techniquement difficiles, unitairement ; par contre ils sont complexes.
Je ne suis pas sûr. L'écoulement des gaz dans un réacteurs, c'est
compliqué.
Pas d'accord. Cela s'appelle équation de Navier-Stokes, et ce n'est pas
sorcier à comprendre (mais ne me demande pas de te l'expliquer, cela
fait trop longtemps que j'ai séché le TD correspondant :^)).
Le seul souci en l'occurrence, c'est que l'on ne connait pas de manière
de résoudre directement le problème, donc on fait le tour. Et c'est là
que cela devient complexe, le « comment faire le tour ».
On a la même chose avec le problème des n corps, ou avec Schröedinger.
Et le logiciel a cela de particulier qu'il a tendance a être
très sensible aux petites erreurs.
Moi j'appelle cela être fragile, et c'est exactement la même chose avec
p.ex. les pièces en titane au milieu de ton réacteur : pour obtenir les
performances voulues, surtout sur les avions de compétition^W militaires
on utilise les limites des matériaux mis en œuvre, mais on est alors à
la merci du moindre problème, par exemple des oiseaux qui visitent.
Avec les programmes c'est pareil, *sauf* que apparemment on ne sait
faire *que* fragile, on ne sait pas construire solide.
ÀMHA cela viendra.
Mais il est vrai que pour le moment, il semble préférable de produire du
logiciel fragile, plutôt que du solide. Est-ce parce que c'est
économiquement rentable? ou parce que les programmeurs préfèrent cela
(syndrome NIH)? ou parce que le logiciel n'est pas financé correctement
du fait de la différence entre le modèle économique (réitératif) et le
modèle productif (par clonage à coût quasiment nul) ?
Marc Boyer écrivit :Le 16-06-2010, Antoine Leca a écrit :Marc Boyer écrivit :Je ne nie pas ce que tu dis, mais à mon sens, la difficulité du
code actuel n'est pas l'algorithmique (a part certains domaines métiers),
et les grands plantages informatiques ne sont pas liés à des
pb d'algorithmes.
À mon avis, ce n'est pas propre au génie logiciel, cela s'étend à
l'ensemble des « sciences de l'ingénieur » (génie sans qualificatif a un
autre sens !) : savoir, la plus grand part des problèmes ne sont pas
techniquement difficiles, unitairement ; par contre ils sont complexes.
Je ne suis pas sûr. L'écoulement des gaz dans un réacteurs, c'est
compliqué.
Pas d'accord. Cela s'appelle équation de Navier-Stokes, et ce n'est pas
sorcier à comprendre (mais ne me demande pas de te l'expliquer, cela
fait trop longtemps que j'ai séché le TD correspondant :^)).
Le seul souci en l'occurrence, c'est que l'on ne connait pas de manière
de résoudre directement le problème, donc on fait le tour. Et c'est là
que cela devient complexe, le « comment faire le tour ».
On a la même chose avec le problème des n corps, ou avec Schröedinger.
Et le logiciel a cela de particulier qu'il a tendance a être
très sensible aux petites erreurs.
Moi j'appelle cela être fragile, et c'est exactement la même chose avec
p.ex. les pièces en titane au milieu de ton réacteur : pour obtenir les
performances voulues, surtout sur les avions de compétition^W militaires
on utilise les limites des matériaux mis en œuvre, mais on est alors à
la merci du moindre problème, par exemple des oiseaux qui visitent.
Avec les programmes c'est pareil, *sauf* que apparemment on ne sait
faire *que* fragile, on ne sait pas construire solide.
ÀMHA cela viendra.
Mais il est vrai que pour le moment, il semble préférable de produire du
logiciel fragile, plutôt que du solide. Est-ce parce que c'est
économiquement rentable? ou parce que les programmeurs préfèrent cela
(syndrome NIH)? ou parce que le logiciel n'est pas financé correctement
du fait de la différence entre le modèle économique (réitératif) et le
modèle productif (par clonage à coût quasiment nul) ?
C'est justement une des grandes différences, à mon sens, entre les
math classiques et l'informatique. L'informatique manipule des
notions très simples (un processeur, c'est 4 opérations arithmétique, le
branchement conditionnel et lire/ecrire). Mais quand on s'intéresse
au comportement d'un processeur qui effectue 10^9 opérations par
seconde dans un code de 10^7 intructions, ca devient compliqué.
En math, l'objet lui même est complexe (même si on a des notations
simples pour le représenter).
C'est justement une des grandes différences, à mon sens, entre les
math classiques et l'informatique. L'informatique manipule des
notions très simples (un processeur, c'est 4 opérations arithmétique, le
branchement conditionnel et lire/ecrire). Mais quand on s'intéresse
au comportement d'un processeur qui effectue 10^9 opérations par
seconde dans un code de 10^7 intructions, ca devient compliqué.
En math, l'objet lui même est complexe (même si on a des notations
simples pour le représenter).
C'est justement une des grandes différences, à mon sens, entre les
math classiques et l'informatique. L'informatique manipule des
notions très simples (un processeur, c'est 4 opérations arithmétique, le
branchement conditionnel et lire/ecrire). Mais quand on s'intéresse
au comportement d'un processeur qui effectue 10^9 opérations par
seconde dans un code de 10^7 intructions, ca devient compliqué.
En math, l'objet lui même est complexe (même si on a des notations
simples pour le représenter).
In article <hvfonv$odv$,
Marc Boyer wrote:C'est justement une des grandes différences, à mon sens, entre les
math classiques et l'informatique. L'informatique manipule des
notions très simples (un processeur, c'est 4 opérations arithmétique, le
branchement conditionnel et lire/ecrire). Mais quand on s'intéresse
au comportement d'un processeur qui effectue 10^9 opérations par
seconde dans un code de 10^7 intructions, ca devient compliqué.
En math, l'objet lui même est complexe (même si on a des notations
simples pour le représenter).
je ne suis pas du tout d'accord avec ton point de vue.
L'arithmetique informatique n'a rien d'evident, entre les problemes de
debordement de capacite, l'utilisation de l'arithmetique modulaire pour
les valeurs non signees, ou les problemes tres epineux de precision en
mode flottant.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Pour ma pomme, je ne fais pas de reelle distinction entre "mathematiques" et
"informatique": memes concepts, memes problemes, meme combat.
In article <hvfonv$odv$1@news.cict.fr>,
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> wrote:
C'est justement une des grandes différences, à mon sens, entre les
math classiques et l'informatique. L'informatique manipule des
notions très simples (un processeur, c'est 4 opérations arithmétique, le
branchement conditionnel et lire/ecrire). Mais quand on s'intéresse
au comportement d'un processeur qui effectue 10^9 opérations par
seconde dans un code de 10^7 intructions, ca devient compliqué.
En math, l'objet lui même est complexe (même si on a des notations
simples pour le représenter).
je ne suis pas du tout d'accord avec ton point de vue.
L'arithmetique informatique n'a rien d'evident, entre les problemes de
debordement de capacite, l'utilisation de l'arithmetique modulaire pour
les valeurs non signees, ou les problemes tres epineux de precision en
mode flottant.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Pour ma pomme, je ne fais pas de reelle distinction entre "mathematiques" et
"informatique": memes concepts, memes problemes, meme combat.
In article <hvfonv$odv$,
Marc Boyer wrote:C'est justement une des grandes différences, à mon sens, entre les
math classiques et l'informatique. L'informatique manipule des
notions très simples (un processeur, c'est 4 opérations arithmétique, le
branchement conditionnel et lire/ecrire). Mais quand on s'intéresse
au comportement d'un processeur qui effectue 10^9 opérations par
seconde dans un code de 10^7 intructions, ca devient compliqué.
En math, l'objet lui même est complexe (même si on a des notations
simples pour le représenter).
je ne suis pas du tout d'accord avec ton point de vue.
L'arithmetique informatique n'a rien d'evident, entre les problemes de
debordement de capacite, l'utilisation de l'arithmetique modulaire pour
les valeurs non signees, ou les problemes tres epineux de precision en
mode flottant.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Pour ma pomme, je ne fais pas de reelle distinction entre "mathematiques" et
"informatique": memes concepts, memes problemes, meme combat.
Le 18-06-2010, Marc Espie a écrit :Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
C'est un problème dans le sens où cela exclue toute vérification
automatique générale.
Mais cela n'est pas la cause des "bugs" (hormis la question de la
vérif). Les codes ne plantent pas parce qu'un programmeur a mal
évalué la classe de complexité de son problème. Les codes plantent
parce qu'on a oublié de vérifier qu'il y avait de la place dans
les buffers (http://www.sans.org/top25-programming-errors/).
Le 18-06-2010, Marc Espie <espie@lain.home> a écrit :
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
C'est un problème dans le sens où cela exclue toute vérification
automatique générale.
Mais cela n'est pas la cause des "bugs" (hormis la question de la
vérif). Les codes ne plantent pas parce qu'un programmeur a mal
évalué la classe de complexité de son problème. Les codes plantent
parce qu'on a oublié de vérifier qu'il y avait de la place dans
les buffers (http://www.sans.org/top25-programming-errors/).
Le 18-06-2010, Marc Espie a écrit :Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
C'est un problème dans le sens où cela exclue toute vérification
automatique générale.
Mais cela n'est pas la cause des "bugs" (hormis la question de la
vérif). Les codes ne plantent pas parce qu'un programmeur a mal
évalué la classe de complexité de son problème. Les codes plantent
parce qu'on a oublié de vérifier qu'il y avait de la place dans
les buffers (http://www.sans.org/top25-programming-errors/).
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Et la physique est continue à son échelle humaine industrielle.
Elle permet donc des approximations, des marges de tolérance.
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Et la physique est continue à son échelle humaine industrielle.
Elle permet donc des approximations, des marges de tolérance.
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Et la physique est continue à son échelle humaine industrielle.
Elle permet donc des approximations, des marges de tolérance.
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
C'est un problème dans le sens où cela exclue toute vérification
automatique générale.
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Et la physique est continue à son échelle humaine industrielle. Elle
permet donc des approximations, des marges de tolérance. Pas l'informatique.
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
C'est un problème dans le sens où cela exclue toute vérification
automatique générale.
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Et la physique est continue à son échelle humaine industrielle. Elle
permet donc des approximations, des marges de tolérance. Pas l'informatique.
Mais je ne connais pas de problème industriel grave qui soit lié à
un problème de virgule flottante.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
C'est un problème dans le sens où cela exclue toute vérification
automatique générale.
Mais pour en revenir au sujet, qui est de se demander si la fragilité
des codes vient de la nature de l'informatique où juste des méthodes
industrielles, c'est plus à la physique qu'aux maths qu'il faut opposer
l'informatique.
Et la physique est continue à son échelle humaine industrielle. Elle
permet donc des approximations, des marges de tolérance. Pas l'informatique.
C'est assez rigolo. Il y a un domaine que je connais bien où la théorie
(mathématique) et la pratique (industrielle) ne sont pas non plus en
accord.
Je me dis que qu'une différence entre la théorie et la pratique c'est
qu'en théorie on travaille sur toutes les matrices "A" dans Ax=B en
supposant telle ou telle répartition des coefficients, des valeurs
propres, que sais-je, mais qu'en pratique, les matrices "A" ne sont pas
des nombres aléatoires, mais des nombres codant des trucs
"faisant/codant quelque chose".
Les propriétés algorithmiques d'un même algo peuvent être assez
différente entre les deux ensembles.
C'est assez rigolo. Il y a un domaine que je connais bien où la théorie
(mathématique) et la pratique (industrielle) ne sont pas non plus en
accord.
Je me dis que qu'une différence entre la théorie et la pratique c'est
qu'en théorie on travaille sur toutes les matrices "A" dans Ax=B en
supposant telle ou telle répartition des coefficients, des valeurs
propres, que sais-je, mais qu'en pratique, les matrices "A" ne sont pas
des nombres aléatoires, mais des nombres codant des trucs
"faisant/codant quelque chose".
Les propriétés algorithmiques d'un même algo peuvent être assez
différente entre les deux ensembles.
C'est assez rigolo. Il y a un domaine que je connais bien où la théorie
(mathématique) et la pratique (industrielle) ne sont pas non plus en
accord.
Je me dis que qu'une différence entre la théorie et la pratique c'est
qu'en théorie on travaille sur toutes les matrices "A" dans Ax=B en
supposant telle ou telle répartition des coefficients, des valeurs
propres, que sais-je, mais qu'en pratique, les matrices "A" ne sont pas
des nombres aléatoires, mais des nombres codant des trucs
"faisant/codant quelque chose".
Les propriétés algorithmiques d'un même algo peuvent être assez
différente entre les deux ensembles.
Marc Boyer a écrit :Mais je ne connais pas de problème industriel grave qui soit lié Ã
un problème de virgule flottante.
Oui ou des problèmes d'arrêts de machine de Turing. Les trucs
industriels sont bien plus bateaux et moins théoriques que cela dans
leur immense majorité.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
Tout a fait car contrairement à l'algorithmique théorique qui traite de
tout ce qui est exécutable par tel ou tel modèle de calcul, en pratique
on utilise qu'une sous partie de cet ensemble. Les problèmes pratique
viennent plus souvent de specs imprécises que de problèmes de fonds
algorithmique. On oublie assez vite la combinatoire énorme que fait
Marc Boyer a écrit :
Mais je ne connais pas de problème industriel grave qui soit lié Ã
un problème de virgule flottante.
Oui ou des problèmes d'arrêts de machine de Turing. Les trucs
industriels sont bien plus bateaux et moins théoriques que cela dans
leur immense majorité.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
Tout a fait car contrairement à l'algorithmique théorique qui traite de
tout ce qui est exécutable par tel ou tel modèle de calcul, en pratique
on utilise qu'une sous partie de cet ensemble. Les problèmes pratique
viennent plus souvent de specs imprécises que de problèmes de fonds
algorithmique. On oublie assez vite la combinatoire énorme que fait
Marc Boyer a écrit :Mais je ne connais pas de problème industriel grave qui soit lié Ã
un problème de virgule flottante.
Oui ou des problèmes d'arrêts de machine de Turing. Les trucs
industriels sont bien plus bateaux et moins théoriques que cela dans
leur immense majorité.
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
Tout a fait car contrairement à l'algorithmique théorique qui traite de
tout ce qui est exécutable par tel ou tel modèle de calcul, en pratique
on utilise qu'une sous partie de cet ensemble. Les problèmes pratique
viennent plus souvent de specs imprécises que de problèmes de fonds
algorithmique. On oublie assez vite la combinatoire énorme que fait
Samuel DEVULDER écrivit :C'est assez rigolo. Il y a un domaine que je connais bien où la théorie
(mathématique) et la pratique (industrielle) ne sont pas non plus en
accord.
Pourquoi dis-tu « pas en accord » ?
À te lire, on a l'impression que tu dérives du résultat mathématique (A
est polynomial et B est exponentiel) un autre résultat (A est meilleur
que B), qui correspond peut-être à la situation à l'infini mais qui,
comme tu l'expliques par ailleurs, n'est pas forcément valable en tous
points.
Je me dis que qu'une différence entre la théorie et la pratique c'est
qu'en théorie on travaille sur toutes les matrices "A" dans Ax=B en
supposant telle ou telle répartition des coefficients, des valeurs
propres, que sais-je, mais qu'en pratique, les matrices "A" ne sont pas
des nombres aléatoires, mais des nombres codant des trucs
"faisant/codant quelque chose".
Ce n'est pas une différence entre théorie et pratique, c'est une
différence entre « théorie sans contrainte » et « théorie avec
/contrainte/ complémentaire ».
De la seconde, tu déduis comme résultat les valeurs des coefficients
avec les deux algorithmes, ce qui explique les données expérimentales
issues de la pratique (à savoir, le simplexe c'est mieux).
Par ailleurs, le problème « avec des nombres aléatoires » est un autre
problème, avec une autre réponse théorique et d'autres applications
pratiques. Par exemple, un des inconvénients du tri quick-sort, c'est
qu'il y a « un très mauvais cas ». Dans la pratique on néglige,
Les propriétés algorithmiques d'un même algo peuvent être assez
différente entre les deux ensembles.
Oui, c'est exactement cela. Et si tu peux caractériser chacun des deux
ensembles, tu peux mieux appliquer la théorie, dans chaque cas.
Meilleure connaissance des données (de l'environnement) => meilleur
produit, une règle de base des sciences de l'ingénieur.
Samuel DEVULDER écrivit :
C'est assez rigolo. Il y a un domaine que je connais bien où la théorie
(mathématique) et la pratique (industrielle) ne sont pas non plus en
accord.
Pourquoi dis-tu « pas en accord » ?
À te lire, on a l'impression que tu dérives du résultat mathématique (A
est polynomial et B est exponentiel) un autre résultat (A est meilleur
que B), qui correspond peut-être à la situation à l'infini mais qui,
comme tu l'expliques par ailleurs, n'est pas forcément valable en tous
points.
Je me dis que qu'une différence entre la théorie et la pratique c'est
qu'en théorie on travaille sur toutes les matrices "A" dans Ax=B en
supposant telle ou telle répartition des coefficients, des valeurs
propres, que sais-je, mais qu'en pratique, les matrices "A" ne sont pas
des nombres aléatoires, mais des nombres codant des trucs
"faisant/codant quelque chose".
Ce n'est pas une différence entre théorie et pratique, c'est une
différence entre « théorie sans contrainte » et « théorie avec
/contrainte/ complémentaire ».
De la seconde, tu déduis comme résultat les valeurs des coefficients
avec les deux algorithmes, ce qui explique les données expérimentales
issues de la pratique (à savoir, le simplexe c'est mieux).
Par ailleurs, le problème « avec des nombres aléatoires » est un autre
problème, avec une autre réponse théorique et d'autres applications
pratiques. Par exemple, un des inconvénients du tri quick-sort, c'est
qu'il y a « un très mauvais cas ». Dans la pratique on néglige,
Les propriétés algorithmiques d'un même algo peuvent être assez
différente entre les deux ensembles.
Oui, c'est exactement cela. Et si tu peux caractériser chacun des deux
ensembles, tu peux mieux appliquer la théorie, dans chaque cas.
Meilleure connaissance des données (de l'environnement) => meilleur
produit, une règle de base des sciences de l'ingénieur.
Samuel DEVULDER écrivit :C'est assez rigolo. Il y a un domaine que je connais bien où la théorie
(mathématique) et la pratique (industrielle) ne sont pas non plus en
accord.
Pourquoi dis-tu « pas en accord » ?
À te lire, on a l'impression que tu dérives du résultat mathématique (A
est polynomial et B est exponentiel) un autre résultat (A est meilleur
que B), qui correspond peut-être à la situation à l'infini mais qui,
comme tu l'expliques par ailleurs, n'est pas forcément valable en tous
points.
Je me dis que qu'une différence entre la théorie et la pratique c'est
qu'en théorie on travaille sur toutes les matrices "A" dans Ax=B en
supposant telle ou telle répartition des coefficients, des valeurs
propres, que sais-je, mais qu'en pratique, les matrices "A" ne sont pas
des nombres aléatoires, mais des nombres codant des trucs
"faisant/codant quelque chose".
Ce n'est pas une différence entre théorie et pratique, c'est une
différence entre « théorie sans contrainte » et « théorie avec
/contrainte/ complémentaire ».
De la seconde, tu déduis comme résultat les valeurs des coefficients
avec les deux algorithmes, ce qui explique les données expérimentales
issues de la pratique (à savoir, le simplexe c'est mieux).
Par ailleurs, le problème « avec des nombres aléatoires » est un autre
problème, avec une autre réponse théorique et d'autres applications
pratiques. Par exemple, un des inconvénients du tri quick-sort, c'est
qu'il y a « un très mauvais cas ». Dans la pratique on néglige,
Les propriétés algorithmiques d'un même algo peuvent être assez
différente entre les deux ensembles.
Oui, c'est exactement cela. Et si tu peux caractériser chacun des deux
ensembles, tu peux mieux appliquer la théorie, dans chaque cas.
Meilleure connaissance des données (de l'environnement) => meilleur
produit, une règle de base des sciences de l'ingénieur.
In article <4c1b98d8$0$8105$,
Samuel DEVULDER wrote:Marc Boyer a écrit :Mais je ne connais pas de problème industriel grave qui soit lié Ã
un problème de virgule flottante.
Oui ou des problèmes d'arrêts de machine de Turing. Les trucs
industriels sont bien plus bateaux et moins théoriques que cela dans
leur immense majorité
Mais c'est du grand n'importe quoi, ce que tu affirmes !
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.Tout a fait car contrairement à l'algorithmique théorique qui traite de
tout ce qui est exécutable par tel ou tel modèle de calcul, en pratique
on utilise qu'une sous partie de cet ensemble. Les problèmes pratique
viennent plus souvent de specs imprécises que de problèmes de fonds
algorithmique. On oublie assez vite la combinatoire énorme que fait
Pareil, la-aussi.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
va pas planter pour cause de division par zero -> indecidable.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
En particulier, tu n'as pas de facon de dire *OKAY, LA J'AI UN ALGO ELEMENTAIRE,
J'AIMERAIS BIEN RESTER DE FACON CERTAINE DANS LA PARTIE DE L'INFORMATIQUE
SUR LAQUELLE ON SAIT RAISONNER*.
Nan, tu as toujours tout, tout le temps. Du coup, on ne peut pas prouver que
les choses marchent, et du coup, on a des bugs.
Dans les experiences rigolotes, je ne sais pas si tu as deja passe du temps
avec des outils de verification de code ? Ca peut meme etre *aussi con*
qu'une nouvelle version de gcc, avec "un peu plus" d'analyse de code, et un
peu plus de warnings pour variables potentiellement initialisees.
Dans mon experience, meme sur du code *a priori* completement debile, on y
voit des choses interessantes:
- soit le compilo qui d'un coup voit des variables *reelleement* non
initialisees dans certaines branches, alors qu'on a relu le code 25 fois
et qu'on s'en sert depuis dix ans (ben oui, si c'est une branche de gestion
d'erreur, peut-etre qu'on ne l'a jamais vraiment testee).
- soit le compilo qui n'arrive pas a conclure, tout betement parce que
l'explosion combinatoire necessaire pour l'analyse du code est trop
importante (voire impossible).
Et partant de la, on modifie, et on simplifie, pour que des choses *triviales*
soient effectivement triviales et que le compilateur y retrouve ses petits.
Tout ca, c'est des choses que je vois tous les jours, sur du code ecrit
par des informaticiens pas trop mauvais, mais qui arrivent, de temps en
temps, sur des centaines de ligne de code, a se planter/mettre en echec
les systemes de verification...
Toujours dans mon experience, si on passe du C a un autre langage, tout
ce qu'on fait c'est changer le domaine ou les problemes vont apparaitre.
Aucun langage "industriel" n'est reellement meilleur de ce point de vue.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
In article <4c1b98d8$0$8105$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> wrote:
Marc Boyer a écrit :
Mais je ne connais pas de problème industriel grave qui soit lié Ã
un problème de virgule flottante.
Oui ou des problèmes d'arrêts de machine de Turing. Les trucs
industriels sont bien plus bateaux et moins théoriques que cela dans
leur immense majorité
Mais c'est du grand n'importe quoi, ce que tu affirmes !
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.
Tout a fait car contrairement à l'algorithmique théorique qui traite de
tout ce qui est exécutable par tel ou tel modèle de calcul, en pratique
on utilise qu'une sous partie de cet ensemble. Les problèmes pratique
viennent plus souvent de specs imprécises que de problèmes de fonds
algorithmique. On oublie assez vite la combinatoire énorme que fait
Pareil, la-aussi.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
va pas planter pour cause de division par zero -> indecidable.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
En particulier, tu n'as pas de facon de dire *OKAY, LA J'AI UN ALGO ELEMENTAIRE,
J'AIMERAIS BIEN RESTER DE FACON CERTAINE DANS LA PARTIE DE L'INFORMATIQUE
SUR LAQUELLE ON SAIT RAISONNER*.
Nan, tu as toujours tout, tout le temps. Du coup, on ne peut pas prouver que
les choses marchent, et du coup, on a des bugs.
Dans les experiences rigolotes, je ne sais pas si tu as deja passe du temps
avec des outils de verification de code ? Ca peut meme etre *aussi con*
qu'une nouvelle version de gcc, avec "un peu plus" d'analyse de code, et un
peu plus de warnings pour variables potentiellement initialisees.
Dans mon experience, meme sur du code *a priori* completement debile, on y
voit des choses interessantes:
- soit le compilo qui d'un coup voit des variables *reelleement* non
initialisees dans certaines branches, alors qu'on a relu le code 25 fois
et qu'on s'en sert depuis dix ans (ben oui, si c'est une branche de gestion
d'erreur, peut-etre qu'on ne l'a jamais vraiment testee).
- soit le compilo qui n'arrive pas a conclure, tout betement parce que
l'explosion combinatoire necessaire pour l'analyse du code est trop
importante (voire impossible).
Et partant de la, on modifie, et on simplifie, pour que des choses *triviales*
soient effectivement triviales et que le compilateur y retrouve ses petits.
Tout ca, c'est des choses que je vois tous les jours, sur du code ecrit
par des informaticiens pas trop mauvais, mais qui arrivent, de temps en
temps, sur des centaines de ligne de code, a se planter/mettre en echec
les systemes de verification...
Toujours dans mon experience, si on passe du C a un autre langage, tout
ce qu'on fait c'est changer le domaine ou les problemes vont apparaitre.
Aucun langage "industriel" n'est reellement meilleur de ce point de vue.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.
In article <4c1b98d8$0$8105$,
Samuel DEVULDER wrote:Marc Boyer a écrit :Mais je ne connais pas de problème industriel grave qui soit lié Ã
un problème de virgule flottante.
Oui ou des problèmes d'arrêts de machine de Turing. Les trucs
industriels sont bien plus bateaux et moins théoriques que cela dans
leur immense majorité
Mais c'est du grand n'importe quoi, ce que tu affirmes !
Sans parler du probleme de l'arret, des problemes NP-complets, et de toutes
ses petites choses plus ou moins decidables qui rendent les choses
"interessantes".
Sauf qu'en pratique, ce n'est pas un problème.Tout a fait car contrairement à l'algorithmique théorique qui traite de
tout ce qui est exécutable par tel ou tel modèle de calcul, en pratique
on utilise qu'une sous partie de cet ensemble. Les problèmes pratique
viennent plus souvent de specs imprécises que de problèmes de fonds
algorithmique. On oublie assez vite la combinatoire énorme que fait
Pareil, la-aussi.
Le probleme de l'arret, c'est l'exemple simple qu'on donne aux gens.
Le theoreme suivant dit en gros que les problemes informatiques se separent
en deux categories, les problemes triviaux, et les problemes indecidables
(en nuancant un peu, tu as les problemes triviaux, les NP-complets, et
les indecidables). Une des particularites, c'est que quasiment tout ce qui
est "meta" est indecidable. Dire si un programme s'arrete -> indecidable,
*DIRE SI UN PROGRAMME EST SANS BUG* -> indecidable. Dire si un programme ne
va pas planter pour cause de division par zero -> indecidable.
Le rapport avec la programmation reelle ? Il n'y a pratiquement *aucun*
langage industriel qui se preoccupe de ses meta-considerations. Typiquement,
ils sont tous Turing-complets, tout le temps, que tu sois en train de
resoudre des problemes triviaux, ou des problemes impossibles.
En particulier, tu n'as pas de facon de dire *OKAY, LA J'AI UN ALGO ELEMENTAIRE,
J'AIMERAIS BIEN RESTER DE FACON CERTAINE DANS LA PARTIE DE L'INFORMATIQUE
SUR LAQUELLE ON SAIT RAISONNER*.
Nan, tu as toujours tout, tout le temps. Du coup, on ne peut pas prouver que
les choses marchent, et du coup, on a des bugs.
Dans les experiences rigolotes, je ne sais pas si tu as deja passe du temps
avec des outils de verification de code ? Ca peut meme etre *aussi con*
qu'une nouvelle version de gcc, avec "un peu plus" d'analyse de code, et un
peu plus de warnings pour variables potentiellement initialisees.
Dans mon experience, meme sur du code *a priori* completement debile, on y
voit des choses interessantes:
- soit le compilo qui d'un coup voit des variables *reelleement* non
initialisees dans certaines branches, alors qu'on a relu le code 25 fois
et qu'on s'en sert depuis dix ans (ben oui, si c'est une branche de gestion
d'erreur, peut-etre qu'on ne l'a jamais vraiment testee).
- soit le compilo qui n'arrive pas a conclure, tout betement parce que
l'explosion combinatoire necessaire pour l'analyse du code est trop
importante (voire impossible).
Et partant de la, on modifie, et on simplifie, pour que des choses *triviales*
soient effectivement triviales et que le compilateur y retrouve ses petits.
Tout ca, c'est des choses que je vois tous les jours, sur du code ecrit
par des informaticiens pas trop mauvais, mais qui arrivent, de temps en
temps, sur des centaines de ligne de code, a se planter/mettre en echec
les systemes de verification...
Toujours dans mon experience, si on passe du C a un autre langage, tout
ce qu'on fait c'est changer le domaine ou les problemes vont apparaitre.
Aucun langage "industriel" n'est reellement meilleur de ce point de vue.
Evidemment, je suis biaise: je passe beaucoup plus de temps a lire,
a auditer et a corriger du code qu'a en ecrire. Mais pour moi, l'idee
de pouvoir raisonner sur un programme, voire de pouvoir PROUVER des choses
sur celui-ci, c'est quelque chose qui a des TONNES d'applications tres
pratiques et immediates.