Développeur de logiciel ? Avis Svp

a marqué ce sujet comme résolu.

(1) J'aurai plus vu dans le sens "pour éviter de se tirer une balle dans le pied avec l'héritage, mieux vaut que ce soit un sous-typage" mais si tu as des pointeurs vers d'autres règles, fait péter. Comme je l'ai dit je connais relativement bien l'OO, j'ai jamais dit être un cador.

La bonne question à se poser, ce n'est pas « est-ce qu'il vaut mieux que l'héritage soit un sous-typage ? », mais plutôt « est-ce qu'on doit confondre les deux notions », comme c'est fait dans à peu près tous les langages OO mainstream. Et la réponse est non : l'héritage, c'est la réutilisation de code. On n'en a pas besoin pour faire du polymorphisme, ni pour faire du sous-typage.

Ceci étant dit, selon ton système de types, une relation d'héritage entre deux classes implique a priori d'une façon ou d'une autre un sous-typage entre deux types plus ou moins liés à ces classes. Mais confondre systématiquement les deux est une erreur (très répandue).

Pour bosser sur une grosse plateforme fonctionnelle actuellement, on est loin d'être dans le monde des bisounours où tout est beau et pratique.

Et alors ? Je ne sais pas comment il faut comprendre ce que tu dis : est-ce que ça veut dire que c'est les pratiques industrielles qui doivent faire référence quand on parle de langages de programmation, ou est-ce que ça veut dire que puisque les industriels programment n'importe comment, il n'est pas possible de coder proprement ?

Et la réponse est non : l'héritage, c'est la réutilisation de code. On n'en a pas besoin pour faire du polymorphisme, ni pour faire du sous-typage.

Non. Les mixins, les traits, les petites fonctions c'est de la réutilisation de code. L'héritage, c'est de la spécialisation de métier.

Appelons ça comme ça alors, je ne connais pas les derniers buzzwords de la terminologie OO de 2016, j'ai dû me contenter d'un terme plus vague. Le reste de mon propos (la partie importante, en fait) ne change pas.

Edit : pour compléter, les mixins ou les traits correspondent précisément à ce que devrait être la notion d'héritage. Le fait que les langages confondent complètement cette dernière avec le sous-typage a engendré un détour artificiel qui ne devrait pas être là.

+1 -2

Appelons ça comme ça alors, je ne connais pas les derniers buzzwords de la terminologie OO de 2016, j'ai dû me contenter d'un terme plus vague. Le reste de mon propos (la partie importante, en fait) ne change pas.

C'est pas un buzzword. L'héritage est la solution technique retenue pour représenter la relation de spécialisation/généralisation (selon le sens de lecture). Cela est vrai depuis que les bases de la POO ont été créées. J'étais même pas encore né à l'époque.

Il y est des héritages qui ne font que de l'import de code (privé en C++). Et des sous-typages qui n'importent aucun code (implements en Java < 8, et autres). Ce sont oui des choses différentes mais intrinsèquement liées à cause des modèles choisis par l'essentiel des langages.

Même chose entre abstraction et encapsulation. Le premier relève plus du data-hiding et de la stabilité des interfaces, et le second de la protection des invariants. Les langages qui ne les mélangent pas (côté implémentation) sont tellement rares, qu'il est difficile de trouver quelqu'un qui les distingue vraiment.

Et d'ailleurs, avant de partir sur SOLID, le premier truc à comprendre pour l'OO, c'est justement la différence entre penser en termes de données et penser en termes de comportements (plus proches des définitions de Kay ou de Cook). SOLID & Déméter viennent bien après.

Et effectivement, quand on pense données et que l'on veut se forcer à faire de l'OO (ou quand on n'a pas compris que les données ne sont pas la chose la plus importante), on se retrouve encore plus vite avec des usines à gaz avec des setters dans tous les sens – les langages à œillères OO n'aident pas non plus. Rajoutez une systématisation de l'ISP/DIP (sans parler que c'est une hérésie avec les value-class qui sont guère compatibles avec des hiérarchies), oui l'over-engineering arrive bien trop vite. Je sais, c'est bien pratique pour tester et bien d'autres choses, mais on complexifie.

A nous de trouver les équilibres côté modélisation en fonction des problèmes à solutionner – même quand les langages ne permettent pas à des fonctions libres d'exister.

Est-ce que l'on noie l'OP sous des considérations dont il n'a que faire ? Certainement.

Peut-on revenir au sujet (et s'y tenir, relativement) ? Merci (vous pouvez ouvrir un sujet propre pour le combat OO c. autres para', du moment que ça reste dans une bonne ambiance).

