Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 131 699 vues
- 130 followers

Anonyme



miles1981

Là, c'ets en interne au labo, je n'en sais pas plus

Audio Toolkit: http://www.audio-tk.com/

gerfaut

C'est pas mon labo qui va me payer ça (c'est pas trop le domaine !!), dommage, le sujet est hautement intéressant quand on s'intéresse au traitement audio...

Pov Gabou



miles1981

Audio Toolkit: http://www.audio-tk.com/

Wolfen

Sur Maple, je suis en train de redécouvrir les joies de la modélisation électronique, et j'ai des coefficients de filtres plutôt monstreux : du coup je suis obligé de les simplifier à la main, pour avoir l'expression de chaque terme...
Il n'existerait pas une commande des fois qui permettrait de factoriser mes termes un minimum, ou fantasmons un coup qui me ferait sauter tous les dénominateurs sur chacun des termes ?
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

cptn.io

Dans un an et demi, les processeurs avec GPU+CPU(+MPU) intégrés ( intel moorestown, amd fusion) vont apparaitre sur le marché.
Pensez-vous qu'une réécriture complète des plugs sera nécessaire ou pourront-ils s'adapter à l'architecture hautement reconfigurable qui aura lieu à ce moment là ?
cptn.io

miles1981

gremlins > Il y a déjà des débuts de progrmmation sur le GPU avec CUDA et la bibliothèque BLAS associée, mais tant qu'il n'y a pas de standard pour interfacer proprement un GPU ou un CPU+GPU (normaliser CUDA, l'équivalent chez AMD et Intel), rien ne sera utilisé pour les VST.
Audio Toolkit: http://www.audio-tk.com/

Wolfen


Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Pov Gabou

http://steve.yegge.googlepages.com/is-weak-typing-strong-enough
Steve Yegge est un celebre blogger, qui etait avant chez amazon et maintenant chez google (donc a priori a pu voir de l'interieur d'enorme projets logiciels), et le post traite du probleme langage dynamique vs langage "static" (ou l'on doit typer les parametres).
Je trouve ca interessant, parce qu'un argument souvent amene par les gens qui trouvent les langages dynamiques trop "legers" pour les "vrais" projets typiquement vu en entreprise, c'est que les langages dynamiques ne sont pas adaptes pour les gros projets. La, tout l'article raconte le cheminement de Yegge, qui est passe d'un bord a l'autre, en quelque sorte, entre autre suite a l'observation du developpement a Amazon.

miles1981


Audio Toolkit: http://www.audio-tk.com/

Pov Gabou

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).

bara

- 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 ?

Pov Gabou

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


bara

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.

Pov Gabou

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.

Pov Gabou

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.

zieQ


Dr Pouet

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 ! ;)

aris

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].

Anevrisme

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

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.

Pov Gabou

