Au fur et à mesure que j'avance dans l'apprentissage, le langage C me
semble de plus en plus vaste.
Je voudrais savoir si c'est utile de passer beaucoup de temps à
maîtriser des boucles pour principalement implémenter des algorithmes
de tri ou de manipulation de données (tableau 2d...) ?
Est-ce que ça peut réellement servir sachant qu'il me semble que ce
langage dépend des librairies. Je veux dire par là que j'ai eu un
livre entre les mains : "Langage C L'essentiel du code et des
commandes" de Yves Mettier et dans ce livre je ne reconnais pas très
bien le code de base du langage mais plutôt des fonctions à apprendre
par coeur avec des librairies. J'ai le sentiment que c'est beaucoup
plus utile de savoir programmer avec que de faire des algorithmes
consommateurs de temps?
Ou alors est-ce que je dois voir le livre de Y.Mettier comme la
seconde étape de l'apprentissage ? Je pense également à "C en action"
du même auteur. Je pense ça pourrait être la seconde étape?
Je suppose que une fois les bases du C acquises E/S, pointeurs,
écriture de fichiers, je peux directement passer à un autre langage et
faire appel au C quand je n'ai pas la connaissance d'un objet pour
accomplir telle ou telle tâche. Je pense alors à C++.
Merci,
Pascal
Et oui. Ceci dit, la norme ne fait que quelques centaines
de pages.
> Je voudrais savoir si c'est utile de passer beaucoup de temps à
> maîtriser des boucles pour principalement implémenter des algorithmes
> de tri ou de manipulation de données (tableau 2d...) ?
Quel est ton but ? Sans but, difficile de définir des moyens.
> Est-ce que ça peut réellement servir sachant qu'il me semble que ce
> langage dépend des librairies.
Que veux-tu dire ? Par rapport à d'autres langages (Java par exemple),
le C "pur" (ie tel que définit par la norme) possède un ensemble
de bibliothèques plutôt restreint (pas moyen d'ouvrir une fenêtre
grahique par exemple, ou une connexion réseau).
Après, il existe une foultitude de bibliothèques qui ont été
développés pour le C.
> Je veux dire par là que j'ai eu un
> livre entre les mains : "Langage C L'essentiel du code et des
> commandes" de Yves Mettier et dans ce livre je ne reconnais pas très
> bien le code de base du langage mais plutôt des fonctions à apprendre
> par coeur avec des librairies. J'ai le sentiment que c'est beaucoup
> plus utile de savoir programmer avec que de faire des algorithmes
> consommateurs de temps?
C'est un problème plus global en programmation: quasiment tout
ce que l'on veut faire existe déjà sous une forme ou une autre
ailleurs. Et l'éternelle question est: vais-je avoir plus vite
fait de sélectionner, apprendre, particulariser ce qui existe
déjà où tout refaire ?
Mais si la question se pose au cas par cas pour chaque projet,
en situation d'apprentissage, il faut savoir faire les deux.
Savoir coder par soit même *et* savoir ré-utiliser.
> Je suppose que une fois les bases du C acquises E/S, pointeurs,
> écriture de fichiers, je peux directement passer à un autre langage et
> faire appel au C quand je n'ai pas la connaissance d'un objet pour
> accomplir telle ou telle tâche.
Comme dit dans d'autres messages, les E/S sont par nature un
problème compliqué, et les fonctions standart du C ne sont pas
forcément très bien faites.
A mon sens, les bases du C (et de tout langage impératif
de cette génération) sont: algorithmique de base (conditions,
boucles, tableaux, fonctions), types de données utilisateurs
(struct / enum / typedef), pointeurs et allocation dynamiques.
Les E/S ne sont qu'un mal nécessaire (et encore, je m'interroge
sur un parcours de formation sans E/S).
> Je pense alors à C++.
Malgré tout le bien que je pense de ce langage, il me semble
que tu en es encore très loin. Ou au contraire, change tout
de suite, et essaye "Accelerated C++", ou alors
"Programming -- Principles and Practice Using C++".
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_mot=130
La manipulation de tableaux 1d ou 2d, ce sont les fondamentaux. L'algorithmique
plus complexe, ce sont les bibliotheques.
>Est-ce que �a peut r�ellement servir sachant qu'il me semble que ce
>langage d�pend des librairies. Je veux dire par l� que j'ai eu un
>livre entre les mains : "Langage C L'essentiel du code et des
>commandes" de Yves Mettier et dans ce livre je ne reconnais pas tr�s
>bien le code de base du langage mais plut�t des fonctions � apprendre
>par coeur avec des librairies.
Non, tres rare d'avoir besoin du "par coeur" pour les fonctions.
Il y a de la doc un peu partout, sur ton systeme, sur internet.
Normalement, il suffit de lire les choses une ou deux fois, ca t'impregne
des mecanismes. Et apres, quand tu as besoin, tu lis la doc correspondante.
Bon an mal an, il y a des choses que tu vas connaitre par coeur, a l'arrivee,
mais pour tous les machins un peu specifiques, ben tout le monde "se souvient"
que ca existe et regarde la doc si necessaire.
je ne sais pas du tout ce que valent ces ouvrages, je ne saurais te conseiller.
>J'ai le sentiment que c'est beaucoup
>plus utile de savoir programmer avec que de faire des algorithmes
>consommateurs de temps?
C'est utile d'avoir fait un peu d'algorithmique pour comprendre comment
ca marche. C'est aussi utile parce que tu ne vas presque jamais tomber
exactement sur le truc dont tu aurais besoin dans un contexte precis: tu
auras toujours des bibliotheques qui implementent des choses approchant, et
il faudra adapter (ecrire un peu de code qui "augmente" ou qui "utilise" les
algorithmes en question. Pour ce faire, c'est bien d'etre familier avec ceux-ci.
>Ou alors est-ce que je dois voir le livre de Y.Mettier comme la
>seconde �tape de l'apprentissage ? Je pense �galement � "C en action"
>du m�me auteur. Je pense �a pourrait �tre la seconde �tape?
>
>Je suppose que une fois les bases du C acquises E/S, pointeurs,
>�criture de fichiers, je peux directement passer � un autre langage et
>faire appel au C quand je n'ai pas la connaissance d'un objet pour
>accomplir telle ou telle t�che. Je pense alors � C++.
Oui, dans l'apprentissage de la programmation, il y a une bonne part de
reinvention de la roue. C'est un peu frustrant au depart, mais c'est aussi
un peu indispensable si tu veux pouvoir utiliser les roues ecrites par
d'autres. Tu as toujours une part d'implicite dans toutes les bibliotheques
que tu vas rencontrer: elles supposent toujours que toi-aussi, tu sais comment
marchent les choses et comment on programme. Si tu ne maitrises pas ces
aspects-la, tu vas rester "en surface", et tu risques fort de faire des choses
inefficaces (voire bugguees, car tu auras rate un aspect subtil du code0.
Apres, je ne suis pas forcement d'avis de commencer par le langage C,
qui est quand meme, il faut bien l'admettre, un langage hostile au
debutant...
mais ca on te l'a deja dit :)
Lis la Bible, le K&R.
Tous les meilleurs consultants du march� actuel (> 1800 � HT/J) ont
commenc� par l� il y a ~30 ans.
Bjr/sr,
Je te comprends Georges, mais actuellement, je suis certain que je
pourrais pas gagner de l'argent avec ma démarche d'apprendre à
programmer. Actuellement j'ai beaucoup de temps libre, mais cette
situation ne devrait pas durer, j'ai déjà passé beaucoup de temps à
étudier et je ne vais pas attendre 50 ans pour entrer sur le marché du
travail. Or ce que j'ai étudié n'a rien à voir avec l'informatique et
si je travaille dans ce domaine (la comptabilité), je vais réduire le
temps que je passe à apprendre la programmation actuellement.
Quoiqu’avec l'expérience que j'ai des cours à distance (j'étais
inscrit au CNAM), apprendre et travailler à plein temps n'est pas
nécessairement un cumul défavorable. Au contraire, le fait de disposer
de moins de temps oblige à aller vers l'essentiel quand on travaille
seul sans "tuteur".
Mais pour la programmation, je pense quand même que c'est comme une
langue étrangère et je parle encore par expérience, en immersion
complète c'est-à-dire sur une longue période n'avoir que la
possibilité de parler une langue étrangère est très efficace pour
assimiler l'ensemble de la langue. Je me dis que pour la programmation
c'est pareil. Alors que je peux gagner de l'argent dans le milieu
comptable, je ne vais pas chercher un stage dans le milieu de la
programmation. Faudrait-il encore que j'ai un niveau suffisant et que
je trouve ce stage. Peut-être en Inde? Alors oui, si je passe beaucoup
de temps à programmer, je peux gagner de l'argent avec. Mais ça sera
très peu probable contrairement à la plupart des personnes qui sont
ici, qui exercent dans le milieu.
J'envisage de lire le K&R, mais de l'avoir déjà feuilleté, je
comprends que les notions d'architecture informatique, d'assembleur et
d'algorithmes sont nécessaires pour trouver cet ouvrage intéressant.
Pour répondre aux postes précédents, disons que je n'ai pas
d'objectifs précis à ce jour. Je vais attendre d'atteindre un certain
niveau qui me permet de comprendre et construire des applications
basiques.
Dans le futur lointain, je voudrais être en mesure de bien comprendre
le système linux voire de participer à son développement. Google
semble offrir également la possibilité d'écrire des applications qui
si elles sont publiées sont déjà une reconnaissance. La programmation
des téléphones portable Windows mobile, iPhone, Androïd pourraient me
plaire. Encore il faudrait que ça existe au moment ou je quitte la
phase de débutant en C et comme ça me semble un prolongement logique C+
+ et encore plus loin, Python, C# ...
Un autre domaine qui serait peut-être plus cohérent avec ma profession
serait les systèmes de gestion de base de données...logiciels
comptables, mais ça serait en dernier ressort.
Je trouve qu'il y a un côté créatif dans l'écriture d'un programme
alors qu'une requête dans une base donnée m'emballe moins.
Pour résumer, je projette dans un premier temps de comprendre linux et
pourquoi pas les applications réseaux P2P ou VoIP. C'est ce qui me
semble assez accessible en terme de connaissances et ressources
(livres, pages web). Des domaines comme la virtualisation ou la
programmation de microcontrôleur pour cartes graphique ou son me
semblent beaucoup plus délicats, je veux dire par là qu'il y a des
prérequis plus importants à connaître pour arriver à un résultat qui
motive.
Et dans un second temps (le premier devrait me prendre au moins 10
ans), programmer des applis google, pour l'iPhone ou Windows mobile.
Là encore, ça devrait me prendre 10 ans.
Ca ne fait pas un an que j'ai commencé alors tout ça relève aussi un
peu du fantasme. Mais je considère comme un point de repère pour
orienter mes efforts et rester motivé...
Pascal
Le langage n'est pas vaste. Les applications sont innombrables.
> Je voudrais savoir si c'est utile de passer beaucoup de temps à
> maîtriser des boucles
Maitriser les boucles, qui est un aspect basique de la programmation
et non une caractéristique du langage C est indispensable, oui, si on
veut faire de la programmation, quelque soit le langage. .
> pour principalement implémenter des algorithmes
> de tri ou de manipulation de données (tableau 2d...) ?
Il se trouve que la bibliothèque standard du C fournit une fonction de
tri (qsort())
http://www.bien-programmer.fr/qsort.htm
qui couvre la plupart des besoins en tri.
Elle est d'un usage un peu délicat.
> Est-ce que ça peut réellement servir sachant qu'il me semble que ce
> langage dépend des librairies. Je veux dire par là que j'ai eu un
La bibliothèque standard du C a pour principale fonction d'apporter
des solutions portables à des problèmes courants, comme afficher/
saisir du texte, manipuler des ensembles et des chaines de caractères,
convertir des valeurs numériques en texte et inversement, faire des
tris et des recherches, gérer l'heure/date etc.
> livre entre les mains : "Langage C L'essentiel du code et des
> commandes" de Yves Mettier et dans ce livre je ne reconnais pas très
> bien le code de base du langage mais plutôt des fonctions à apprendre
> par coeur avec des librairies. J'ai le sentiment que c'est beaucoup
> plus utile de savoir programmer avec que de faire des algorithmes
> consommateurs de temps?
Savoir utiliser les fonctions de la bibliothèque est tout à fait utile
et nécessaire. Mais dans les cas réels, tu auras a écrire tes propres
fonctions 'applicatives' plus ou moins complexes, pour résoudre un
problème particulier. Là, il faut savoir inventer l'algorithme qui va
résoudre le problème à traiter, l'implémenter correctement, le tester
et le valider. C'est ça le travail du programmeur. La bibliothèque
résout les problèmes basique 'unitairement'. Une application réelle
est une combinaison astucieuse (un algorithme) de solutions simples...
> Je suppose que une fois les bases du C acquises E/S, pointeurs,
> écriture de fichiers, je peux directement passer à un autre langage et
> faire appel au C quand je n'ai pas la connaissance d'un objet pour
> accomplir telle ou telle tâche. Je pense alors à C++.
SI tu programmes en C++; tu n'as pas besoin du C. Il fait tout ce que
fait le C (pas toujours de la même manière, mais peu importe) avec des
tas de choses en plus (le paradigme objet).
Il faut que tu définisses plus clairement tes objectifs. Si ton but
est d'apprendre le C++; apprend le C++. Tu n'as pas besoin d'apprendre
le C pour ça.
Ne perds pas ton temps à répondre à Troll George.
> Mais pour la programmation, je pense quand même que c'est comme une
> langue étrangère et je parle encore par expérience, en immersion
> complète c'est-à-dire sur une longue période n'avoir que la
> possibilité de parler une langue étrangère est très efficace pour
> assimiler l'ensemble de la langue. Je me dis que pour la programmation
> c'est pareil
> <...> je ne vais pas chercher un stage dans le milieu de la
> programmation. Faudrait-il encore que j'ai un niveau suffisant et que
> je trouve ce stage. Peut-être en Inde?
Pourquoi en Inde ?
> J'envisage de lire le K&R, mais de l'avoir déjà feuilleté, je
> comprends que les notions d'architecture informatique, d'assembleur et
Non, pas du tout. Le C est un langage indépendant de la machine.
L'implémentation de la bibliothèque sert à régler les problèmes
spécifiques liés à l'architecture. A moins qu'on te demande d'écrire
un portage du langage C (donc de sa bibliothèque) sur une machine
particulière, tu n'as pas à connaitre l'architecture ni l'assembleur
pour programmer en C. C'est précisément le but de ce langage (on l'a
parfois qualifoié "d'assembleur universel et portable").
> d'algorithmes sont nécessaires pour trouver cet ouvrage intéressant.
Oui. ce n'est pas un livre d'initiation à la programmation.
Est-ce que tu arrives bien à faire la différence entre "la
programmation" et "un langage de programmation" ? J'ai l'impression
que tu confonds les deux...
> Pour répondre aux postes précédents, disons que je n'ai pas
> d'objectifs précis à ce jour.
Ca, c'est un vrai problème. Pas de but, pas de solution...
> Je vais attendre d'atteindre un certain
> niveau qui me permet de comprendre et construire des applications
> basiques.
Le C, n'est pas un langage pour débutant en programmation. C'est un
langage très professionnel, très technique, aux possibilités infinies
et tranchant comme un rasoir (il offre de milliers de façons de
planter son ordinateur !). On apprend pas à conduire sur une F1...
Je te rappelle ma devise : "C is a sharp tool"
> Dans le futur lointain, je voudrais être en mesure de bien comprendre
> le système linux voire de participer à son développement.
Système ? Tu as dit système ? As-tu la moindre idée de ce qu'est un
système et de la somme colossale de connaissance qu'il met en œuvre ?
Je ne voudrais pas te décourager, mais la plupart des gens qui
collaborent au noyau du système Linux sont des experts dans leurs
domaines ...
Par contre, une collaboration appréciée dans ce domaine est la
réalisation de 'modules' (aussi appelé 'drivers'), mais qui requièrent
parfois des connaissance avancées, non seulement en programmation, en
langage C mais aussi en architecture système, voire matérielle, quand
il s'agit d'un driver 'hardware'.
Si tu veux comprendre le système Linux, tu n'as pas besoin, dans
l'immédiat, de connaitre un langage de programmation (sauf pour
expérimenter). Il existe des livres techniques plus ou moins
accessibles qui expliquent l'architecture du noyau Linux et de ses
modules.
> Google
> semble offrir également la possibilité d'écrire des applications qui
> si elles sont publiées sont déjà une reconnaissance. La programmation
> des téléphones portable Windows mobile, iPhone, Androïd pourraient me
> plaire. Encore il faudrait que ça existe au moment ou je quitte la
> phase de débutant en C et comme ça me semble un prolongement logique C+
> + et encore plus loin, Python, C# ...
Pour IPhone, c'est Objective C qu'il faut connaitre... Là,
contrairement au C++, C'est une véritable extension du C90.
> Un autre domaine qui serait peut-être plus cohérent avec ma profession
> serait les systèmes de gestion de base de données...logiciels
> comptables, mais ça serait en dernier ressort.
> Je trouve qu'il y a un côté créatif dans l'écriture d'un programme
> alors qu'une requête dans une base donnée m'emballe moins.
Ca permet, par exemple avec du PHP, d'écrire des sites web dynamiques
qui peuvent être très créatifs...
De toutes façons, même dans une application 'mobile', il y aura
certainement des accès à faire dans des BdD. La création d'une base
relationnelle intelligente, qui optimise les données, évite la
redondance et les volumes de transactions un domaine utile (après, on
peut y trouver plus ou moins d'intérêt, question de gout...)
> Et dans un second temps (le premier devrait me prendre au moins 10
> ans), programmer des applis google, pour l'iPhone ou Windows mobile.
> Là encore, ça devrait me prendre 10 ans.
dans 10 ans les supports matériels auront évolué et on ne sait pas
trop quelles seront les demandes exactes. Ce qu'il faut c'est avoir
des connaissances générale solides et être capable rapidement de
s'adapter à un nouveau langage et surtout à un nouvel environnement de
programmation Qui peut dire quel système tournera sur nos portables
(pocketPC, Smartphone, <nouveauté 2020>, etc.) dans 10 ans ?.
> Ca ne fait pas un an que j'ai commencé alors tout ça relève aussi un
> peu du fantasme. Mais je considère comme un point de repère pour
> orienter mes efforts et rester motivé...
Es-tu conscient que la programmation est une activité extrêmement
prenante ? Si tu en vis, c'est OK, encore faut-il trouver du temps
pour tes projets personnels, mais si tu es bénévole, à moins d'être
rentier, d'avoir touché un gros héritage ou gagné au Loto, il faut
trouver du temps pour gagner de quoi se loger et manger... Les
journées ne font que 24h, ce qui est peu...
Ca c'est de l'argumentation logique...
Les anes ont des oreilles. Tu as des oreilles. Tu es un ane.
Le K&R n'est pas le meilleur livre au monde pour apprendre le C,
mais il est quand même plutot bon.
[SNIP, Linux, iPhone]
> Ca ne fait pas un an que j'ai commencé alors tout ça relève aussi un
> peu du fantasme. Mais je considère comme un point de repère pour
> orienter mes efforts et rester motivé...
Oui, c'est bien d'avoir des rèves.
Bon, il me semble qu'écrire une appli iPhone sera plus facile
que de contribuer à Linux, mais à ce stade, ça n'est pas bien grave.
Après, tu dis avoir commencé il y a un an... Tu y passes
combien d'heures par semaine environ ?
Bjr.sr,
Pour répondre aux 2 derniers posts :
J'ai commencé exactement il y a 3-4 ans avec un tutoriel sur les
algorithmes : "algorithmes pour non-matheux" ; j'ai fait les exercices
très sérieusement. Cependant, j'ai arrêté à l'algo sur le jeux de
dames, c'était trop en terme d'heures passées à faire les exercices
(approx. 4heures pas semaine et 3-4 le week-end) pendant 6 mois (je
pouvais passer 1 semaine sur un chapitre ou sur un exercice) et je
crois avoir atteint mes limites intellectuelles... Pour combler le
manque de pratique, j'ai fait quelques sites web dont un ou j'ai
approché php sans succès : http://www.accreditation.freesurf.fr/ J'ai
appris le html et le css.
Après quoi, j'ai repris le cycle de l'expertise comptable en cours à
distance et présentiel, j'ai appris à travailler seul avec beaucoup de
sacrifces sur le temps libre car si les cours arrivent dans la boîte
aux lettres, c'est difficile de se faire violence contrairement à une
séance à une heure déterminée dans une salle avec un tableau, un
prof...
On va dire 2-3 ans après le dernier exercice du site sur les algos
(excellent travail de l'auteur), j'ai commencé à apprendre le langage
C. Je ne me souviens plus comment je suis arrivé à choisir ce langage,
je pense c'est après une recherche sur le fonctionnement des drivers
sous linux pour un netbook (carte wifi, carte son...) à force d'avoir
de faire face à des problèmes de compatibilités, je me suis dit je
vais essayer de contribuer et donc d'apprendre à programmer. Je doute
avec l'évolution des OS que mon savoir sera d'une quelconque utilité
dans ce domaine quand j'aurais finis d'apprendre si je vais jusqu'au
bout.
Mais nul n'étant prohète en son pays, j'avance dans l'inconnu, je ne
sais pas ce que je pourrais faire avec un ou plusieurs langages en
informatique mais dans l'incertitude j'occupe mon temps libre et
j'occupe mon temps à apprendre la programmation. Une double compétence
n'est pas non plus quelque chose d'inutile.
Actuellement, je consacre tout mon temps à apprendre le langage c, je
suis en recherche d'emploi et il est probable que je commence à
travailler dans 1 ou 2 mois... Donc, je peux dire que je passe 2-3
heures par jour à l'écriture de code c et 1 ou 2 heures à la lecture,
recherche d'info sur la programmation en général. Je consacre
également 2 ou 3 heures par semaines à l'architecture des ordinateur
et l'assembleur sous Linux et Windows.
Quand je suis embauché, je pense que le temps consacré à la
programmation sera divisé par 2 : 10 hr par semaine maximum. Je vais
essayer d'être à la hauteur dans mon travail dans l'expertise
comptable mais en dehors des heures de travail, je vais essayer autant
que possible de me concentrer sur la programmation. Même si je dois
sacrifier loisirs et vie de famille "classique" (noêl, 31
décembre...). Je consacre : 2 ou 3 ans sur le langage C et
l'assembleur (autant que nécessaire) 1 ou 2 ans sur la POO et autant
sur C++, Python, C#, Java, Objective-C... en extra javascript, linux
shell, php, ruby, vba, Je suis d'accord, je dois rêver un peu !
Je voudrais être capable de faire un peu plus que la personne qui
construit son propre garage comme extension de sa maison ou son
terrassement...
Il est dit sur un site web, que 10,000 heures de travail (exercices et
reflexion de difficultés croissantes) sont nécessaires pour devenir un
expert ou dans le domaine de la musique pour faire partie d'un
orchestre philarmonique. Tout les musiciens ne sont pas
philarmonistes. Il y en a qui jouent dans le métro, dans des cafés,
qui accompagnent des artistes, je ne connais pas toutes les activités
ou métiers des musiciens.
Loin des 10,000 heures, je pense atteindre en 10 ans 3,000 heures et
en 20 ans 5,000 - 6,000 heures. S'engager pour 20 ans, je reconnais
que comme la crise des subprimes, une vision à long terme est tout
simplement utopique mais "l'espoir fait vivre, l'espoir vaincu
pleure". Quelle sera l'évolution de l'informatique?
Si une personne est passée par une expérience similaire...
Pascal
Oui bon en gros, plannifier autant, ça ne m'a jamais reussi.
J'y suis allé au culot et puis c'est tout.
On se force sur le tas, on discute choses concretes et ça marche tout
seul.
Pour tout te dire, je n'ai jamais rien reussi de ce que j'ai vraiment
plannifié en ce qui concerne mon parcours professionel.
(Attention au sens de comppréhension de cette phrase :-) )
--
/home/mihamina/.signature
Est-ce que ce livre couvre la base, c'est à dire les tableaux, les
boucles, recherche, tri ... Je m'étonne que tu poses des questions si
basiques dans tes posts si tu maitrises déjà ces bases...
> dames, c'était trop en terme d'heures passées à faire les exercices
> (approx. 4heures pas semaine et 3-4 le week-end) pendant 6 mois (je
> pouvais passer 1 semaine sur un chapitre ou sur un exercice) et je
> crois avoir atteint mes limites intellectuelles... Pour combler le
Tu faisais de l'algorithmie sans connaitre de langage de
programmation ? En principe on utilise un langage simple, fait pour ça
comme le Pascal (Turbo Pascal, freePascal), qui est un langage clair,
simple, bien défini (pas ou peu de zones d'ombres, contrairement au C
et ces centaines de "comportements indéfinis"), proche, voir très
proche (pour des raisons historiques) du "langage algorithmique" et
surtout précis. Si tu passes la compilation, c'est que tu maitrises
déjà pas mal l'écriture du code, car le moindre écart est sanctionné,
contrairement au C qui te fournit gratuitement 40.000 façons de
planter ta machine sans que le compilateur ni l'exécution ne s'en
aperçoive.
Attention, ça ne signifie pas qu'un programme Pascal qui compile soit
fonctionnel ou qu'il ne puisse pas planter la machine, surtout si on
utilise les pointeurs ! Mais, selon l'implémentation, il y peut y
avoir un certain nombre de contrôles à l'exécution qui stoppent le
programme en cas de défaut majeur, comme un débordement de tableau,
par exemple.
> manque de pratique, j'ai fait quelques sites web dont un ou j'ai
> approché php sans succès :http://www.accreditation.freesurf.fr/J'ai
> appris le html et le css.
Le PHP est un vrai langage de programmation impérative qui nécessite
la maitrise des éléments de programmation classique, dont je rappelle
une fois de plus la liste :
- valeur
- constante
- variable
- opérateurs (arithmétiques, logiques)
- structures de code (décision, itération)
- tableaux, indices
- structures de données
- fonction et procédure (création, appels, paramètres)
> Après quoi, j'ai repris le cycle de l'expertise comptable en cours à
> distance et présentiel, j'ai appris à travailler seul avec beaucoup de
> sacrifces sur le temps libre car si les cours arrivent dans la boîte
> aux lettres, c'est difficile de se faire violence contrairement à une
> séance à une heure déterminée dans une salle avec un tableau, un
> prof...
Oui, c'est très difficile de travailler seul. Beaucoup plus qu'on le
croit (mais ça doit dépendre des personnes, ne généralisons pas...)
> On va dire 2-3 ans après le dernier exercice du site sur les algos
> (excellent travail de l'auteur), j'ai commencé à apprendre le langage
> C. Je ne me souviens plus comment je suis arrivé à choisir ce langage,
> je pense c'est après une recherche sur le fonctionnement des drivers
> sous linux pour un netbook (carte wifi, carte son...) à force d'avoir
> de faire face à des problèmes de compatibilités, je me suis dit je
> vais essayer de contribuer et donc d'apprendre à programmer. Je doute
> avec l'évolution des OS que mon savoir sera d'une quelconque utilité
> dans ce domaine quand j'aurais finis d'apprendre si je vais jusqu'au
> bout.
C'est pas très rationnel comme choix... Un langage n'est qu'un outil
et non une fin en soi. La programmation nécessite des connaissances
qui vont bien au-dela de la simple connaissance d'un langage. En plus,
écrire un driver Linux pour du matériel nécessite des connaissances
très pointues sur la partie 'temps réel' (tâche immédiate ou
"interruptions") de Linux, ce qui est très technique et parfois proche
de l'électronique (il faut parfois sortir l'analyseur logique voire
l'oscilloscope à mémoire pour comprendre tel ou tel timing...). Je ne
suis pas sûr que tu ais bien évalué les enjeux avant de te lancer...
J'ai l'impression que tu crois que si un programme ne fonctionne pas,
c'est simplement parce qu'il est mal écrit et que de connaitre le
langage de programmation utilisé suffirait pour le corriger ! Certes,
c'est un aspect non négligeable, et certains bugs sont simplement la
conséquence d'erreur de codages, mais c'est aussi souvent un problème
de conception (ai-je bien compris la spec ? ai-je trouvé le bon moyen
de résoudre le problème, ai-je bien pensé à tous les cas : normaux,
limites, hors limites, le code est-il portable, suffisamment auto-
adapatif, ai-je pensé à fournir et documenter les réglages
nécessaires pour qu'il fonctionne correctement dans toutes les
conditions (configuration) etc. Les questions sont innombrables et
n'ont absolument rien à voir avec la connaissance d'un langage de
programmation, aussi maitrisé soit-il...
> Mais nul n'étant prohète en son pays, j'avance dans l'inconnu, je ne
> sais pas ce que je pourrais faire avec un ou plusieurs langages en
> informatique mais dans l'incertitude j'occupe mon temps libre et
> j'occupe mon temps à apprendre la programmation. Une double compétence
> n'est pas non plus quelque chose d'inutile.
A condition que tes objectifs soient :
- clairs
- réalistes
- réalisables
> Actuellement, je consacre tout mon temps à apprendre le langage c, je
> suis en recherche d'emploi et il est probable que je commence à
> travailler dans 1 ou 2 mois... Donc, je peux dire que je passe 2-3
> heures par jour à l'écriture de code c et 1 ou 2 heures à la lecture,
> recherche d'info sur la programmation en général. Je consacre
> également 2 ou 3 heures par semaines à l'architecture des ordinateur
Je ne suis pas sûr que ce soit très utile. Tu es électronicien ?
> et l'assembleur sous Linux et Windows.
Ceci n'a aucun sens. L'assembleur sous Windows et Linux est
strictement le même si l'architecture matérielle (PC, par exemple,
avec Pentium Intel x86) est la même. De toutes façons, comme déjà
expliqué, on a pas besoin de connaitre l'assembleur pour écrire un
programme en C. Au contraire, tout a été fait pour éviter ça. Je ne
sais pas trop ce que tu cherches à faire avec l'assembleur, qui n'est
vraiment utile en C que si on fait du débogage de très bas niveau,
pour éventuellement corriger ou au moins mettre un lumière un défaut
du compilateur... (crée du code faux ou inefficace). Mais vu la
complexité des architectures matérielles actuelles avec des pipe-lines
et de la prédiction dans tous les sens, je doute que tu sois capable
de faire mieux que les compilateurs réputés actuellement (le meilleur
pour Intel étant évidement le icc, Intel C Compiler).
Ou alors tu parles de programmation système en assembleur. alors là,
je dis stop. Oublie ça, et tiens en toi au C qui fait ça très bien et
de manière identique quelle que soit la cible (archi matérielle +
système).
> Quand je suis embauché, je pense que le temps consacré à la
> programmation sera divisé par 2 : 10 hr par semaine maximum. Je vais
> essayer d'être à la hauteur dans mon travail dans l'expertise
> comptable mais en dehors des heures de travail, je vais essayer autant
> que possible de me concentrer sur la programmation. Même si je dois
> sacrifier loisirs et vie de famille "classique" (noêl, 31
> décembre...). Je consacre : 2 ou 3 ans sur le langage C et
> l'assembleur (autant que nécessaire) 1 ou 2 ans sur la POO et autant
> sur C++, Python, C#, Java, Objective-C... en extra javascript, linux
> shell, php, ruby, vba, Je suis d'accord, je dois rêver un peu !
>
> Je voudrais être capable de faire un peu plus que la personne qui
> construit son propre garage comme extension de sa maison ou son
> terrassement...
>
> Il est dit sur un site web, que 10,000 heures de travail (exercices et
> reflexion de difficultés croissantes) sont nécessaires pour devenir un
> expert ou dans le domaine de la musique pour faire partie d'un
> orchestre philarmonique. Tout les musiciens ne sont pas
> philarmonistes. Il y en a qui jouent dans le métro, dans des cafés,
> qui accompagnent des artistes, je ne connais pas toutes les activités
> ou métiers des musiciens.
Je connais assez bien. Je n'ai jamais raisonné en terme de nombre
d'heures, parce que ça dépend des gens et des objectifs. Par contre,
il est certain que pour être au niveaux des concours, ne serait-ce que
pour briguer une place de musicien du rang dans un orchestre
classique, il faut un tel niveau de préparation et de technique que
ça nécessite, oui, des heures d'entrainement par jour, au risque de se
détruire... (tendinites etc.), et ce pour un cachet finalement assez
faible (97€ brut par séance de 8h, répétition ou concert, tarif
syndical minimum)
Mais tu as raison, il y a des musiciens qui n'ont pas cet entrainement
et qui font aussi de la belle musique, voire de façon professionnelle.
Pour la musique, la technique seule ne suffit pas. elle est certes
nécessaire, mais elle s'accompagne d'une large culture musicale faite
d'écoute, de lecture, de rencontres...
> Loin des 10,000 heures, je pense atteindre en 10 ans 3,000 heures et
> en 20 ans 5,000 - 6,000 heures. S'engager pour 20 ans, je reconnais
> que comme la crise des subprimes, une vision à long terme est tout
> simplement utopique mais "l'espoir fait vivre, l'espoir vaincu
> pleure". Quelle sera l'évolution de l'informatique?
>
> Si une personne est passée par une expérience similaire...
Etant aussi autodidacte en informatique, je peux effectivement essayer
de résumer mon parcours, si tu trouves que ça peut t'aider.
Dès l'age de 8 ans, je bricolais du Mécanno, et ce qui m'intéressait
le plus, c'était les moteurs, les ampoules, les contacteurs, les fils
électriques, les piles... Bref, une certaine prédisposition pour la
technique et l'électricité en général. A 10 ans, j'ai reçu à Noël (mon
père avait bien senti mon attirance pour la chose) une boite de
montage électroniques 'Phillips' avec une plaque à trous, des ressors
pour faire les contacts et un tas de composants mystérieux. Après
avoir appris le code des couleurs, quand j'ai réussi à monter mon
premier récepteur radio, en suivant scrupuleusement le plan, sans
comprendre ce que je faisais, j'avoue que ça m'a grisé et donné envie
d'en savoir plus...
J'ai commencé à lire attentivement la documentation complémentaire
fournie un peu plus en détails, et les choses sont devenues un peu
plus claires (résistances, condensateurs, diodes...), biens que
parfois mystérieuses, notamment le fonctionnement du transistor...
Ensuite, je me suis un peu égaré dans des études générales,mais après
des fugues et autres abandons d'études, j'ai fini par exprimer ce que
je voulais faire à une psychomachin, et par entrer en seconde
technique à l'École Centrale d'Électronique. Là, ça a été le
ravissement tous les jours. Enfin je comprenais exactement ce qui se
passait dans un circuit électronique. C'est pas simple, et ça demande
un niveau de math assez sérieux, au fur et à mesure qu'on avance, amis
j'ai fini par avoir le Bac F2 (éléctronique) et j'ai fait les 2 ans de
préparation au BTS (raté, car la musique avait commencé à prendre plus
d'importance que les études...)
Armée (dans ma musique!), puis premier boulot dans l'électronique
(dépannage HiFi, gestion de pièces détachées etc.). Dès ce premier
travail (années 80), j'ai été exposé à la puissance d'un système
informatique performant (celui de notre fournisseur, car nous, on
avait rien !), et ça a commencé à me travailler. Je classais mes
réparations et mes pièces sur des fiches cartonnées, j'avais un
fichier client idem, je passais mon temps en paperasse, recherches etc
au lieu de faire du dépannage (100 par mois environ)... Chez notre
fournisseur, tout était automatisé, les documents écrits sur
imprimante (matricielle à l'époque !) etc... J'avais l'impression
d'être au moyen-age.
Il se trouve que par hasard, un Commodore 64 (un des premiers
ordinateurs personnels : 64 signifiait 64 ko de mémoire vive !) a
atterri sur mon établi. Il était en état de marche, et j'ai eu la
curiosité de l'allumer... Il passait automatiquement en mode
"interpréteur BASIC". J'ai dégotté un petit bouquin sur le sujet et
j'ai commencé, le soir après le boulot, à bricoler quelques lignes de
BASIC. Il n'est pas resté longtemps (heureusement, car je ne pouvais
rien sauvegarder), mais ensuite, un des commerciaux a acheté un Apple
II J'ai demandé à y avoir accès après le boulot, et j'ai continué mon
auto-apprentissage du BASIC.
J'arrivais à faire des choses simples, mais dès que j'ai commencé à
vouloir écrire des programmes plus importants (gestion d'un fichier
client, par exemple, avec sauvegarde sur disquettes); je me suis
heurté à des difficultés (instabilité, interactions entre les données,
spaguettisation du code etc.) dues, je l'ai compris plus tard, à
l'usage intensif (et obligatoire) des variables globales, et du GOTO,
du fait que le BASIC de l'époque (Langage de 2ème Génération ou L2G)
ne connaissait pas les structures de code, procédures et les fonctions
(invention des L3G).
Ensuite, j'ai changé d'employeur pour un travail moins intéressant
techniquement (plateforme de contrôle), mais à 3/5 de temps, ce qui a
permis de développer mon activité musicale. Face à ce travail
répétitif, j'imaginais la possibilité d'automatiser certaines tâches
(mesures, relevés). J'ai retrouvé un Apple II dans un des bureaux, et
j'ai continué mes bricolages... Il me fallait imaginer un moyen de
relier l'ordi aux appareils de mesures... Et là, je suis encore tombé
sur un os...
Je quitte ce boulot en 87 pour une formation AFPA en micro-
informatique industrielle, bien décidé à comprendre une fois pour
toute comment un ordinateur peut agir sur du matériel extérieur.
Je me suis passionné pour l'aspect 'réseau' (à l'époque, une simple
liaison série asynchrone), car je sentais que la clé était là... A
l'époque, j'ai acheté mon premier PC, et j'ai découvert Turbo Pascal
3. Quel choc ! Toutes les galères liées BASIC disparaissaient,
notamment grâce aux structures de code (fini les GOTO), aux fonctions
et aux procédures ! Enfin le code devenait lisible et facile à
modifier (un simple éditeur de texte, même si l'environnement TP3
était assez rustique et fermé, avec TP4, ça c'est grandement
amélioré). Mon projet de fin de stage s'est résumé à une simulation
sur PC du sujet que j'avais choisi (un spooler d'impression série)
écrite en TP4.
J'ai passé une année dans un labo de tests de circuits hybrides où
j'ai écrit un programme de tests automatiques (en BASIC L3G, qui me
rappelait le Pascal). Je me suis ensuite intéressé au C (plutôt facile
quand on a fait du Pascal avant). J'ai ensuite fait un an de stage en
informatique de gestion (beark), qui c'est terminé, à notre demande
expresse, par 5 jours de C intensif : le vendredi matin : les listes
chainées, le vendredi AM : les arbres ! (heureusement que j'étais
préparé.)
J'ai eu mon premier poste de développeur à part entière dans une boite
d'électronique (département telecom). Pas de chance pour le C, j'ai
passé 3 ans à écrire de gros programmes en assembleur 51 ! Mais c'est
formateur, et je faisais les simulations d'algorithmes complexes sur
PC en C que je traduisais ensuite en assembleur. (Mon chef m'appelait
le 'compilateur humain', pas sûr que ce fut un compliment...).
Ensuite, à partir de 1993, j'ai basculé sur des projets mettant en
œuvre des architectures (68000 et dérivés) pour lesquelles les
compilateurs C étaient au point et performant. A partir de là, j'ai pu
exercer mes talents de développeur C. J'ai gardé l'habitude de
développer sur PC, puis de recompiler le code pour l'architecture
demandée (68k, puis PowerPC). Vu que les architectures sont hybrides,
j'ai pu vite me rendre compte des effets dévastateurs du code non
portable !
Évidemment, et parallèlement, il faut comprendre le projet sur lequel
on travaille (spécifications) et en tirer une analyse correcte qui
permet de résoudre les problème posés d'une manière fiable et
efficace...
Depuis 1999, je me suis intéressé aux forums C comme celui-ci (ou son
grand frère comp.lang.c), d'abord comme lecteur, puis comme
contributeur, ce qui a grandement permis d'améliorer ma connaissance
fine de ce langage si subtil (et donc d'améliorer la qualité de mon
code en terme de fiabilité et de portabilité, par exemple).
L'aventure professionnelle c'est terminée en 2006 suite à un
licenciement économique. Depuis, mon expertise du C n'intéressant plus
personne, je suis plutôt musicien, mais je n'ai pas coupé les liens
avec la programmation (sites web, PHP etc.).
Bjr,sr,
Honnêtement je trouve la fin pas cohérente (enfin ce n'est pas
vraiment la fin, j'imagine que tu n'es pas proche de l'âge de la
retraite). Mais je pense que tu ne veux pas avouer que la musique est
également ton domaine de prédilection. Je ne veux pas juger quoique ce
soit sur ton parcours, avec moins d'une année d'expérience en
informatique et programmation, je ne vois pas vraiment ce que je peux
t'apprendre.
Mais je continue de penser que pour programmer à un bas niveau, c'est
vrai qu'une formation en électronique boost la compréhension des
choses et permet de voir plus loin mais avec de la volonté tout le
monde peut comprendre le fonctionnement d'un driver. C'est vrai que ça
risque de demander beaucoup de temps et d'efforts pour une personne
qui n'a pas reçu une formation technique. Mais je ne crois pas que
c'est impossible...
Quand même, je trouve étrange un licenciement économique sans
reclassement pour une personne avec ton profil. L'informatique n'est
quand même pas comparable au secteur sidérurgique... A moins que
l'externalisation touche le secteur. Ce n'est pas nouveau mais peut-
être ça concerne les jeunes diplômés sans expérience. Je me souviens
avoir lu que des jeunes pouvaient partir en Inde et vivre dans les
conditions du pays (salaire locale) pour acquérir de l'expérience
professionnelle en programmation. Je ne sais pas si c'est fréquent et
si c'est toujours le cas.
Ca n'a rien à voir avec ce groupe de discussion, mais au sujet des
licenciements économiques, j'ai le souvenir d'un film qui m'a marqué:
"Save the tiger". Ce film montre comment une entreprise a réagit aux
Etats-Unis face à la concurrence dans le textile des pays tigres dans
les années 70...
Merci
Pascal
> Honnêtement je trouve la fin pas cohérente (enfin ce n'est pas
> vraiment la fin, j'imagine que tu n'es pas proche de l'âge de la
> retraite). Mais je pense que tu ne veux pas avouer que la musique est
53 ans.
> également ton domaine de prédilection. Je ne veux pas juger quoique ce
j'aime ça,oui, depuis l'age de 8 ans, en autodidacte, pareil (j'ai un
eu du mal avec les parcours 'scolaires'...)
> soit sur ton parcours, avec moins d'une année d'expérience en
> informatique et programmation, je ne vois pas vraiment ce que je peux
> t'apprendre.
>
> Mais je continue de penser que pour programmer à un bas niveau, c'est
> vrai qu'une formation en électronique boost la compréhension des
> choses et permet de voir plus loin mais avec de la volonté tout le
> monde peut comprendre le fonctionnement d'un driver. C'est vrai que ça
> risque de demander beaucoup de temps et d'efforts pour une personne
> qui n'a pas reçu une formation technique. Mais je ne crois pas que
> c'est impossible...
Disons que ça fait un gros morceau à avaler...
> Quand même, je trouve étrange un licenciement économique sans
> reclassement pour une personne avec ton profil. L'informatique n'est
J'aurais pu continuer à faire du développement la tête dans le guidon,
mais j'en avais un peu ma claque et j'ai voulu prendre un peu de recul
et passer à une phase 'formation/conseil en qualité logiciel'. Mais
les boites françaises ne sont pas intéressées. Les grosses ont ce
qu'il faut, les petites n'ont pas les moyens, les moyennes n'ont pas
le temps...
> quand même pas comparable au secteur sidérurgique... A moins que
> l'externalisation touche le secteur. Ce n'est pas nouveau mais peut-
Ça, c'est certain. Une partie du code standard (IHM, par exemple) est
maintenant produit en Inde... Mais l'intégration reste faite en
France, pour le moment. Pour le code spécifique (drivers etc.) ça
reste encore 'local'... pour combien de temps ?
Hello,
> Mais je continue de penser que pour programmer � un bas niveau, c'est
> vrai qu'une formation en �lectronique boost la compr�hension des
> choses
Honn�tement, non. Mais une formation de base � l'architecture de base
d'un ordinateur (CPU, registres, m�moire, bus ...) et une connaissance
de base des m�canismes d'une pile est certainement un plus pour
d�marrer.
> et permet de voir plus loin mais avec de la volont� tout le
> monde peut comprendre le fonctionnement d'un driver.
Comprendre les principes, certainement.
> C'est vrai que �a
> risque de demander beaucoup de temps et d'efforts pour une personne
> qui n'a pas re�u une formation technique. Mais je ne crois pas que
> c'est impossible...
Je ne pense pas non plus que ce soit "impossible", strict-sensu. Je ne
suis pas persuad� en revanche que tu r�alises l'ampleur de la t�che.
<m�taphore>
A peu pr�s tout le monde peut apprendre � faire du v�lo. Beaucoup peuvent
apprendre � conduire une auto standard. Quelques uns peuvent apprendre
� piloter un avion de tourisme. Une tr�s faible quantit�, au prix de
gros efforts (et en ayant des dispositions naturelles) peut maitriser
le pilotage d'un avion de combat genre Mirage 2000.
Ecrire un driver, c'est du genre Mirage 2000.
</m�taphore>
> L'informatique n'est
> quand m�me pas comparable au secteur sid�rurgique... A moins que
> l'externalisation touche le secteur.
Oui �a dans le genre, on peut le dire :-) Une part importante du boulot
(en particulier le boulot ingrat) est sous-trait�e en Inde et aussi
de plus en plus dans les pays de l'ex bloc sovi�tique (Hongrie, Roumanie,
j'en passe).
> Ce n'est pas nouveau mais peut-
> �tre �a concerne les jeunes dipl�m�s sans exp�rience.
Non.
> Je me souviens
> avoir lu que des jeunes pouvaient partir en Inde et vivre dans les
> conditions du pays (salaire locale) pour acqu�rir de l'exp�rience
> professionnelle en programmation. Je ne sais pas si c'est fr�quent et
> si c'est toujours le cas.
Jamais entendu parler. Par contre j'en connais pas mal qui sont all�s
en Am�rique, en Chine ou au Japon.
Ce qui se fait beaucoup, c'est les indiens qui
d�barquent en masse dans les boites de consultance europ�ennes...
Ce que je peux dire, c'est qu'aujourd'hui la situation en France est
assez m�diocre pour les informaticiens en g�n�ral : chom�ge,
bas salaires, difficult�s de reclassement, etc.
En Belgique et au Luxembourg, c'est d�j� beaucoup mieux :
peu ou pas de chom�ge chez les informaticiens, salaires
(nets) tr�s sup�rieurs, etc.
Pour les autres pays europ�ens, je ne sais pas trop.
En Angleterre, �a va pas trop mal pour les gens exp�riment�s
ou tr�s exp�riment�s; Toujours en Angleterre, pour les
d�butants, c'est plus dur � cause de la tr�s forte pr�sence
d'indiens et de pakistanais.
--
Jean-marc
<Métaphore>Je vais essayer de mettre les pieds sur l'échelle pour
monter dans le cockpit du mirage 2000, je vois si je peux arriver
jusqu'au cockpit et une fois dedans si je peux démarrer l'engin. Peut-
être que finalement, je ne vais que passer la tête par dessus juste
pour voir si je reconnais des "boutons". </métaphore>
<reve>Mais je suis d'accord, c'est peu probable que j'arrive à un
niveau ou je peux créer un code pour faire fonctionner une souris,
carte son...affichage vidéo de l'iphone...</reve>
A vrai dire, la programmation est une occupation qui demande tellement
d'efforts que je pose un objectif, si j'arrive à la moitié du chemin
dans 10 ans, j'espère alors pouvoir continuer (j'ai 31 et si être
programmeur à 50 fait de moi un "vieux" parce que j'aurais le même
niveau qu'un jeune de 25 voire 20, ça ne me freine pas) autrement
changer de chemin toujours dans le domaine vers des choses que je sais
accessibles à un niveau basique avec moins d'efforts (html...).
Cependant, je pense alors qu'une connaissance dans un langage
informatique comme le c permettra de ne pas rester trop au niveau
basique... Après, c'est vrai qu'il y a une très forte concurrence des
pays qui ont "faim" (Europe de l'Est, Inde, Pakistan, Chine...). Mais
je ne pense pas que c'est une raison pour déclarer forfait avant même
de commencer. Aujourd'hui, qu'on le veuille ou non, ce qui se passe
dans le secteur de l'informatique n'est pas une fatalité. Il est
toujours possible d'acquérir un savoir.
Pascal