OVH Cloud OVH Cloud

Chercher un livre sur le C avec certains critères.

200 réponses
Avatar
Francois
Bonjour à tous,

Je débute dans le C et personnellement j'apprends surtout avec les
livres. J'ai commencé "Livre du C premier langage" de Delannoy (je
précise que j'avais quand même des petites notions de programmations,
même si, à mon sens, j'étais [ et suis encore ? ] vraiment ce qu'on
appelle un débutant).

Je suis en train de lire le K&R (deuxième édition) qui est bien sûr
beaucoup plus difficile. C'est du concentré, mais quand on y regarde de
prêt, c'est quand assez précis et bien fait. Ceci étant, il y a des
choses qui ne me satisfont pas complètement.

Je trouve que ce livre à une approche trop éloignée de la machine
(comment une donnée est encodée ? comment se passe l'histoire du signed
ou unsigned du point de vue de la machine etc.). Je m'explique.

Bien sûr, le langage C est un langage abstrait de "haut niveau" qui se
doit (en principe) de ne pas faire référence à la machine. Donc c'est
normal qu'un livre sur le C ne parle pas (trop) des problèmes qui
dépendent de l'architecture. Ceci étant, j'aimerais savoir si un tel
livre existe malgré tout. Un livre qui expose le langage C et qui
n'hésite pas de temps en temps à parler de ce qui se passe dans la
machine (bien sûr, justement, ce qui se passe dépend de la machine et
n'est pas universel, mais le livre pourrait présenter les choses sur
seulement une architecture "classique" par exemple). Bon, si je pouvais
éviter les circuits électroniques et compagnie quand même, ça serait
bien. Qu'on me dise que "le complément à 2 fait que l'addition devient
plus simple pour l'ordinateur puisqu'il suffit de faire une addition
classique" me suffit amplement. Une preuve de cela en passant des
explications sur des circuits électroniques peut-être me serait un peu
indigeste.

Bref, j'espère avoir été clair sur cette sorte de compromis que je
recherche (existe-t-il ?). Vous pouvez aller voir cette discussion (où
mon pseudo est sisco)

http://www.siteduzero.com/forum-83-245206-p1-afficher-le-codage-binaire-du-contenu-d-une-variable.html

qui pourra peut-être préciser mes aspirations.

Un livre en français, ça serait le top. Mais en anglais, ça le fera aussi.


Je vous remercie d'avance pour votre aide.



François

10 réponses

Avatar
Antoine Leca
En news:47d6ec6b$0$17413$, candide va escriure:

On ne flanque pas le premier volume du tome un des oeuvres de
Bourbaki au CP. Je le sais, mon aine est au CP.


Tiens, j'avais surévalué ton âge


Contrairement aux femmes, les hommes n'ont pas de ménopause ; et Jean-Marc
pour prénom est un indice déterminant ici...


(En plus, il connaît C++ et pas seulement de nom, donc il ne pouvait pas
être _si_ vieux que cela... ;-) )


Antoine


Avatar
Antoine Leca
En news:, Marc Boyer va escriure:
Un problème de fond du génie logiciel, c'est qu'il est là
pour permettre de passer à l'échelle ("programming in the large"),
et qu'on ne peut pas, dans le cadre d'un enseignement, que ce soit
dans une formation ou dans un bouquin, dépasser le "programming
in the small".


Oui.


Mon expérience d'enseignement est qu'un groupe de 3-4 étudiants
est capable d'avoir en tête l'organisation d'un code d'environ
5000 lignes, développé sur 2 mois, sans avoir réellement besoin
de conception, méthode, etc.


Pourquoi ne pas les plonger sur la maintenance d'un petit bout de code
_existant_ (disons, un module de 2000-3000 lignes) inséré dans un projet de
plusieurs dizaines de milliers ?
Avec le phénomène OpenSource, ce ne devrait pas être mission impossible de
trouver cela (qui a dit, un driver pour Linux^W MachinBSD ?)


Mais, l'objectif des règles de bonne programmation, c'est
d'être capable d'avoir une équipe qui va écrire 50.000 lignes,
et les maintenir pendant disons 5 ans.


