Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sujet Le pub des programmeurs

  • 1 925 réponses
  • 117 participants
  • 120 428 vues
  • 130 followers
Sujet de la discussion Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le sujet de la discussion
961
Il y a celui la qui est pas mal aussi : http://steve.yegge.googlepages.com/language-trickery-and-ejb

qui reprend pas mal d'arguments qui ont ete echanges ici aussi. J'aime bien son exemple java, qui est pour moi assez typique du langage, d'ailleurs :)

Il y a plusieurs articles qui sont bien tournes sur pas mal de langages (J'ai pas tout lu; ceux sur CLOS me depassent, vu que je connais pas vraiment bien lisp, ceux sur ocaml sont pas mal).
962
Question conne:
- J'ai une formation d'ingé (prépa + école sur concours) orientée "pseudo-hardware / bas niveau / embarqué" (genre VHDL, optim de code C sur des cibles diverses, etc).
- Une première expérience chez Thales qui collait pile poil avec mon profil (FPGA + optim traitement du signal temps réel en C et en assembleur PowerPC + drivers, le tout entre autre sur VxWorks).
- Ca fait 4 ans que je fais de l'algorythmique orientée musique (composition automatique) sans coder une ligne de vrai code, mais avec une expérience significative de chef de projet sur des applis balèzes impliquant une bonne dizaine de développeurs web, synthèse, traitement de l'audio, sound-design et musique.
- Si je me retrouvais au chomdu maintenant, sur quels langages / technologies il faudrait que je me mette (ou remette) à niveau (tout seul) pour trouver un taf de dév ? Mon petit frère, qui va sortir d'école, me dit que la mode c'est Java, C# et Ruby. Vous en pensez quoi ?
963
Je pense que ca depend de ce que tu veux et recherche. Par exemple, java est certainement tres demande, maintenant, c'est si toi, ton profil c'est l'embarque, le java, c'est tout de suite moins interessant. Ruby est demande grace a Ruby on rail, qui est LA "killer app" du langage. Java est un langage totalement ininteressant et trivial a apprendre si tu connais le C et a plus forte raison le C++; sa force ce sont les frameworks (J2EE et cie). C#, c'est comme java a peu de choses pres, avec encore une fois de gros frameworks (qui font la meme chose que java, mais sont evidemment differents).

Je pense qu'il y a des specificites francaises, aussi, dans le sens ou plus encore qu'ailleurs, on demande de l'experience et d'etre operationnel tout de suite (ce qui est completement cretin, mais bon, on va pas refaire le monde).

Si c'est a titre personnel, perso, je conseillerais clairement vu ton parcours de te mettre a un langage haut niveau, que ce soit ruby, python, lisp, etc... Perso, ca a vraiment change ma vision de faire de la programmation, y compris quand je fais du C. J'ai beaucoup plus appris avec ce langage en 1 an et demi qu'avec le C en 5. Maintenant, c'est sur que tu trouveras pas beaucoup de jobs qui demandent du python (ou pire LISP :) ), du moins en France, mais ca reste vraiment tres formateur.
964
OK, merci de cette première input.