+2 -1

Ce que je te conseil aussi, si tu veux apprendre, c'est aussi les logiciel de versions (GIT/SVN) qui sont utilisé dans toutes les entreprises. UML est aussi généralement beaucoup utilisé. Connait tu le principe de test unitaire ? test d'intégration ? d'intégration continue ?

Toutes ces notions sont utilisé dans quasiment toutes les entreprises qui font du logiciel, renseigne toi dessus.

Si tu parle d'intégration continue, de test unitaire, logiciels de gestions de version, tu as plus de chance d'avoir un travail qu'en disant « je sais coder en PHP » !

+2 -0

Ok merci. Je connais un peu GIT. UML je connais pas. Les tests unitaire, j'ai commencé à regarder le MOOC de vidéo2brain sur PHPUnit, mais j'ai pas eu le temps de vraiment m y mettre. Et test d'intégration, et tests d'intégration continue je connais pas. Si vous avez des tutos la dessus, je suis preneur. Merci

EDIT @stephweb : "Je me suis formé" : tu as quelle formation ? C'est de l'auto-apprentissage ou tu es passe par une formation ?

gbdivers

J'ai aussi préciser que je me forme toujours (et c'est certainement une formation continu tout au long de la vie). Pour répondre à ta question : 100/100 autodidacte, j'ai juste un CAP électricien que j'ai eu il y a quelques années en arrière. Donc rien, mais vraiment rien à voir avec l'informatique. (de toute façon, je n'avais pas d'ordinateur avant, donc je ne savais pas que ce métier existe). Pour le moment j'ai démarché qu'une agence web (pas vraiment pour leur donner ma candidature, mais + pour leur demander des conseils, quels technos me tourner? Si il y a vraiment du boulot dans le web…?). Ils en on profiter pour me faire passer pendant quelques heures des tests en PHP. Ils m'ont dit "bien, du bon code propre…", "t'a vraiment bien avancé en 8 mois…", "comme quoi se former tout seule c'est pas plus mal…". Et puis les formations, en + d’être chère, il y a des truc que j'aime pas. Par exemple dans l'établissement qui propose un BAC +2 en web vers chez moi, ils apprennent à leurs étudiants à utiliser les CMS open source (vive Wordpress…), aussi du Front, mais très très peu de Back (juste un peu de téhorie du style variable, boucles…). Donc je ne vois pas trop l’intérêt des centres de formation. C'est sur que ce former tout seule c'est très dur au début (surtout pour quelqu'un qui n'avais jamais codé une ligne de code), mais je ne regrette pas. Et puis quand je regarde les offres d'emploi, quand je tape "développeur PHP", il y a vraiment beaucoup de demandes. Un ingénieur en dév web qui a plusieurs années d'expérience, me disais que lors des processus de recrutement, c'est vraiment galère de trouver un bon développeur PHP (pourtant il vit dans une grande ville).

+0 -0

C'est ce qui me semblait, de la façon dont tu avais posé tes questions.

(HS : je suis aussi auto-didacte en info, je suis biochimiste de formation).

Je pense que cela va influencer ce que tu dois apprendre. Pour un étudiant classique, je conseille de voir plusieurs langages, pour avoir une vue d'ensemble (langage main stream, langage web, langage fonctionnel, langage script, etc).

Mais dans ton cas, je pense que l'objectif premier doit être de trouver un job dans le domaine. Cela ne t’empêchera pas de te continuer a te former en auto-didacte, mais cela te permettra de commencer à mettre dans ton CV "experience pro en info". (Ce premier point semble ok, si tu vas commencer un CDD. Combien de temps ?).

Ce premier job va permettre d'orienter ton apprentissage (en partie). Tu vas avoir (normalement) plein de nouvelles choses à apprendre dans ce job, c'est déjà du boulot, surtout les premieres semaines/mois. Sois curieux : si tu utilises un peu Git au boulot, prend le temps de l'étudier un peu plus en profondeur chez toi. Si tu utilises un framework, approfondis chez toi. Etc.

La second chose que tu peux étudier, c'est la théorie. Quand on est auto-didacte, on a tendance à se focaliser sur les savoirs immédiatement applicables (le langage). Tu peux regarder sur les sites des formations d'info, voir le programme qu'ils proposent et essayer de combler tes lacunes. (Etudier de préférence les domaines qui te seront profitables à moyen terme, comme les méthodes de développement, le cycle de vie des applications, le design, les tests, etc.). Quand tu demandes ce que tu dois étudier, n'hésites pas demander aussi les priorités (sinon tu vas avoir 1000 choses à apprendre en même temps et tout le monde va te dire "c'est super important à connaître" pour chaque chose).

