OVH Cloud OVH Cloud

Microsoft et Java

295 réponses
Avatar
Wykaaa
Microsoft semble reconnaître que Java permet de développer plus
rapidement que C# et qu'il y a moins de failles de sécurité dans Java
que dans .net :
http://dsi.silicon.fr/nouveautes/microsoft-java-forever%E2%80%A6-1366

10 réponses

Avatar
JKB
Le Sat, 18 Jun 2011 14:13:05 +0200,
Aéris écrivait :

Le 18/06/2011 10:13, JKB a écrit :
Avec des outils standardisés comme Graddle ou Maven, je peux recompiler
la plupart des projets Java du monde sans aucun prérequis sur ma
machine.



On fait la même chose avec tous les autres langage. Regarde un peu
pkgsrc sous NetBSD. Ce n'est pas une histoire de langage, mais de
protocole de compilation.



Sauf que Java n'est justement pas que son langage mais la foultitude
d'outils intégrés.



Je n'ai jamais dit le contraire. Il faut seulement que la foultitude
et demi des outils intégrés soient disponibles partout. Ce qui
revient à la même chose que savoir si la libx du C est disponible
sur telle ou telle cible.

Je n'ai jamais compris pourquoi il fallait du XML dans des choses
comme ant ni pourquoi un makefile des familles ne fonctionne pas
pour compiler du Java.



Avec Maven, si tu préfères un POM en YAML ou en Groovy, c'est possible =)



Je préfère un makefile de barbu.

Et ? C'est encore quelque chose qui n'est _pas_ intrisèque au
langage.



Si
L'utilisation de ces outils a été standardisé dans Java et quasiment
plus aucun projet ne se fait sans eux.



Et c'est dramatique. Parce qu'un tas de choses qui devraient être
simples sont complexifiés à l'extrème. Il n'y a _aucune_ raison
d'avoir remplacé un makefile par un truc bouffi de XML.

Dans ce cas, c'est que le type chargé d'écrire le makefile (ou la
version autoconf/automake) est un branque. Le makefile (ou le
configure) doit s'arrêter en signalant ce qu'il manque.
Généralement, ces bouts manquants sont disponibles dans les dépôts.



Quand je vois que Maven va aller te chercher dans un dépôt la dépendance
manquante ainsi que ses dépendances transitives et te mettre ça bien au
chaud sur ton disque (~/.m2) sans pourrir ton système, et ce quelque
soit ton système (Windows, BSD, Linux, Mac)…



Et c'est parfaitement idiot, parce que c'est local à ton compte.
Tant que tu es seul sur ta machine, ça va.

Effectivement, tous les devs de Makefile sont des branques comme tu dis.



Tu as judicieusement coupé ce sur quoi je réagissais. Faut-il que je
te le rappelle ?

Je vais te donner un exemple tout bête :
https://bitbucket.org/aeris/openpki/src



Beuah... Déjà, lorsque je vois tous ces répertoires imbriqués les
uns dans les autres, j'ai envie de vomir.



Ça c'est l'IDE qui le gère.



Non, c'est intrinsèque à java et à son schéma de recherche de
classe que tu retrouve dans les sources (import) et dans les
fichiers jar.

Et si tu ne veux pas de répertoires imbriqués, c'est totalement possible.
Sauf que tu t'exposerais à des conflits avec tes dépendances si tes
dépendances fonctionnaient aussi comme ça.
En effet, comment faire la différence entre CollectionUtils.class de
Apache Commons et la mienne si tout est au même niveau ? Alors que chez
moi pas de soucis, une est dans fr.imirhil.openpki.utils.CollectionUtils
et l'autre dans org.apache.commons.utils.CollectionUtils. Rien que cela
t'évite les saloperies d'écrasement qu'on peut connaître avec C/C⁺⁺.



Pardon ? Les namespaces du C++ ne sontpas fait pour les chiens.
Quant au C, il est parfaitement possible de régler le problème une
fois pour toute avec des macros. Personnellement, lorsque j'écris un
projet en C, mon makefile modifie à la volée le nom des fonctions
humainement lisible en quelque chose qui n'écrasera rien. Ce qui
doit te déranger, en C, c'est que tu dois faire cela à la main et
faire attention à ce que tu fais.

