Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

informatique/autodidacte-apprendre la manipulation de bits

66 réponses
Avatar
bpascal123
Bonjour,

Est-ce qu'on peut envisager d'apprendre le langage C sans conna=EEtre la
manipulation de bits et faire quelque chose avec ? Ou alors il faut
n=E9cessairement apprendre d'autres langages (apprendre la POO me semble
indispensable pour une approche g=E9n=E9rale...).

bpascal/heron maladroit

10 réponses

Avatar
Marc Boyer
Le 14-06-2010, a écrit :
Le principal souci comme beaucoup, c'est le temps. Je dois pouvoir
consacrer 4-6 heures de programmation effective par semaine et une
bonne dose de lecture de code chaque jour. Je pense consacrer 2 ou 3
années... Ca devrait correspondre à 20-25h par mois et
approximativement 500hr par an ou 250hr par semestre. Je crois c'est
le volume horaire d'une matière dans l'enseignement supérieur (travail
personnel compris).



As-tu pensé à une formation par un organisme ? Le CNAM par exemple.
Des quelques mails que tu postes sur ce forum, j'ai l'impression
que tu perds beaucoup de temps sur des points qu'un enseignant
saurait te débloquer bien plus viter.

Mais une formation offre d'autres matières qui
forment un tout ou un cycle.



Oui, pour programmer correctement, il faudrait aussi quelques
bases d'architecture des ordinateurs, et sur les systèmes
d'exploitation.
Les ouvrages d'Andrew Tanenbaum ont bonne réputation.

En tant que comptable, je dispose de connaissances qui devraient me
mener à la gestion de base de données. Je ne sais pas si certains
parmi vous connaissent le monde de la finance mais je crois savoir que
maintenant les ordres d'achats et de ventes (spéculation ou autre)
sont passés automatiquement par des ordinateurs voir l'article du
Canard du enchainé du 12 mai 2010 sur le High Frequency Trading, il y
a un côté hallucinant mais qui ne m'attire pas et je n'ai pas un
niveau en maths qui me permettrait de comprendre les modèles et lois
mathématiques appliqués de la finance, et puis jusqu'au lyçée, plus
les maths étaient abstrait, moins j'étais intéressé...il doit me
manquer quelques bases mais ça ne m'a pas empêché de me rattraper par
la suite quand c'est devenu plus concret avec des problèmes de la vie
de tout les jours qu'on peut avoir en statistiques avec la lois
binomiale, de poisson, normale, le calcul matriciel...



Si tu envisageais d'aller bosser dans les activités boursières
automatiques, je t'arrête tout de suite: c'est d'un niveau mathématique
extrèmement fort (des très bons BAC+5). Les lois binomiales, poisson,
matrices, c'est BAC+1/BAC+2...
Et vu les sommes en jeu, je pense que les informaticiens qui font
tourner l'ensemble sont d'assez bon niveau aussi.

Je me dis que si je suis comptable, ça serait logique de rester dans
un domaine voisin (je crois qu'un langage comme Windev permet des
manipulations avec les bases de données, tout comme Php...).



Tous les langages connus permettent de travailler avec des bases de donnée.
Mais il faut une formation en base de donnée. Chaque langage aura
une interface et/ou syntaxe plus ou moins adaptée, mais le coeur
du travail, c'est sur la base de donnée.

J'utilise aussi Linux et je suis un peu "frustré" de ne pas pouvoir
accéder au code et programmer des périphériques... Je dois essayer de
rester cohérent surtout si je choisis un chemin plus court et que si
l'autre chemin est plus long, il sera moins probable que je trouverais
quelque chose...mais je suis très intéressé et prêt à passer plusieurs
mois à pour par exemple comprendre le fonctionnement d'un port série.



Si tu t'intéresses au matériel, tu peux commencer par les
deux bouquins de Tanenbaum sur les archis des ordis et les
systèmes d'exploitation, puis sur un bouquin sur le noyau
Linux.

Mais il me semble que maitriser les pointeurs en C est un pré-requis.
Savoir coder une liste chaînée par exemple.

Pour revenir à ton projet professionel, tu pourrais aussi passer
une journée dans un salon professionel destiné aux étudiants. Tu pourras
rencontrer des employeurs. Ils ne viennent pas pour ton profil,
mais certains prendront surement le temps de te donner leur avis,
et tu auras une idée du marché surement plus claire.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Antoine Leca
écrivit :
En tant que comptable, je dispose de connaissances qui devraient me
mener à la gestion de base de données.



