Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?
Lire la doc, et aussi les cours et tutoriels pour apprendre le langage C, moyen sûr et efficace.
Livres papiers/électroniques
Des tutoriels
L'étudier à l'école
Demander à un(e) ami(e) qui le maîtrise
Sites d'apprentissage
Sites d'entraide
Faire des exercices, guidés par un livre (ex: K&R)
Faire des exercices, guidés par une personne
Faire des exercices, guidés par un site Web
Lire du code source
Participer à des projets de développement
Autres...
Quel est selon vous le meilleur moyen d'apprendre ce langage (expliquez votre choix) ?
Lire la doc, et aussi les cours et tutoriels pour apprendre le langage C, moyen sûr et efficace.
Personellement, je suis en apprentissage du C, avec le livre K&R mais je lutte pas mal, je trouve le livre tres innaccessible et trop peu détailler comparer à mon livre sur le Python 3 ...
Je pense que je vais m'orienter vers des tutorial, même si les tutoriaux en Francais et avec des exercices ne sont pas legions.
D'ailleurs, la j'en suis aux pointeurs justement, alors j'arrive à comprendre qu'un pointeur pointe sur l'adresse d'une variable, mais je ne vois pas en quoi c'est si interessant.
Le K&R est excellent "après" que l'on ait les bases du C !
Ca n'est pas le meilleur livre pour apprendre le C, mais plutôt pour l'approfondir.
En tout cas, profite bien de ton exemplaire !![]()
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Je vois merci, as tu une preference pour un livre en particulier ou un tutoriel ? En francais, autant je ne suis pas mauvais en anglais, mais l'anglais ne ferais que rajouter en difficulter, sans compter les possibles erreurs de compréhension.
Bien entendu il doit comporté des exercices, sinon je peux reprendre ceux du K&R, après tout, même si le livre est assez compliquer (), j'y ai quand même appris quelques petites choses, à part les opérateurs byte à byte que je n'arrive pas à integrer (en fait, il y a tres peu d'explications...) et les pointeurs pour le moment j'ai pas eu trop de mal.
C'est précisément pour cela qu'il aurait été intéressant de voir les langages dans l'ordre chronologique de leur apparition puisque chacun d'eux tente d'améliorer l'existant.
C'est une question qui est loin d'être anodine, mais tu peux déjà dégager plusieurs arguments valables :D'ailleurs, la j'en suis aux pointeurs justement, alors j'arrive à comprendre qu'un pointeur pointe sur l'adresse d'une variable, mais je ne vois pas en quoi c'est si interessant.
- Si tu sais ce qu'est une adresse mémoire, tu comprends qu'il te faudra bien un type de donnée dédié pour les représenter. Ceci justifie en soi l'existence du pointeur. Ensuite, comme il y a toujours « quelque chose » à l'endroit pointé, tu peux également spécifier le type de cette donnée, et introduire la notion d'indirection ;
- Lorsque tu appelles « malloc(n); », tu réserves n octets de mémoire. Mais quelle information cette fonction doit-elle te renvoyer pour que tu puisses les utiliser, et sous quelle forme ?
- Quand ton pointeur pointe une variable, ça te permet d'écrire directement dedans. Dans la plupart des langages, C compris, on fait une affectation avec « variable = valeur » mais, en pratique, que va-t-il techniquement se passer au niveau du micro-processeur et quels sont les routines sous-jacentes qui vont effectivement copier ta valeur dans ta variable ?
Une bonne approche consiste souvent à prendre le problème à l'envers : « comment ferais-je si je devais me passer complètement des pointeurs » et « que devrais-je utiliser à la place » ?
Méthodologie de la programmation en C
Lit également la critique, ça te donnera une idée![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Merci beaucoup pour ces précisions Obsidian
Franck.H merci aussi je vais me pencher sur ce livre.
![]()
j'ai choisi :
- L'étudier à l'école
- Des tutoriels C
- Faire des exercices, guidés par un livre (ex: K&R)
Pourquoi ces choix et bien parce qu' à l'école tu as la possibilité de comprendre d'une part les fondamentaux de l'architecture et du fonctionnement de l'ordinateur et d'autre part de comprendre la base de la programmation à savoir l’algorithmique. Une fois que c'est fait tu peux aller plus loin en lisant et en appliquant des tutoriels (merci developpez.com) et autres livres à exercices corrigées tels Programmer en Langage C (merci Claude Delannoy).
Après ces 2 étapes la suite c'est de travailler sur un projet que ça soit dans le cadre de l'entreprise ou dans un cadre académique. C'est de cette manière qu'on apprend réellement les subtilités du langage.
Si c'était à refaire je le referai car c'est grâce à cette approche que je ne tremble pas devant un nouveau langage : j'ai la base
Cependant s'il fallait changer quelque chose je penche pour plus de pratique plus de projets...car en effet c'est en programmant que l'on devient programmeur même si dans les débuts un simple ";" oublié peut vous prendre la journée à débuger.
Un conseil au débutant : maîtriser les concepts de base (les tableaux, variables, les types, les chaînes de caractère, les pointeurs, la gestion de la mémoire ...) une fois que c'est fait passer à la pratique ...exercez-vous
"Practice makes perfect" disent les anglo-saxons
![]()
"L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent."
- Benjamin Franklin
De l'aide en Javascript , consultez la FAQ JS.
De l'aide sur le FrameWork JS DHTMLX : posez vos questions sur le forum des Bibliothèques & Frameworks JS.
Comme n'importe quel langage, on peut l'apprendre en autodidacte si l'on est assez courageux. Mais en suivant des cours ou en étant assisté d'une personne plus expérimentée les résultats seront meilleurs selon moi.
Le C n'est pas un langage de "débutant" (même s'il faut bien débuter un jour) et une des erreurs que font beaucoup d'autodidactes est de programmer n'importe comment car ils suivent des tutoriels piochés à droite et à gauche. Rien à faire, pour programmer efficacement dans ce langage, il faut s'y accrocher. J'accuse ainsi le C de dégoûter certains de la programmation car il demande pas mal de maîtrise, alors que des programmeurs en herbe aimeraient arriver plus vite à un résultat.
Perso j'ai pas de mal à "apprendre les langages" c,c++,lisp,python,ruby etc le soucis c'est que je ne sais pas quoi faire ensuite parce que je ne sais pas programmer.
Je me demande comment font les gens pour créer des bibliothèques qui permettent de faire des gui ou des implémentations de langages par exemple.
Ils apprennent surement cela à l'école..
Non pas nécessairement besoin d'une école, la meilleure étant de se lancer mais en commençant par de petits projets. Je ne suis pas diplômé en développement et pourtant je suis sur un projet de moteur 2D en C/SDL permettant également de créer des fenêtres et les widgets associés (boutons, listes, case à cocher, etc...)
J'ai commencé en SDL avec le jeu du pendu puis petit à petit je montais le niveau, j'ai également participé à quelques petits concours qui n'existent plus aujourd'hui malheureusement. Il y a peut être encore les défis 2D/3D & Jeux et d'ailleurs c'est dommage car tu as loupé le Week-End jeux, il me semble que c'est ce Week-End, le but étant de créer un petit jeu en un Week-End![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Je pense que c'est pas la même "logique", aujourd'hui pour faire un jeu 2d on a des bibliothèque comme la sdl qui permette de faire des jeux juste en apprenant à l'utiliser sans avoir de connaissances particulières. Ce que je me demande c'est comment ils ont fait dans les années 70 sans utiliser tout les bibliothèques de maintenant !
70 c'est un eu trop vieuxdans le sens ou la SDL manipule des concepts qui existait pas a cette époque.
Bah la SDL est une lib bas niveau , si je prend un exemple d'un jeu 2D , imaginons que j'affiche une image , une image c'est un tableau de rvb en général , après il faut juste savoir ou afficher (en passant pas OS) ou vraiment a époque comme une console de jeux (genre snes) en assembleur , en disant voila sur ce pixel s'affiche cette couleur ect.
Après en fait plus haut level , avec plusieurs image , en fait des animation , avec les évènement clavier/souris des boutons ect.
Sinon non on peut pas faire de jeu sans connaissance particulière avec la SDL , la SDL permet éviter les choses commune a tous les jeux 2D software , donc le blit image et les contrainte bas level/multiplateforme , mais il faut de solide connaissance pour faire un jeu avec ,vu que la plupart des personnes qui pose des problème avec la SDL est plus un problème algorithmique que la lib en elle même.
Si tu veux faire un jeu de époque ,oui faut avoir des connaissance de époque du jeu , palette de couleur , tileset ect.
Un ami (qui pourtant n'avais pas de formation informatique orientée développement) a fait une très belle réflexion justement sur les programmeurs actuels en disant qu'ils sont de plus en plus chanceux d'utiliser des bibliothèques "toutes faites" alors que certains ont vraiment dû se casser la tête pour leur fournir.
Un exemple qu'il a cité était : "les fonctions qui permettent d'afficher des pixels sur l'écran pour afficher des formes, des fenêtres etc". Aucun programmeur ne s'en soucie aujourd'hui de ça car tout est là mais des pionniers (qui ont sans doute plus de 60 ans) ont dû y réfléchir et passer du temps considérable.
Et à propos des bibliothèques aussi, qui se soucie encore aujourd'hui d'essayer d'implémenter un Quicksort ou des arbres binaires pour autre chose qu'un but didactique? Nous avons en effet, moult bibliothèques qui le font à notre place, quel que soit le langage.
La conclusion : le métier de programmeur tend à être restructuré au rôle d'intégrateur, il ne programme plus lui-même les bases d'une application mais va de plus en plus assembler des composants comme des briques Lego.
C'est pas tout à fait faux en effet![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Sûrement pas des tutoriels. Les tutoriels nous prennes trop par la main, et on apprend pas vraiment a penser par nous même, mais plutôt a faire comme dans le tutoriel. Le meilleur moyen, c'est en ayant des exercice, des défis que on essaie de résoudre, des man page pour couvrir les fonction que on utilise. Un livre telle que K&R est également particulièrement utile.
- > tutoriel
- > Exercice
- > Livre (ou PDF)
- > Site d'entraide
- > Papier/vidéo/slide d'université
C'est vrai dans la plupart des cas, mais ça peu arriver dans des application qui nécessite de l'optimisation que on va implémenter nos propre algorithme/structure de donner pour répondre a certain critère (économiser l’accès mémoire ou traiter des MEGA donner qui ne peuvent fiter tous dans la mémoire, donc implémentation spécial qui va y aller par section)
Et en plus, utiliser c'est propre algo/structure ca apporte une certaine fierté personnelle (mais tant que on ne sais pas comment écrire des algo optimiser qui peuvent competitionner avec les libraires, on devrais utiliser utiliser la librairie.)
C'est une très bonne question, pas tant pour les bibliothèques que pour la puissance des machines de l'époque. Je suis convaincu que si l'on demandait aujourd'hui aux programmeurs de reprogrammer les mêmes logiciels sur les mêmes machines (celles de l'époque), bien peu en seraient capables.
Ce n'est pas forcément une paupérisation car les compétences perdues sur ce segment ont été compensées par de nouveaux savoirs-faire développés sur les machines modernes, mais je ne suis pas sûr que ce soit en proportions équivalentes.
En particulier, on a beaucoup perdu sur la notion de coût en ressources. À l'époque les machines avaient beaucoup de potentiel mais il n'était pas virtuellement illimité pour autant. Quand on voulait faire quelque chose qui sortait un peu de l'ordinaire, il fallait faire des compromis. Dans le même esprit, le code lié au matériel est une notion qui a été combattue ces dix à quinze dernières années et la tendance à suivre a été « portable ». C'est dommage car il y a beaucoup de techniques qui étaient très intéressantes en soi, et efficaces dans leur contexte.
Et je me demande d'ailleurs si on n'utilise pas moins bien la puissance des machines à notre disposition. Aujourd'hui, on gâche énormément de ressources parce qu'on sait qu'on en a plein à notre disposition. Quand tu as sur-dimensionné tous tes tableaux de manière totalement honteuse, tu te dis "oh ben on va rajouter une barrette de RAM sur le serveur". Sans dire que plus personne ne sait gérer correctement les ressources, je pense que nous sommes beaucoup moins forts que nos prédécesseurs.En particulier, on a beaucoup perdu sur la notion de coût en ressources.
Pour les jeux vidéos, il y a toujours la contrainte des ressources. La PS2 (ça date de 2001) n'a que 32 Mo.
La PS3 elle ne possède que 256 Mo de RAM de mémoire principale et 256 Mo de mémoire pour la CG, c'est pas mal, mais les ressources sont assez grosses donc ça peut vite être limite.
Sans parler des console portable de la PSP (16/32 Mo) , DS(4 Mo/ 16 Mo), 3DS 128 Mo.
Mais il est vrai que plus le temps passe moins on se souciera de l’économie de mémoire, mais de manière personnelle je fais de mon mieux pour utiliser le strict minimum.
Partager