Et ? Si j'avais le temps, je te ferais la même chose en C (quitte à
utiliser à fond cpp ou m4 et un patchwork de bibliohtèques bien senties).
Et pour ta gouverne, le nombre de lignes n'est pas un facteur discriminant.
Le nombre d'instructions le serait déjà un peu plus.



502 statements si tu préfères =)

Portabilité limitée aux systèmes qui embarquent une JVM conforme. Ça
s'est considérablement amélioré ces derniers temps avec openjkd,
mais durant très longtemps, les seules cibles étaient celles qui
avaient une JVM Sun officielles. Avec C/C++/Fortran, ça compile
partout ou presque. Avec Java, j'ai eu des tas de problèmes avec
blackdown, J9, Superwaka et autres. La portabilité Java, c'est de la
poudre aux yeux, d'autant que lorsque tu commences à faires de
choses subtiles, il faut _aussi_ trouver les paquets à importer.



http://mvnrepository.com/ ?
162.000 librairies qui n'attendent que toi…
Toutes disponibles en 4 lignes de XML dans le POM.



Et combien de bibliothèques de qualité ?

Tu m'en fais de même en C ou en C⁺⁺ ?



Oui si j'en avait le temps et l'envie.

En si peu de code ?



À peu près.

En si peu de temps (un week-end) ?



Certainement pas, mais ce serait réutilisable et portable.



Alors là je demande à voir =)



Je t'ai déjà dit que je n'avais pas le temps, mais des trucs comme
ça, je n'arrête pas d'en faire en C. Tu peux aller voir mes
productions.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le Sat, 18 Jun 2011 14:19:31 +0200,
Aéris écrivait :

Le 18/06/2011 12:49, JKB a écrit :
Je vais aller vomir... Un makefile, c'est simpliste à côté...



C'est certes verbeux, mais c'est beaucoup plus concis au final que le
Makefile puisque je ne m'occupe que de lister ce que j'ai besoin (4
lignes pour chaque dépendence à intégrer).
Maven se charge de TOUT le reste (téléchargement, intégration au projet,
compilation, test, site web, déployement, versionning…).

Et l'IDE est aussi là pour t'aider en te masquant le XML au final :
http://blog.frankel.ch/wp-content/resources/top-eclipse-plugins-i-wouldnt-go-without/m2eclipse-overview-tab.jpg
http://www.jussimononen.info/wp-content/uploads/2010/03/maven_pom_editor.png



Je n'aime pas les IDE (autre que vim ou à la rigueur emacs) et je
n'aime pas le XML. J'ai eu trop de problèmes bizarres avec des IDE
et encore trop avec des outils qui moulinent le XML pour en faire
quelque chose d'utile. Rajouter une couche pour cacher ce XML que je
ne saurait voir est une tartufferie.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le Sat, 18 Jun 2011 14:25:15 +0200,
Aéris écrivait :

Le 18/06/2011 10:00, JKB a écrit :
Le rapport avec la choucroute ? Et si je préfère Netbeans ?



Netbeans s'intègre très bien aussi

Et si au
contraire je suis un vimiste tendance fanatique ?



Pas de soucis non plus, c'est ce que j'utilise sur les serveurs sans X

Un langage est bon
ou mauvais indépendamment de l'IDE utilisée. S'il faut un IDE, il y
a déjà AMHA un problème.



L'IDE n'est pas obligatoire, il n'est là que pour aider à aller vite
(complétion automatique, intégration de Maven…)



Dans ce cas, vim roulaize grave.

Pas seulement au démarrage. Avec java (et tous les trucs objets), il
te faut un architecte du début à la fin. Mon expérience de vieux con
me dit que :
1/ commencer un projet en fonctionnel est très dur, mais plus on
arrive à la fin et plus c'est facile ;
2/ terminer un projet en objet est très dur, plus on arrive à la fin
et plus les conneries du début entravent le développement.




J'ai jamais eu aucun de ce genre de soucis en dev Java.



Heureux homme.

Et une fois l'architecture (standard donc qui se retrouve sur chaque
projet ensuite) bien entrée dans la tête des devs (y compris débutant),
ça roule généralement tout seul.