Euh, en informatique (en France), maintenir une équipe de programmeurs sur
la maintenance d'une application pendant 5 ans, ce n'est pas un objectif
pour les informaticiens, c'est un objectif pour les responsables des
ressources humaines ! :-)


Tout cela pour dire qu'en fait, l'objectif du génie logiciel, c'est
d'enlever le mot « équipe » de la phrase ci-dessus !



[ candide: ]
Je crois ne jamais avoir vu d'exemple de code étant censé illustrer
le danger des variables globales.



Alors tu n'as pas programmé de bibliothèques appelées à être partagées
dynamiquement, et où tu aurais par exemple voulu faire appel à des appels
systèmes...

Un autre truc rigolo, c'est de changer le nom de la première variable
globale venue en read (avec une #define si elle est beaucoup utilisée), et
de recompiler l'application sur deux ou trois plateformes différentes.
Bien sûr, read est caricatural ici ; c'est l'idée qu'il faut comprendre.

Un autre effet nocif qui me rattrape personnellement avec un trop grande
régularité, c'est quand dans un bout de code de test j'écris

printf("t1=%.24s, t2=%s", ctime(&t1), ctime(&t2));

Paf, le chien ! Pas possible de faire court, obliger d'écrire cela sur deux
lignes ou d'aller chercher strftime et cie... :-/


Antoine


Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

En news:47d6ec6b$0$17413$, candide va escriure:

On ne flanque pas le premier volume du tome un des oeuvres de
Bourbaki au CP. Je le sais, mon aine est au CP.


Tiens, j'avais surévalué ton âge


Contrairement aux femmes, les hommes n'ont pas de ménopause ;


Pour continuer a laisser planer le mystere (s'il y en a un), ma femme est
legerement plus agee que moi. Et notre cadette a un an.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
candide

Pourquoi voudrais-ty que les informaticiens soient la seule
profession ou tous feraient correctement leur travail dans les
règles de l'art ? Tu n'a jamais vu un maçon cacher la misère
sous un peu de crépis ?


Non, ce n'est pas pareil, si je te suis on serait en train de dire que
presque tous les artisans ne font pas le trvail dans les règles de l'art.


Comme quoi, un prof en vrai, c'est pas plus mal ;-)


Naturellement mais la difficulté c'est de faire presque aussi bien sans.


Un problème de fond du génie logiciel, c'est qu'il est là
pour permettre de passer à l'échelle ("programming in the large"),
et qu'on ne peut pas, dans le cadre d'un enseignement, que ce soit
dans une formation ou dans un bouquin, dépasser le "programming
in the small".



Pas du tout, il certainement possible d'expliquer l'idée avec quelques
exemples bien choisis. Et à ce compte-là, un cours de C ne parle pas de
compilation séparée (d'ailleurs K&R est très léger là-dessus) ou
d'oganisation des fichiers source et des headers (par contre, ça ils en
parle).



Mon expérience d'enseignement est qu'un groupe de 3-4 étudiants
est capable d'avoir en tête l'organisation d'un code d'environ
5000 lignes, développé sur 2 mois, sans avoir réellement besoin
de conception, méthode, etc.


5000 lignes de code ne permettent pas de comprendre la pertinence de ne
pas écrire de variables globales ????


Ben, K&R dit tout:
- data connections are not all obvious
- the program is hard to modify


Apparemment ce n'est pas très dissuasif (car pas très convaincant).



Et oui... Ceci dit, les variables globales ne sont pas un pb de "C",


En effet.

mais commun à tous les langages de prog que je connais. Et la question
d'un cours de C est toujours de savoir s'il enseigne l'algorithmique,
la "bonne programmation" structurée ou le C.


Le C _d'abord_, la programmation structurée _ensuite_, l'algorithmique
certainement pas (c'est une des erreurs du K&R), ce n'est pas l'objet
d'un cours de C.

C'est à peu prêt jouable quand un cours s'inscrit dans un cursus,
bien plus difficile pour un livre.


Ça a tout à fait sa place dans un livre.



Ben oui. "errno" par exemple.


Non, je ne pensais pas à ça, je pensais à certains exemples illustratifs
dans la norme (partie "language"). Même Kernighan & Pike qui dissuadent
d'en utiliser ("Avoid global variables" page 104) en utilisent dans
leurs exemples, c'est dire si le mal est profond ...

Avatar
Antoine Leca
En news:47d818ef$0$5110$, candide va escriure:
[...] on serait en train de dire que presque tous les artisans
ne font pas le trvail dans les règles de l'art.


Et ?

On va pas tomber ici aussi dans le politiquement correct, et s'interdire de
dénoncer certaines choses sous de vagues prétextes de « ne pas se
fâcher »...

Enfin j'espère.

















À prendre évidemment avec la paire de pinces adéquates, et surtout ne pas
croire que ceci est une critique des artisans, après tout je considère que
(quasiment) tous les informaticiens sont des artisans dans leur domaine.

Et comme je n'ai pas (encore) vu de Meilleur Ouvrier de France catégorie
informaticien, cela tendrait à dire que chez les informaticiens, presque est
très proche de zéro...

:-)



Mon expérience d'enseignement est qu'un groupe de 3-4 étudiants
est capable d'avoir en tête l'organisation d'un code d'environ
5000 lignes, développé sur 2 mois, sans avoir réellement besoin
de conception, méthode, etc.


5000 lignes de code ne permettent pas de comprendre la pertinence de
ne pas écrire de variables globales ????


Sur une période de deux mois (qui est un critère plus discriminant que la
taille du programme), en général, non.



Antoine


Avatar
Jean-Marc Bourguet
candide writes:


Pourquoi voudrais-ty que les informaticiens soient la seule
profession ou tous feraient correctement leur travail dans les
règles de l'art ? Tu n'a jamais vu un maçon cacher la misère
sous un peu de crépis ?


Non, ce n'est pas pareil, si je te suis on serait en train de dire que
presque tous les artisans ne font pas le trvail dans les règles de l'art.


Si tu veux continuer dans l'analogie, on est comme les électriciens: avec
une bonne base installée qui n'est plus aux normes actuelles. La regarder
et dire: "les professionnels ne respectent pas la norme" est un peu
réducteur.

Un problème de fond du génie logiciel, c'est qu'il est là
pour permettre de passer à l'échelle ("programming in the large"),
et qu'on ne peut pas, dans le cadre d'un enseignement, que ce soit
dans une formation ou dans un bouquin, dépasser le "programming
in the small".



Pas du tout, il certainement possible d'expliquer l'idée avec quelques
exemples bien choisis.


Non. Par nature, les problèmes de passage à l'échelle ne s'expliquent pas
avec des petits exemples. Si tu n'as jamais fait que monter des tentes, tu
ne vois pas la nécessité des fondations, même si tu as monté un camps de
réfugié de 100.000 personnes au Rwanda.

Et à ce compte-là, un cours de C ne parle pas de compilation séparée
(d'ailleurs K&R est très léger là-dessus) ou d'oganisation des fichiers
source et des headers (par contre, ça ils en parle).


La nécessité de ça, ca apparaît avec un programme de 2000 lignes. Il y a
des choses qui ne sont perceptibles qu'avec un programme de 20 000, de 200
000, de 2 000 000, de 20 000 000... sans oublier que d'autres facteurs
entre en compte. En gros tu as les étapes ou ça devient trop gros pour
s'en occuper seul comme hobby, pour s'en occuper seul de manière
professionnelle, pour être dans un projet où tu connais tout le monde en
sachant ce que chacun fait, pour être dans un projet où tu connais toutes
les équipes en sachant en gros ce que chacune fait, où il y a une équipe
dont tu n'avais jamais entendu parler qui fait quelque chose faisant que le
code dont tu t'occupes ne fonctionne plus.

Mon expérience d'enseignement est qu'un groupe de 3-4 étudiants est
capable d'avoir en tête l'organisation d'un code d'environ 5000 lignes,
développé sur 2 mois, sans avoir réellement besoin de conception,
méthode, etc.


5000 lignes de code ne permettent pas de comprendre la pertinence de ne
pas écrire de variables globales ????


Non. 5000 lignes de code, ça s'improvise sans problème avec un peu
d'expérience. Je dirais même que des variables globales peuvent aider à
structurer quelque chose d'aussi petit (de même que se passer de fondations
aide à mettre en place une tente igloo).

Ben, K&R dit tout:
- data connections are not all obvious
- the program is hard to modify


Apparemment ce n'est pas très dissuasif (car pas très convaincant).


Pour celui qui n'a jamais vu que des tentes, peut-être.

Et oui... Ceci dit, les variables globales ne sont pas un pb de "C",


En effet.

mais commun à tous les langages de prog que je connais. Et la question
d'un cours de C est toujours de savoir s'il enseigne l'algorithmique,
la "bonne programmation" structurée ou le C.


Le C _d'abord_, la programmation structurée _ensuite_, l'algorithmique
certainement pas (c'est une des erreurs du K&R), ce n'est pas l'objet d'un
cours de C.


Le seul sujet du K&R, c'est le C. Ni la programmation structurée, ni
l'algorithmique, ni la conception, ni le génie logiciel, ni l'architecture
des ordinateurs.

C'est à peu prêt jouable quand un cours s'inscrit dans un cursus,
bien plus difficile pour un livre.


Ça a tout à fait sa place dans un livre.


La taille et le temps de rédaction de ce livre va s'apparenter à ceux du
TAOCP :-)

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Marc Boyer
On 2008-03-12, candide wrote:

Pourquoi voudrais-ty que les informaticiens soient la seule
profession ou tous feraient correctement leur travail dans les
règles de l'art ? Tu n'a jamais vu un maçon cacher la misère
sous un peu de crépis ?


Non, ce n'est pas pareil, si je te suis on serait en train de dire que
presque tous les artisans ne font pas le trvail dans les règles de l'art.


"on serait en train de dire" ?
Non, tu présentes dans ce forum des exemples de variables globales.
C'est le passage entre "il y en a" et "tout le monde le fait" qui
ne me convient pas, pas plus que "tout le monde programme bien".

Comme quoi, un prof en vrai, c'est pas plus mal ;-)


Naturellement mais la difficulté c'est de faire presque aussi bien sans.


Ben, on va dire que je suis corporatiste, mais j'ai peur que
ce soit difficile.

Un problème de fond du génie logiciel, c'est qu'il est là
pour permettre de passer à l'échelle ("programming in the large"),
et qu'on ne peut pas, dans le cadre d'un enseignement, que ce soit
dans une formation ou dans un bouquin, dépasser le "programming
in the small".


Pas du tout, il certainement possible d'expliquer l'idée avec quelques
exemples bien choisis.


Ah ? Moi, j'arrive à peu prêt à le faire passer à l'oral à coup
d'humour, de confiance, et de menace de sale note.
Des exemples bien choisis ? Dur. Le génie logiciel est une lutte
contre l'erreur d'inattention. On peut toujours dire que si on
est attentif, on s'en sort. Seule l'expérience, personnelle ou
recueillie, montre que, ben non, ça ne suffit pas.

Et à ce compte-là, un cours de C ne parle pas de
compilation séparée (d'ailleurs K&R est très léger là-dessus) ou
d'oganisation des fichiers source et des headers (par contre, ça ils en
parle).


Et il le *justifie* comment ?
Quand on voit comment c'est la m.rde les #include / #ifndef, extern,
on peut surtout se demander pourquoi on en fait, non ? (justement,
je viens de faire ça en TD/TP: réaction des étudiants "mais pourquoi
les gens codent en C et pas en Pascal ?").

Mon expérience d'enseignement est qu'un groupe de 3-4 étudiants
est capable d'avoir en tête l'organisation d'un code d'environ
5000 lignes, développé sur 2 mois, sans avoir réellement besoin
de conception, méthode, etc.


5000 lignes de code ne permettent pas de comprendre la pertinence de ne
pas écrire de variables globales ????


Non. Pas de manière univoque. Il faut encore ensuite un effort de
projection de la part des étudiants. Je suis sur qu'on peut rajouter
une cinquantaine de variables globales, pour peu qu'on choisisse pas
trop mal les noms, et ça reste gérable, voir plus simple même.

Ben, K&R dit tout:
- data connections are not all obvious
- the program is hard to modify


Apparemment ce n'est pas très dissuasif (car pas très convaincant).


Pärce qu'ensuite, une fois ces deux points énoncés, il faut les
justifier. Et comme je disais, la justifications se trouve dans le
passage à l'échelle, qui ne se justifie que par expérience, personnelle
ou recueillie.

mais commun à tous les langages de prog que je connais. Et la question
d'un cours de C est toujours de savoir s'il enseigne l'algorithmique,
la "bonne programmation" structurée ou le C.


Le C _d'abord_, la programmation structurée _ensuite_, l'algorithmique
certainement pas (c'est une des erreurs du K&R), ce n'est pas l'objet
d'un cours de C.


Tient, nous on fait la programmation structurée d'abord (en Pascal)
et le C ensuite. Et je m'en félicite chaque fois que commence le cours
de C.

Ben oui. "errno" par exemple.


Non, je ne pensais pas à ça, je pensais à certains exemples illustratifs
dans la norme (partie "language"). Même Kernighan & Pike qui dissuadent
d'en utiliser ("Avoid global variables" page 104) en utilisent dans
leurs exemples, c'est dire si le mal est profond ...


Et oui. D'ailleurs, en 2008, on en débat encore, c'est dire...

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
Marc Boyer
On 2008-03-12, candide wrote:

devoir expliquer ce
qu'est un singleton.


Et c'est quoi (j'en suis resté à l'ensemble de cardinal un) en d'autres
termes que "instance unique qui ne doit etre dedoublé" (un court exemple
sera aussi parlant que 10 lignes d'explication) ?


Très grossièrement, un singleton est un "type" dont il ne
doit exister qu'une seule occurence pour que tout aille bien.
Shématiquement, un distributeur de tiquets: si tu en as
par erreur deux, tu vas avoir deux clients avec le même tiquet,
et ça va être le binz au guichet.
On peut être tenté de faire une variable globale (genre, un
extern int request_id;) que tout le monde interroge et incrémente.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
Jean-Marc Bourguet
Marc Boyer writes:

On 2008-03-12, candide wrote:

Ben, K&R dit tout:
- data connections are not all obvious
- the program is hard to modify


Apparemment ce n'est pas très dissuasif (car pas très convaincant).


Pärce qu'ensuite, une fois ces deux points énoncés, il faut les
justifier. Et comme je disais, la justifications se trouve dans le
passage à l'échelle, qui ne se justifie que par expérience, personnelle
ou recueillie.


En passant, il y maintenant un argument de plus (relativement) facile à
comprendre: ça gène pas mal le multithread.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Marc Boyer
On 2008-03-12, Antoine Leca wrote:
Mon expérience d'enseignement est qu'un groupe de 3-4 étudiants
est capable d'avoir en tête l'organisation d'un code d'environ
5000 lignes, développé sur 2 mois, sans avoir réellement besoin
de conception, méthode, etc.


Pourquoi ne pas les plonger sur la maintenance d'un petit bout de code
_existant_ (disons, un module de 2000-3000 lignes) inséré dans un projet de
plusieurs dizaines de milliers ?
Avec le phénomène OpenSource, ce ne devrait pas être mission impossible de
trouver cela (qui a dit, un driver pour Linux^W MachinBSD ?)


Parce que le projet a de *multiples* objectifs. C'est d'abord
un projet Java, donc, pas de driver *BSD... Ensuite, on veut
voir comment les étudiants concoivent l'archi de leur appli,
donc, les intégrer dans un truc déjà existant va brider leur
conception.
Et puis ça leur demanderait trop de travail.

Ce qu'on a fait par contre, c'est d'étaller le développement
sur deux promos: la première écrit sans aucune base, et à la
suivante, on propose 5 codes sensés faire la même chose, on
enlève des trucs du cahier des charges et on en ajoute.

Ils comprennent mieux à quoi sert une doc.


Mais, l'objectif des règles de bonne programmation, c'est
d'être capable d'avoir une équipe qui va écrire 50.000 lignes,
et les maintenir pendant disons 5 ans.


Euh, en informatique (en France), maintenir une équipe de programmeurs sur
la maintenance d'une application pendant 5 ans, ce n'est pas un objectif
pour les informaticiens, c'est un objectif pour les responsables des
ressources humaines ! :-)


Oui, mon "les" se rapportaient aux lignes, pas aux membre de l'équipe.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)