Le troisième chose (qui devrait être "quand tu as le temps") sera d'étudier un autre langage en plus de ton langage principal (puisque c'est ton souhait de faire cela). Prendre un langage qui permet de faire la transition web -> application sera la meilleure chose, plutôt que de prendre un langage qui est trop éloigné (par exemple, évite le C ou le C++). Cela sera plus facile de te faire embaucher par la suite dans une boite qui fait du mix web-applicatif, que dans une boite qui fait que du application avec un langage pur applicatif. A priori, un bon choix serait le Python ou le Java.

Pour te former : les sites internet (ZdS, SdZ, Dvp), les MOOC (tu as des parcours de formation complets sur cousera, edx et udacity par exemple), les sites des profs (certains publient leurs cours en ligne), les livres, etc.

Et surtout, ne stagne pas trop dans un job. Dès que tu n'apprends plus rien (surtout les premières années), prend le risque changer de job. Il y a effectivement pas mal de boulot, il ne faut pas avoir peur de prendre des risques.

HS : pour les formations, le marché du dev info est très en vogue et il y a beaucoup de formations bidons pour faire entrer de l'argent (coût des formations, subventions pôle emploi, etc). A suivre avec précaution

+2 -0

Je confesse ne pas avoir lu tout le sujet1 mais j'ai l'impression d'être un peu seul à tiquer sur la dichotomie que fait le PO entre programmation de logiciels et programmation web. Il s'agit d'une vision simpliste du domaine qui ne reflète plus la réalité aujourd'hui.

D'abord, il y a des tas d'autres trucs à programmer que des softs standalone ou des sites web. Si je regarde les softs que j'utilise tous les jours, je m'aperçois qu'ils appartiennent tous rarement à une de ces catégories : il y a des clients, des services, des daemons, des utilitaires en ligne de commande, des logiciels qui acceptent plusieurs frontends, des systèmes complets qui s'organisent en stacks gigantesques. Certains d'entre eux ont des interfaces web alors qu'il s'agit d'applications, d'autres des clients durs alors qu'il s'agit de "sites"… Bref, la frontière entre les deux est hyper floue et c'est pas à négliger parce que c'est justement pour ça que les équipes qui bossent sur les softs sont hétérogènes.

Aujourd'hui quand tu cherches un boulot, la distinction à la mode est de savoir si tu es un développeur spécialisé dans le frontend, dans le backend ou bien full-stack. Et encore, quel que soit ton terrain de jeu, les rôles et les spécialités sont là encore pléthore, aussi nombreuses que les opportunités d'emploi. Dans ces conditions il est inutile de te demander ce qu'il vaut mieux faire en prenant le marché de l'emploi comme critère : y'a du boulot partout. Ta compétence en tant que développeur, elle se forme en fonction de ce que tu aimes faire, et pour savoir si on aime quelque chose, eh bien il faut essayer un peu tout.