Idem.

Dans ma boîte, la formation aux outils Java est estimée à 3 semaines,
après quoi ils sont autonomes sur TOUS les projets Java.



Trois semaines de formation aux outils java ? Chapeau bas.

Et la formation est « productive » au sens où elle a lieu sur de vrais
projets en cours, donc sans perte de temps, et avec des exemples
concrets d'application.



Et après, on récupère du code moisi. Je ne vois pas comment
assimiler en trois semaines tout ce qu'il faut pour utiliser
correctement un bloatware comme java associé à un autre bloatware
comme Netbeans ou Eclipse. Si on y arrive en trois
semaine, on a déjà de solides notions de POO. Sinon, c'est
parfaitement impossible (sauf à ne pas comprendre ce qu'on fait et à
utiliser des recettes toutes faites).

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 14:32, JKB a écrit :
Ça reste à prouver. Pour ma part, je suis convaincu du contraire
parce qu'un code à interface fonctionnelle sera réutilisable
beaucoup plus facilement. Si la mise au point est plus longue, sa
durée de vie sera aussi supérieure. Je n'ai encore jamais vu un code
java réutilisé plusieurs années après sa conception initiale.
Généralement, les projets repartent presque d'une feuille blanche et
le code ancien n'est pas réutilisé.



Spring ? Hibernate ? Apache Commons ? SLF4J ? JUnit ? Hamcrest ? DBUnit
? JAXB ? Axis ?
J'en passe et tant d'autres…

La force de Java est de n'avoir à réaliser le code métier de
l'application, tout le reste (bdd, log, conf, test…) existe déjà et
coûte 4 lignes de XML à intégrer.
Donc oui on part toujours de 0 parce que le seul code qu'on réalise est
le code du client !

Si je bosse dans du ferroviaire, je ne fais que du ferroviaire dans mon
code, pas de gestion de BDD.
Si je fais du nucléaire, je ne fais que du nucléaire, pas de gestion du
fichier de conf.
Si je fais de la biométrie, je ne fais que de la biométrie, pas de
gestion des web services.

Le code obtenu est donc quasiment 100% métier et donc effectivement très
difficilement réutilisable sur un autre projet (faudrait déjà avoir le
droit de le faire vis-à-vis de notre client final…).

Ce n'est certainement pas plus immonde que ce qui est écrit plus
haut. En tout cas, ça n'est certainement pas plus compliqué et ça se
fait avec quelques macros en C.



J'attend la solution avec plaisir alors =)
Et si tu considères que les macros sont des choses propres, évolutives
et maintenables…

Non. Je suis convaincu que les types qui développent boost sont très
bons. Ce n'est pas pour cela que ce n'est pas un goufre à mémoire.
Quand tu veux faire quelque chose de générique, avec des classes qui
héritent les unes des autres, tu te retrouves toujours à gâcher de
la mémoire.



La généricité est à mettre là où elle a un sens.
Je n'irais pas rendre générique le code métier d'une application de
biométrie parce que j'ai de toutes façons de très fortes chances de ne
jamais pouvoir m'en resservir plus tard.
Mais je rend générique ma couche d'accès aux données pour être
indépendantes du projet voire du moteur de base de données. Ou encore
mes librairies de gestion des fichiers de conf qui seront 100%
réutilisables.

Boost est l'exemple même du frameworks totalement bloated qui a voulu
faire de la généricité là où elle n'avait aucun intérêt (trop bas
niveau) : array, image, buffer, CRC, exception, io, math, random…
Exactement le type de code qu'on va devoir faire justement de manière
non générique pour des raisons de conso mémoire ou de performances de
notre cœur métier.
Avec Boost, on va avoir le centre du système générique donc peu
performant et la périphérie (plus accessoire) non générique.