Pourquoi ?
Même en se restreignant aux bases dont les données sont des données
comptables ou similaires, il s'agit quand même de deux métiers
différents, et surtout avec des objectifs différents :
- le comptable cherche à avoir la meilleure représentation financière
possible de l'activité d'une entité ;
- le gestionnaire de bases de données cherche à proposer la meilleure
disponibilité possible des données qu'/on/ y a rangées.

Même si les deux « meilleurs » ci-dessus restent à définir, on voit bien
que les objectifs ne sont ni identiques ni contradictoires, mais plutôt
indépendants.

Si un comptable (ou un responsable marketing, ou un trésorier) vient
gérer une base de données, il va forcément y imposer sa patte, et
probablement aller dans un sens qui facilite les tâches qui
appartiennent à son expérience : ce peut être la précision, la facilité
de saisie de données, l'exhaustivité, la facilité d'extraction, ou
d'agglomération, ou de redéfinition du modèle de données, la rapidité,
ou la réactivité ; évidemment, certains de ces objectifs sont
contradictoires. De son côté, quelqu'un qui a une pure formation
d'informaticien va privilégier d'autres objectifs, comme la résilience
ou la disponibilité. Chacun amène donc une partie de l'expérience. Mais
aucun emploi n'a de raisons d'être privilégié : au contraire, ce devrait
être le fait de la définition d'objectifs clairs à la tâche de gestion,
*de la part des responsables et non des opérationnels*.

Après, un système informatique (qui est un sur-ensemble d'un SGBD) est
fait d'abord et surtout pour ses utilisateurs ; en ce sens, l'apport en
matière d'ergonomie que peuvent avoir les non-informaticiens est
certainement très bénéfique : mais ÀMHA cela s'applique surtout sur les
aspects d'interface du système, et beaucoup moins sur la gestion de la
base de données proprement dite.

Je ne sais pas si certains
parmi vous connaissent le monde de la finance mais je crois savoir que
maintenant les ordres d'achats et de ventes (spéculation ou autre)
sont passés automatiquement par des ordinateurs



« Maintenant » ? C'était déjà le cas en 1986-87 (au moment de la
dérégulation du secteur) ; et même si le krach d'octobre 1987 a refroidi
pas mal de monde à ce sujet, je ne vois pas de raison pour que cela ait
changé. Essaye par exemple d'obtenir tes actions sur papier, comme
c'était le cas avec les agents de change...
Par contre effectivement, en 1988 on a eu du boulot pour apprendre aux
ordinateurs à ne pas se planter tout seuls ; vu ce qui s'est semble-t-il
passé le mois dernier sur le Nasdaq, je pense que d'autres
informaticiens vont avoir du boulot garanti cet automne !

Canard du enchainé du 12 mai 2010 sur le High Frequency Trading,



Peut-être pas la meilleure référence scientifique sur le sujet...


plus les maths étaient abstrait, moins j'étais intéressé...



Problème, les ordinateurs c'est très logique mais faciles à multiplier
comme des petits pains, donc la seule manière raisonnable de pouvoir
contrôler un système c'est d'appliquer de plus en plus d'abstraction !


Je me dis que si je suis comptable, ça serait logique de rester dans
un domaine voisin



Finances ?

(je crois qu'un langage comme Windev permet des
manipulations avec les bases de données, tout comme Php...).