Citation :
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
Ca depend vraiment des domaines, faut pas generaliser comme ca. Surtout, les boites interessantes ne seront pas interesses par un seul langage, mais par ton aptitude a en apprendre de nouveaux pour differents domaines. Je trouve justement que les liens que j'ai donnes un peu plus haut rendent bien cet aspect la. Alors bien sur, apres, il y a des trucs fondamentaux a connaitre, mais comme Bara a deja fait de l'embarque, il doit deja bien connaitre le C et meme l'assembleur, donc pas de probleme a ce niveau la, et je pense que tout ce qui est structure de donnees est maitrise aussi (arbre, list, graphes, queues, etc...)
> Dr Pouet: pour apprendre l'object, retrospectivement, j'aurais vraiment prefere avec un langage haut niveau (J'ai fait un peu de java (beurk), et apres pas mal de C++ (re beurk), et ce sont pas de super langages pour apprendre). Meme si des langages comme python/ruby/CLOS sont pas tres demandes en soi, ils permettent vraiment d'apprendre plus facilement les concepts. En particulier, bien comprendre quand utiliser heritage vs composition, les pattern de base, c'est vraiment beaucoup plus facile en python/etc... Ca permet de te focaliser sur les points importants, et pas sur les details.
Surtout, le probleme avec java et pire C++, c'est le melange type/classes (en fait, en C++, c'est pas melange: stroustrup ne voit fondamentalement la classe que comme un type, toute l'histoire du C++ renvoit a ca), et la focalisation sur l'heritage. Avec un langage dynamique, tu fais beaucoup moins ce type d'erreur, parce que les concepts sont totalement independants. D'ailleurs, lorsqu'Alan kay a bosse sur smalltalk, il n'a incorpore que tard l'heritage (fait avant sur simula par exemple).
Je sais pas vous, mais perso, les exemples objets voitures has motor mais is vehicule, j'ai jamais compris: c'est bidon comme exemple, et ca aide vraiment en rien pour programmer. C'est beaucoup plus puissant de penser en terme de protocole, d'API, de message passing, etc... Meme le bouquin des design pattern, je ne le trouve pas tres bon en soi. C'est une reference, pas de doute, mais pour apprendre et comprendre les principes, je suis pas si convaincu.

Pov Gabou

Par exemple, en python, le concept derriere yield n'a rien de fantastique: tu peux ecrire la meme chose sans, et dans tout langage turing complet evidemment. Mais ca permet d'abstraire des trucs qui sont en fait tres courants, et se retrouvent dans presque toute application: a ce moment la, ce n'est plus un "trick", mais une caracteristique extremement utile. Ca permet aussi une compacite du langage, caracteristique tres importante je pense (Bruce Eckel, le gars qui a ecrit les thinking in C++ et ... in java, a un tres bon exemple: en java, il ne se souvient jamais comme lire un fichier ligne par ligne: il faut plusieurs classes, etc... En python, c'est
for line in open(filename).readlines():
print line
et tu ne peux pas l'oublier.
https://www.artima.com/intv/aboutmeP.html)

Dr Pouet

Citation : Dr Pouet: pour apprendre l'object, retrospectivement, j'aurais vraiment prefere avec un langage haut niveau (J'ai fait un peu de java (beurk), et apres pas mal de C++ (re beurk), et ce sont pas de super langages pour apprendre). Meme si des langages comme python/ruby/CLOS sont pas tres demandes en soi, ils permettent vraiment d'apprendre plus facilement les concepts. En particulier, bien comprendre quand utiliser heritage vs composition, les pattern de base, c'est vraiment beaucoup plus facile en python/etc... Ca permet de te focaliser sur les points importants, et pas sur les details.
En fait je voulais juste dire qu'apprendre l'objet est utile, voire nécessaire. Après c'est bien de pouvoir le faire avec un langage qui en plus peut constituer une compétence recherchée.
Perso je n'ai pas trop de vue d'ensemble sur les langages les plus utilisés.
Et il me semble que même si java et C++ sont sûrement plus répandus, Python est assez courant aussi. Donc effectivement, apprendre l'objet avec Python, pourquoi pas.
De toute façon le mieux est certainement que Bara regarde les entreprises ou les domaines qui l'intéresse, et en déduise les compétences actuellement recherchées.
Citation : Je sais pas vous, mais perso, les exemples objets voitures has motor mais is vehicule, j'ai jamais compris: c'est bidon comme exemple, et ca aide vraiment en rien pour programmer.
Complètement, mais alors complètement d'accord avec toi.
Ne parlons pas non plus du distributeur automatique de billets qui est une sombre connerie.
En objet, les interfaces graphiques me semblent être un bon exemple : les ensembles de classes / widget (dessinables, redimensionnables...) C'est concret, on voit bien l'intérêt de la généricité. Rien qu'en manipulant l'éditeur de dessin de Word ou powerpoint (


zieQ

Citation : Ca depend vraiment des domaines, faut pas generaliser comme ca. Surtout, les boites interessantes ne seront pas interesses par un seul langage, mais par ton aptitude a en apprendre de nouveaux pour differents domaines. Je trouve justement que les liens que j'ai donnes un peu plus haut rendent bien cet aspect la. Alors bien sur, apres, il y a des trucs fondamentaux a connaitre, mais comme Bara a deja fait de l'embarque, il doit deja bien connaitre le C et meme l'assembleur, donc pas de probleme a ce niveau la, et je pense que tout ce qui est structure de donnees est maitrise aussi (arbre, list, graphes, queues, etc...)
> Dr Pouet: pour apprendre l'object, retrospectivement, j'aurais vraiment prefere avec un langage haut niveau (J'ai fait un peu de java (beurk), et apres pas mal de C++ (re beurk), et ce sont pas de super langages pour apprendre). Meme si des langages comme python/ruby/CLOS sont pas tres demandes en soi, ils permettent vraiment d'apprendre plus facilement les concepts. En particulier, bien comprendre quand utiliser heritage vs composition, les pattern de base, c'est vraiment beaucoup plus facile en python/etc... Ca permet de te focaliser sur les points importants, et pas sur les details.
Tu regardes les annonces, dans 80-90% des cas c'est JAVA/J2EE ou C#, et le taff est dans le domaine des systèmes d'informations. Tu le dis toi-même python/ruby/CLOS ne sont pas très utilisés. Alors bon, même si je peux à la limite admettre que ces langages soient plus intéressants à apprendre ou même meilleurs (débats dans lesquels je ne rentrerai pas, faute de connaissances), je trouve ta remarque carrément hors sujet par rapport à la question de bara ;)
Mais bon, moi, ce que j'en pense de l'auto-formation, c'est que c'est pas reconnu par les employeurs. A mon avis, il vaudrait mieux utiliser les congés de formation ou droit individuel à la formation.

aris

Citation :
Je sais pas vous, mais perso, les exemples objets voitures has motor mais is vehicule, j'ai jamais compris: c'est bidon comme exemple, et ca aide vraiment en rien pour programmer. C'est beaucoup plus puissant de penser en terme de protocole, d'API, de message passing, etc... Meme le bouquin des design pattern, je ne le trouve pas tres bon en soi. C'est une reference, pas de doute, mais pour apprendre et comprendre les principes, je suis pas si convaincu.
Ben ce sont des exemples usuels que tout le monde est capable de comprendre. Ca peut être sur une voiture qui est un véhicule, un choux qui est un légume, ...
Le tout étant de savoir dans quel contexte on se trouve.
On avait eu un exercice en cours : faire une hiérarchie objet des objets de cuisine. On bosse 5 minutes puis le prof nous dit qu'il nous manquait une information essentielle que personne n'a demandée : selon quels critères on fait la hiérarchie.
pratiquement tout le monde avait placé l'héritage en fonction de l'utilité, par ex couteau à steak hérite de couteau qui hérite de couvert. Mais il y avait d'autres possibilités comme hiérarchiser les instruments en fonction de leur matériaux ou de leur constructeur, et donc selon le contexte on était tous faux.
Citation : > aris: L'auteur connait le LISP, qui permet le meme type de choses. En fait, je comprends pas tres bien ton argument: ce que l'auteur cherche a montrer, c'est que de soit disant "tricks" (il prenait l'exemple d'une closure) sont en fait tres puissant lorsque ils sont suffisament generaux. Des langages comme smalltalk ou LISP sont tellement plus puissants et expressifs que le java que sa discussion ne s'applique pas a eux.
Oui d'accord. La fonctionnalité qui me manque vraiment fort en java c'est la possibilité de donner du code en paramètre à une fonction/méthode sans devoir recourir au tricks des annonymous inner class (ou alors que ce soit masqué).
- < Liste des sujets
- Charte