Spring fait plus ou moins la même taille mais se concentre sur des
choses très haut niveau où la généricité a du sens : authentification,
accès à la bdd, MVC, moteur de workflow, logging.
Le cœur du métier reste à ta charge et sera spécifique donc performant.
Mais toutes les options qui relèvent plus de l'ergonomie et du design
sont déjà toutes faites de manière générique et réutilisable.
Et il y a toutes les chances du monde pour que ton client te demande
plutôt des évos sur la périphérie que sur le cœur du métier (qui au
final évolue très peu).
Du genre se coupler à un annuaire LDAP pour l'authentification ou
d'envoyer les logs du cluster à un syslog que de changer l'algo de
reconnaissance des empreintes digitales ou le format de stockage de ces
empreintes…

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/KJFAAoJEK8zQvxDY4P9ZJwH/ihtVJU9t+2uRux92e6Svic0
Oh3aln/af7CyFnTeUeBC7cUCgrAPozvGapiNQ0YUt0zsx68qPrZm3NF/KwDA5jbO
xPy01ijX4Qod7cdJsh4ENq1K+MRSbid12weTQ8YVRP/meiZq4D1PXs8AaerVVuUK
6YTUNsS0woT/g9p2fbGFtCj3KOPTewcLpJLM1QRhTYPfGS5pltjFWMZ0iIUoTwb9
ZIfoxw1LzuiCkGvCDIc0jYT3Ne4hj+XltoEd5pmIxZUmclt44ch2M5j1rBAx5xRg
UQ3RN4OV3P3SOLFiWkg6IpkZV22/KogQ45bwYlUrFCThq2Pvb9ZrccmShsZwzc0 =i3nx
-----END PGP SIGNATURE-----
Avatar
JKB
Le Sat, 18 Jun 2011 15:04:13 +0200,
Aéris écrivait :

Le 18/06/2011 14:32, JKB a écrit :
Ça reste à prouver. Pour ma part, je suis convaincu du contraire
parce qu'un code à interface fonctionnelle sera réutilisable
beaucoup plus facilement. Si la mise au point est plus longue, sa
durée de vie sera aussi supérieure. Je n'ai encore jamais vu un code
java réutilisé plusieurs années après sa conception initiale.
Généralement, les projets repartent presque d'une feuille blanche et
le code ancien n'est pas réutilisé.



Spring ? Hibernate ? Apache Commons ? SLF4J ? JUnit ? Hamcrest ? DBUnit
? JAXB ? Axis ?
J'en passe et tant d'autres…



Je parle de code en général, pas de bibliothèques.

La force de Java est de n'avoir à réaliser le code métier de
l'application, tout le reste (bdd, log, conf, test…) existe déjà et
coûte 4 lignes de XML à intégrer.



Mouarf...

Donc oui on part toujours de 0 parce que le seul code qu'on réalise est
le code du client !

Si je bosse dans du ferroviaire, je ne fais que du ferroviaire dans mon
code, pas de gestion de BDD.



Et tu crois sérieusement qu'en C ou qu'en C++, on réinvente la roue
à chaque fois ?

Si je fais du nucléaire, je ne fais que du nucléaire, pas de gestion du
fichier de conf.
Si je fais de la biométrie, je ne fais que de la biométrie, pas de
gestion des web services.



Au risque de me répéter, on ne réinvente pas la roue lorsqu'on fait
autre chose que du Java.

Le code obtenu est donc quasiment 100% métier et donc effectivement très
difficilement réutilisable sur un autre projet (faudrait déjà avoir le
droit de le faire vis-à-vis de notre client final…).



Je ne pensais même pas à réutiliser ce code ailleurs. Simplement à
réutiliser le code de la version 1 comme base de la version 2. Mon
expérience me dit qu'il faut souvent oublier le code de la version
1 et repartir d'une page blanche (c'est même assez souvent vrai
lorsqu'on code en C++). En fait, j'aimerais bien savoir ce que tu
cherche à dire. Tout ce que tu présentes comme avantages de Java
existe peu ou prou en C++ (et la majeure partie est aussi disponible
sous une autre forme en C).

Ce n'est certainement pas plus immonde que ce qui est écrit plus
haut. En tout cas, ça n'est certainement pas plus compliqué et ça se
fait avec quelques macros en C.



J'attend la solution avec plaisir alors =)
Et si tu considères que les macros sont des choses propres, évolutives
et maintenables…



Oui. Les macros, ça peut être propre. Ce n'est pas parce que ça peut
être sale qu'elles le sont toutes. Les macros, c'est exactement
comme les variables globales, les gotos et toutes les choses qui
peuvent ne pas être propres. C'est parfois indispensable.