Hmmm. La dernière fois que j'ai regardé (au siècle dernier), Windev
permettait de développer facilement des interfaces utilisateurs, mais ne
faisait pas SGBD. Idem pour PHP (mais c'était déjà ce siècle-ci). On
dirait donc que cela a changé. Faudra que je me renseigne. Je le note.


J'utilise aussi Linux et je suis un peu "frustré" de ne pas pouvoir
accéder au code et programmer des périphériques...



Et bien, ce n'est pas avec la gestion de bases de données que tu
pourrais avoir cette occasion : dans de nombreuses entreprises,
l'informatique technique et l'informatique de gestion restent deux
domaines bien distincts, et sans grandes communications entre les deux.


Antoine
Avatar
Christian
Antoine Leca wrote:

Par contre effectivement, en 1988 on a eu du boulot pour apprendre aux
ordinateurs à ne pas se planter tout seuls ; vu ce qui s'est semble-t-il
passé le mois dernier sur le Nasdaq,



Le DJ, pas le NAS !
Avatar
ld
On 14 juin, 16:05, Marc Boyer
wrote:
Le 14-06-2010, Antoine Leca a écrit :

> Marc Boyer écrivit :
>>>> Ou pour échanger des entiers entre deux machines d'archi distincte s ?
>>> .. et ils masquent ces concessions dans de belles classes qui masquen t
>>> les détails d'implémentation à ceux qui veulent les utiliser.

>>   Je ne pense pas que ce soit des concessions: séparer l'interface
>> de l'implantation fait partie du travail en OO.

> En C aussi (et désolé pour essayer de revenir au sujet du groupe) :
> lorsqu'on écrit un morceau de code destiné être utilisé plusieu rs fois,
> il est de bon ton d'écrire un fichier .h, qui suffit normalement à
> décrire l'interface, et l'implémentation est gardée dans du code (qui
> peut être regroupé dans des bibliothèques).

   Sauf qu'en C, masquer l'implantation des types de données, c'est
se battre contre le compilateur. Si on veut remplacer une liste
chaînée par une table de hachage, il va falloir espérer qu'aucun
code utilisateur n'a utilisé la représentation interne du type.

   Ce qu'on arrive bien à faire avec .h/.c, c'est cacher
l'implantation des algos. Pas le type des données.

   Arriver à écrire une fonction "find" qui prend en paramêtre
un critère et tout objet ayant une méthode "first()" et une
autre "next()", c'est pas évident.



Cela suppose une semantique par reference (e.g. Java), ou des
templates a-la-C++ pour une semantique par valeur. Et cela suppose une
recherche lineaire alors que le "conteneur" est peut-etre capable de
mieux. Les iterateurs restent une abstraction de bas niveau.

Après, ces bases de séparation interface/implémentation, c'est plu s
des types de données abstraits (ADT), dont l'OO est un dérivé.

>>   C'est plus compliqué d'apprendre à se servir d'une scie sauteu se,
>> d'une scie scirculaire et d'un marteau piqueur que de s'en tenir
>> à clou/marteau/scie égoïne. Mais pour monter une cloison, on va plus
>> vite avec les bons outils.

> Ce que ne sont ni le marteau piqueur, ni la grue. Autrement dit, les
> outils complexes ne sont pas forcément des outils universels : ce son t
> deux concepts assez orthogonaux, ÀMHA.
> Le débat est en fait de savoir si la POO (ou C++, ou C) sont universe ls;
> en ce qui concerne la POO, les puristes dont parlait Samuel semblent
> trancher dans ce sens ; les Vrais Programmeurs du folklore sont
> évidemment de l'avis opposé ; entre les deux... il y a beaucoup d'a vis !

  Mon propos, c'est que l'enjeux du code actuel, c'est le passage à
l'échelle, et que le C n'offre pas de support pour traiter cela
(hormis .h/.c, #define, <stdint.h>...).



Exact.

  La POO est le paradigme actuel pour contenir cette complexité. C'es t
compliqué, mais le problème est difficile.



Le probleme est difficile si on cherche a valider le programme a la
compilation (ce qui est impossible sauf cas trivial). Cette
"validation" ne couvre en general que les erreurs simples et de typo
alors que le code devient de plus en plus complique pour satisfaire le
systeme de type (et les erreurs simples deviennent plus frequentes et
plus compliquees ;-).

type statique valide != type dynamique valide != algorithme valide

Quand on programme, il faut se positionner par rapport ces aspects et
accepter les contraintes inherentes a chacun.

a+, ld.
Avatar
Marc Boyer
Le 16-06-2010, ld a écrit :
On 14 juin, 16:05, Marc Boyer
wrote:
Le 14-06-2010, Antoine Leca a écrit :

> Marc Boyer écrivit :
>>>> Ou pour échanger des entiers entre deux machines d'archi distinctes ?
>>> .. et ils masquent ces concessions dans de belles classes qui masquent
>>> les détails d'implémentation à ceux qui veulent les utiliser.

>>   Je ne pense pas que ce soit des concessions: séparer l'interface
>> de l'implantation fait partie du travail en OO.

> En C aussi (et désolé pour essayer de revenir au sujet du groupe) :
> lorsqu'on écrit un morceau de code destiné être utilisé plusieurs fois,
> il est de bon ton d'écrire un fichier .h, qui suffit normalement à
> décrire l'interface, et l'implémentation est gardée dans du code (qui
> peut être regroupé dans des bibliothèques).

   Sauf qu'en C, masquer l'implantation des types de données, c'est
se battre contre le compilateur. Si on veut remplacer une liste
chaînée par une table de hachage, il va falloir espérer qu'aucun
code utilisateur n'a utilisé la représentation interne du type.

   Ce qu'on arrive bien à faire avec .h/.c, c'est cacher
l'implantation des algos. Pas le type des données.

   Arriver à écrire une fonction "find" qui prend en paramêtre
un critère et tout objet ayant une méthode "first()" et une
autre "next()", c'est pas évident.



Cela suppose une semantique par reference (e.g. Java), ou des
templates a-la-C++ pour une semantique par valeur.



Dans les deux cas, cela permet d'appliquer un code sur une structure
de données dont on ne connait qu'une partie de l'interface (ce qui
était mon propos), et que le faire en C, c'est pas facile (et ne me dit
pas que COS ne fait que 7KLOC, dont que c'est pas difficile, ni que
OOC-S n'en fait que 300).

Et cela suppose une
recherche lineaire alors que le "conteneur" est peut-etre capable de
mieux. Les iterateurs restent une abstraction de bas niveau.



Oui, on pourrait imaginer un "find" encore plus générique,
c'était juste un exemple.

  La POO est le paradigme actuel pour contenir cette complexité. C'est
compliqué, mais le problème est difficile.



Le probleme est difficile si on cherche a valider le programme a la
compilation (ce qui est impossible sauf cas trivial).



<pub>
On fait des progrès quand même ;-)
</pub>

Cette
"validation" ne couvre en general que les erreurs simples et de typo
alors que le code devient de plus en plus complique pour satisfaire le
systeme de type (et les erreurs simples deviennent plus frequentes et
plus compliquees ;-).

type statique valide != type dynamique valide != algorithme valide

Quand on programme, il faut se positionner par rapport ces aspects et
accepter les contraintes inherentes a chacun.



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.
Les problèmes actuels seraient plutôt dans la gestion des gros
systèmes, l'assemblage de milliers de composants, tous plutôt simple,
tous quasiment corrects, mais dont l'assemblage (et la maintenance)
est compliqué au possible.
La partie automatique de détection d'erreurs se fait grace au typage
et à l'OO (qui a gagné la guerre face à ses concurents).

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
ld
On 16 juin, 16:46, Marc Boyer
wrote:
Le 16-06-2010, ld a écrit :





> On 14 juin, 16:05, Marc Boyer
> wrote:
>> Le 14-06-2010, Antoine Leca a écrit :

>> > Marc Boyer écrivit :
>> >>>> Ou pour échanger des entiers entre deux machines d'archi distin ctes ?
>> >>> .. et ils masquent ces concessions dans de belles classes qui masq uent
>> >>> les détails d'implémentation à ceux qui veulent les utiliser .

>> >>   Je ne pense pas que ce soit des concessions: séparer l'interf ace
>> >> de l'implantation fait partie du travail en OO.

>> > En C aussi (et désolé pour essayer de revenir au sujet du groupe ) :
>> > lorsqu'on écrit un morceau de code destiné être utilisé plus ieurs fois,
>> > il est de bon ton d'écrire un fichier .h, qui suffit normalement à
>> > décrire l'interface, et l'implémentation est gardée dans du co de (qui
>> > peut être regroupé dans des bibliothèques).

>>    Sauf qu'en C, masquer l'implantation des types de données, c' est
>> se battre contre le compilateur. Si on veut remplacer une liste
>> chaînée par une table de hachage, il va falloir espérer qu'aucun
>> code utilisateur n'a utilisé la représentation interne du type.

>>    Ce qu'on arrive bien à faire avec .h/.c, c'est cacher
>> l'implantation des algos. Pas le type des données.

>>    Arriver à écrire une fonction "find" qui prend en paramêt re
>> un critère et tout objet ayant une méthode "first()" et une
>> autre "next()", c'est pas évident.

> Cela suppose une semantique par reference (e.g. Java), ou des
> templates a-la-C++ pour une semantique par valeur.

  Dans les deux cas, cela permet d'appliquer un code sur une structure
de données dont on ne connait qu'une partie de l'interface (ce qui
était mon propos), et que le faire en C, c'est pas facile



C'est ce point que je ne comprends pas. Ce n'est pas plus difficile en
C qu'en autre chose si on choisi la bonne approche.

(et ne me dit
pas que COS ne fait que 7KLOC, dont que c'est pas difficile, ni que
OOC-S n'en fait que 300).



je ne te le dis pas parce que COS fait 8KLOC (le "langage")
maintenant ;-)

mais tu peux aussi regarder du cote de libavl ou de nombreuses autres
bibliotheques qui utilisent aussi le concept d'iterateur en C et ce
n'est pas complique.

> Et cela suppose une
> recherche lineaire alors que le "conteneur" est peut-etre capable de
> mieux. Les iterateurs restent une abstraction de bas niveau.

  Oui, on pourrait imaginer un "find" encore plus générique,
c'était juste un exemple.



Oui. Par exemple un find dont la complexite algorithmique s'adapte
automatiquement au critere utilise (via un functor), ce n'est pas
facile dans un langage statiquement type.

>>   La POO est le paradigme actuel pour contenir cette complexité. C 'est
>> compliqué, mais le problème est difficile.

> Le probleme est difficile si on cherche a valider le programme a la
> compilation (ce qui est impossible sauf cas trivial).

<pub>
  On fait des progrès quand même ;-)