Clairement, pour moi l'objet c'est du chinois, j'en ai fait un chouia à l'époque (genre classe "ampoule", méthodes "allumer l'ampoule", "eteindre l'ampoule", "diagnostiquer ampoule", "changer ampoule", bref la salade débile des écoles d'ingé qui méprisent le soft haut niveau bicoze "les vrais ingés font du hard, le soft c'est pour les homos"...), mais ça me parle pas.
Aujourd'hui j'ai un peu honte, parce que en pratique je suis incapable de coder une appli MFC de base qui va écrire dans un fichier. D'abord parce qu'on me l'a jamais appris à l'école (voir plus haut), mais aussi parce que l'algorythmie que j'ai pratiquée à un niveau technique relativement élevé dans ma boite actuelle, ça a beau être complexe, c'est pas de la programmation. Exemple: je peux donner 700 raisons musicales et algorythmique pour écrire un C6 à tel endroit d'un fichier midi, mais je ne sais pas le coder (même si je connais très très bien la norme: ma boite est membre de la Midi Manufacturers Association, on participe au format, on a nos Sysex, etc...).

Cette honte se dissipe peu à peu, notamment grace à monsieur Christian Casteyde qui produit un des rares cours de C/C++ qui décrive CLAIREMENT ces langages et leurs spécificités ET les bibliothèques standard C++ (sans lesquelles à mon avis on peux pas faire grand chose rapidement, à moins d'avoir envie de se coder son propre fopen, bonjour les dégats et le gachis temporel).

Après, je connais des gens qui se sont rendus eux-mêmes vraiment opérationnels sur Java en quelques semaines, donc à mon avis ça vaut le coup de s'y pencher.
965
Les MFC, c'est peut etre pas le meilleur exemple non plus pour l'OO. Franchement, c'est typiquement le genre de trucs que tu apprendras beaucoup mieux avec un langage haut niveau, par rapport a java ou C++. Faut pas oublier qu'Alan Kay, le gars derriere les concepts de la programmation objet, avait implemente les concepts avec smalltalk, qui est beaucoup plus proche de python ou lisp que le C++ ou java.

Le probleme avec java ou C++ quand tu commences la programmation OO, c'est que tu dois ecrire enormement de code "inutile", ce que les anglo saxons appellent le boilerplate, et que tu passes facilement a cote de l'essentiel; avec le C++, quand tu debutes, c'est assez facile de penser que la programmation OO, c'est faire de jolies classes avec tes membres private, des fonctions set/get pour chacun d'eux, puis quelques details. C'est a dire que tu passes completement a cote de l'essentiel. Ces langages, au moins quand tu debutes avec ces concepts, t'empechent de voir l'essentiel, et te forcent a faire du "micro management" de code.

Je prend l'exemple de python parce que c'est ce que je connais de mieux, mais c'est applicable a beaucoup d'autres langages: le fait que les classes soient eux memes de objets, que les fonctions soient eux meme des objets, ca permet de faire des choses puissantes en quelques lignes. Pour comprendre les design pattern, par exemple, je pense que c'est beaucoup plus clair et rapide qu'avec le java ou le C++. Typiquement, des concepts tres simples comme les factory ou les abstract factory, c'est extremement penible dans ces langages, alors qu'avec un vrai langage haut niveau, c'est nettement plus simple, et tu l'utilises vraiment tout le temps quand tu codes. Et apres, comme tu maitrises bien ces concepts, tu pourras beaucoup plus facilement les appliquer en java ou en C++ si besoin est.

Pour le C++, une fois que tu connais les bases, les bouquins de reference pour moi, ce sont ceux de Scott meyer. Faut voir que le C et le C++ sont assez "pauvres" niveau bibliotheque standard, et que ce sont des langages assez complexes (enfin surtout le C++: c'est quand meme le seul langage a ma connaissance qui soit si complexe que personne ne peut entierement le connaitre). Il faut pas mal les pratiquer pour etre efficace avec. Rien que la librairie standard C, qui n'est pas tres epaisse comparee aux enormes frameworks java et .net, pour la maitriser, faut du temps.
966
J'oubliais un truc qui peut etre utile dans ton contexte: lire ce que certaines personnes font pour les entretiens par telephone/face a face. Je connais surtout ceux en anglais, mais tu dois pouvoir en trouver en francais j'imagine:

http://steve.yegge.googlepages.com/five-essential-phone-screen-questions
https://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html

C'est sur apres que certaines boites font ca differement (le processus chez google par exemple est assez different de celui que tu trouves dans une boite dont l'IT n'est pas le domaine fondamental, en tout cas d'apres les echos que j'ai eu de personnes qui les ont subies), mais ca donne une idee quand meme, je pense.
967
La mode actuelle : Java et C# sans hésiter. Je suis bien placé pour en parler, j'étais sur le marché de l'emploi il y a quelques mois et c'est vraiment ce qui ressort ;)
968
En plus si tu n'es pas familier de la programmation objet, il est utile de s'y mettre.

La bonne méthode est probablement :
- apprendre un langage objet (donc java, C#, ou éventuellement C++, Python, PHP... en fonction du domaine que tu vises)
- écrire quelques programmes (en exploitant les classes, l'héritage, l'encapsulation...)

Une fois que tu as commencé à te faire une idée de l'objet :

- lire le livre : "Design Patterns"
- lire aussi : "Effective C++" Même si tu ne fais pas de C++, les conseils de conception peuvent être utiles (en cas de doute, privilégier l'encapsulation à l'héritage...) Cela dit si tu ne fais pas de C++ tu peux juste l'emprunter et parcourir les paragraphes pas spécifiques au langage. Alors que Design Patterns est un must have ! ;)
969
J'ai fais pas mal d'objet à l'unif avec un prof qui maitrisait assez bien (il est consultant - en gros les boites le paient tres cher pour donner des conseils sur la manière d'optimiser leur temps de travail).
Il en ressort qu'utiliser un langage comme c++ ne t'oblige pas à faire de l'objet, que l'objet est une manière d'aider à structurer ton projet, de reutiliser du code et de cacher la complexité, mais ces 3 objectifs ne fonctionnent *que* si on respecte correctement les règles de l'objet.

J'ai pas encore vu de bouquin qui explique ça correctement mais j'ai pas tout lu non plus.
en gros les règles sont
-Un object est un objet de la vie reelle. Si une classe se met à faire 2000 lignes, c'est qu'elle est trop compliquée.
-Un antipattern qui marche pas, c'est une classe de 1000 lignes et 5 classes de 3 lignes - la complexité du code est mal distribuée
-Une difficulté de la programmation objet est de décider quel objet possède quelle responsabilité
-Il faut s'arranger pour qu'une classe ne dépendent qu'au minimum de l'implementation des autres classes connues. Par exemple
voiture::accelerer(){ getMoteur().getCarburateur().addFuel(); }
ne respecte pas la loi de demeter, càd qu'on ne dialogue qu'avec les objets nous appartenant et pas avec leurs membres.
-Heritage vs Composition : On n'utilise l'héritage entre B et A que si B "is-a" A. Meme si ils ont tous les deux la même interface.
Par exemple Voiture et Moteur ont peut-etre du code en commun dans la methode "accelerer" mais Voiture n'est pas un moteur ni inversement. On doit alors utiliser la composition (voiture "has-a" moteur).
Eventuellement, faire voiture et moteur descendants d'une classe "objet sachant accelerer"
- Et d'autres règles qui ne me viennent pas à l'esprit maintenant. Et il ne faut pas rire en lisant ceci, la plupart des regles plus haut ne viennent pas naturellement.


petit commentaire sur "http://steve.yegge.googlepages.com/is-weak-typing-strong-enough"
l'auteur parlait des fonctionnalités rentrées dans le langage alors qu'elles pourraient être objet. C'est dommage qu'il n'aie jamais fait de smalltalk, langage entièrement objet. Par exemple, if n'est pas un mot-clef mais simplement une méthode d'un objet de type booleen, et prend un paramètre, qui est le code à executer au cas ou c'est true. (le code est un objet aussi).
donc
if(a==b) a=a+1;
devient
(a=b) if [a:=a+1].
970
L'Objet facilite la comprehension, factorise le code et permet de dev + vite avec moins d'erreurs etc...

java est sans doute le mieux pour débuter (à la main puis avec l'IDE eclipse+ outils ckeckstyle,findbug) et possède une grande communauté.
Une fois la syntaxe (assez facile) digérée et avec un peu d'exp en prog il faut savoir en faire bonne usage: le concept des design pattern (indépendant du langage)
regroupe et normalise tous les situations auxquelles on peut être confronté
en programmation et leurs solutions types.

Il me semble que les technologies Java (JEE),C#(??),Ruby(Ruby on rails) servent surtout pour les app coté serveur:pour les gros systeme dinformations (sites web commerciaux,distributeurs,banques,..) et les applications entreprises intranet.

Pour les softs musicaux coté client, C++ doit faire l'unanimité: il est bcp moins gourmand en ressources et permissif que java:il permet d'intégrer de la programmation bas-niveau dans une architecture objet qui soccupera du fonctionnement générale: interface, gestion des objets métiers,plugin,.. (voire design pattern!)

Il ya aussi les applications embarqués, java fait parti du lot mais jen sais pas plus.

(Je suis étudiant en Info et tout ceci est peut-être inexact :lol:)
En tout cas c'est la jungle dans les technos informatique mais acquérir une vision d'ensemble objet n'est pas une perte de temps.
____________________________