Tutoriaux - Python - Programmation
Marsh Posté le 03-01-2006 à 23:18:59
Pirgzzk a écrit : auriez-vous un site de tutoriaux pour apprendre le C : j'avais commencé avec "C++ pour les nuls" mais c'est de la m*rde donc voilà je voudrais commencer sans l'orientation objet... |
Français
http://www-clips.imag.fr/commun/be [...] NSI_C.html
Anglais :
http://publications.gbdirect.co.uk/c_book/
Marsh Posté le 04-01-2006 à 05:41:50
Pirgzzk,
Vous avez sûrement raison d'apprendre le C pur avant l'orienté objet (C++ par exemple). Cependant, pensez à ne pas trop trop vous spécialisé en C pur dans la philosophie, en tout cas, ne restez pas trop au C pur, trop longtemps. Le C++ est bien plus formateur dans l'optique de "créer un programme".
En plus des documentation, vous pourrez utiliser un bon compilateur et essayer de n'utiliser que celui là (tant qu'il suffit) pour bien avancer dans votre connaissance de l'outil de compilation et de gestion de source. Vous pouvez utiliser un compilateur GNU par exemple, qui sont gratuits. Ensuite, pratiquez et testez de par vous-même
Quand vous vous sentirez plus à l'aise avec le C, vous pourrez songer à repasser au C++ avec plus de... recul . Des apports conséquent tel que les référence (et pas seulement les pointeurs) et les redéfinissions d'opérateur, par exemple, apporte beaucoup à la compréhension de "la manière de faire et de réaliser" quelque soit le langage utilisé.
Bon amusement
Marsh Posté le 04-01-2006 à 10:32:44
ReplyMarsh Posté le 04-01-2006 à 10:55:41
Joel F a écrit : Apprendre le C pour passer au C++ est une connerie sans nom. |
Je n'irai pas jusque là, mais c'est tout simplement pas indispensable. de toutes façons, ce sont 2 langages différents qu'il est indispensable de ne pas confondre.
Si on commence à raisonner en 'sous-ensembles', on est mort.
C est un sous ensemble de Objective-C, mais pas de C++.
Marsh Posté le 04-01-2006 à 22:21:51
Ne vous en faîtes pas birgzzk, 10 personnes = 10 avis différents.
Le plus important est que vous avez choisi le C alors allez-y à fond, ce n'est certainement pas du temps perdu surtout si c'est pour apprendre le C++ après. Vous pourriez penser à C# aussi ou à java (par la suite).
Marsh Posté le 06-01-2006 à 13:48:58
ReplyMarsh Posté le 06-01-2006 à 14:28:18
Bravo ami Pirgzzk et bon courage,
Lancez-vous à fond dans le C, vous n'y perdrez jamais votre temps.
Pensez tout de même, si jamais vous y êtes tenté un jour, d'aller voir du côté du C++ lorsque vous en viendrez à faire du "C objet"... vivi ça existe heureusement, mais c'est "super" lourd. Mais c'est formateur... enfin je crois.
Marsh Posté le 06-01-2006 à 17:13:03
ReplyMarsh Posté le 06-01-2006 à 17:24:27
Beuh...
Je trouve logique que l'on comprenne mieux, par exemple, les fonction virtuelles lorsqu'on les a implémentées, d'une façon au moins, soit même (en C par exemple). Non ?
Ca doit être vraie pour tout. Se servir d'une classe de liste c'est pas dur et ça n'apporte rien en soit. Mais avoir écrit un jour sa propre classe de liste, ça ouvre à toutes les finesses même celles que l'on n'a pas soit-même abordé directement.
Vous ne pensez pas Joel F ?
Marsh Posté le 06-01-2006 à 17:52:57
Pheattarak a écrit : Je trouve logique que l'on comprenne mieux, par exemple, les fonction virtuelles lorsqu'on les a implémentées, d'une façon au moins, soit même (en C par exemple). Non ? |
Ca dépend de la capacité d'abstraction de chacun. On ne peut pas donner de réponse globale définitive.
Marsh Posté le 06-01-2006 à 22:43:06
Pheattarak a écrit : Beuh... |
Sauf que reinventez la roue pour le plaisir , c'est bien beau, mais ca fait pas avancé le schmilbick ...
Le design logiciel c'ets pas fait pour les chiens, et apprendre à reutiliser c'est infiniment plus utile que d'apprendre à faire quelquechose moins bien.
Poruquoi ne pas aussi reecrire son compilo C hein ? ou stdlib en assembleur
Marsh Posté le 06-01-2006 à 23:01:47
Moi je f'rais même directement du Java ou du C#...
Faire du C, sauf si t'es vraiment forcé (par ex. pour un µC), c'est d'la masturbation technique .
Marsh Posté le 07-01-2006 à 09:02:07
BigBulle a écrit : Moi je f'rais même directement du Java ou du C#... |
Exactement. La dernière fois ou j'ai fais du C (du vrai) c'etais pour faire du driver ...
On est plus à l'époque ou on devait construire ces briques. Maintenant c'ets des pans entiers prémontées qu el'ont combinent. Les langages hat niveaux (Java,C# et a moisn forte raison C++) sont largement plus formateurs. Surtout que maitriser l'un, c'est quasiment maitrisez les 2 autres (au details de syntaxes prés)
Marsh Posté le 07-01-2006 à 11:04:23
BigBulle a écrit : Faire du C, sauf si t'es vraiment forcé (par ex. pour un µC), c'est d'la masturbation technique . |
Marsh Posté le 07-01-2006 à 11:04:51
Joel F a écrit : Exactement. La dernière fois ou j'ai fais du C (du vrai) c'etais pour faire du driver ... |
Marsh Posté le 08-01-2006 à 13:04:16
ReplyMarsh Posté le 09-01-2006 à 12:12:35
Emmanuel, j'y pensais
Vous avez tous raisons. Pourquoi réinventer la roue ?... puis, on a autre chose dans la vie à faire que de programmer des listes et des librairies
Marsh Posté le 09-01-2006 à 12:37:35
Creer des bibliothèqes reste une activité importante si elles ont pour but d'elever le niveau d'abstraction ou de reinjecter à haut niveaux des fonctionnalités bas niveaux.
Réécrire un n-ième clone de la STL/libc/whatever (sauf portage particulier ou optimisation specifique) ne sert rien.
Marsh Posté le 09-01-2006 à 13:30:54
L'intérêt de réinventer la roue est purement didactique, mais il est réel. Dans cette optique, et dans celle-là uniquement, ça en vaut la peine.
Je ne regrette certainement pas d'avoir fait du C et de l'assembleur, et d'avoir dû implémenter des listes chaînées et tout le toutim, même si c'est finalement pour bosser en Java, voire avec un 4GL. Ce n'est pas indispensable du tout, mais ce n'est certainement pas en vain.
Il est certain qu'il n'existe pas de réponse unique et que tout dépend en grande partie du but recherché.
Citation : apprendre à reutiliser c'est infiniment plus utile que d'apprendre à faire quelquechose moins bien. |
Si tu n'as jamais implémenté toi-même de structures de données, tu passes à côté de qq chose. Je suis sûr que ce n'est pas ton cas. A l'extrême, un programmeur n'aurait pas la moindre idée d'un algo de tri, sous pretexte qu'il suffit d'appeler une certaine méthode sort(). Ca ne me paraît pas fameux.
Citation : Surtout que maitriser l'un, c'est quasiment maitrisez les 2 autres |
Tu me fais un peu peur. De C++ à Java, admettons, mais dans l'autre sens, j'ai des doutes. Le gars qui n'a fait que du Java et qui prétend pouvoir passer à C++ two fingers in the nose ne m'inspire pas confiance.
Marsh Posté le 09-01-2006 à 14:23:18
sircam a écrit : |
C'est ce que tu fais à "l'école" : tu vas coder ta liste chainée en C, ton array en C++, ton XMLParser en JAVA. C'est bien mais sorti du cadre de la formation, ça n'a plus d'intéret (sauf portage/adaptatyion/optimisation dans des conditions industrielles precises).
sircam a écrit : |
Bah je sais pas ... je conçoit que savori comment ça marche derrière aide à appréhender les erreurs et comprotements etranges. Perso, si je devais apprendre le C++ a des gens, bah je commencerait cash sans aprler du C en leur disant que string, vector & co sont des types de bases quis upportent un certins nombre d'operations.
Apres si ils en ont besoin, on regarde le detail. Mais je pense que savoir ce qui est POSSIBLE de faire et plsu important que de savori COMMENT cela est fait. On est dans une phase ou le developement d'appli c'est 90% de reutilsiation de brique haut niveau. Y a trés peu de gus qui ont besoin de reivnenter des chsoes.
sircam a écrit : |
J'avoue que j'y suis aller un peu fort mais je pense que l'idée reste vrai.
Marsh Posté le 09-01-2006 à 18:16:39
bref, j'ai pas compris grand chose (n00b powa) mais que me conseillez-vous alors?
apprendre le C est une bonne idée ?
sinon que faire ?
Marsh Posté le 09-01-2006 à 19:43:14
Quest-ce que tu veux qu'on te dise si tu nous dis pas ce que tu veux faire comme genre d'application...
Désolé Emmanuel Delahaye, j'avais pas vu ta signature http://mapage.noos.fr/emdel
Marsh Posté le 09-01-2006 à 21:07:44
Joel F a écrit : C'est ce que tu fais à "l'école" : tu vas coder ta liste chainée en C, ton array en C++, ton XMLParser en JAVA. C'est bien mais sorti du cadre de la formation, ça n'a plus d'intéret (sauf portage/adaptatyion/optimisation dans des conditions industrielles precises). |
D'où l'emploi du mot "didactique" dans ma réponse.
Joel F a écrit : Bah je sais pas ... je conçoit que savori comment ça marche derrière aide à appréhender les erreurs et comprotements etranges. |
Et ça, ça n'a pas de prix, et je suis sûr que tu fonctionnes ainsi sans même t'en rendre compte. A l'opposé, le gars qui n'a appris qu'à utiliser les gros blocs tout fait, sans avoir jamais vu comment ils sont assemblés, va louper pas mal de choses. Les gars qui n'ont pas ce bagage et qui se débrouille bien sont plutôt l'exception.
Joel F a écrit : Perso, si je devais apprendre le C++ a des gens, bah je commencerait cash sans aprler du C en leur disant que string, vector & co sont des types de bases quis upportent un certins nombre d'operations. |
+1, C'est sans doute le plus important. Mais si tu ne fais que ça, il te manque tout de même qq chose. Sans doute aussi, ça ne donne pas la même "race" de développeur. Dans les 10% restant, la différence avec un informaticien formé "à la vieille école" est cash.
Joel F a écrit : J'avoue que j'y suis aller un peu fort mais je pense que l'idée reste vrai. |
Marsh Posté le 09-01-2006 à 21:48:38
sircam a écrit : |
on est d'accord
Marsh Posté le 10-01-2006 à 18:15:23
j'aimerai programmer pour Linux surtout donc le C# est écarté. je voudrais faire toutes sortes de logiciels...
Marsh Posté le 10-01-2006 à 20:30:10
Mon pauvre Pirgzzk,
C'est terrible comment tout ça est flou ... puisque vous posez une question clair et net, permettez-moi de vous donner MON point de vue. J'ai conscience que ce n'est que mon point de vue et que ça n'engage que moi, tout ce qui va suivre.
Dans ma propre expérience, j'ai pu confronter le Pascal avec le C, le BASIC et l'assembleur. Je ne dirai rien de l'assembleur car c'est un chemin que chacun fait seul et c'est un choix... il n'est que très rarement justifié comme langage. Quant au BASIC, c'est certainement le plus mauvais des 4 lorsque l'on est en phase d'apprentissage. Bref, mis à part "l'assembleur" et le BASIC que l'on peut travailler pour soit, je vais juste parler de Pascal et de C (et C++).
Le Pascal, on me l'a appris en premier langage et j'ai cru comprendre maintenant qu'on la remplacé par le caml. Bref, parlons de Pascal. J'ai connu un pascal qui n'était pas "pur" (pas standard) avant de connaître un pascal pur et dur. J'ai souffert beaucoup de cette "régression" car en Pascal pur, beaucoup de chose ne peuvent pas se faire et c'est grave comment c'est dérangeant.
Celui que j'avais connu en premier, c'était le Turbo Pascal... platform de développement agréable, compilation et test agréable aussi, le langage avait évolué pour être plus dans l'optique d'un langage "utile". Donc, c'était agréable.
Lorsque j'ai dû passé au C, je me suis confronté à un nouveau langage et donc, de nouveau, c'était un peu "difficile" de changer à nouveau. Surtout que j'ai vite compris que c'était un langage très centré sur l'utilisation des pointeurs... une fois cette notion de pointeur bien comprise et surtout la "puissance" de la chose, j'ai vite compris que la notion équivalente en Pascal représentait un vision "simplifiée" dans le sens que l'on ne pouvait pas simplement faire "la même chose de manière cohérente dans des cas différents". De toute façon, en Pascal, il n'y avait pas vraiment de notion de pointeur (sur le Pascal que je connaissais) mais une sorte "d'équivalent".
Bref, tout ça pour dire qu'avec le recul, le C est de loin le langage que je préfère et celui qui, après l'assembleur, a été le plus formateur. Mais j'ai conscience du fait que les erreurs énormes que l'on peut faire en C (et à cause de C !!) peuvent faire perdre beaucoup de temps, et pas forcément "utilement", sur certains aspects lorsque l'on est en cours d'apprentissage de la programmation (seulement) et pas du C spécifiquement.
En conclusion et avec le recul, je dirai qu'à part quelque langage en particulier, le BASIC par exemple, tous les autres sont assez "bon" pour qui veut apprendre à programmer. Cependant, selon son objectif, il sera préférable de s'orienter au plus tôt vers l'un ou l'autre sachant que de toute manière, connaître deux langages et pratiquer les deux apportent toujours beaucoup lorsque l'on apprend.
Il reste quand-même une chose assez évidente lorsque l'on apprend, de programmer des listes chaînées en C, en C++, en assembleur ou autre, ne change fondamentalement pas grand chose (je ne parle pas d'utiliser une librairie). Mais la grande flexibilité permise par le C permet, de se tromper beaucoup c'est vrai mais, permet aussi d'explorer des choses que dans d'autres langages on est parfois même pas autorisé à faire.
Par contre, lorsque l'on sait qu'à terme, il nous faudra utiliser du C++, ou du C#, ou du java, ou du perl ou autre chose... peut-être qu'il est bon, au plus vite, de voir ce que l'on a vraiment à apprendre et de s'y consacrer au maximum. Pour tout le reste, le superflu qui peut néanmoins apporté beaucoup à sa propre "culture", on peut y consacrer un temps un peu moins important.
Donc si le langage ne s'impose pas de lui-même, le C reste un très bon choix. Je le pense. De la même manière que le C++. Cela dit, la personne qui commence à programmer en C++, fera avant tout du "C" puisqu'à part toute l'encapsulation objet provenant du C++, la programmation elle (sauf la "philosophie" et la manière de faire, de même que la syntaxe du C++...) reste du C.
Une boucle en C++ s'écrira comme en C. Si l'on ne maîtrise pas les boucles, inutile d'aller surcharger la chose de classes et d'instanciations diverses, ça n'aidera en rien celui qui apprend à utiliser une boucle. Par contre, une fois les boucles maîtriser, voir les aspects supplémentaire qu'apportent le C++, sera toujours d'un apport "précieux" (peut-être pas dans le cas de la boucle... mais ailleurs en tout cas).
Finalement, je suis convaincu que le C++, justement dans ce qu'il apporte en terme de "conception" des programmes, apporte énormément par rapport au C. Dans la philosophie, je trouve que le C++ fait un pas vers le "Pascal pur", en cela qu'il est beaucoup plus rigoureux que le C, mais reste tout de même très flexible.
Et je pense qu'il n'est pas gênant, ni une perte de temps, d'apprendre le C pour passer au C++. Mais si l'objectif originel est d'apprendre le C++ seulement, alors inutile d'aller se surcharger avec des notions propres au C, c'est clair
Voilà Pirgzzk. Alors ?... vous passez à l'assembleur ou pas ? haha
Marsh Posté le 11-01-2006 à 00:03:59
Pheattarak a écrit : Cela dit, la personne qui commence à programmer en C++, fera avant tout du "C" puisqu'à part toute l'encapsulation objet provenant du C++, la programmation elle (sauf la "philosophie" et la manière de faire, de même que la syntaxe du C++...) reste du C. |
C'est ce qu'on croit souvent quand on a une connnaissance superficielle de ces langages, mais c'est faux.
http://david.tribble.com/text/cdiffs.htm
Marsh Posté le 11-01-2006 à 00:08:18
Pheattarak a écrit : Cela dit, la personne qui commence à programmer en C++, fera avant tout du "C" puisqu'à part toute l'encapsulation objet provenant du C++, la programmation elle (sauf la "philosophie" et la manière de faire, de même que la syntaxe du C++...) reste du C. |
Prépare-toi à te faire lapider
Marsh Posté le 11-01-2006 à 00:14:52
Oui, marchi ritzle,
Je me doute bien des éventuelles réactions. Ca ne me concerne pas, chacun en pense ce qu'il veut. Et chacun a raison du moment expose bien son point de vue. Mon avis reste ce qu'il est, il changera sûrement avec le temps
Je suis par là-bas, si vous voulez lancer des pierres
Marsh Posté le 11-01-2006 à 01:06:29
Pirgzzk a écrit : j'aimerai programmer pour Linux surtout donc le C# est écarté |
Pas nécessairement, sous les environnements *nix il existe Mono qui me semble être un environnement de dev .Net parfaitement valable, implémentant intégralement .Net 1.1 et partiellement .Net 2.
En dehors de celà, tu as tous les choix du monde, ça va du langage bas niveau (C voire ASM) au très haut niveau (Python ou Ruby), du langage de script (Tcl) au write-only (Perl), du fonctionnel (Haskell) à l'objet (Scheme), de l'ancètre (Lisp/Common Lisp) au dernier arrivé (brainfuckC#), du plus laxiste (PHP) au plus strict (Ada83)
Personnellement j'aurais tendance à conseiller de commencer par un langage multi-paradigmes de très haut niveau (Ruby ou Python par example, ils sont plus ou moins équivalents, choisis celui qui te semble le plus sympa) histoire de te faire les crocs sans être emmerdé par les problèmes d'implementation physique, ou de types inexistants (générant des incohérences). On peut trouver dans les deux langages des ressources extensives pour le débutant, bien qu'elles soient en très grande majorité en anglais (comme 95% de l'informatique et de la prog), il sera toujours temps par la suite d'oublie les abstractions et de descendre vers les enfers du hardware (en gardant à l'esprit que tout nouveau langage nécessite un réapprentissage, tenter de transposer les concepts d'un langage vers un autre fonctionne habituellement mal, et dans le pire des cas ne fonctionne pas du tout, après tout comme l'a dit Alan Perlis "Un langage qui ne change pas la manière dont vous approchez la programmation ne vaut pas la peine d'être appris" )
Marsh Posté le 12-01-2006 à 17:53:33
enfait mon but c'est Python (programmation sur Linux/Unix/FreeBSD/Mac OS) mais je voulais faire une approche de la programmation avant d'"attaquer".
je vais donc choisir le C ou le Cpp car j'ai lu que l'apprentissage était assez simple.
J'hésite encore C/C++. Si le C++ est du C simplement OO et rien d'autre, tant qu'à faire, je prends le C++. Mais si c'est carrément différent, j'apprendrai les deux, mais je veux savoir par lequel commencer.
Merci pour vos réponses
Marsh Posté le 12-01-2006 à 19:24:02
L'approche de la programmation tu la fait en python et baste, c'est un langage qui excelle pour l'apprentissage, si c'est de toute façon ton but je ne vois pas l'intérêt de commencer par autre chose..
Et le C++ n'est pas simplement du C OO, il doit être considéré comme un langage à part.
Marsh Posté le 12-01-2006 à 19:50:35
ok, mon choix est fait, ce sera d'abord le C puis ensuite le python et enfin le C++
auriez vous des tutoriaux ou des livres à me conseiller ?
merci !
Marsh Posté le 12-01-2006 à 19:58:22
ReplyMarsh Posté le 12-01-2006 à 20:16:37
toute ta vie, grosso merdo
Marsh Posté le 12-01-2006 à 20:49:11
Citation : grosso merdo |
grosso modo plutot
ok merci et sinon des sites, des livres ?
Marsh Posté le 12-01-2006 à 22:31:08
Pirgzzk a écrit : (j'apprendrai les 3 en même temps, combien cela va til durer ?) |
Les 3 en même temps, je ne conseille pas. Commence par Python ou Ruby, et ensuite passe au C pour résoudre les problèmes de bas niveau (programmation système, eéseau, drivers).
<troll=ON>Oubli cette monstruosité qu'est C++, c'est fini !<troll=OFF> Si tu dois faire du GUI, Python est correct, Pour le détail, C# bien sûr (Windows, mais pas uniquement. .NET commence à être porté sur Linux...).
Marsh Posté le 03-01-2006 à 22:47:08
salut,
auriez-vous un site de tutoriaux pour apprendre le C : j'avais commencé avec "C++ pour les nuls" mais c'est de la m*rde donc voilà je voudrais commencer sans l'orientation objet...
merci !
Message édité par Harkonnen le 13-01-2006 à 22:17:42