Non. Je suis convaincu que les types qui développent boost sont très
bons. Ce n'est pas pour cela que ce n'est pas un goufre à mémoire.
Quand tu veux faire quelque chose de générique, avec des classes qui
héritent les unes des autres, tu te retrouves toujours à gâcher de
la mémoire.



La généricité est à mettre là où elle a un sens.
Je n'irais pas rendre générique le code métier d'une application de
biométrie parce que j'ai de toutes façons de très fortes chances de ne
jamais pouvoir m'en resservir plus tard.
Mais je rend générique ma couche d'accès aux données pour être
indépendantes du projet voire du moteur de base de données. Ou encore
mes librairies de gestion des fichiers de conf qui seront 100%
réutilisables.

Boost est l'exemple même du frameworks totalement bloated qui a voulu
faire de la généricité là où elle n'avait aucun intérêt (trop bas
niveau) : array, image, buffer, CRC, exception, io, math, random…
Exactement le type de code qu'on va devoir faire justement de manière
non générique pour des raisons de conso mémoire ou de performances de
notre cœur métier.
Avec Boost, on va avoir le centre du système générique donc peu
performant et la périphérie (plus accessoire) non générique.

Spring fait plus ou moins la même taille mais se concentre sur des
choses très haut niveau où la généricité a du sens : authentification,
accès à la bdd, MVC, moteur de workflow, logging.
Le cœur du métier reste à ta charge et sera spécifique donc performant.
Mais toutes les options qui relèvent plus de l'ergonomie et du design
sont déjà toutes faites de manière générique et réutilisable.
Et il y a toutes les chances du monde pour que ton client te demande
plutôt des évos sur la périphérie que sur le cœur du métier (qui au
final évolue très peu).



Oui ? Et ? En C (par exemple), on écrit un wrapper pour une
bibliothèque externe. Lorsqu'on change de bibliothèque, on réécrit
le wrapper qui fait un nombre limité de lignes de code. On ne noie
jamais une bibliothèque qui est susceptible d'être changée dans du
code. Lorsque je dois virer mysql pour attaquer une base postgresql,
ça se fait en changeant une ligne dans un wrapper, rien de plus.

Du genre se coupler à un annuaire LDAP pour l'authentification ou
d'envoyer les logs du cluster à un syslog que de changer l'algo de
reconnaissance des empreintes digitales ou le format de stockage de ces
empreintes…



J'ai surtout l'impression à te lire que tu ne maîtrises absolument
pas des outils comme le C et que la conception d'un projet en
langage fonctionnel te dépasse. Tout ce qui te semble impossible à
écrire dans un paradigme fonctionnel existe déjà, soit directement
en C++, soit indirectement lorsqu'on des habitudes de codage en C.
La grande différence est qu'avec Java, tu es _obligé_ de faire comme
ça. Cela t'est imposé par les outils.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 14:41, JKB a écrit :
Je n'ai jamais dit le contraire. Il faut seulement que la foultitude
et demi des outils intégrés soient disponibles partout. Ce qui
revient à la même chose que savoir si la libx du C est disponible
sur telle ou telle cible.



La foultitude ne dépend que d'un seul prérequis : Maven
Tout le reste, c'est Maven qui va te le gérer et te l'intégrer

Je préfère un makefile de barbu.



Rien ne t'empèche de faire un Makefile pour Java.

Et c'est dramatique. Parce qu'un tas de choses qui devraient être
simples sont complexifiés à l'extrème. Il n'y a _aucune_ raison
d'avoir remplacé un makefile par un truc bouffi de XML.



