Salut! J'ai 19 ans , je suis en licence en Genie Logiciel. Quand j'étais en première, j'ai commencé à suivre le cours de mathieu Nebra sur le C . Arrivé en fac , j'ai fait un BTS SIO et on se focalisait beaucoup plus sur les langages de haut niveau(VB , Java . . .) . Je considerait mon niveau en C comme moyen . J'ai récemment mis la main sur le cours officiel fait par les créateurs du C ( Brian Kernigham et Dennis Ritchie ) . Je me rend compte que c'est un véritable parcours du combattant. J'ai l'impression de n'avoir jamais fais de C . Je n'arrive pas a faire la motie des exercices , et je ne suis qu'au chapitre 2 . Et ça me demande beaucoup d'effort pour la comprehension , meme en sautant des exercices. Je me demande si c'est normal ou si le probleme viens de moi . Plusieurs personnes m'ont dit qu'il fallait commencer par le python , je me disais que je pourais m'en sortir avec le C . En passant , j'ai eu un bac L. Quelles peuvent etre les raisons de mes difficultés. Le C n'est-il pas fait pour moi?
Veuillez pardonnez la longueur , je souhaitais que vos reponses soient assez éclairées.
Personnellement je ne suis pas d'accord avec ce que tu dis, le C n'est pas reserve a l'elite. Certes c'est un langage bas niveau, moins comprehensible que du python qui lui est bien plus haut niveau (soit dit en passant je trouve que le python est un langage horrible). Apres le probleme qu'on peut avoir avec des livres, je parle en connaissances de cause, c'est de lire en se disant qu'on a compris mais sans mettre en application en dehors des exos, je suis entrain d'apprendre l'assembleur, qui lui est vraiment tordu mais rigolo, et au debut je lisais a l'arrache en pensant avoir compris, je me suis rapidement rendu compte que ce n'etait pas le cas. Ce qui peut arriver si tu as l'habitude des langages haut niveau c'est que tu ne comprends pas la facon de penser bas-niveau. Moi qui est commence par le c (ya eu algobox avant mais ca compte pas) a chaque fois qu'on me met un langage haut niveau sous les yeux je pleure et je me dit que le haut niveau c'est vraiment trop dur.
Pour resumer : le probleme n'est pas le langage C mais les langages dont tu as l'habitude.
J'ai ecris au fil de mes pensees et il se peut que ce soit un peu bordelique.
L'erreur est toujours située entre la chaise et le clavier | Retenez bien : l'avatar de Lorrio est une marmotte (lien de J-Edward)
J'ai personnellement déjà entendu que le K&R n'était pas très accessible.
Que ses auteurs sont évidemment des génies, mais que leur ouvrage n'est pas à recommander à n'importe qui, et que pour apprendre le C, c'est pas forcément le livre le plus adapté.
C'est vrai qu'il y a toujours une grande difference entre la creation et l'explication : certaines personnes sont tres douees pour creer d'autres sont tres douees pour expliquer mais pont savent bien faire les 2 en meme temps.
L'erreur est toujours située entre la chaise et le clavier | Retenez bien : l'avatar de Lorrio est une marmotte (lien de J-Edward)
je ne crois pas qu'il soit "reservé" a l'elite : le langage C est, comme tout les autres langages, un outil qui te sert a te faciliter la vie (histoire de pas te faire suer a ecrire en assembleur). le C est pratique aujourd'hui parce qu'il est rapide, leger et te permet un bon controle sur ta memoire, ca implique parfois pas mal de bidouille et de "magie noire" (par exemple, ce bout de code absolument incomprehensible calcul très, très vite l'inverse de la racine carré d'un nombre)
floatQ_rsqrt(floatnumber){longi;floatx2,y;constfloatthreehalfs=1.5F;x2=number*0.5F;y=number;i=*(long*)&y;// evil floating point bit level hackingi=0x5f3759df-(i>>1);// what the fuck?y=*(float*)&i;y=y*(threehalfs-(x2*y*y));// 1st iteration// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removedreturny;}
après, tout ca ne veut pas dire que le C est "reservé" a l' "elite", ca veut dire qu'il t'offre des libertés que ne t'offrirai pas JAVA par exemple, au prix d'une implementation parfois plus laborieuse... et d'un code moins facile a lire. Personnellement, j'ai commencé mes cours d'info a la fac en codant en C et... bha, j'ai survecut !
Salut ! Ah l'algo de calcul de racine de Carmack !
Il a été fait en C, mais rien n'empêche d'utiliser cela dans n'importe quel langage ! C'est un algo de Newton (qui s'explique très bien) qui converge donc vers la bonne racine, et le nombre magique est un point de départ de l'algo, directement codé selon la norme des float, qui a empiriquement été choisi pour être un bon point de départ dans tous les cas.
Mais tout ça, c'est pas tant le langage C, c'est les ruses mathématiques qui permettent de calculer quelque chose d'acceptable, mais vite. Et ça peut marcher dans n'importe quel langage !
l'ago racine de carmack, en personne ! (bon, carmack n'est pas l'auteur mais CARMACK bon sang !)l'objectif ici était plus de montrer un bout de code difficilement comprehensible au premier coup d'oeil en C, pas vraiment de parler de l'algo derrière (qui reste quand même costaud mais qui peut effectivement s'implementer dans tous langage), sinon comme exemple j'aurais peut être la macro container_of :
Je ne pense pas qu'il existe de langage réservé à « l'élite ». Maintenant je ne suis pas certain que le C soit un bon point de départ en programmation, il y a plein de langages bien meilleurs pour ça.
Sinon le K & R je ne l'ai jamais lu mais j'ai déjà vu des exemples qui en sont tirés et qui sont assez mauvais.
Clairement, non. Mais la "basicité" du langage fait que, en tant que programmeur, tu es responsable de (pratiquement) tout. Pas comme quand tu utilises des langages de plus haut niveau.
Concernant le K&R: j'ai la première édition, mais comme le net existe, je conseillerais à tout le monde d'y trouver un bon tutoriel, car le K&R pour débuter est.... presque rebutant (et pourtant, j'ai commencé par là).
A+
Edgar;
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
ça peut rendre fébrile un débutant ce genre de syntaxe. Et pourtant le livre en est rempli.
Honnêtement je savais même qu'on pouvait faire ça dans un while. Mais c'est toujours intéressent de voir ce qu'on peut faire en C avec ces bouts de code comme ça.
Merci déjà pour vos diverses reponses. J'eu a travailler avec la SDL , faire un editeur de texte simple en GTK ( meme si j'avais d'énormes difficultés avec l'orienté objet à cette époque ) , manipuler le son avec la FMOD , donc je ne me considerait pas vraiment comme un " vrai " débutant. J'arrive à comprendre les bouts de codes du K&R sans trop de difficulter , mais quand j'éssaie de faire les exercices moi meme , c'est une vrai catastrophe. Resultat je passe des heures devant codeblocks à essayer diverses solutions sans succes , choses qui ne m'arrivaient certes pas avec des cours comme " Teach yourself C in 24 hours " . (Plutot costaud lui aussi)
J'apprecie beaucoup le C pour sa souplesse , la légèreté et la vitesse des programmes dont il est capable. Mais alors , pensez vous que l'on puisse réaliser dans des délais raisonnables des applications de gestion ( facturation , paie , RH , SCM . . . ) en C ? J'ai peu être mal cherché mais je n'ai pas trouvé d'exemples.
( meme si j'avais d'énormes difficultés avec l'orienté objet à cette époque )
Wut ? Tu parles bien du C et non du C++ ?
Parce que l'orienté objet se trouve en C++, et non en C ...
Il me semble que pour réaliser des projets comme ce que tu as en tête, utiliser un langage comme le C, c'est effectivement se prendre la tête pour peu de raison.
( meme si j'avais d'énormes difficultés avec l'orienté objet à cette époque )
Wut ? Tu parles bien du C et non du C++ ?
Parce que l'orienté objet se trouve en C++, et non en C ...
Il est tout à fait possible de faire de l'OO en C… C'est d'ailleurs ce que fait GObject en fait.
Oui mais avec une librairie, de base tu peux pas en faire.
Tu peux toujours, c'est juste pas pratique du tout (d'ailleurs GObject n'est pas super pratique non plus mais bon), comme l'a dit ruquier dans des temps anciens.
- Edité par Mad scientist 22 novembre 2015 à 12:17:46
la vitesse des programmes dont il est capable. ==> Eu... tu ne verras pas la différence de temps entre deux programmes identiques mais codés dans différents langages la plupart du temps. C'est plus ton algo qui fera la différence.
la vitesse des programmes dont il est capable. ==> Eu... tu ne verras pas la différence de temps entre deux programmes identiques mais codés dans différents langages la plupart du temps. C'est plus ton algo qui fera la différence.
Dans tes programmes as-tu déjà vu une seul fois une vrais différence de temps en fonction du langage ? Fais-tu des programmes qui demandent un grand nombre de calculs à la seconde ?
Et si désolé de te le dires, c'est l'implémentation de l'algo qui fais toute la différence. Si on suis ton résonnement avec tes benchmarks ont coderais les jeux en assembleurs et ce n'est plus le cas. Le java te produit des perfs tout à fait honorable. Le moteur Unity (C#) te fais un jeu 3d aisément sans lag..Mais tu dois être à 2 seconde près.
Edit: en plus tu me compares un langage Web avec du C.. tant que tu y es compare le a du batch et là tu pourras dire qu'il est beaucoup plus rapide
Dans tes programmes as-tu déjà vu une seul fois une vrais différence de temps en fonction du langage ? Fais-tu des programmes qui demandent un grand nombre de calculs à la seconde ?
Regarde sa signature ...
ractamard a écrit:
Et si désolé de te le dires, c'est l'implémentation de l'algo qui fais toute la différence.
Quedal. Un algorithme en temps N peut aller bien plus vite qu'un algo en log N selon la gueule des données et surtout comment elles sont mises en cache.
ractamard a écrit:
Si on suis ton résonnement avec tes benchmarks ont coderais les jeux en assembleurs et ce n'est plus le cas.
C'est la balance coût de développement VS gain de performances qui répond à cette question. Certains dév de jeux côté moteurs seraient heureux de développer en assembleur si cela ne leur prenait pas trop de temps et ne ruinait pas le multi-plateforme.
ractamard a écrit:
Le moteur Unity (C#) te fais un jeu 3d aisément sans lag..Mais tu dois être à 2 seconde près.
Le lag, c'est sur le réseau. Et 2s dans un FPS c'est une éternité.
j'avoue qu'être a 2 seconde près dans un milieu ou tout le monde parle de 60 fps c'est pas vraiment top,
quand a l'algo generallement on parle de difficulté ASYMPTOTIQUE, ce n'est pas pour rien : au bout d'un moment ca fini par être significatif certe mais ca ne prend pas en compte des constantes multiplicatives qui ont de l'importance lorsque les données a traiter sont peu nombreuses...
et oui, personnellement j'ai deja vu des programmes JAVA, qui étaient pourtant bien implementés, avoir des equivalent 10 fois plus rapides en C
Dans tes programmes as-tu déjà vu une seul fois une vrais différence de temps en fonction du langage ? Fais-tu des programmes qui demandent un grand nombre de calculs à la seconde ?
Et si désolé de te le dires, c'est l'implémentation de l'algo qui fais toute la différence. Si on suis ton résonnement avec tes benchmarks ont coderais les jeux en assembleurs et ce n'est plus le cas. Le java te produit des perfs tout à fait honorable. Le moteur Unity (C#) te fais un jeu 3d aisément sans lag..Mais tu dois être à 2 seconde près.
Oui non j'ai jamais eu de contrainte de temps, c'est vrai après tout c'est mon travail de rendre les choses rapide mais j'ai pas de contrainte de temps (sarcasme).
Pourquoi on ne code plus les jeux en assembleur ? Tout simplement car le compilateur est capable de générer de l'assembleur plus performant que celui que nous pouvons coder dans la grande majorité des cas et dans les cas ou ca ne l'est pas, devine ce qu'on fait ? On code cette partie en assembleur ! Plot twist !
Unity n'est pas en C#, il expose une fonctionnalité de scripting en C# c'est complétement différent, d'ailleurs si tu prenais le temps de google tu saurais que l'interface bas niveau d'unity est en... C++ ! (source : http://docs.unity3d.com/Manual/NativePluginInterface.html )
D'ailleurs tu noteras en allant sur mon dev blog qu'il y a systématiquement de l'assembleur dans tout ce que je fais, que ce soit de l’étude de code généré ou que ce soit de la programmation en assembleur.
ractamard a écrit:
Edit: en plus tu me compares un langage Web avec du C.. tant que tu y es compare le a du batch et là tu pourras dire qu'il est beaucoup plus rapide
Tu me trouves l'endroit ou tu precises que tu ne parlais que des langages "pas web" ? (En admettant que ca ait un sens de dire ca, car non le PHP n'est pas un langage web, c'est tres utilise dans le web c'est tout).
Regarde sa signature ... ==> Et alors ? tout le ne monde ne fais pas ça et comme dis, la plupart du temps tu ne vois pas la différence.
Quedal. Un algorithme en temps N peut aller bien plus vite qu'un algo en log N selon la gueule des données et surtout comment elles sont mises en cache. ==> On aura tout entendu sur le sdz.. Si et si, c'est l'algo le plus important dans le programme et non la vitess d'éxécution du langage qui vient poser des problème de ralentissement.
C'est la balance coût de développement VS gain de performances qui répond à cette question. Certains dév de jeux côté moteurs seraient heureux de développer en assembleur si cela ne leur prenait pas trop de temps et ne ruinait pas le multi-plateforme. ==> On dois pas avoir la même définition de heureux, l'asm c'est bien plus compliqué et bordélique que le C++. Je ne connais pas beaucoup de dev de jeu qui font de l'asm et même pour les indépendant genre open source ils font pas de l'asm alors qu'ils ont tout le temps qu'ils veulent. L'asm tu le retrouve que dans le noyeau des moteurs graphiques et uniquement aux endroits critiques. Là encore, l'asm est choisié car il doit manipuler et calculé des tas de taritements.
Le lag, c'est sur le réseau. Et 2s dans un FPS c'est une éternité. ==> As-tu déjà fais un jeu ? Non le lag n'est pas que sur le réseau. D'ailleurs je ne parlais pas d'un jeu en réseau avec unity. C'est toute la partie affichage qui prend le plus de temps dans un jeu. Et désolé mais deux seconde sur un traitement c'est rien comparé à un algo mal construit qui peux te faire perdre des tas de secondes.
Exemple, tu dois vérifier des données récoltées avec ceux d'une bdd, si tu te retape toutes la lecture à chaque fois, tu perd un temps précieux qu'elle que soit le langage. Maintenant si tu mets tout en mémoire et que tu fais ca en C là OUI le programme sera plus rapide mais il faut encore réussir à le coder proprement. En réalité on ne voit pas la différence entre les langages, d'ailleurs le langage D est bien plus rapide que le C et ils en existent encore des plus rapides et pourtant on ne s'y aventure pas.
Autre exemple, les ingénieurs qui codent pour les programmes spatiales sont encadrés par un examinateur d'algo.. chaque programme fait est contrôlé par une personne qui regarde l'algo, il ne fait que sa toute la journée. Si l'algo prenait une place tellement petite dans un programme on ne s'amuserait pas à les payer pour rien.
Tu me trouves l'endroit ou tu precises que tu ne parlais que des langages "pas web" ? (En admettant que ca ait un sens de dire ca, car non le PHP n'est pas un langage web, c'est tres utilise dans le web c'est tout). ==> le php ne peut être éxécuté que ur un serveur donc web globalement. "<acronym title="PHP: Hypertext Preprocessor">PHP</acronym> (officiellement, ce sigle est un acronyme récursif pour PHP Hypertext Preprocessor) est un langage de scripts généraliste et Open Source, spécialement conçu pour le développement d'applications web."
Un exemple typique le dernier batman sorite sur PC, coder en C ou C++ causait énormément de ralentissement. Qu'est-ce qui clochait ? L'algo !
le php ne peut être éxécuté que ur un serveur donc web globalement.
Et c'est a ce moment la que tu découvre que tu peux utiliser le commande "php" dans ton terminal prefere pour executer du php en dehors d'un serveur...
Je crois que tu as un réel problème a comprendre que la vitesse d’exécution est régi par de multiples facteurs, l'algorithme en est un, l’implémentation en est un autre. Dans l’implémentation on trouve a nouveau nombres de facteurs, la manière d’accéder a la mémoire (cache miss, prefetch, alignement), le rapport instructions/data, par exemple si j'arrive a vectoriser un algo, je divise par au moins 4 ce rapport, montre moi comment tu implémentes la vectorisation en java, j'ai hâte de voir ça.
Un algo en O(n) peut être plus rapide qu'un O(log N) dans un cas réel, car une ordinateur n'est pas une machine idéal comme la machine théorique dont on se sert en algo papier. Un algo en O(log N) qui détruit le cache a chaque itération a de grande chance de se faire exploser par un algo en O(n) qui permet de vectoriser et d'assurer la présence du jeu de donnée en cache au moment de l'utilisation.
Bien sur qu'il faut des algo efficients mais ca n'invalide pas le fait que le choix du langage a un impact important sur les performances. Les deux ne sont pas mutuellement exclusif.
Et c'est a ce moment la que tu découvre que tu peux utiliser le commande "php" dans ton terminal prefere pour executer du php en dehors d'un serveur... ==> Je ne connaissais pas en effet.
Je crois que tu as un réel problème a comprendre que la vitesse d’exécution est régi par de multiples facteurs, l'algorithme en est un, l’implémentation en est un autre.==> Je suis tout à fait d'accord avec toi, mais j'ai vu passer pas mal de sujet ou des mec demandaient quel langages utiliser pour que leur programme aille plus vite, alors qu'ils avaient un problème de conception à la base. Je ne dis pas que le choix de la rapidité ne se fait pas en fonction du langage mais d'abord avec un algo bien développé.
La façon de gérer ces variables, pour moi c'est à prendre en compte lors de ta conception de l'algo. Tu ne fais pas juste l'idée mais bel et bien les idées pour que ton programme fonctionne le mieux possible et le tout rapidement.
Si tu prends des langages assez proches, java, c# ou encore vb. Je connais pas leur rapidité d'éxécution mais est-ce que tous les gens venant sur le sdz ont réellement besoin des 2 secondes de traitements ? Car oui deux seconde pour un FPS c'est beaucoup mais pour un programme qui check une liste de données ? Bien sure que le choix du langage compte et qu'il est à prendre en compte mais pour moi l'algo est tout aussi important.
Bien sur qu'il faut des algo efficients mais ca n'invalide pas le fait que le choix du langage a un impact important sur les performances. Les deux ne sont pas mutuellement exclusif. ==> On en revient à cette conclusion. Mon message à la base était destiné à des personnes qui ne gèrent pas beaucoup de calcules dans leur programme.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C