</pub>

> Cette
> "validation" ne couvre en general que les erreurs simples et de typo
> alors que le code devient de plus en plus complique pour satisfaire le
> systeme de type (et les erreurs simples deviennent plus frequentes et
> plus compliquees ;-).

> type statique valide != type dynamique valide != algorithme valide

> Quand on programme, il faut se positionner par rapport ces aspects et
> accepter les contraintes inherentes a chacun.

   Je ne nie pas ce que tu dis, mais à mon sens, la difficulité d u
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.
  Les problèmes actuels seraient plutôt dans la gestion des gros
systèmes, l'assemblage de milliers de composants, tous plutôt simple,
tous quasiment corrects, mais dont l'assemblage (et la maintenance)
est compliqué au possible.



Le probleme vient principalement du fait que ce que tu appelles des
composants n'en sont pas. Sinon il y en aurait beaucoup moins et
l'assemblage serait en grande partie "automatique".

  La partie automatique de détection d'erreurs se fait grace au typag e
et à l'OO (qui a gagné la guerre face à ses concurents).



Mais la guerre des langages n'est pas finie ;-) Des languages comme
Scala ou Haskell ont une popularite croissante. Mais ce sont aussi de
beaux exemples qui montrent la difficulte de capturer _simplement_
certain concepts (composition des interfaces et variabilite par
exemple) dans un systeme a typage statique.