En quoi le XML serait-il moins bon que la syntaxe Makefile ?
Surtout que mon POM se contente d'être déclaratif (ce dont j'ai besoin)
et non impératif (ce que j'ai à faire) comme dans un Makefile.

Et c'est parfaitement idiot, parce que c'est local à ton compte.
Tant que tu es seul sur ta machine, ça va.



Non, un autre utilisateur récupérera la même chose que moi sur son
propre compte.
Si c'est l'espace-disque qui te gène, en 1 ligne de XML, je définit mon
dépôt à C:Repo ou /opt/repo hein
<localRepository>${user.home}/.m2/repository</localRepository>

Non, c'est intrinsèque à java et à son schéma de recherche de
classe que tu retrouve dans les sources (import) et dans les
fichiers jar.



Oui mais :
— L'IDE te masque cette hiérarchie très profonde
— Tu peux très bien faire un projet avec tout au même niveau

Il ne s'agit que de conventions communément admises et standardisées par
l'ensemble de la communauté Java comme étant de bonnes pratiques de
programmation.

Pardon ? Les namespaces du C++ ne sontpas fait pour les chiens.



Les namespaces ne te seront pas plus utiles si une de tes dépendances
utilise le même que toi…
En Java, cela ne peut pas arrivé puisque c'est une convention d'avoir un
package de la forme « dns inverse » . « projet »
Chaque namespace est donc garanti unique à travers le monde.

Quant au C, il est parfaitement possible de régler le problème une
fois pour toute avec des macros.



Que personne ne peut décemment considérer comme propre, maintenable et
évolutif.

Personnellement, lorsque j'écris un
projet en C, mon makefile modifie à la volée le nom des fonctions
humainement lisible en quelque chose qui n'écrasera rien.



Utilité ?

Ce qui
doit te déranger, en C, c'est que tu dois faire cela à la main et
faire attention à ce que tu fais.



À la main oui, cela me dérange.

Faire attention non, étant donné que je considère par exemple que les
devs Maven sont autrement plus compétents que moi pour savoir comment
gérer la compilation d'un projet et donc que je leur délègue avec joie
cette partie.
Je n'irais jamais regarder comment fonctionne le plugin
maven-compile-plugin, ce n'est pas mon domaine de compétence. Tout comme
ce n'est pas mon domaine de faire un ORM de BDD ou un système de
workflow. D'autres sont bien plus compétents que moi sur ces sujets et
ont toute ma confiance pour leurs librairies.
Mon métier est de faire une appli de reconnaissance d'empreintes
digitales ou de guider des métros, pas de me battre avec des Makefile ou
des bases de données.

Et combien de bibliothèques de qualité ?



La plupart.
Déjà rien que les trucs de la fondation Apache, celles de la fondation
Eclipse, les Atlasians, les Sonatype, les CodeHaus, les SpringSources…
Toutes celles-là passent par des process de QA totalement monstrueux
avant publication.

Je t'ai déjà dit que je n'avais pas le temps, mais des trucs comme
ça, je n'arrête pas d'en faire en C. Tu peux aller voir mes
productions.



URL ?

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/KaPAAoJEK8zQvxDY4P99xQH+wQcOp+ilolDSE/gEW8ImH7B
bwBqOP0ilEtiBl/wmuG1OuCIKZdtmaQSSQklxXIU1WcBr2QoMoOhKdzn3CRZs/Ss
HauojjC29zJ7jeQK97QFMhJCg1DzuKBdeQw8c6DCUwi/E0C1txFCvTOGaFlDW8D7
zDzDt/rbV+mNFX3XN4PVQLoFGkje7hiX9Y0Y9jJZdCkUnrivTiQVTcN3SdCfTt++
DdysqrejTOSd1Xv/umnYLKEBHC+LOK7xEBlf0TnnQyXe1+6GvlIwHt3kCnVYi1+X
J9XK582aURTdWfb37t6BCDx8BhS46TwlLiUhUzKla6zB4pdes1tZ5I/4f/7MFFU =wlix
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 14:46, JKB a écrit :
Et après, on récupère du code moisi.



Non, le code suit la procédure normale de QA : relecture de code
hebdomadaire, suivi des métriques via Sonar et Jenkins, normes de
codage, couverture de code…

Je ne vois pas comment
assimiler en trois semaines tout ce qu'il faut pour utiliser
correctement un bloatware comme java associé à un autre bloatware
comme Netbeans ou Eclipse.



Seul Maven est une réelle barrière.

Eclipse n'est au final qu'un éditeur de texte enrichi, le reste des
plugins tournant en arrière-plan sans intervention de l'utilisateur.

Le reste des concepts (3 tiers, MVC, IoC) vient avec le temps,
l'architecte JEE ayant déjà fait son travail, le nouveau dev ne sera
qu'« utilisateur » de l'architecture mise en place au début.

Si on y arrive en trois
semaine, on a déjà de solides notions de POO. Sinon, c'est
parfaitement impossible (sauf à ne pas comprendre ce qu'on fait et à
utiliser des recettes toutes faites).



Notions de POO oui, notion de Java non.
Le dernier formé dans mon équipe est venu du monde .Net.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/KfmAAoJEK8zQvxDY4P9lXoIAJjvDOrLUxbC8Uw5vjEhwLcS
TWENN0wFfPVtpk6aLlUzts/IXM3TfDWUS2KwM2xWDJD71R3ef5UtclKRHBGeqPx9
gCRajsRUTi4v5MVw2c5IA6c0cLIn8jpHgk2pJgakO2FgTqaAXeUhBZ608OpC9rgr
1wuq7xy/z3riSu09A7oB1V0WhSTKlKgwQE0LZ1qSwzZ4SIoSB7FUOS2f4HXHTlRe
aHxAFdtbxLRgYGvGg6YuFhy7NtMN3LmkAysrG6R5jF6UmEnvBvoTsaCW/mlf/Jl3
k3wrpe6IIKYRHuetKBCixn11mXE1vk3NcH2R9iw/i1JH7EWddUzB7nLr2wE5G6M =+VOY
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 15:20, JKB a écrit :
Mon
expérience me dit qu'il faut souvent oublier le code de la version
1 et repartir d'une page blanche (c'est même assez souvent vrai
lorsqu'on code en C++)



En tout cas sur mes applis Java, je n'ai jamais vu ça.
Le code est suffisamment propre et découplé pour pouvoir intervenir en
profondeur et sans effet de bord notable.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/KiDAAoJEK8zQvxDY4P90QQIAKbOyoruzSWE8CJMwXxmvHaE
+hW1+G3ZGfCdSsftW1KFvODzYEmxHPphwbxuhEJV5D27m/2Q8vN30/mtAOjN7DZl
i5qbSWTfCpgMEgGAex0lgAEVXFPBKGkxwtUnb1cXjh4VRSTUkUe/J8ZbCODF04ed
Gt2CjfabHsfyWsXXrQIzJE6XSV75tjVvZ28I3enUrNTkVutqvN+rPGWuGVgiqF9Q
R/ruSRPG/Aetb8ZsCLy/UQhGbl8ZzML8oyL5yDqQjJZsa3zwZjvLdHCO5Qk32KiD
YNmVWwow30Qn9EWBcoL+TQRGvYAwb8c2auJ2pQaQYk1Zae2LPd/Jus5Ft8UYV+M =RQiP
-----END PGP SIGNATURE-----
Avatar
Nicolas George
Aéris , dans le message <4dfc9043$0$19048$, a
écrit :
D'autant plus que les #ifdef/#define n'ont aucune justification dans le
code et ne sont là que pour faire plaisir au compilateur.



Ça, c'est juste factuellement faux.
Avatar
JKB
Le Sat, 18 Jun 2011 15:22:29 +0200,
Aéris écrivait :

Le 18/06/2011 14:41, JKB a écrit :
Je n'ai jamais dit le contraire. Il faut seulement que la foultitude
et demi des outils intégrés soient disponibles partout. Ce qui
revient à la même chose que savoir si la libx du C est disponible
sur telle ou telle cible.



La foultitude ne dépend que d'un seul prérequis : Maven
Tout le reste, c'est Maven qui va te le gérer et te l'intégrer

Je préfère un makefile de barbu.



Rien ne t'empèche de faire un Makefile pour Java.

Et c'est dramatique. Parce qu'un tas de choses qui devraient être
simples sont complexifiés à l'extrème. Il n'y a _aucune_ raison
d'avoir remplacé un makefile par un truc bouffi de XML.



En quoi le XML serait-il moins bon que la syntaxe Makefile ?



Je t'aide : le XL n'a jamais été prévu pour être humainement
lisible.

Surtout que mon POM se contente d'être déclaratif (ce dont j'ai besoin)
et non impératif (ce que j'ai à faire) comme dans un Makefile.

Et c'est parfaitement idiot, parce que c'est local à ton compte.
Tant que tu es seul sur ta machine, ça va.



Non, un autre utilisateur récupérera la même chose que moi sur son
propre compte.
Si c'est l'espace-disque qui te gène, en 1 ligne de XML, je définit mon
dépôt à C:Repo ou /opt/repo hein
<localRepository>${user.home}/.m2/repository</localRepository>



Encore faut-il avoir accès à /opt/repo et ne pas casser les
bibliothèques du voisin qui nécessite telle version et pas telle
autre. J'ai des tas de bouts de code Java qui demandent une version
bien spécifique d'un 'import' et qui refusent de fonctionner avec
une version plus récente.

Non, c'est intrinsèque à java et à son schéma de recherche de
classe que tu retrouve dans les sources (import) et dans les
fichiers jar.



Oui mais :
— L'IDE te masque cette hiérarchie très profonde
— Tu peux très bien faire un projet avec tout au même niveau

Il ne s'agit que de conventions communément admises et standardisées par
l'ensemble de la communauté Java comme étant de bonnes pratiques de
programmation.



Comme l'indentation à la noix alors que l'indentation d'Alman est
beaucoup plus logique.

Pardon ? Les namespaces du C++ ne sontpas fait pour les chiens.



Les namespaces ne te seront pas plus utiles si une de tes dépendances
utilise le même que toi…
En Java, cela ne peut pas arrivé puisque c'est une convention d'avoir un
package de la forme « dns inverse » . « projet »
Chaque namespace est donc garanti unique à travers le monde.



Non, pas plus. J'ai le droit d'avoir un org.com.truc.bidule qui est
strictement identique celui utilisé par quelqu'un d'autre à l'autre
bout du monde. Et encore une fois c'est un faux problème. Si tu
utilises un namespace en C++ qui s'appelle lib, le problème vient de
toi et non du langage.

Quant au C, il est parfaitement possible de régler le problème une
fois pour toute avec des macros.



Que personne ne peut décemment considérer comme propre, maintenable et
évolutif.



Que _tu_ ne considères pas comme propre ou maintenable. Encore une
fois, une macro peut parfaitement être propre. Je te suggère de
regarder quelque chose comme tailq.h pour te donner une idée
précise.

Personnellement, lorsque j'écris un
projet en C, mon makefile modifie à la volée le nom des fonctions
humainement lisible en quelque chose qui n'écrasera rien.



Utilité ?



Ne pas avoir de collision de symbole en C et surtout ne pas avoir à
corriger à la main tout un tas de nom de fonctions.

Ce qui
doit te déranger, en C, c'est que tu dois faire cela à la main et
faire attention à ce que tu fais.



À la main oui, cela me dérange.

Faire attention non, étant donné que je considère par exemple que les
devs Maven sont autrement plus compétents que moi pour savoir comment
gérer la compilation d'un projet et donc que je leur délègue avec joie
cette partie.
Je n'irais jamais regarder comment fonctionne le plugin
maven-compile-plugin, ce n'est pas mon domaine de compétence. Tout comme
ce n'est pas mon domaine de faire un ORM de BDD ou un système de
workflow. D'autres sont bien plus compétents que moi sur ces sujets et
ont toute ma confiance pour leurs librairies.
Mon métier est de faire une appli de reconnaissance d'empreintes
digitales ou de guider des métros, pas de me battre avec des Makefile ou
des bases de données.

Et combien de bibliothèques de qualité ?



La plupart.



Ça n'engage que toi.

Déjà rien que les trucs de la fondation Apache,



Parlons-en. Il y a des trucs très bons et des vériables merdes
complètement inabouties.

celles de la fondation
Eclipse, les Atlasians, les Sonatype, les CodeHaus, les SpringSources…
Toutes celles-là passent par des process de QA totalement monstrueux
avant publication.

Je t'ai déjà dit que je n'avais pas le temps, mais des trucs comme
ça, je n'arrête pas d'en faire en C. Tu peux aller voir mes
productions.



URL ?



Remonte un peu dans le forum, tu trouveras.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr