Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

1 2 3 4 5
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 17/06/2011 23:49, Tonton Th a écrit :
Le problème est le même en Java ou en C++.



Mêmes causes, mêmes conséquences.



Ajoute C ou ASM si tu le souhaites, cela ne change rien.
C'est même encore pire, avec des tricks comme les variables globales ou
que tout est accessible à la simple connaissance du .h…

Et j'oublie aussi la croix et la bannière pour gérer proprement la
compilation sans passer par des abérations comme les autotools ou le
bordel sans nom des inclusions croisées de .h…

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

iQEcBAEBAgAGBQJN+82iAAoJEK8zQvxDY4P9cVgIAIEgko0z9SPa2vY7fmmWjNHH
TR7au/6HASEK7VCykAVHoy2EgbSr99luoR1dJr0H5x89+xzl/0Z3sltJmLHJmR31
DX0AMeIIlC2cKQclzu8XTH1h9bgvp44HVbtfYq09mIAAPYNvZIRgpttToEi7jzwu
RGa+m3JDSkXQGS5tiE9fxPupZ2T0krmV3YAZ1UW6gxpjxS6mEBJZT/kWQQF0tjz+
18G0J89UZ4cQSerZha0o4HBuF60KPIi63UG06gn6y+eo+jjs+eAmycOtQpMLpFEi
L3sDHs5HvbWpbol5ObHtQxsvJOG7SLTsVppmI1m/bwvwki4UYNAHCgkA6BFgFA4 =W6aq
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 17/06/2011 23:51, Tonton Th a écrit :
Juste ce que j'ai vu ces derniers jours...



On ne doit pas voir la même chose alors…

Côté Java je vois des trucs pas parfait certes, mais relativement
propres et bien conçus.
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. Et je peux les intégrer en 4 lignes de XML à mon propre projet.
Toujours du côté des standards, la plupart des méthodes de travail ont
été standardisées et sont respectées par tout projet de ce nom, aussi
bien la partie organisation du code (convention de nommage) que celui de
la SCM (nommage des versions, emplacement des tags), des méthodes de
gestion de projet (tests unitaires, site web) ou des architectures
(n-tiers, IoC, MVC).