a+, ld.
Avatar
Antoine Leca
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.


Les problèmes actuels seraient plutôt dans la gestion des gros
systèmes, l'assemblage de milliers de composants, tous plutôt simple,
tous quasiment corrects, mais dont l'assemblage (et la maintenance)
est compliqué au possible.



Si l'assemblage est compliqué, c'est que le composant est mauvais : en
effet, la fonction réelle d'un composant est au moins autant de réaliser
les fonctionnalités promises, que d'assurer la possibilité de la mise en
½uvre (l'assemblage facile) : sinon, tu as inventé une brique à hautes
performances mais qui nécessite un ingénieur pour monter le mur (à la
place du maçon) : désolé, mais avec cela tu ne peux pas faire de maison!
Et la tromperie du système, c'est que les cahiers des charges s'arrêtent
à la première partie... parce que c'est la plus facile à spécifier (je
dis la même chose que Laurent).


Antoine
Avatar
Marc Boyer
Le 16-06-2010, ld a écrit :
On 16 juin, 16:46, Marc Boyer
wrote:
Le 16-06-2010, ld a écrit :

> On 14 juin, 16:05, Marc Boyer
> wrote:
>> Le 14-06-2010, Antoine Leca a écrit :




[SNIP]
> Cela suppose une semantique par reference (e.g. Java), ou des
> templates a-la-C++ pour une semantique par valeur.

  Dans les deux cas, cela permet d'appliquer un code sur une structure
de données dont on ne connait qu'une partie de l'interface (ce qui
était mon propos), et que le faire en C, c'est pas facile



