Bonjour,
je cherche à évoluer en informatique et je me demande comment commencer à travailler ?
Je cherche en particulier à maîtriser les spécificités du C++ et du java.
Je connais un peu le langage C et je me débrouille pas trop mal avec python.
Pensez vous qu'il soit une bonne idée de me concentrer sur des projets concrets, plutôt de suivre des cours ou des ouvrages « pas à pas », enfin, devrais-je plutôt mettre à jour mes compétences théoriques ?
Merci beaucoup pour vos réponses.
Cordialement.
# Objet
Posté par Lol Zimmerli (site web personnel, Mastodon) . Évalué à 1.
Si tu fais déjà de l'objet avec python, ça va être plus simple que dans le cas contraire. En ce dernier cas un ouvrage et/ou un tuto sur la programmation objet pourra t'aider.
La gelée de coings est une chose à ne pas avaler de travers.
# Un projet concret est plus formateur.
Posté par totof2000 . Évalué à 3.
Par contre il ne faut pas placer la barre trop haut, et c'est ce qui est le plus difficile.
Sinon, par rapport à C++ et Java, je pense que tu devrais en même temps si possible aborder la modélisation UML : tu en trouves partout (doc de classes, etc …), et tu dois pouvoir trouver des bouquins avec des exemples que tu pourras porter d'un langage à l'autre.
[^] # Re: Un projet concret est plus formateur.
Posté par matthieu bollot (site web personnel, Mastodon) . Évalué à 8.
Quelqu'un a déjà fait de l'uml ailleurs qu'à l'école ?
[^] # Re: Un projet concret est plus formateur.
Posté par _kaos_ . Évalué à 5. Dernière modification le 09 janvier 2016 à 14:01.
Du word avec gestion de version, ça compte ?
/o\
doc de classes, toussa. hem. =>[]
Matricule 23415
[^] # Re: Un projet concret est plus formateur.
Posté par KiKouN . Évalué à 3.
https://fr.wikipedia.org/wiki/User_Mode_Linux ça compte ?
# Projet
Posté par Mali (site web personnel) . Évalué à 6. Dernière modification le 08 janvier 2016 à 23:25.
Trouves un projet sur lequel tu as envie de travailler,
soit un truc perso, soit une appli que tu utilises quasiment au quotidien. Tu auras besoin d'aller chercher dans les doc ou sur des tutos pour des problèmes concrets.
Pour mon avis perso, j'ai trouvé plus simple de se greffer sur un projet existant, un application que tu utilises régulièrement, mets les mains dans le code, essayes de comprendre comment c'est architecturé, commence par envoyer des petits patchs, corrections de warnings, nettoyage de variables, etc .. et petit a petit ça fait son chemin … ou pas, et alors il est temps de chercher un autre projet :)
A moins que tu aies une envie particulière, comme développer un client mail révolutionnaire, un énième clone d'arkanoid, ou que sais-je ! Dans ce cas, fais toi plaisir !
[^] # Re: Projet
Posté par matthieu bollot (site web personnel, Mastodon) . Évalué à 2.
Patcher des softs me semble une bonne idée, ça permet de voir du code pour apprendre les bases et en même temps de faire du code.
Partir de rien y aura des problèmes d'architecture, c'est compliqué…
Sinon il y a codingame, ça fait plein de petits exo sympa pour une première approche.
# ca depend de ta maniere d'apprendre
Posté par NeoX . Évalué à 5.
moi perso j'apprends plutot par la pratique et l'exemple plutot que par la theorie,
je vais donc tester, modifier, "bidouiller" plutot que de lire 4 bouquins avant de commencer.
maintenant certains vont preferer lire 4 bouquins avec d'avoir fait une seule ligne de code.
donc à toi de voir comment tu apprend le mieux.
evidemment c'est toujours plus motivant quand tu fais un code pour lequel tu as un interet.
[^] # Re: ca depend de ta maniere d'apprendre
Posté par Tonton Benoit . Évalué à 2. Dernière modification le 09 janvier 2016 à 00:43.
Un bon livre apprentissage n’est pas un simple manuel de références (qui est malgré tout un compagnon bien utile) et comporte des exercices et des projets à réaliser afin de montrer progressivement tous les aspects du langage avec une difficulté croissante. Pour le C++ et le Java, qui sont parmi les langages les plus savants, je pense que cette approche est indispensable.
Et rien n’empêche d'intercaler ses propres projets en parallèle à tout ça.
[^] # Re: ca depend de ta maniere d'apprendre
Posté par GuieA_7 (site web personnel) . Évalué à 3.
C++ est clairement très complexe, voire compliqué.
Java le langage en revanche est plutôt simple, voire simpliste (ce qui ne veut pas dire non plus qu'on en connaît les moindres subtilités en 2 heures évidemment). Après il existe tout un tas de bibliothèques/outils permettant justement de pallier les lacunes du langage. Du coup c'est l'écosystème Java qui est assez complexe.
Ça ne remet pas en cause ce que tu dis, et mixer pratique et théorie est effectivement la bonne approche.
[^] # Re: ca depend de ta maniere d'apprendre
Posté par _kaos_ . Évalué à 0. Dernière modification le 09 janvier 2016 à 13:02.
Salut,
Ref. needed.
De quel "java" parles-tu, et à quel "C++" le compares-tu ?
Faire un itérateur ou une fonction lambda, un hash personnalisé, ça te semble à la portée de n'importe qui ? Et les GUI, le modèle MVC, c'est si simpliste ?
Si c'est une bête question d'algorithmie, je dirais que les deux se vallent (je ne connais que peu le C++). Si on veut pousser plus loin (l'OP dit vouloir maitriser), on peut se faire une petite idée sur codereview.stackexchange des deux langages, de ce que peut être un bon design dans les deux…
On voit très vite que faire du code propre (je ne parle pas d'un programme sur un bout de serviette), donc maintenable, réutilisable, n'est pas si direct que ça. Dans aucun des deux.
Pour l'OP : tu peux choisir de poster sur stackexchange de petits problèmes résolus, les soumettre et apprendre des commentaires dans les deux langages pour progresser.
Matricule 23415
[^] # Re: ca depend de ta maniere d'apprendre
Posté par GuieA_7 (site web personnel) . Évalué à 5.
Même les dernières versions de Java sont loin d'être aussi expressives que l'état de l'art d'il y a 15 ans (youpi il y a enfin les lambdas, la concurrence tremble), donc peu importe la version du langage Java, cela reste un langage plutôt simple. Rien que le langage de template de C++ déja présent il y a 20 ans (mais pas toujours implémenté par les compilateurs C++ tellement il est complexe), face aux generics poussifs de Java permet de voir l'abîme de complexité qui sépare les 2 langages. Note que je dis juste que C++ est plus complexe, je ne dis en aucun cas si un des 2 langages est mieux que l'autre (ils sont différents, avec des qualités différentes), ni s'ils sont bien (là c'est l'assurance de lancer une discussion interminable, ce n'était pas le but).
C'est quoi le rapport avec les langages ? Ce sont des choses qu'on peut être amené à coder dans n'importe quel langage. Le fait que cela soit difficile, c'est parce que coder c'est difficile, cela n'a rien a voir avec le côté simpliste ou non du langage.
Ça sera difficile dans tous les langages, parce que faire de la qualité c'est difficile par principe.
Après selon le projet, le langage choisi pourra être plus ou moins adapté (et donc rendre ça un peu moins difficile), et les difficultés techniques seront de natures différentes (ex: se battre avec les cycles de références en C++ qui provoquent des fuites mémoires, se battre avec le GC qui défonce les performances en Java).
Il est possible d'écrire du code non trivial (voire très complexe) même avec un langage simpliste. Et Java est relativement simpliste ; par exemple il a fallut attendre des plombes pour avoir des lambdas, alors que tous les langages avec gestion automatique de la mémoire les avaient depuis longtemps ; avoir des classes anonymes était une solution simple à ce manque, mais en pratique avoir un concept de moins pour garder le langage simple obligeait les codeurs à écrire plus de code moche ; ce qui s'appelle être simpliste (trop simple, la simplicité n'est plus une force, mais une faiblesse). Et le fait d'avoir des lambdas aujourd'hui ne ramène pas Java au niveau de l'état de l'art, ca le rend juste moins simple. Au contraire C++ dispose de beaucoup de concepts, ce qui le rend très (voire trop) complexe.
Maintenant un codeur qui veut maîtriser Java devra au final connaître l’écosystème Java, et cela sera difficile aussi (parce que devenir compétent c'est difficile).
[^] # Re: ca depend de ta maniere d'apprendre
Posté par _kaos_ . Évalué à -1.
Salut GuieA_7,
Merci d'avoir pris le temps de ta réponse, mais je te redemande de référencer tes sources si tu le veux bien :)
Peux-tu documenter là dessus ?
Ce n'est pas que je veuille faire peur au posteur original, mais ça serait bien de lui faire comprendre ces notions, qui ne sont pas triviales (je te jure).
Sinon, à l'arrache :
Hmm, t'as jamais testé jni ou quoi ? Ou mettre plusieurs GC en race concurence ? Et tu te limite à un seul langage dans tes applis (et tu teste pas différents GCs) ? :(
Ce que je souhaitais dire, c'est que tu met en avant la complexité du C++ (je rappelle, je ne connais pas trop) par rapport à un écosystème "complet", mais dont tu casse les branches en faisant la comparaison, en enlevant la complexité trop facile de faire juste du
println
Et non, je ne considère pas le langage java dans son ensemble (jdk) comme simpliste ; Je crois que nous nous comprenons mal et bien : pour moi, connaître java, c'est connaître son jdk (qu'il soit open, ou pas). Je dis pas mieux pour le C++ hein.
Ca va être à l'OP de dire ce qu'il veut suivre…
Matricule 23415
[^] # Re: ca depend de ta maniere d'apprendre
Posté par GuieA_7 (site web personnel) . Évalué à 5.
1) Je pense que l'incompréhension vient que ce ce j'appelle langage, c'est seulement le langage (sa grammaire, sa sémantique), mais :
J'ai aussi dit que coder correctement était difficile dans tous les langages, et que maîtriser même un langage simple était difficile. Je fais du Python, langage simple, depuis plus de 10 ans, il m'arrive encore d'apprendre des choses dessus ; et je ne parle pas de fonctions de la lib standard (il est évident que je ne la connaît pas par cœur), mais bien d'aspect du langage lui-même. Là encore on est d'accord mais tu me le réexpliques quand même.
J'ai aussi dit que l’excès de simplicité du langage pouvait justement être une source de difficulté pour le programmeur (il manque des notions qui auraient permis que le langage fasse les choses à notre place, donc le programmeur doit faire plus d'efforts). Donc le fait que le langage soit simpliste n'implique pas que coder des choses complexes soit simple, c'est très exactement le contraire.
2) La phrase originelle disait que le langage Java faisait partie des plus savants. C'est faux il fait partie des langages les plus simples parmi les langages les plus utilisés. Et c'est normal Java a été conçu dans cet optique :
"Le langage Java reprend en grande partie la syntaxe du langage C++, très utilisée par les informaticiens. Néanmoins, Java a été épuré des concepts les plus subtils du C++ et à la fois les plus déroutants, tels que les pointeurs et références, ou l’héritage multiple contourné par l’implémentation des interfaces. Les concepteurs ont privilégié l’approche orientée objet de sorte qu’en Java, tout est objet à l’exception des types primitifs (nombres entiers, nombres à virgule flottante, etc.)."
"L’équipe envisageait initialement d’utiliser le langage C++, mais l’abandonna pour différentes raisons. Tout d’abord, ils développaient sur un système embarqué avec des ressources limitées et estimaient que l’utilisation du C++ demandait un investissement trop important et que cette complexité était une source d’erreur pour les développeurs. L'absence de ramasse-miettes impliquait que la gestion de la mémoire devait être programmée manuellement, un défi mais aussi une source d’erreurs."
"Il faut noter que les évolutions successives du langage ne portent guère sur sa syntaxe -relativement stable depuis le début- mais principalement sur l'enrichissement de ses fonctions, avec l'embarquement et l'optimisation de bibliothèques logicielles (API) dans des domaines très variés de l'informatique : bases de données, gestion XML, informatique distribuée et web, multimédia, sécurité…"
Tiré de https://fr.wikipedia.org/wiki/Java_%28langage%29
Note que le fait qu'il fasse partie des plus simples n'implique pas qu'il soit simple dans l'absolu. Donc oui il a des subtilités, mais il y en a aussi dans les autres langages (et particulièrement en C++).
Quel rapport avec Java au juste ? Oui programmer c'est difficile ; oui mélanger des langages c'est difficiles ; oui si certains ont un GC ça va provoquer un certain type de problème, mais Java n'est pas le seul à avoir un GC (anecdote: on peut mettre un GC en C++, mais pas gérer sa mémoire manuellement en Java) et le GC facilite la vie 99% du temps, donc encore une fois ça ne rend pas Java plus complexe que les autres.
[^] # Re: ca depend de ta maniere d'apprendre
Posté par _kaos_ . Évalué à 1.
Salut GuieA_7,
Merci pour cette réponse longue et argumentée (et sourcée).
En effet, c'est probable. C'est pourquoi je disais que j'incluais la connaissance (partielle) du jdk.
Tu peux me corriger, mais ton approche est plutôt théorique (connaître un langage, sa grammaire) --ce qui est bien en soi ; et certainement la base de mon argumentation aussi-- alors que mon approche, par rapport au post original est pragmatique : connaître un langage (C++, java, whatever else) sans son environnement proche (ce que tu dois appeler l'écosystème) n'est pas un levier.
Je peux me tromper, et j'en serais bien désolé en ce cas mais forcé d'admettre que j'ai tord, je pense que l'OP souhaite apprendre pour trouver du travail. Mis à part s'il souhaite bosser pour une boîte qui développe son propre langage, la "maîtrise" absolue des théories mathématiques soutenant ce qui fait un langage est à mettre au second plan par rapport à la connaissance de cet écosystème (j'espère utiliser tes termes, du coup).
En prenant un exemple très bête, je bosse avec des gens (sûrement comme plein de monde, ça c'était un défonçage de porte ouverte). Les formules sont mathématiques et le recrutement s'est fait pour des compétences poussées en ce sens. Si je leur parle de XOR, je ne suis même pas sûr qu'ils me répondront « le shérif de l'espace ? ». Pour autant, leur valeur ajoutée est significativement positive (sinon, y'aurait un problème).
XOR fait partie d'une base de langage. Faut-il le connaître pour travailler ? J'ai bien peur de bosser avec des gens qui ne connaissent pas et pour qui ça n'est pas une tare de ne pas connaître cet opérateur.
Par contre, pour être opérationnels, ils doivent avoir l'écosystème en main pour fournir un logiciel fini.
Attendons un petit retour de l'OP pour savoir ce qu'il souhaite lui. ;)
Matricule 23415
[^] # Re: ca depend de ta maniere d'apprendre
Posté par GuieA_7 (site web personnel) . Évalué à 5.
En parlant de grammaire j'ai peut-être porté à confusion, mais c'est surtout le terme 'sémantique' qui m'importait (je n'ai pas trop su comment le formuler) ; on se tape de savoir si on fait des blocs avec des {} ou des BEGIN/END, c'est juste cosmétique. En revanche est-ce de l'impératif ou du fonctionnel (ex: 'if' peut exister dans les 2 cas, mais avoir une sémantique différente), de l'objet à classe ou à prototype, fait-on de l'héritage de type ou bien de trait, du typage dynamique/statique, avec de l'inférence ou pas, du typage fort/faible, quel est le modèle mémoire etc…
Je fais partis des gens qui pensent que celui qui ne connaît qu'un langage n'en maîtrise aucun. Et inversement un codeur qui comprend les différentes notions de mon paragraphe précédent (parce qu'il a étudié la théorie et pratiqué des langages divers) n'aura pas de mal à appréhender le langage Java, parce qu'il est assez pauvre et n'a pas de fonctionnalité qu'on ne retrouve ailleurs (et ce n'est pas forcément un défaut). Ça ne veut pas dire être un dieu du Java en 3 jours, mais ça veut sûrement dire être à peu prés opérationnel en 1 mois au sein d'une équipe.
Tu penses que je suis très théorique, et c'est sûrement le cas ; mais l'entreprise que j'ai créée avec 3 associés a fêté ses 10 ans il y a peu, alors peut-être me croiras-tu si je te dis que je suis aussi pragmatique. J'ai eu l'occasion de briller à des entretiens avec mes (petites) connaissances théoriques, et sans avoir à démontré que je connais par cœur telle ou telle API ; mais il s'agissait de recruteurs intelligents cherchant de bons techniciens (spoil: ce n'était pas des SSII :) ). J'ai aussi pu mener un certains nombres d'entretiens du coté recruteur ; et j'ai toujours été content de mes choix, que j'ai fait avec des entretiens ouverts et assez théoriques, et jamais portant sur la maîtrise de tel subtilité d'un langage ou de sa lib standard ; les personnes recrutées ont toujours rapidement été efficaces sur le terrain en peu de temps. Je pense qu'une personne qui connaît bien un, et un seul, langage et sa lib standard, ne pourra jamais envisager une solution optimale si son langage se prête mal au problème rencontré.
Je n'ai pas compris ce passage. Tes collègues sont brillants en maths mais ne connaissent pas XOR ?! Si oui, alors j'imagine qu'ils connaissent le concept de 'ou exclusif' sans connaître le sobriquet que lui donne les informaticiens, ce qui n'est pas vraiment un souci à mon sens ni une lacune théorique (ils trouveront le jour où ils en auront besoin). Si c'est autre chose alors explique plus clairement stp.
En ce qui me concerne, si les gens ne sont pas opérationnels dans l'heure, ça ne me semble pas choquant s'ils ont les bases pour le devenir rapidement (pour moi c'est ça un bon informaticien). "Quoi tu as fait du Qt/GTK/… mais jamais de Swing ! Tu ne dois sûrement pas être capable de faire une GUI, car pour ça il faut connaître par cœur la signature du constructeur de JButton !". En ce qui me concerne une boite qui me dirait ça, je n'aurai probablement pas envie de travailler pour elle dans tous les cas ; après je ne sais pas quels sont les plans de notre posteur, car sa demande était assez vague, nous sommes d'accord.
[^] # Re: ca depend de ta maniere d'apprendre
Posté par _kaos_ . Évalué à 1. Dernière modification le 13 janvier 2016 à 00:09.
Salut,
Vu qu'on est plutôt d'accord, je ne répond que rapidement en attendant l'OP, mais pour répondre à certaines interrogations :
Ca, ça demande beaucoup, beaucoup de temps (tu l'as dit et je ne peux qu'aquiesser).
Oui. Même bien pire :) Je ne m'en fais pas pour leur expliquer le jour où ils en auront besoin.
C'est tout à fait ça, j'ai des collègues qui m'en apprennent ou à qui j'apprend. Chacun son domaine :)
Matricule 23415
# Manque d'inspiration ?
Posté par _kaos_ . Évalué à 1. Dernière modification le 09 janvier 2016 à 14:25.
Salut,
Dans d'autres commentaires, certains t'ont indiqué de prendre soit un bouquin, soit un projet perso. C'est bien pour commencer.
Si la recherche que tu souhaite est "à maîtriser les spécificités du C++ et du java", tu peux aussi regarder du côté de codegolf.stackexchange. Le codegolfing est un art de maîtrise du langage (et de la résolution de problèmes). Les petits exercices tombent régulièrement, la contrainte étant : le plus court possible gagne.
C++ et Java perdent en général, étant des langages très verbeux par rapport aux autres, mais on y trouve des astuces parfois.
Surtout, comme ce sont des exercices rigolos, ça peut te motiver (même si tu ne participe pas à la compétition) pour trouver des solutions, si tu es en manque d'inspiration journalier.
Contrairement à codereview que je proposais plus haut, ce n'est pas du code propre, cependant.
Matricule 23415
[^] # Re: Manque d'inspiration ?
Posté par max22 . Évalué à 2.
énorme le code golf !! je connaissais pas !
# Coursera ?
Posté par audionuma (site web personnel, Mastodon) . Évalué à 1.
Ayant quelques notions de C, j'ai bien apprécié ce module coursera : https://www.coursera.org/course/intropoocpp
(J'avais fait le module précédent https://www.coursera.org/course/initprogcpp auparavant pour me rafraîchir les idées, mais il n'y a pas de session prévue dans un avenir proche).
Le bon côté c'est que tu as quelques exercices avec correction et échange avec les autres élèves et les enseignants, qui sont très disponibles sur le forum.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.