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
  • 119 480 vues
  • 130 followers
1 Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le premier post
681
Interspeech. Mon prof me pousse (enfin je crois, ca fait partie des joies des barrieres culturelles franco japonaises) a faire un article, mais le truc sur lequel je bosse depuis plusieurs mois n'est toujours pas au point, et moralement, ca me fait chier de refaire un article similare a l'annee derniere, donc je force un nouvel algo en plus de nouvelles donnees pour l'evalutation...

SOC, activite principale de l'ete, on verra bien, je suis aussi cense preparer un article de journal, ICASSP 2008 entre d'ici la...Puis le SOC est en rapport direct avec ma these quand meme, je suis pas maso non plus. En fait, c'est assez rigolo, parce que j'ai besoin du ble pour m'acheter du matos ergonomique (chaise + bureau: 2000 euros minimum), et donc je vais plus me bousiller les mains pour me le payer. :surpris:
682
Ok, fini le taf un peu plus tot que prevu. Donc:

Citation :
Donc sans parler de machines de votes, quel est votre point de vue sur "quel langage permet le plus facilement de savoir ce que fait un programme en lisant le source ?" ou "avec quel langage est-il le plus difficile de cacher des fonctions douteuses ?"

Peut-être que Python, comme Perl, qui sont des langages de scripts réflexifs (ça se dit ? pour dire que l'on peut créer une chaîne de caractères dans le programme et ensuite exécuter celle-ci, ce qui est proche du code automodifiant) ne sont pas adaptés, mais il me semble qu'en java ça devrait être plus difficile ; et notamment plus difficile en java qu'en C.

Sinon l'Ada doit être un bon cheval pour écrire des programmes où il est difficile de cacher des trucs.


Bon moi je vote pour l'Ada. Et vous ?



Je pense que tu parles de deux choses qui sont reellement differentes en meme temps: savoir ce que fait un programme en le lisant, et cacher des fonctionalites meme au travers du code.

Le probleme du C est bien connu: il y a enormement de comportements non specifies. Typiquement, si je fais


int a[2];
int i;

for (i=0; i < sizeof(a) / sizeof(a[0]); ++i) {
a[++i] = i;
}


Ca veut pas dire grand chose; OK, un bon compilo te dira que a[++i], c'est plutot couillon, mais quand meme... Je parle evidemment pas du C++, qui a tellement de trucs qui n'ont aucun sens et dont le parsing est d'une telle complexite qu'aucun compilo ne le fait a 100% (template).

De l'autre cote, tu as des langages style LISP qui ont un "core" extremement reduit, et tout est construit de la (C aussi est relativement reduit; C++ ne l'est pas: encore une fois, c'est un langage battant le record complexite/expressivite). Tout est "specifie", d'une certaine maniere; c'est d'ailleurs une raison pour laquelle en theorie des langages, on prefere largement les langages fonctionnels: ca se prete beaucoup mieux pour prouver les resultats d'un programme donne (dans les limites theoriques qui dit qu'il existe des programmes dont il est impossible de determiner s'ils sont justes ou faux... cf Godel et V Neuman).

En fait, quand tu fais du cross platform avec du C, tu te rends compte que les problemes, c'est pas tant les differents OS (enfin quand meme un peu :) ), les differents architectures CPU, mais aussi les differents compilo. Le fait que le comportement depende du compilo, c'est assez specifique au C (et evidemment C++, mais j'evite de parler de THE beast).

Ada, lui, prend la dermarche de tout specifier "a la main", a travers tout un tas de trucs. Il y a une suite de tests a passer (3000 si ma memoire est bonne pour ada95) pour etre un compilo ada95 valide. En C, t'as rien de tel. En C++, c'est theoriquement impossible.

Python a vraiment un truc a ce niveau la, faut vraiment l'utiliser pour comprendre je pense. Eric Raymond le decrit tres bien, je trouve, ca correspond exactement a ce que j'ai ressenti en commencant python:

https://www.linuxjournal.com/article/3882

Citation :
So the real punchline of the story is this: weeks and months after writing fetchmailconf, I could still read the fetchmailconf code and grok what it was doing without serious mental effort. And the true reason I no longer write Perl for anything but tiny projects is that was never true when I was writing large masses of Perl code. I fear the prospect of ever having to modify keeper or anthologize again--but fetchmailconf gives me no qualms at all.



Le coup de pouvoir relire mon propre code des mois apres sans problemes, c'est vraiment un truc que tu peux pas faire en C (a part des trucs triviaux, entendons nous bien).
683
Interessant.
Ca me fait penser à un niveau bien plus basique au problème entre le java et le python de la "poubelle" :) et de la différence entre que java te dit que t as pas le droit de faire des trucs, et python t'authorise simplement pas à jouer au couillon.
Enfin bref, moi j'essaye déjà d'aller le plus loin que je peux en C et Java, même si j'avais demandé au prof si on pouvait pas plutot faire du python que du java ;)

cptn.io

684

Citation : Je pense que tu parles de deux choses qui sont reellement differentes en meme temps: savoir ce que fait un programme en le lisant, et cacher des fonctionalites meme au travers du code.


Ouais, c'est vrai, ce ne sont pas les mêmes choses. Par contre, sur l'exemple que tu donnes, j'aurais tendance à dire (en supposant que c'est par exemple le code de machines à voter) : pas humainement très lisible, donc code à refaire. Dans les projets industriels on applique généralement des règles de codage, plus ou moins strictes selon les équipes, et ce genre de trucs est généralement interdit. Rien que l'usage du ++ avant la variable déjà...