C'est ce point que je ne comprends pas. Ce n'est pas plus difficile en
C qu'en autre chose si on choisi la bonne approche.



C'est aussi difficile en C qu'ailleurs, sauf qu'en C, le langage
n'offre aucun support pour ça.

mais tu peux aussi regarder du cote de libavl ou de nombreuses autres
bibliotheques qui utilisent aussi le concept d'iterateur en C et ce
n'est pas complique.



Mais tu dois perdre la vérif de type à la compilation non ?
Ceci dit, je m'étais amusé à voir la faisabilité à base de macros
d'une version C de la STL. Ca ce fait. Mais comme tout ce qui se
base sur les macros, les messages d'erreurs du compilo sont
pas toujours super évidents.

> type statique valide != type dynamique valide != algorithme valide

> Quand on programme, il faut se positionner par rapport ces aspects et
> accepter les contraintes inherentes a chacun.

   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.
  Les problèmes actuels seraient plutôt dans la gestion des gros
systèmes, l'assemblage de milliers de composants, tous plutôt simple,
tous quasiment corrects, mais dont l'assemblage (et la maintenance)
est compliqué au possible.



Le probleme vient principalement du fait que ce que tu appelles des
composants n'en sont pas. Sinon il y en aurait beaucoup moins et
l'assemblage serait en grande partie "automatique".



Ils n'en sont pas, ils sont de mauvaise qualité. On peut jouer sur
les mots. Disons qu'on cherche à réutiliser du code. C'est une des
force du logiciel, la copie/réutilisation à coût nul.

  La partie automatique de détection d'erreurs se fait grace au typage
et à l'OO (qui a gagné la guerre face à ses concurents).



Mais la guerre des langages n'est pas finie ;-) Des languages comme
Scala ou Haskell ont une popularite croissante. Mais ce sont aussi de
beaux exemples qui montrent la difficulte de capturer _simplement_
certain concepts (composition des interfaces et variabilite par
exemple) dans un systeme a typage statique.



Oui, j'ai longtemps défendu l'OO comme la bonne solution. Je suis
passé à "celle qui a le plus fait ses preuves". Mais on n'est jamais
à l'abris de bonnes nouvelles.
L'OO dans son sens large, avec UML/Java/C++/Ruby (ajoutez à la
suite votre langage favori), s'est imposé.
Scala ou Haskell sont tentants, mais ils n'ont pas encore fait
la preuve de la robustesse au passage à l'échelle et au temps.
Ca viendra peut-être, ou pas.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Marc Boyer
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é. Il n'y a pas tellement de "composants" (un gaz, un carburant,
un ensemble fixe, quelques pièces mobiles), et ça occupe beaucoup.

Et le logiciel a cela de particulier qu'il a tendance a être
très sensible aux petites erreurs.

Ceci dit, je connais peut-être mieux les grands plantages
informatiques que ceux d'autres domaines industriels.

Les problèmes actuels seraient plutôt dans la gestion des gros
systèmes, l'assemblage de milliers de composants, tous plutôt simple,
tous quasiment corrects, mais dont l'assemblage (et la maintenance)
est compliqué au possible.



Si l'assemblage est compliqué, c'est que le composant est mauvais : en
effet, la fonction réelle d'un composant est au moins autant de réaliser
les fonctionnalités promises, que d'assurer la possibilité de la mise en
œuvre (l'assemblage facile) : sinon, tu as inventé une brique à hautes
performances mais qui nécessite un ingénieur pour monter le mur (à la
place du maçon) : désolé, mais avec cela tu ne peux pas faire de maison!



Oui, ce qui fait que l'informatique est un métier où le plus bas niveau
de formation est le BAC+2/+3 et avec une cohorte d'ingénieurs qui n'encadrent
personnes, qui forment le "gros des troupes".

Et la tromperie du système, c'est que les cahiers des charges s'arrêtent
à la première partie... parce que c'est la plus facile à spécifier (je
dis la même chose que Laurent).



Oui, peut-être ne sait-on pas encore faire de bon composants. Mais
pour en revenir au sujet du forum, le langage C n'offre pas grand chose
pour cela à mon sens.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Antoine Leca
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.

Pour ce qui est des réacteurs, un autre aspect « intéressant », c'est
l'acquisition des données expérimentales :-). Techniquement pas
difficile à comprendre, une autre chose est de le faire sans se brûler.


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) ?


Antoine