Tu connais PHP, HTML et JS ? Essaye autre chose de différent, pourquoi pas C++ en effet, pour te confronter à un typage statique (en plus c'est bien payé) ?

Il y a de grandes chances que tu sois parti pour explorer de très nombreuses voies/technos avant de trouver celles dans lequelles tu te sens le mieux, mais quoi qu'il en soit, il faut bien avoir conscience que tu ne te situeras jamais vraiment d'un côté ou de l'autre d'une barrière, ni même à un certain niveau d'une échelle : le domaine du développement, c'est un espace à plus de 3 dimensions dans lequel tes technos de prédilection, tes compétences et ton expérience sont un point unique. L'art de trouver un job qui te convient, c'est d'abord de situer le point que tu désires atteindre dans un mois ou un an, et de savoir t'expliquer pourquoi, avant de choisir ta prochaine destination.


  1. La digression sur la POO ne m'intéresse pas. Si ajourd'hui les langages sont pour une bonne part multi-paradigmes, de mon point de vue c'est parce qu'un paradigme est autant un outil que le langage qui l'incarne : la sagesse consiste à choisir le bon paradigme au bon moment pour résoudre un problème donné de la façon la plus concise/élégante/efficace/amusante (rayez les mentions inutiles) possible. 

+2 -0

Dans l'absolu, je suis d'accord avec toi, cette distinction est un peu floue. Pour autant, elle me choque pas. Au niveau des offres d'emplois et des employeurs, on retrouve souvent cette distinction en fonction du domaine (web, application) ou du langage.

De plus, je crois vraiment que le fait d’être auto-didacte change le parcours a suivre. Un étudiant pourra effectivement survoler plusieurs langages et technos (pendant ses études) et choisir la direction qui lui convient. Pour un auto-didacte, il doit intégrer sa situation actuelle.

Concrètement dans le cas du PO. S'il apprend maintenant le C++, il lui faudra probablement des mois ou années pour acquérir des compétences suffisantes en C++ (langage, environnement) et créer un minimum de projets "montrables" dans un entretien d'embauche (obligatoire a mon sens, puisqu'il n'a pas de diplôme d'info et qu'il aura une expérience pro en dev web uniquement). Se faire embaucher par la suite dans une boite comme dev C++ sera compliqué.

S'il veut faire du dev app, la transition sera plus simple s'il commence par une langage intermédiaire web/app. Avec une expérience pro en dev web + des connaissances dans un langage mixte, il pourra se faire embaucher dans une boite qui fait les 2. Et acquérir progressivement une expérience pro plus large (en particulier en dev app). Par la suite, il pourra continuer sur du dev app seul s'il veut ou autre chose.

+2 -0

Oui j'ai vu après coup que tu conseillais Python ou Java.

Ça me semble également une bonne stratégie dans la situation du PO. Pour parler de ce que je connais, Python est un langage plutôt proche de ce qu'il connaît, mais extrêmement polyvalent (on recrute des devs python dans tous les domaines, y comprisle web, à tous les niveaux de compétences) et à en croire les divers indices de popularité, il est de plus en plus populaire et prisé (en tout cas je n'ai pas eu de mal à trouver un nouveau poste de senior dev Python ces deux derniers mois). Et franchement, de mon point de vue c'est une techno qui tient la route. Elle ouvre la porte au C et à C++ (si son désir est ensuite de descendre dans les niveaux d'abstraction pour optimiser ses softs).

Quant à Java, c'est plus ou moins pareil, à part que c'est plus proche de C++ que de Python et que je suis un peu plus septique sur le fait qu'il soit en pente montante.

Et ces deux technos sont AUSSI recherchées en binôme. J'ai croisé pas mal d'annonces pour des postes de dev Java/Python pour faire du Big Data ces dernières semaines.

+1 -0

Ma préférence va aussi au Python (et pas uniquement parce que je suis un dev C++ et que j'ai été formé a détester Java…).

Je me forme aussi a Python, en particulier pour l'analyse de données (j'utilise habituellement R, mais Python est de plus en plus utilisée). Et dans mon boulot actuel (pour encore 3 jours…), on a un vieux binding C# + ActiveX pour le web, mais si on devrait mettre a jour le binding web, je pousserait probablement pour utiliser le Python.

@stephweb: D'ailleurs, en parlant de Python + web, sauf erreur de ma part, certains devs de ce site (qui tourne en Python) ont justement utilisé leur expérience acquise ici pour valoriser leur CV "Python Web". Participer activement a un projet open-source peut être intéressant et formateur. (Je cite en particulier ZdS parce que c'est un site français, donc plus facile pour démarrer, mais d'autres projets peuvent convenir. C'est un plus par rapport a un projet que tu fais seul, puisque tu montre ta capacité a travailler en équipe sur un gros projet). Et en plus, cela te permettra de bosser sur le front ou le back.

+2 -2

Merci à tous pour vos réponses.

Mais dans ton cas, je pense que l'objectif premier doit être de trouver un job dans le domaine. Cela ne t’empêchera pas de te continuer a te former en auto-didacte, mais cela te permettra de commencer à mettre dans ton CV "experience pro en info". (Ce premier point semble ok, si tu vas commencer un CDD. Combien de temps ?).

gbdivers

Normalement 1 mois pour commancer, et ça pourrai continuer si je fait l'affaire.

Pour te former : les sites internet (ZdS, SdZ, Dvp), les MOOC (tu as des parcours de formation complets sur cousera, edx et udacity par exemple), les sites des profs (certains publient leurs cours en ligne), les livres, etc.

gbdivers

C'est quoi que tu appel "Dvp" ? ZDS = Zeste de Savoir. SdZ = OpenClassRoom (ils m'ont un peu déçu avec leur nouveauté de 2016 - Pour regarder des MOOC faut payer… Alors qu'avant ils disaient "Les cours resteront toujours gratuit…"). Pour les MOOC, il y a aussi Grafikart qui est vraiment bien (surtout en PHP). Merci