Quand je regarde un projet en C ou C⁺⁺, je tombe invariablement sur plus
de bordel pour gérer la compilation (makefile démentiel,
autotools/autoconf inmaintenable, #ifdef/#define à la con pour éviter
les boucles d'inclusion…) que pour gérer le code métier lui-même.
La compilation passe invariablement par la polution de mon système avec
des tonnes de librairies que je dois gérer à la main, des options de
compilation à faire palir la sortie d'un man…
Et niveau homogénéité, chaque projet fait des siennes, avec du code
souvent digne du siècle dernier (singletons, factories, god objects,
variables globales…).


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

Même sans avoir fait de Java voire même de programmation objet ou de
programmation tout court, tu es presque en mesure de comprendre ce code.

En à peine 2.000 lignes de code (1.954 pour être tout à fait exact), je
gère :
— Une base de données complète, création automatique et requètes
incluses, indépendante du moteur de base derrière (MySQL, PostgreSQL,
SQL Server, H2, Oracle…)
— Un site web complet
— Une architecture 3-tiers (service, dao, domain) totalement séparée
pour la partie serveur
— Une architecture MVC (séparation accès base de données / affichage)
pour la partie cliente
— L'intégralité de la gestion d'une PKI (génération CA, génération
certificat, signature certificat, export x509/PKCS12/PEM, révocation et
prochainement CRL et OCSP)
— Les tests unitaires de l'application

Avec Maven, je suis aussi capable de te générer :
— le site du projet
— sa Javadoc
— ses rapports de tests U
— ses rapports de couverture de code
– ses rapports de normes de codage, de duplication de code ou de
mauvaises pratiques de programmation
– son changelog
— ses statistiques de code (nombre de classes, taille des
classes/méthodes, les hot spots à améliorer…)
— …

Et tu es capables de le compiler et de le déployer sur ta machine sans y
installer quoi que ce soit (hormis Maven) et sur n'importe quelle
architecture (Windows, Linux, Mac, x86, amd64…) avec juste un « mvn
install ».
Tu peux même le lancer immédiatement sans le moindre prérequis, juste
avec un « mvn org.mortbay.jetty:jetty-maven-plugin:run ».

Et tout ça en à peine 2.000 lignes de code Java et 400 lignes de
configuration, je le rappelle !

Tu m'en fais de même en C ou en C⁺⁺ ?
En si peu de code ?
En si peu de temps (un week-end) ?

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

iQEcBAEBAgAGBQJN+9aVAAoJEK8zQvxDY4P90qcIAJnz1xoXExVSgFcdBaILO28a
Fg1sciGKxN8mVtn2PwMfSUNbIFlOO/Yx/vCutaZ4Jq48rDyvik+lvvZRO4E/Xnt3
M/LPbNg/TQZWrSOI4HjPb5sOXPxskXNhUZOcFuEshI7ecuZ/SvXIkYuwZysPm7mE
69IQGzHuD40+c2LjKOILUxPGW5ZPDkweMsJvKIxEY2KJJw8dQBvkj24uvhsUVTkL
m9W4pKFcRJ0aPKPeksJuga4aCZbu6e1MkXZW8Rx6BVFba1GSV2/onPKlTOtEewjm
bvdU0T6ldfm03PhucaUzkSVLAsqMvcIan/aPf+5a5S/uQpxO0OeskP/HQ7FWDyw =+wDH
-----END PGP SIGNATURE-----
Avatar
JKB
Le Fri, 17 Jun 2011 22:56:32 +0200,
Aéris écrivait :

Le 17/06/2011 22:16, JKB a écrit :
Avec java ? La maintenance ou l'évolutivité est au contraire moindre
parce que c'est du code écrit à la va-vite lorsque ce n'est pas à la
va-comme-je-te-pousse !



Là tu parles du dev, pas du langage…
Le problème est le même en Java ou en C++.



Certes, je parle de développement objet en général. Pour avoir bien
réfléchi au problème, je crois de plus en plus que le concept objet
a été conçu pour avoir sur le marché des tas de développeurs
médiocres capables de faire des applications rapidement, le concept
d'objet étant un garde-fou.

Par ailleurs, la programmation
abjecte^Wobjet est la pire des choses parce qu'on n'a jamais le bon
objet sous la main lorsqu'on a un programme un tant soit peu
complexe.



Ce qui dénote plus un problème d'architecture qu'un problème de langage.



Certainement. Sauf que depuis quelque temps, je trouve que les
développeurs qui codent en objet (et qui n'ont jamais vu que ça)
sont des branques et ne conçoivent pas correctement leurs soft.
Rajouter un bout de code dedans est trop souvent une gageure.

Une architecture 3-tiers couplée à du MVC pour les clients, un soupçon
d'IoC pour coupler tout ça ensemble et éviter le problème sus-mentionné,
et basta.
Une archi totalement classique mais ô combien complexe à mettre en œuvre
en C++ et très rarement appliquée…

Alors qu'en Java, Maven, Hibernate ou autre Spring te prémache
totalement le travail, sans risque d'erreur.
100 lignes de codes et je suis connecté à une base de données avec tout
mon schéma de données et mes requêtes opérationnels et plus qu'à remplir
les trous côté 3-tiers et MVC, le tout totalement modulable et évolutif
sans aucun tricks de code à la con.
Tente d'en faire autant avec du C++…



Déjà fait, et qui plus est assez modulaire pour être réutilisable.

Et le jour où je ne veux plus un client lourd mais un client/serveur
voire un site web, la couche 3-tiers est fully reusable sans changer la
moindre ligne de code.

La puissance de Java ne vient pas de son langage, mais de ses outils, de
sa communauté et de ses méthodes et standards de travail totalement
intégrés et respectés par l'ensemble de ses projets.



Java, ce serait intéressant s'il n'y avait pas obligatoirement de
l'objet. C'est pour cela que le C++ lui sera toujours supérieur. En
C++, tu peux parfaitement faire de la programmation fonctionnelle
(qui est amha largement supérieure lorsqu'elle est correctement
faite à la programmation objet). En Java, c'est beaucoup plus
difficile. Quant à gérer efficacement les ressources comme la
mémoire ou les fils d'exécution, Java ne sait carrément pas faire.

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
Nicolas George
Aéris , dans le message <4dfbc82d$0$18755$, a
écrit :
Et niveau maintenance et évolutivité, Eclipse est quand même un des IDE


<snip>

Parler de l'existence d'un IDE pour vanter la maintenance, c'est assez
cocasse.

S'il y a besoin d'un IDE pour assurer la maintenance, c'est précisément
parce que le langage ne la facilite pas.
Avatar
JKB
Le Fri, 17 Jun 2011 23:56:55 +0200,
Aéris écrivait :

Le 17/06/2011 23:49, Tonton Th a écrit :
Le problème est le même en Java ou en C++.



Mêmes causes, mêmes conséquences.



Ajoute C ou ASM si tu le souhaites, cela ne change rien.
C'est même encore pire, avec des tricks comme les variables globales ou
que tout est accessible à la simple connaissance du .h…



Gnî ? Et les #ifdef dans les .h, c'est fait pour les chiens ?
Quant aux variables globales, les seules fois où j'en utilise, c'est
uniquement pour gérer des choses dans des gestionnaires
d'interruption.

Et j'oublie aussi la croix et la bannière pour gérer proprement la
compilation sans passer par des abérations comme les autotools ou le
bordel sans nom des inclusions croisées de .h…



Euh... Mauvais .h, changer .h. Les autotools ne sont pas là pour
gérer ce genre de problèmes. Les trucs comme
autoconf/automake/autoheader sont là pour assurer l'inclusion des
bon fichiers d'en-tête sur des architectures bizarres en fonction
des bibliothèques installées. L'inclusion croisée des en-têtes ne
peut être réglée que par des primitives de préprocesseur dans ces
en-têtes.

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 Fri, 17 Jun 2011 23:33:33 +0200,
Aéris écrivait :

Le 17/06/2011 23:14, Tonton Th a écrit :
Ou sur la facilité de maintenance et l'évolutivité accrue.



J'ai juste un peu lolé...



Justification ?

Java est connu pour ses outils permettant d'éviter tous les trucs
totalement bloated qu'on trouve régulièrement dans la plupart des autres
langages.



Là, j'ai plus qu'un peu lolé ;-)

Et niveau maintenance et évolutivité, Eclipse est quand même un des IDE
les plus aboutis ne serait-ce que pour ses fonctionnalités de
refactoring très évoluées et par sa modularité (plugins).



Le rapport avec la choucroute ? Et si je préfère Netbeans ? Et si au
contraire je suis un vimiste tendance fanatique ? 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.

Après, je te concède que pour parvenir à un niveau correct de
maintenance et d'évolutivité, il faut aussi avoir des développeurs
compétents et souvent un architecte logiciel (en tout cas au démarrage
du projet).



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.

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 00:35:07 +0200,
Aéris écrivait :

Le 17/06/2011 23:51, Tonton Th a écrit :
Juste ce que j'ai vu ces derniers jours...



On ne doit pas voir la même chose alors…

Côté Java je vois des trucs pas parfait certes, mais relativement
propres et bien conçus.



Mouarf. Je ne vois pas en quoi le même développeur ferait des choses
propres en Java et sale en C ou C++ (voire Fortran). Au contraire,
j'ai vu bien plus de lignes de code Java parfaitement dégueulasse
que du Fortran ignoble.

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.

Et je peux les intégrer en 4 lignes de XML à mon propre projet.



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.

Toujours du côté des standards, la plupart des méthodes de travail ont
été standardisées et sont respectées par tout projet de ce nom, aussi
bien la partie organisation du code (convention de nommage) que celui de
la SCM (nommage des versions, emplacement des tags), des méthodes de
gestion de projet (tests unitaires, site web) ou des architectures
(n-tiers, IoC, MVC).



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

Quand je regarde un projet en C ou C⁺⁺, je tombe invariablement sur plus
de bordel pour gérer la compilation (makefile démentiel,
autotools/autoconf inmaintenable, #ifdef/#define à la con pour éviter
les boucles d'inclusion…) que pour gérer le code métier lui-même.



Ce n'est pas un argument. Tu mélanges ce qui est inhérent au langage
avec ce qui ne l'est pas. On peut écrire correctement un makefile.
On n'édite pas un makefile dans une chaîne autotools. Il est
construit automatiquement (et est effectivement démentiel) et le
Makefile.am est parfaitement clair (sauf à vouloir faire des choses
subtiles).

La compilation passe invariablement par la polution de mon système avec
des tonnes de librairies que je dois gérer à la main, des options de
compilation à faire palir la sortie d'un man…



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.

Et niveau homogénéité, chaque projet fait des siennes, avec du code
souvent digne du siècle dernier (singletons, factories, god objects,
variables globales…).



C'est bien ce que je disais. Vive la programmation fonctionnelle.

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.

Même sans avoir fait de Java voire même de programmation objet ou de
programmation tout court, tu es presque en mesure de comprendre ce code.

En à peine 2.000 lignes de code (1.954 pour être tout à fait exact), je
gère :
— Une base de données complète, création automatique et requètes
incluses, indépendante du moteur de base derrière (MySQL, PostgreSQL,
SQL Server, H2, Oracle…)
— Un site web complet
— Une architecture 3-tiers (service, dao, domain) totalement séparée
pour la partie serveur
— Une architecture MVC (séparation accès base de données / affichage)
pour la partie cliente
— L'intégralité de la gestion d'une PKI (génération CA, génération
certificat, signature certificat, export x509/PKCS12/PEM, révocation et
prochainement CRL et OCSP)
— Les tests unitaires de l'application



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.

Avec Maven, je suis aussi capable de te générer :
— le site du projet
— sa Javadoc
— ses rapports de tests U
— ses rapports de couverture de code
– ses rapports de normes de codage, de duplication de code ou de
mauvaises pratiques de programmation
– son changelog
— ses statistiques de code (nombre de classes, taille des
classes/méthodes, les hot spots à améliorer…)
— …

Et tu es capables de le compiler et de le déployer sur ta machine sans y
installer quoi que ce soit (hormis Maven) et sur n'importe quelle
architecture (Windows, Linux, Mac, x86, amd64…) avec juste un « mvn
install ».



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.

Tu peux même le lancer immédiatement sans le moindre prérequis, juste
avec un « mvn org.mortbay.jetty:jetty-maven-plugin:run ».

Et tout ça en à peine 2.000 lignes de code Java et 400 lignes de
configuration, je le rappelle !

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.

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
Tonton Th
On 06/17/2011 11:56 PM, Aéris wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 17/06/2011 23:49, Tonton Th a écrit :
Le problème est le même en Java ou en C++.



Mêmes causes, mêmes conséquences.



Ajoute C ou ASM si tu le souhaites, cela ne change rien.
C'est même encore pire, avec des tricks comme les variables globales ou
que tout est accessible à la simple connaissance du .h…



En quoi l'utilisation raisonnable des variables globales
est-elle un "tricks" ?

Et j'oublie aussi la croix et la bannière pour gérer proprement la
compilation sans passer par des abérations comme les autotools ou le
bordel sans nom des inclusions croisées de .h…



Les autotools n'ont rien à voir avec le langage. Et non, sur
un projet bien construit, les inclusions "croisées" de .h
ne posent pas de problèmes.

--
Je cherche un nouveau travail...
http://tboudet.free.fr/cv-thierry-boudet.pdf
http://sigfood.dinorama.fr/
Avatar
Tonton Th
On 06/18/2011 12:35 AM, Aéris wrote:

machine. Et je peux les intégrer en 4 lignes de XML à mon propre projet.



https://bitbucket.org/aeris/openpki/src/b97fbbff9598/pom.xml

Le XML c'est comme la violence : si ça ne marche pas,
c'est que tu n'en as pas utilisé assez.

--
Je cherche un nouveau travail...
http://tboudet.free.fr/cv-thierry-boudet.pdf
http://sigfood.dinorama.fr/
Avatar
JKB
Le Sat, 18 Jun 2011 12:46:28 +0200,
Tonton Th écrivait :
On 06/17/2011 11:56 PM, Aéris wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 17/06/2011 23:49, Tonton Th a écrit :
Le problème est le même en Java ou en C++.



Mêmes causes, mêmes conséquences.



Ajoute C ou ASM si tu le souhaites, cela ne change rien.
C'est même encore pire, avec des tricks comme les variables globales ou
que tout est accessible à la simple connaissance du .h…



En quoi l'utilisation raisonnable des variables globales
est-elle un "tricks" ?

Et j'oublie aussi la croix et la bannière pour gérer proprement la
compilation sans passer par des abérations comme les autotools ou le
bordel sans nom des inclusions croisées de .h…



Les autotools n'ont rien à voir avec le langage. Et non, sur
un projet bien construit, les inclusions "croisées" de .h
ne posent pas de problèmes.



Le problème est d'avoir un projet _bien_ construit. Il y a longtemps
que je n'ai plus vu un petit jeune capable de construire
correctement un projet. Et les IDE pour cela ne sont pas une bonne
chose puisqu'elles masquent un tas de choses qui ne devraient pas
l'être.

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
1 2 3 4 5