Citation : En fait, quand tu fais du cross platform avec du C, tu te rends compte que les problemes, c'est pas tant les differents OS (enfin quand meme un peu ), les differents architectures CPU, mais aussi les differents compilo. Le fait que le comportement depende du compilo, c'est assez specifique au C (et evidemment C++, mais j'evite de parler de THE beast).


Bah ça, ça dépend des exemples de code sur lesquels tu bosses. Pour ceux auxquels je suis confronté (des softs gros avec un historique, genre 500.000 lignes avec 10 à 20 ans d'existence), c'est clairement pas le langage qui pose le plus de problèmes, mais plutôt libc et architecture matérielle. Sur des portages de Digital True64 vers Linux ou AIX vers Linux, c'est surtout les caractéristiques des OS qui jouent...

Citation : Ada, lui, prend la dermarche de tout specifier "a la main", a travers tout un tas de trucs. Il y a une suite de tests a passer (3000 si ma memoire est bonne pour ada95) pour etre un compilo ada95 valide. En C, t'as rien de tel. En C++, c'est theoriquement impossible.


C'est sûr.

Citation : Le coup de pouvoir relire mon propre code des mois apres sans problemes, c'est vraiment un truc que tu peux pas faire en C (a part des trucs triviaux, entendons nous bien).


Là encore j'apporterais une nuance : se relire soi-même, si c'était un objectif au moment du codage (et qu'on a fait ce qu'il fallait), on y arrive. Je dirais même qu'en C++ ou en Perl, on peut faire du code limpide.

En revanche, si on prend un développeur qui ne fait aucun effort, le code a beaucoup de chances d'être le plus illisible avec C++ ou Perl ; tandis que d'autres langages vont obliger à un minimum de lisibilité (ce qui doit être le cas de Python).
685

Citation : Rien que l'usage du ++ avant la variable déjà...


J'avais entendu un truc selon lequel ca serait plus rapide que i++? (la personne qui me l'a dit avait l'air assez ironique...)

Citation : Là encore j'apporterais une nuance : se relire soi-même, si c'était un objectif au moment du codage (et qu'on a fait ce qu'il fallait), on y arrive. Je dirais même qu'en C++ ou en Perl, on peut faire du code limpide.

En revanche, si on prend un développeur qui ne fait aucun effort, le code a beaucoup de chances d'être le plus illisible avec C++ ou Perl ; tandis que d'autres langages vont obliger à un minimum de lisibilité (ce qui doit être le cas de Python).


Je suis d'accord avec ca. J'ais été confronté au 2 cas de figure, du code C++ assez complexe mais relativement bien écris (pas par moi) sur lequel j'ais du bosser (plusieurs dizaine de milliers de ligne) qui était bien écris et finalement facile à comprendre, mais aussi du code avec nom de variable à la con, commentaire hallucinant, identation inexistante, conception des classes totalement farfelus... maintenant je pense qu'il y avait plus ou moins volonté de cache ce que faisait le code reelement (code pour physique de voiture, et le résultat était excellent).
686
Le coup du ++i, je l'ai aussi entendu, et a priori de qqn bien meilleur programmeur que moi. Par contre, c'etait valable qu'en C++, et c'etait avec visual studio 6, et je ne me souviens plus pourquoi et dans quel contexte. La, comme ca, avec gcc, je vois pas de difference dans l'assembleur genere.

Citation :
Je suis d'accord avec ca. J'ais été confronté au 2 cas de figure, du code C++ assez complexe mais relativement bien écris (pas par moi) sur lequel j'ais du bosser (plusieurs dizaine de milliers de ligne) qui était bien écris et finalement facile à comprendre, mais aussi du code avec nom de variable à la con, commentaire hallucinant, identation inexistante, conception des classes totalement farfelus... maintenant je pense qu'il y avait plus ou moins volonté de cache ce que faisait le code reelement (code pour physique de voiture, et le résultat était excellent).



Oui mais en caricaturant un peu, ce que vous dites, c'est que du code bien ecrit est lisible, et que du code mal ecrit est illisible, une lapalissade, quoi. La question, c'est plus de savoir a quel point un langage te permet d'exprimer des constructions de haut niveau sans que le langage gene. En C++, l'exemple typique, pour moi, c'est boost et la STL. Ca rend tres rapidement le code illisible des qu'on utilise des trucs non triviaux, et ca pretend etre haut niveau alors qu'en fait pas vraiment.
687
++i est bien plus rapide que i++. Le premier incrémente la variable puis la retourne. Le second crée une variable temporaire, incrémente sa valeur et retourne la valeur temporaire.
Autant dire que lorsque le type de i est un itérateur complexe, on sent la différence. Sur un entier, le compilateur est capable d'optimiser. De manière générale, on conseille d'ailleurs d'implémenter i++ en terme de ++i.
688
Hello

Je me permets juste de vous laisser déjà le nom du site de mon projet , même si y arien dessus, ceux intéressés, vous pouvez venir dessus régulièrement, dès que j'aurais un peu de tps, et que j'aurais recu mon mac pro, je mettrais tt le schmilblik en ligne ;)
http://projetguitare.free.fr

Sinon miles 1981 on dirait que tu es sur l univ de stras, moi je suis a mulhouse pour le moment, mais a la rentrée, normalment, je monte a stras ... On pourra se siroter une biere a l occaz ;)

cptn.io

689

Citation :
++i est bien plus rapide que i++. Le premier incrémente la variable puis la retourne. Le second crée une variable temporaire, incrémente sa valeur et retourne la valeur temporaire.
Autant dire que lorsque le type de i est un itérateur complexe, on sent la différence. Sur un entier, le compilateur est capable d'optimiser. De manière générale, on conseille d'ailleurs d'implémenter i++ en terme de ++i.



Dans mon cas, c'etait bien pour des entiers, et c'etait bien pour cette raison temporaire, en lisant ton post ca m'est revenu. Mais c'etait il y a quelques annees, et le paysage des compilo C++ a quand meme bien evolue (au moins sur les plateformes windows/mac/linux) depuis, donc j'imagine que pour les entiers, c'est plus tres important.
690
Gremlins > sans pb :)
gabou > tout à fait, le compilo fait l'optimisation, normalement. Mais faut prendre les bonnes habitudes pour y penser quand ce n'est pas un entier.