Quel langage pour un logiciel gérant BD et IA ?

[Fermé]
Signaler
-
 maxwell12 -
Salut,

J'ai une bonne maitrise du C, je fais un peu de Prolog et du Java mais très peu du C++.

J'aimerais développer un logiciel de A-Z avec les fonctionnalités suivantes:
- Gestion de Base de Données : comme dans un magasin
- Multi-utilisateurs
- Réseaux et Web
- Vision : reconnaissance faciale des personnes, objets et mouvements
- Machine learning

Je souhaite entre autre que ce logiciel soit :
- Robuste
- Efficace, dans la gestion des ressources
- Intègre, dans la protection des données.

Ce pendant, de mon manque d'experience dans le développement de logiciel complexe, je ne sais:
- quel(s) langage(s) choisir?
- Une fois le(s) langage(s) choisi un IDE serait-il necessaire?

Merci pour vos suggestions et conseils avenir.

1 réponse

Messages postés
16408
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 octobre 2021
2 900
Bonjour,

Développer de A à Z l'ensemble de ces fonctionnalités n'a pas de sens. Il faut s'appuyer sur ce qui existe déjà, notamment pour la reconnaissance faciale et le machine learning qui sont des domaines très pointus qui ne se réinventent pas tout seuls.
Il te restera malgré tout "l'assemblage" à faire, ce qui sera déjà une tâche assez dure en soit.

De plus, un IDE est toujours nécessaire, tu ne vas pas coder tout ça avec le Bloc-Note Windows...

Pour la robustesse, l'efficacité et l'intégrité, cela dépendra surtout de ta manière de programmer, c'est la plupart du temps une question d'algorithmie, le choix du langage n'est pas pertinent pour ces critères.

Sinon, au vu de tes fonctionnalités, Java EE pourra tout faire, avec des bibliothèques comme OpenCV pour la reconnaissance faciale et Weka pour le machine learning.
Néanmoins dans ce genre de logiciels complexes il faut penser à découper les fonctionnalités, on pensera notamment micro-services, mais cela demande de la conceptualisation en amont.
Merci bien pour vos suggestions,

Pour ce qui est de '"A-Z", il s'agit pour moi d'eviter autant que possible les solutions existantes, dans l'optique de comprendre au maximum.

Par fonctionnalité web je sous entendais la possibilité d'échange de données par les utilisateurs via internet et avec le cloud.
Le logiciel devrant etre pc (s'ouvrir via ses propres fenetres et non un navigateur); est ce que le Java EE fera toujours l'affaire ou alors le Java SE?

Mais ma craite avec le Java c'est de ne pas avoir suffisament les choses en main (faire de la programmation bas niveau : gestion de la memoire...) raison pour la quelle je suis beaucoup plus attaché au C.

Pour ce qui est de la conception, UML fera-il l'affaire? si oui quelles peuvent etre les diagrammes les plus pertinents coté intellignece artificiel?
Est ce qu'il existe de la documentation sur OpenCV et Weka? si oui où l'avoir?

Coordialement.
Messages postés
16408
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 octobre 2021
2 900 > maxwell12
"il s'agit pour moi d'eviter autant que possible les solutions existantes, dans l'optique de comprendre au maximum"
Le périmètre de ton application est trop important pour pouvoir faire ça, même en utilisant tout ce qui existe déjà cela va te demander énormément de travail pour tout mettre en place, et ne pas les utiliser va être encore plus dur.

"ma craite avec le Java c'est de ne pas avoir suffisament les choses en main (faire de la programmation bas niveau : gestion de la memoire...) "
Là encore, ça revient à tout vouloir faire de A à Z, même gérer la mémoire (!)
Java est justement un langage qui permet de s'éviter ces tâches très techniques que la JVM fait très bien toute seule.
Tu parlais de robustesse et d'efficacité dans la gestion des ressources, de mon point de vue c'est tout faire à la main qui amène un risque de perte mémoire , alors qu'un langage objet avec un ramasse miette va être fiable sans rien faire.

"la possibilité d'échange de données par les utilisateurs via internet et avec le cloud"
Cela devrait probablement nécessiter une application serveur, en plus de tes applications clientes, ce sera d'autant plus nécessaire pour l'intégrité de tes données, il est dangereux que ce soit des applications clientes qui accèdent à la base de données.

"Le logiciel devrant etre pc (s'ouvrir via ses propres fenetres et non un navigateur); est ce que le Java EE fera toujours l'affaire ou alors le Java SE?"
Java SE pourrait suffire côté client, avec du Java FX par exemple, mais il n'est pas exclu de pouvoir y ajouter des fonctionnalités Java EE afin de communiquer avec le serveur.

Quand je parlais de conception c'était surtout pour modéliser ce que fait chaque application. Car ça n'aurait pas vraiment de sens d'avoir un seul programme qui fasse tout. Le machine learning et la reconnaissance faciale seront plus efficaces côté serveur, à proximité de la base de données, alors que côté client la gestion de l'interface utilisateur peut déjà être assez lourde à gérer, il vaut mieux séparer les responsabilités.
En UML il faudrait surtout s'intéresser aux diagrammes de composants et diagrammes de déploiement.
Remarque : qui dit plusieurs applications dit aussi potentiellement plusieurs langages si nécessaire.

Quant aux documentations sur les bibliothèques elles seront disponibles via leurs sites officiels.
Merci bien,

Mais je ne sais pas comment faire communiquer l'application cliente (en Java SE ) avec l'application serveur (en Java EE), est ce que les servlets pourrait le faire comment dans le modele MVC de facon à considerer l'application cliente comme la Vue?

Est ce que OpenCV et Weka possent des problèmes de compatibilités de version avec le JRE, l'IDE... installés?(j'utilise eclipse Oxygen.2 Release 4.7.2; JRE 8; Ubuntu 16.04)

Cordialement.
Messages postés
16408
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 octobre 2021
2 900 > maxwell12
Je ne connais pas personnellement ces bibliothèques pour en connaître les limites, mais tu ne devrais pas avoir de problème avec Java 8.

Quant aux servlets il faut oublier, c'est encore une fois beaucoup trop bas niveau, tu vas t'embêter pour rien.
Il vaut mieux utiliser des web-services soit en XML avec JAX-WS soit en REST avec JAX-RS, ce sont des standards qui ne sont d'ailleurs pas spécifiques à Java et qui pourraient être utilisés pour communiquer entre des applications écrites dans des langages différents.
Merci bien pour vos remarques et suggestions.