Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/12/2007, à 20:03

mathben

[Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Ho, bonjour.  Je veux faire quelques applications personnel.  J'ai appris le java, en tout cas, la base.
Je me demande quel langage je devrais utiliser pour mes futurs petit programme.
Je désire bien sur que chacune de mes applications fonctionnent sur un environnement 32/64 bits, et sur chaque système d'exploitation.

Je sais que java, c et c++ peuvent le faire.
J'ai pas trop trouvé d'information sur ce forum en cherchant (j'ai pas encore cherché sur google tongue).

Je veux savoir lequel est le plus amusant à  programmer et faire fonctionner sur linux.

Dernière modification par mathben (Le 07/12/2007, à 21:09)


Ubuntu 9.10 Karmic Koala AMD64 ][  Portable Acer Aspire 9300

Hors ligne

#2 Le 07/12/2007, à 20:25

BookeldOr

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Il n'y a pas que Java/C/C++/python dans la vie wink
Quel genre d'application veux-tu faire ?

Si tu as besoin de puissance, opte pour C, ça permet vraiment de faire du code très rapide. Cependant c'est vraiment difficile de cerner les bugs, d'éviter les fuites de mémoire, etc. L'apprentissage est relativement rapide pour faire des choses simples, la chose la plus difficile et longue à  maà®triser est la gestion de la mémoire.

En C++ c'est la même chose du point de vue mémoire, mais en plus il faut passer un temps énorme (plusieurs années) pour vraiment maà®triser sa librairie. Une fois le cap passé, la librairie standard est extrêmement complète et rend donc le développement rapide. Cependant, mêmes problèmes de difficulté de suppression des bugs.

En python, et Java, pas de problème de libération de mémoire grà¢ce à  un collecteur automatique, mais les performances ne sont pas au rendez vous (cependant, toutes les applications n'ont pas besoin d'être optimisées).

Python utilise du "typage dynamique", ce qui signifie en gros que pour faire de petites applications c'est bien, mais dès que ça devient gros, il est très difficile de ne pas faire de programmes buggés, ce qui implique une discipline de programmation qui à  mon humble avis devrait être automatisée par la machine à  la compilation et pas par l'humain.

Java est bien pour faire des applications portables, mais il est lent et le langage qui était simple et facile à  apprendre est devenu plus difficile et surtout vraiment trop verbeux avec les dernières versions.

Sinon, je peux te proposer Objective Caml, qui est dans les paquets ubuntu, qui est performant (vraiment), aide vraiment à  faire des programmes sans bug car le typage est très strict et très concis. De plus il utilise une inférence de types : le compilateur devine automatiquement le type des données.
Par exemple, en Java tu ferais:

public Hashtable<String, String> creer_table () {
  Hashtable<String, String> table = new Hashtable<String, String> (100);
  table.put ("key", "value");
  return table;
}

Et le compilateur assurera par la suite que tu n'y mettras que des chaà®nes de caractères.
En OCaml tu ferais :

let creer_table () =
  let table = Hashtbl.create 100 in
    Hashtbl.add "key" "value" ; table

Et le compilateur devine que la table de hachage est bien une table de chaà®nes de caractères tout seul et assure que tu n'y mettras jamais autre chose.
De plus tu n'auras jamais de bugs comme le "null pointer exception" de Java puisque le compilateur sait vérifier tout seul que ça n'arrive jamais.
Ceci dit, le langage est complexe (moins que C++ mais quand même) à  apprendre. Mais une fois maà®trisé, c'est vraiment plus rapide et supprime toute la partie gestion de la mémoire présente dans les autres langages puisque le langage s'en charge entièrement à  ta place.

Tu peux aussi essayer Ruby, il paraà®t que c'est bien.

Dernière modification par BookeldOr (Le 07/12/2007, à 20:32)


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne

#3 Le 07/12/2007, à 21:00

mathben

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Ha, je viens de me rapeller du langage Perl, c'est quoi votre avis sur celui-ci?


Ubuntu 9.10 Karmic Koala AMD64 ][  Portable Acer Aspire 9300

Hors ligne

#4 Le 07/12/2007, à 21:02

arnaud741

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Salut !

Sujet hautement polémique que celui du choix d'un langage de programmation ! En ce qui me concerne, je vais essayer de te guider en fonction de tes objectifs :

Les langages JAVA et PYTHON sont tous les 2 des langages orientés objets interprétés ; ils sont plutôt faciles à maîtriser et proposent des fonctionnalités qui permettent une programmation de haut niveau (proche des spécifications). Aussi, les programmes écrits en langage JAVA ou PYTHON sont en général assez lents à l'exécution ; en revanche, ils sont assez sécurisés contre les erreurs de programmation.

Le langage C est un langage impératif compilé ; il est plutôt difficile à maîtriser et propose des fonctionnalités qui permettent une programmation de bas niveau (proche du langage machine) ; Aussi, les programmes écrits en langage C sont en général très rapides à l'exécution ; en revanche, ils sont assez difficiles à déboguer et vulnérables aux erreurs de programmation.

Le langage C++ est un langage orienté objets compilé, une sorte de langage "hybride" mélangeant les performances du langage C et une certaine puissance d'expression proche de celle des langages JAVA et PYTHON. C'est cependant un langage tentaculaire et vraiment difficile à maîtriser dans sa totalité (heureusement on peut se restreindre à une petite partie) !

Un autre critère pour choisir est celui des bibliothèques disponibles avec un langage : par exemple, je n'apprécie pas énormément le langage C++, mais je l'utilise parce que la sublime bibliothèque QT utilise le langage C++ roll !

Toutefois, cette analyse est à nuancer : il est possible de compiler des programmes écrits en langage JAVA ou PYTHON, tout comme il est possible d'éviter la plupart des erreurs de programmation en se restreignant à un sous-ensemble du langage C ou C++ (nottamment les pointeurs).

En résumé : tous ces langages sont intéressants, et tu devrais te laisser guider par le genre de programmes que tu souhaites écrire : C ou C++ pour des programmes dont la rapidité d'exécution est primordiale (logiciels de calcul scientifique, pilotes de périphériques, moteur graphique...) ; JAVA ou PYTHON pour leur caractère plus didactique et plus "propre" dans des programmes ne nécessitant pas des performances extrêmes (logiciels de bureautique, lecteur multimédia...).

Ha oui, j'oubliais : il existe une multitude d'autres langages (parmi ceux que je connais : RUBY, HASKELL, EIFFEL, OCAML)... le mieux étant encore d'en apprendre plusieurs et de choisir ensuite en fonction des besoins wink !

Hors ligne

#5 Le 07/12/2007, à 21:10

BookeldOr

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Perl est un langage très complet, mais trop complet, surtout au niveau de la syntaxe, ce qui rend bien souvent illisibles les programmes. C'est à  mon avis à  réserver aux scripts pour lesquels le shell n'est pas assez efficace.

Dernière modification par BookeldOr (Le 07/12/2007, à 21:10)


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne

#6 Le 07/12/2007, à 21:11

arnaud741

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

mathben a écrit :

Ha, je viens de me rapeller du langage Perl, c'est quoi votre avis sur celui-ci?

(Re)Salut !

Le langage PERL ? Il est très puissant pour écrire des scripts (en particulier grà¢ce à  la puissance de ses expressions régulières) mais attention : comme le langage C++, le langage PERL est tentaculaire et un fichier source PERL est parfois cryptique à  comprendre... Par contre, pour administrer un réseau de machines sous UNIX, c'est le langage à  connaà®tre !

Hors ligne

#7 Le 07/12/2007, à 21:14

arnaud741

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

@BookeldOr :

ouah ! PERL semble faire l'unanimité au sujet de sa complexité lol...

Hors ligne

#8 Le 07/12/2007, à 21:17

mathben

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Ho, très constructif vos réponses.
Il a une chose qui n'a pas été discuté, est-ce que chacun de ces langages peuvent se compiler pour chaque os? (je parle de linux, mac os (hum, pas très familier), windows et autre (dont je ne suis pas familié non plus!)

J'ai personnellement un problème avec le langage java, il, du moins, doit avoir les lecteurs java pour pouvoir exécuter les jar (sauf exception, on exporte les librairies).  Ce qui fait de grosse application dans le cas contraire.

Est-ce que les autres langages ont ces soucis là?


Ubuntu 9.10 Karmic Koala AMD64 ][  Portable Acer Aspire 9300

Hors ligne

#9 Le 07/12/2007, à 22:24

BookeldOr

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Java, moyennant l'installation de la JVM est probablement le plus portable. La JVM, ça n'est pas le plus difficile à  installer.
Perl, oublie pour la portabilité facile.
C et C++, ça dépend des librairies utilisées, pour C++ il faut utiliser Qt pour avoir des applis portables sous les 3 OS de bureau.
Pour OCaml, il y a deux modes : Bytecode (comme Java) avec lequel tu peux utiliser le même programme compilé partout mais c'est assez lent, et natif, o๠il faut recompiler le programme pour chaque OS mais c'est très rapide.

La grosse différence c'est pour les applis graphiques : soit tu te moques que ça soit bien intégré à  l'OS et ils proposent tous une solution d'affichage graphique, soit tu veux que ça soit un peu intégré et c'est plus difficile.
Pour les librairies graphiques, tu as à  ma connaissance seulement Qt et C++ qui permettent d'avoir une installation très simple et un look intégré partout (en fait le plus difficile c'est windows o๠les gens veulent souvent un seul .exe sinon ils rechignent, ce qui se comprend vu qu'il n'y a pas de gestion correcte des dépendances entre programmes et librairies).
Pour la plupart des autres langages, si tu veux une interface graphique moderne, assez intégrée à  l'OS et portable, il faudra passer par une lib externe (c'est souvent Gtk pour C, Python ou OCaml), et installer une dll (même avec un installateur simple) ça fait souvent tiquer les utilisateurs de windows.
Si tu utilises Java par exemple, soit tu utilises swing, la lib par défaut d'affichage en Java, mais c'est pas du tout intégré aux OS, soit tu utilises une lib externe et alors soit tu l'inclus au programme et c'est énorme soit tu dois dois l'installer à  part.

Dernière modification par BookeldOr (Le 07/12/2007, à 22:25)


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne

#10 Le 07/12/2007, à 22:36

arnaud741

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

Pour faire rapide : les programmes écrits dans un langage interprété (JAVA, PYTHON, RUBY, PERL, OCAML, HASKELL...) ne sont pas "autonomes" et sont exécutés sur la machine cible par l'intermédiaire d'un autre programme, appelé interpréteur (la machine virtuelle JAVA est un exemple d'interpréteur) ; au contraire, les programmes écrits dans un langage compilé (C, C++...) sont autonomes et peuvent être exécutés sans intermédiaire.

Pour être plus complet : il existe des compilateurs pour la plupart des langages interprétés (d'ailleurs, la plupart de ces compilateurs "traduisent" ces langages en langage C avant d'utiliser le compilateur C standard, ce qui garantit des performances très honnêtes à ces programmes "mixtes").

Concernant la portabilité, tous les langages courants sont portables sur la quasi-totalité des plate-formes (LINUX, MACOS, WINDOWS, BSD et la plupart des autres systèmes UNIX comme SOLARIS, HP UX, AIX...) donc pas de gros problèmes à ce niveau !

Hors ligne

#11 Le 07/12/2007, à 23:12

Martopioche

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

A la lecture de ce fil, il y a une question que je me pose : vous faites tous des applications destinées au nucléaire ou la sismologie ? Sérieusement, certes les langages interprétés sont lents, mais le nombre de cas o๠cette lenteur se fera sentir est plus que minime. Java en particulier (qui est un langage précompilé) démontre d'excellentes performances, et je vous invite à  essayer Jake2, un petit Quake-like qui démontre que l'implémentation du moteur de Quake en Java offre un résultat bien plus qu'honorable.

Bon, ceci étant dit : à  mon avis, il est possible à  n'importe qui de coder en n'importe quel langage. Je veux dire par là  que chacun trouvera son compte dans certains langages (et non pas que tous les langages sont accessibles à  tous). Mais évidemment, il est bien plus difficile d'arriver à  maà®triser un langage (quand à  se poser des question d'optimisation...). Prenons Java. Il est très facile de coder une petite application vite fait bien fait. Mais développer une application en pensant objet, modularité, abstraction, réutilisabilité... j'en connais peu qui y arrivent. De même, faire de la programmation fonctionnelle objet en Python, c'est un sacré sport. Quand à  Perl... C'est un langage qui nécessite de penser Perl, pas C.

Pour répondre aux questions, tous les langages sont portables aujourd'hui. Pour les langages interprétés ou à  machine virtuelle (qui interprete certes du pseudocode), il existe une version pour les principaux systèmes (je me trompe ou il y a même un interpréteur Python pour Amiga ? wink ). Evidemment, se poser la question de savoir si il sera présent sur les machines cibles est légitime. Tout comme savoir si la compilation passera sur telle plate-forme.

Enfin, on peut choisir un langage pour ce qu'il apporte. Qt est un bon exemple pour le C++. Moi personnellement, j'ai choisi de faire un projet perso en Java d'abord parceque je le maà®trise (et là  il y a pas de smiley avec une auréole...) ensuite pour les possibilités qu'il m'offre. J'ai prévu une application reposant sur une source de données. Mon modèle est implanté, me reste à  faire l'interface web à  coup de jsps. Mais je veux que les gens puissent aussi la faire tourner sur leur machine, je n'aurai que la couche présentation à  modifier à  coup de Swing. Mais dans ce cas, il est possible qu'ils n'aient pas accès à  ma base de données, alors la DAO devra se diriger vers une base en mémoire ou des fichiers XML. Avoir le meme projet en disons Python est beaucoup plus compliqué : c'est une chose que de faire une appli python, c'en est une autre de faire une appli Zope. A mon sens.

Voila.

Hors ligne

#12 Le 07/12/2007, à 23:48

BookeldOr

Re : [Résolu]programmer java, c++, c, Perl ou python, que dois-je choisir?

#10> Mouais c'est un peu trop rapide, tous les langages ne sont pas aussi portables : il y a tout ce qu'il faut pour le faire mais distribuer une appli en perl utilisant Gtk (par exemple) sous windows, certes c'est possible mais c'est long et embêtant à  faire, alors que distribuer une appli en C ou OCaml & Gtk ou C++ & Qt sous windows, il suffit de linker le tout en statique et on a un seul .exe facile à  créer et distribuer.

Je pense que la distinction se fait sur : est-ce que tu veux avoir un langage facile d'accès pour rapidement faire des applis complètes ou t'amuser parce que tu aimes programmer, ainsi que sur les performances.

Si tu veux t'amuser à  gérer tout ce qui est bas niveau, gestion mémoire, en gros tout ce qui est proche du système, oriente toi vers le C ou C++.
Si tu veux t'amuser à  résoudre des problèmes complexes, faire des algorithmes qui demandent de se creuser la tête sans avoir à  se préoccuper du tout du système, oriente toi vers Ocaml ou Haskell.
Si tu veux pouvoir réaliser une appli complète et graphique après seulement deux jours à  apprendre les rudiments du langage, tu peux te tourner vers Python ou Java.
Si tu veux des bonnes performances, essaye C, C++ ou OCaml (C++ est à  peu près aussi rapide que C pour la couche bas niveau, Ocaml est un peu plus lent que C en général, parfois plus rapide, et sa couche objet est plus rapide que celle de C++ avec gcc).
Si tu veux être très assisté avec un bon environnement de développement sous ubuntu, Java avec eclipse es probablement le mieux, mais il y a des plugins eclipse beaucoup de langages (mais il faut vérifier, certains ne sont pas terribles).

Il y a aussi ce qu'on appelle les paradigmes de programmation, tu peux en préférer certains à  d'autres, le mieux c'est de tester.
Il y a en gros les paradigmes objet, impératif et fonctionnel.
- Impératif : on définit des variables et on effectue une suite d'instructions qui les modifient.
- fonctionnel : on déclare des valeurs, qui ne sont jamais modifiées, les calcules sont faits en écrivant des fonctions qui créent de nouvelles valeurs à  partir d'existantes.
- objet : le programme manipule des entités qui contiennent des données et peuvent parler aux autres objets.

C est impératif
Haskell est fonctionnel
C++ et Java sont impératifs et à  objets
OCaml fait les trois
Python est principalement impératif et à  objets mais sait faire un peu de fonctionnel

Il y a aussi une différence de taille, c'est le typage, qui peut être statique ou dynamique et fort ou faible.

Avec du typage statique, le compilateur assure que si on déclare une variable ou une valeur comme étant de type int, les opérations faites dessus dans le code sont compatibles avec ce type.
Avec du typage dynamique, le type d'une valeur peut changer, et le programme fait dynamiquement des vérifications et des conversions.
Avec un typage fort, le compilateur assure que le type d'une valeur est bien celui spécifié dans le code quelles que soient les manipulations du programmeur.
Avec un typage faible, le programmeur peut faire des choses bizarres qui font qu'on peut faire passer une valeur d'un type comme étant d'un autre type. C'est plus souple mais ça peut faire planter le programme.

Plus le typage est statique et fort et moins il y aura de bugs liés aux types.
OCaml est typé statiquement et fortement, ce qui fait qu'aucune erreur ne pourra arriver et comme il n'y a donc plus besoin de manipuler les types à  l'exécution, c'est très rapide.
C est typé statiquement et faiblement, en gros le compilateur vérifie un peu les types, et ne les conserve pas à  l'exécution, donc on peu faire à  peu près n'importe quoi, et provoquer des plantages graves, voir des corruptions de mémoire créant des failles de sécurité.
Python est typé fortement et dynamiquement, ce qui fait que le programme peut planter à  cause d'une erreur de type (genre appliquer l'opérateur + à  des objets) mais il ne peut pas faire d'opération dangereuse grà¢ce aux vérifications des types (du coup c'est plus lent puisqu'il fait une vérification à  chaque opération).
Java est typé fortement et statiquement mais offre un mécanisme permettant de casser ce typage facilement (le cast) ce qui fait qu'il peut y avoir le même genre d'erreurs qu'en Python.

Dernière modification par BookeldOr (Le 08/12/2007, à 00:03)


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne