"Nobody exists on purpose. Nobody belongs anywhere. We're all going to die. Come watch TV." - Morty Smith
je voulais dire fonce vers du pyhton, pas de faire du golang: leur mascotte est trop moche...
Merci pour vos conseils! Je vais regarder çà de plus près du coup.
Pour de l'apprentissage de la programmation (et donc pas seulement de web), avec Python, tu peux pas te planter de beaucoup.
J'adore le C, mais je pense que c'est dommage d'apprendre un langage sans classes. C'est très recommandable si tu peux apprendre un autre langage en plus de lui.
Perso je conseille soit Python, soit Kotlin. Le premier à l'avantage d'être un langage ancien et très utilisé, le second à l'avantage d'être moderne, de s'appuyer sur la JVM (passage à Java plus facile), en plus d'être supporté par Google pour le dev Android et de bénéficier du site try.kotlinlang.com pour l'apprentissage.
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Ah oui, t'as pas du bien regarder la mascotte de java alors. Il est gagnant depuis le début à ce niveau.
Pour rappel, ça ressemble à ce tas de merde (le nez de clown, ça fait super sérieux) :
- - - Mise à jour - - -
Il est un peu vieux ce talk, la blabla sur godep c'est plus valide.
"Nobody exists on purpose. Nobody belongs anywhere. We're all going to die. Come watch TV." - Morty Smith
Ouais c'est bon, ok, la mascotte de java est toute pourrie. Mais le langage date d'avant l'an 2000. Alors que go n'a pas cette excuse.
- - - Mise à jour - - -
C'est au moins du material design ce truc.
Le logo qui a inspiré une marque de grande distribution.
(J'ai pas trouvé de logos officiels pour Fortran et ALGOL 60. Peut-être qu'ils n'existent que pour cartes perforées.)
pour les javateux z'avez vu le nouveau versioning de java, avec année+mois tous les 6 mois plus des LTS de temps en temps ?
http://www.oracle.com/technetwork/java/eol-135779.html
Genre là on vient d'avoir Java 9, le prochain c'est Java 18.3
mouais. On va voir ce que ça donne, mais ça risque de perdre les gens...
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Il n’y a pas de langage parfait pour commencer. Comme d’habitude chacun va te dire « X c’est le mieux » mais c’est faux, d’où la variété des réponses... Ça dépend complètement de ce que tu projettes de faire et de ta motivation. Le C/C++ c’est un peu raide mais si tu t’accroches tu vas voir plein de concepts qui sont parfois cachés dans d’autres langages mais qu’il est bien utile de connaître (plutôt C++ que C histoire de profiter des classes). Par contre si ton but c’est de faire du web côté client c’est pas forcément le meilleur choix À l’inverse si tu ne comptes pas faire du web, vu à quel point l’environnement est hostile, t’as tout intérêt à le laisser de côté pour débuter.
Python c’est facile d’accès mais c’est aussi parfait pour prendre de mauvaise habitudes. Je le vois très souvent au taf vu qu’on a une API Python pour des clients qui ne sont pas développeurs à la base. D’ailleurs parmi tous les gens qui te recommandent Python, à mon avis aucun n’a appris à coder avec ce langage.
Quoiqu’il en soit, tant que t’évites les langages hype du moment pour rester sur les classiques (C/C++/C#/Java/Python/etc.) tu trouveras facilement une tonne de ressources et de vrais cours gratuitement sur le net pour tout un tas d’applications différentes. T’as aussi le droit de changer de langage en cours de route
Si c'est pour une initiation, le choix du langage est presque secondaire ; il en faut seulement un qui te permette d'appréhender les concepts généraux de la programmation sans avoir en plus à assimiler ses spécificités. De ce point de vue le C++ est à mon avis un très mauvaix choix, je verrais plus Python ou Ruby, ma préférence allant à ce dernier.
En soi c'est pas déconnant de commencer par du haut-niveau (c'est ce que j'ai moi-même fait), mais faut garder à l'esprit qu'il n'y a aucune magie et que toutes les fonctionnalités existantes ont été codées pour nous.
Donc, faire du Java ou du C# pourquoi pas, mais si c'est ensuite pour coder en permanence comme un gros crade sans se soucier de l'utilisation cpu/mémoire, c'est moyen.
Dans l'idéal il faudrait changer de langage régulièrement pour explorer de nouveaux aspects du développement, par exemple :
- Commencer par apprendre les bases avec un langage de haut-niveau, pas forcément orienté objet, sans faire d'objet. Se concentrer sur les bases : variables, fonctions, conditions, boucles, algorithmie...
Par exemple, avec Ruby.- Basculer ensuite sur un langage, probablement encore haut-niveau, qui tourne autour de l'orienté objet, pour apprendre à coder en orienté objet avec toutes les notions qu'il y a derrière : classes, instances, héritage, virtual/abstract, etc.
Au pif, avec Java.- Puis enfin apprendre à se soucier de ce qui se passe sous le capot, avec un langage de bas-niveau : supprimer les objets alloués en mémoire, optimiser ses calculs, optimiser l'occupation mémoire, l'alignement, dérouler les boucles, etc.
Le meilleur choix est ici indéniablement le C++. On se permet d'avoir une syntaxe adaptée pour continuer à faire de l'objet (on peut tout à fait en faire en C, mais c'est moins "confortable"), tout en évitant l'indigestion de l'assembleur.
Ben pas forcément. J’ai commencé par du C/C++ et ça s’est très bien passé. Mais c’était pas en mode yolo sur un coin de table, j’étais en cours et ça tombe bien, des cours C++ de profs pour débutants, on en trouve plein. Tu commences pas directement par te frapper les concepts autour des pointeurs en C/C++ Par contre comme je le disais c’est un peu raide alors si en plus ça colle pas à ton projet futur c’est peut-être pas la bonne entrée en matière. Mais ça peut l’être. Dans tous les cas il n’y a pas une bonne réponse à la question "Quel est le meilleur langage pour commencer ?". Ça dépend complètement de la personne et du contexte.
Tu peux faire le premier point avec Java et tu peux faire les deux premiers points en C++ aussi Et je dis ça alors que je n’aime pas le C++. Mais je suis d’accord, c’est bien de varier un peu au lieu de s’enfermer dans une boîte.
Lolno.
Concernant l'architecture, il n'y a pas grand chose qui change dans tes sources si tu as codé multiplateforme à la base. J'ai porté deux projets persos depuis du C++/Windows vers du C++/Linux récemment, sur x86 (ça utilisait un peu de la Windows API pour les threads, et 2-3 autres trucs). Pour les porter ensuite vers du ARM/Linux, il m'a suffit de modifier 3 pauvres caractères dans mon makefile (retirer une option non applicable pour le compilo).
Ouhlala, ça a été dur.
Après, si c'est pour porter du code qui utilise des instructions AVX512, qui était à destination des processeurs Intel/AMD x86_64, vers des instructions NEON pour un ARM Cortex A53 ARMv8a x64, alors oui il faudra revoir ton code. Mais dans ce cas, pour ce genre d'instructions, tu fais comment en java ?
(en vrai ma question est sérieuse : Java est riche en instructions spécifiques au matos ou la JVM est vraiment moisie ?)
Oui, bien sûr, le C++ étant le langage parfait il permet de réaliser ces trois étapes haut la main
Je voulais le présenter comme ça, pour illustrer la transition haut niveau vers bas niveau, en abordant peu à peu les différentes notions.
Oui, ça va faire un peu bizarre au début, mais je trouve ça bien cette manière de versionner.
Et peut-être que sa motivera les DSI à coller un peu plus au version (j'y crois pas trop, mais bon,...), quand en 2025 ils se rendront compte que leurs jvm sont toujours en java 2018...
j'espère qu'ils vont réussir à faire évoluer le langage sans tout casser...
La donation de JavaEE à la fondation Eclipse c'est plutôt bon signe pour moi. Mais c'est peut être un mauvais signe pour les entreprises, quand je vois mon chef et son rapport très daté à l'open source...
Pour l'initiation à la programmation, à mon humble avis le langage est important, surtout pour de l'auto formation.
Je pense qu'il faut un langage de haut niveau qui permette de se focaliser sur l'apprentissage des concepts algorithmiques, puis des concepts de programmation (procédural, objet, fonctionnel). Tout en restant un minimum fun et sans avoir trop besoin d'un environnement de travail (IDE, compilo, chaine de build).
Un langage comme pyhton, ruby ou encore javascript permet de passer par toutes ces étapes (pour js c'est parfois un peu plus brouillon) sans entrave. C'est facile de chopper des tutos sympas et de rapidement faire des petits programmes.
En C/C++ (et en Java dans une moindre mesure), c'est moins progressif et surtout ces langages vont te mettre des bâtons dans les roues à chaque étape de l'apprentissage.
C'est pas pour rien que les universités choisissent un langage officiel et qu'elles sont massivement passées de Pascal/C à Java puis à Python pour les phases d'apprentissages générales (après il y a des cours spécifiques qui utilisent des langages spécifiques).
Perso j'ai commencé avec du C. J'était bon en algorithmique, mais j'ai pleuré des larmes de sang durant les premiers TP en C: les core dumps font trop mal, le debugging est pas franchement simple à mettre en oeuvre. Faire un Makefile c'est un peu trop ésotérique. Alors après on peut sortir un IDE et des configurateurs, mais on sort de l'apprentissage de base pour aller vers une utilisation plus professionnel...
Quand les profs de mon IUT ont décidés de basculer sur Java alors que ce n'était pas encore gagné pour lui (merci a eux d'avoir été visionnaire ), j'ai pu enfin mettre en oeuvre mes algos sans avoir trop besoin de penser au fonctionnement interne de l'ordi et à gérer mes tableaux comme à la préhistoire.
Et honnêtement il n'y a pas tant besoin de savoir comment ça marche en dessous. Les trucs généralement 'crades' ce sont des copiés/collés, des méthodes qui refont les mêmes calculs coûteux dans des boucles,...
Bref plutôt des problèmes de compréhension général et de mauvaise vision long terme pour la maintenance que le fait d'ignorer le fonctionnement de l'assembleur.
Perso je ne vois aucune justification à orienter quelqu'un de débutant, particulièrement en apprentissage autonome, vers du C/C++ ou encore du Java.
Pour quelqu'un qui sait déjà programmer et qui veut s'orienter spécifiquement vers un domaine là d'accord (par ex jeux --> C++, IoT --> C, ...)
Dernière modification par William Vaurien ; 27/09/2017 à 10h55.
C'est mieux avec les autres langages ? Je me suis récemment mis à écrire quelques petits scripts python récemment mais j'y connais rien en outils de débogage. Tu as des logiciels à recommander? Je me souviens particulièrement de bugs de typage où, à cause du typage dynamique, l'erreur est signalée au dernier moment. Remonter à la source de la donnée erronée était déjà difficile dans un script d'une centaine de lignes, j'ose pas imaginer dans une grosse application.
Pour le C/C++ j'ai passé des années (avant l'école d'ingé) à utiliser un IDE qui s'occupait de la compilation pour moi et proposait un GUI pour le débogueur, c'est pas si difficile. Et un débutant n'a pas besoin de Makefile, d'allocation dynamique complexe (voire de pointeurs, surtout en C++ avec les conteneurs standards) ou de la méta-programmation très complexe du C++.
pour le debug, c'est un peu rustique en python de base, c'est pdb en ligne de commande, un clone de gdb... Donc là c'est peut être un mauvais exemple.
Mais au moins il y a des stack traces. Alors qu'en C tu pleures juste ton core dump. C'est assez simple une fois que tu sais comment compiler et charger tout ça dans gdb, mais c'est quand même pas top pour un premier contact.
Mais du coup si tu fais du C sans Makefile, allocation dynamique ni pointeurs, autant prendre un langage plus sympa à prendre en main, non ?
Merci d'illustrer parfaitement ce que je voulais dire.
Tu es tellement dans l'optique bas niveau que tu n'as pas compris que je parlais d'architecture logicielle.
Le cliché du mec "haut niveau" qui ne se préoccupe pas des ressources, je le croise pas plus souvent que le profil "bas niveau" qui est incapable d'architecturer son code.
*hey, psst*
Le plus direct pour apprendre le bas niveau c'est le C, mais si tu veux apprendre le bas niveau et en même temps avoir un langage confortable (beaucoup plus que le C++) il y a aussi le Rust.
Rust fanboy
PyCharm a un bon debugger, et même dans l'éditeur (avec le plugin python je pense) VisualCode le debugger visuel a base de breakpoints et tout fonctionne bien.
Sion pdb c'est rustique en effet mais ça fonctionne. Tu vas vite te rendre compte si t'en a laissé dans le code anyway .
Y'a aussi le fait que c'est quand même pas dans tous les coeurs de métier que t'as ce genre d'optimisation "bas niveau" à faire.
Y'a quand même énormément dev qui va être sur du web et entre passer des heures d'ingénieurs pour optimiser l'utilisation serveur et cliquer un bouton pour changer l'instance qui va couter 2$ de plus par mois, souvent y'a pas photo.
Évidemment, y'a une limite à ça mais on peut aller très loin sans trop s'en soucier. Et à quoi bon optimiser ton CPU si derrière toute ton archi microservice mongodb docker kubernetes kafka spring truc met 1min à te répondre.
Pis la RAM et le CPU c'est fait pour être utilisé à fond et pas se toucher