+0 -0

Bonsoir, Pendant quelques jour j'ai testé un peu Ruby et Ruby On Rails. C'est pas mal, mais ce langage je le trouve pas assez "technique". Je pense qu'il me faudrait un langage + "strict". J'ai regardé un peu la syntaxe de différents langages, Java et C# ont une syntaxe qui peut me plaire. Pouvez-vous me dire la différence entre C# et Java ? Il me semble qu'avec Java on peu faire + de choses avec ce langage (développement de logiciels + développement web + appli mobile… Vous me conseillerai quoi ? Merci beaucoup

Pouvez-vous me dire la différence entre C# et Java ?

C# est plus moderne est bénéficie de .NET. Les types délégués sont une joie à utiliser à côté des listener casse couille à la java.

Par contre java8 a implémenté de très belles choses telles que l'API de stream et bénéficie d'un écosystème assez complet de bibliothèques tierces que Maven atteint bien plus facilement que le très jeune NuGet.

Ok merci. Avec C# peut on faire des logiciels compatibles sur un MAC et sur un pc qui a Linux ? Et y a t-il un langage (je ne veut pas cordova et phonegap…) avec lequel on peut faire des applications mobiles compatible sur Android + Iphone + Windows phone ? (on m'avais dit qu'avec Java c'est pour android, mais qu'il existe aussi des frameworks pour que ce soit compatible aussi sur iphone…). Merci

+0 -0

Avec C# peut on faire des logiciels compatibles sur un MAC et sur un pc qui a Linux ?

de plus en plus, oui

avec lequel on peut faire des applications mobiles compatible sur Android + Iphone + Windows phone

le plus facile c'est d'utiliser cordova ou phonegap. Sinon avec C# si tu utilises Xamarin tu peux faire ton appli sur les trois plateformes.

telles que l'API de stream

Et les lambda expressions. Puisque tu parlais de listener un peu casse-bonbons (c'est toujours casse-pieds, mais moins).

Côté framework web je conseillerais pas trop Java en fait. Enfin ça dépend toujours de l'objectif. Pour trouver un boulot c'est très très bien, par contre pour "jouer" et s'instruire, Java c'est clairement pas le bon langage. Spring(Boot) est pas mal en termes de productivité, mais c'est pénible et ça n'introduit pas de concepts extraordinaires.

Ruby on Rails a l'avantage d'avoir vraiment posé les bases de ce que sont les frameworks web MVC aujourd'hui. D'avoir une quantité de plugins faramineuse et pas mal de doc / tutoriels.

J'ai l'impression (mais alors vraiment ça n'engage que moi) que les gens en reviennent petit à petit. La mode étant plutôt ces derniers temps à "j'écris moi-même le code, quitte à en écrire un peu plus" ou "j'assemble de petits plugins programmatiquement plutôt que via des fichiers de config" plutôt que de faire confiance à des la convention/configuration (Rails et tous ses dérivés).

Enfin, concernant C# si tu te poses uniquement la question du langage (en tant que tel, pas des bibliothèques et frameworks) je dirais qu'il est plus agréable à utiliser que Java.

Vraiment difficile de répondre à cette question à ta place honnêtement :\

On tourne déjà un peu en rond (sans trop de guerre de clochers, ce qui est pas si mal).

+0 -0

Au passage je ne suis pas sûrs que ce soit une bonne idée de chercher "le langage pour tout faire". Il y a beaucoup de langages généralistes et encore plus de spécialisés (volontairement ou non). Mais si UN langage permettait de tout faire mieux que tout le monde, ça se saurait.

Comme beaucoup de choses le mieux est souvent d'utiliser le meilleur outil qui convient à la tache. Et pour cela le mieux est d'être capable d'utiliser plusieurs langages, en fonction du besoin.

Si tu veux faire du web, choisi un langage qui le permet "facilement" et accessible (Python, Ruby, Js, etc.). Si tu veux du bas niveau va faire du C, voir C++ ou Rust. Si tu veux faire une appli Android, vise le Java, tout comme si tu veux t'assurer de trouver un job. Si tu es plus windows et windows phone, fais du C#. Si tu es plus mac, fais de l'Objective-C ou Swift.

Bref ne te focalise pas trop sur le langage, tu ne trouvera jamais un langage parfait. Donc prend en un qui semble te plaire, apprend le et fait plusieurs projets avec et ensuite… tu verra bien. Peut-être qu'alors tu voudra en essayer un autre, ou au contraire continuer avec.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte