Un meilleur job mieux payé ?

Deviens chef de projet, développeur, ingénieur, informaticien

Mets à jour ton profil pro

ça m'intéresse

Langages dynamiques contre langages statiques,
Que préférez-vous ?

Le , par maa, Membre actif
Bonjour,

J'aimerais comprendre l'engouement actuel pour les langage dynamiques tel que Python, PHP ou Ruby. J'ai récemment dû travailler sur un projet PHP et j'ai perdu un temps fou à debugger des erreurs de syntaxe, de typage, de propriétés ou méthodes inexistantes, etc. Il faut dire que je dois faire pas mal d'erreurs d'inattentions, étant habitué à ce qu'une compilation me signale toute ces erreurs. Je suis programmeur c#, qui est statique et fortement typé. L'auto-complétion me guide partout et je développe en .NET incomparablement plus rapidement qu'avec un langage comme PHP. Comprendre un programme existant est aussi bien plus évident quand on connait le type des objets et que l'on peut remonter à leurs définitions ou la définition de leurs membres, et ceci n'est pas possible avec un langage dynamique.
Aujourd'hui je dois choisir un ERP pour mon entreprise. Je devrais pas mal le personnaliser donc le langage sur lequel il est basé a pas mal d'importance. Ceux qui m'intéressent sont en Python ou Java et franchement je préférerai à priori mettre les mains dans du java, pour ce que j'ai vu de Python... Avec python, je crains vraiment de perdre autant de temps qu'en développant en PHP. Mais si vous arrivez à me convaincre du contraire...
Plus généralement, je ne vois pas de vrais avantages au langages dynamiques. Ils sont pour moi un retour à l'age de pierre.

Merci d'avance pour tout vos conseils.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de pseudocode pseudocode - Rédacteur https://www.developpez.com
le 04/12/2009 à 18:46
Citation Envoyé par Jack Sparrow  Voir le message
On peut aussi avoir ça du coup :
(...)
Et même ça :
(...)
Et là, ça me semble mal

Ce n'est pas que c'est mal, c'est juste que les vérifications ne sont pas faites au moment de la compilation mais de l'exécution.

Le typage statique nous permet (en Java) d'appliquer le mantra "si ca compile alors c'est que j'ai implémenté toutes les méthodes nécessaires". Donc on n'aura pas d'exception du type "Unknown method".

Citation Envoyé par maa  Voir le message
Je me demande si ça n'est pas parce qu'on se lance facilement dans l'apprentissage d'un langage dynamique en croyant qu'il est plus facile à maitriser et sans vérifier les possibilités en statique.

Comme l'a dit Jedai, c'est surtout que l'on confond le "typage dynamique" et le "langage de programmation dynamique".
Avatar de batataw batataw - Membre éprouvé https://www.developpez.com
le 05/12/2009 à 0:35
Citation Envoyé par maa  Voir le message
J'utilisais le framework Zend. En fait je travaillais sur un projet magento. Mais l'utilisation du framework ne change rien au fait qu'il n'y a pas de code behind, pas de réelle séparation entre les couches métiers et affichage, etc. sans compter que la programmation objets est très limitée...
Côté IDE, il en ressort que même en utilisant de bons éditeurs comme netbeans on a une assistance très limitée et associé à une lourdeur pour parser le code et le confronter à la doc. Croyez moi, quand on passe de ASP.net à PHP, on vraiment l'impression de retourner à l'âge de pierre au niveau confort de programmation!

"En ce qui concerne l'interet des languages dynamiques il faut pas essayer de le comparer a un langage static car tu n'en verras que les défauts.
Ton choix doit se faire en fonction du projet."

"Tu ne trouveras pas l'équivalent de Visual Studio."

- Est-ce que ton projet se prete au langage dynamic?
- C'est étrange Zend fournit le patron de conception MVC.
- En ce qui concerne l'objet qu'est-ce qu'il te manque?

Il faut que tu passes un peu de temps a étudier les possibilités que PHP t'offre ca sert a rien de les comparer. Si tes besoins passent par un langage de type C# ou Java et bien fonce.
Avatar de batataw batataw - Membre éprouvé https://www.developpez.com
le 05/12/2009 à 0:44
Citation Envoyé par Bibi218  Voir le message
J'avoue que j'aimerais bien en savoir un peu plus là-dessus.
Python est pour l'instant mon langage préféré, mais si je l'ai choisi, c'est pour sa bibliothèque standard, sa syntaxe qui ne me pique pas les yeux, ainsi que quelques autres petites choses citées plus haut. Par contre, j'ai beaucoup d'assert qui trainent dans mon code, et ma documentation comprend presque systematiquement des informations sur le type de mes variables, validés par des décorateurs.

Je suis conscient que je dois manquer quelque chose, auquel cas merci de m'éclairer ! Mais ce qui m'a séduit dans Python, c'est vraiment le côté haut niveau, pas le typage dynamique.

"changer ta façon de développer", je veux bien, mais vers quoi du coup ?
Et quel est l'intérêt pour de la programmation Web en particulier ?

Si tes projets demandent un typage fort n'hésite pas a switcher de langage.
Un informaticien se doit d'etre polyglotte. De plus ce qui compte vraiment c'est la maitrise des concepts.

Pour répondre a ta question je te recommande les méthodes d'intégrations continues comme ca ton code est constamment validé.
Avatar de spidermario spidermario - Membre éclairé https://www.developpez.com
le 05/12/2009 à 16:40
Citation Envoyé par Jedai  Voir le message
D'un autre côté pas mal d'aficionados des langages dynamiques tendent à attribuer au dynamisme des avantages qui sont plutôt dûs au niveau d'abstraction et à imputer au typage statiques des désavantages qui n'existent que dans les systèmes de typage explicite faiblement expressifs et fragiles des langages mainstream...

Jedai, je t'aime

Sinon, pour ce qui est de l'ajout dynamique de méthodes à l'exécution : en OCaml, l'utilisation des fonctions est très souple, il est possible de créer une hashtable dont les éléments sont des fonctions, et les fonctions que l'on y ajoute peuvent être créées dynamiquement, par exemple l'on pourrait avoir une fonction qui, à partir d'un code dans un langage donné, produirait un arbre syntaxique et une autre fonction qui exécuterait cet arbre (avec d'éventuels arguments qui pourraient être passés par une liste, par exemple).

Exemple :
Code OCaml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
let arbre=ast_of_code "def main(msg): print(msg)" in 
let fonction=execute_ast arbre in (* note : la fonction execute_ast pourrait attendre 2 arguments : l'arbre et les arguments de la fonction main du code, le code ne serait alors pas immédiatement exécuté *) 
Hashtbl.add tbl "ma_fonction" fonction 
 
(* ... *) 
 
try 
  (Hashtbl.find tbl "ma_fonction") [String "Bonjour"] (* les arguments de la fonction main seraient une liste d'un type somme et là, le code serait effectivement exécuté *) 
with 
  | Not_found -> ()
Avatar de ypicot ypicot - Membre confirmé https://www.developpez.com
le 13/12/2009 à 14:50
Citation Envoyé par maa  Voir le message
...j'ai perdu un temps fou à debugger des erreurs de syntaxe, de typage, de propriétés ou méthodes inexistantes, etc. Il faut dire que je dois faire pas mal d'erreurs d'inattentions, étant habitué à ce qu'une compilation me signale toute ces erreurs...

On sait que passer du procédural à l'objet (ou le contraire), de l'objet au fonctionnel (et réciproquement), de la moto à la voiture (et inversement) demande une certaine phase d'adaptation. Au début, on est toujours perdu, on recherche ce dont on a l'habitude. Ce n'est qu'après un certain temps qu'on remarque ce qui est ajouté, et surtout a quoi ca sert et comment on l'utilise.

Pour reprendre ton exemple (erreur de typage, ...) ce genre de choses n'est effectivement pas détecté par le compilo, puisqu'il n'y a pas de compilo.
En fait, c'est remplacé par autre chose : un développement piloté par les tests. C'est ton harnais de tests qui va détecter ce genre de boulette, ainsi que de nombreuses autres.
Les tests existent bien sûr dans quasiment tous les langages (y compris statiques), mais ils sont encore plus vitaux dans les langages dynamiques. A noter que pyunit est intégré à Python.

Développer dans un langage dynamique avec les réflexes d'un langage statique va te conduire au même endroit que piloter une moto avec les réflexes d'une conduite auto : dans le mur.

Par contre, quand tu maitrises les deux, tu peux choisir l'un ou l'autre en fonction du contexte (c'est vrai pour les langages et les véhicules).

Yvan
Avatar de maa maa - Membre actif https://www.developpez.com
le 14/12/2009 à 0:36
Merci beaucoup pour ce conseils sur les tests unitaires. Je n'en ai pas fait lors du développement de mon application en php et c'est clair que ça m'aurait sûrement éviter pas mal d'erreurs.
Avatar de Katleen Erna Katleen Erna - Expert éminent sénior https://www.developpez.com
le 26/07/2010 à 6:48
Mise à jour du 26.07.2010 par Katleen
Les langages statiques sont-ils trop sophistiqués et complexes ?


=> http://www.developpez.net/forums/d95...s/#post5367400

Edit de Gordon : débat déplacé pour ne pas détourner celui-ci de son sujet initial (l'intérêt des langages dynamiques)
Avatar de - https://www.developpez.com
le 26/07/2010 à 8:43
Citation Envoyé par maa  Voir le message
Mise à jour du 26.07.2010 par Katleen
Les langages statiques sont-ils trop sophistiqués et complexes ? Un cadre de Google montre Java et C++ du doigt


...

Source : Déclarations de Rob Pike

Pensez-vous que Java et C++ soient devenus trop complexes ?

Pourquoi les langages gagnent-ils toujours en complexité ?

Que pensez-vous de l'initiative Go ?

Go deviendra-t-il à terme aussi compliqué que les autres langages lorsqu'il sera beaucoup utilisé ?

-

Les langages ne sont pas responsables de cette complexité, c'est plutôt ce qu'on fait avec

Ok je m'interresse à Go (comme à tout ce que produit google) mais je ne vais pas entrer dans cette stratégie de communication : poser une question absurde pour faire jazzer..

C'est vrai les languages deviennent complexes, mais les nouvelles stratégies de programmation tardent à être implémentées dans les langages sous forme de primitive (cf Ajax) on copi colle de gros patés de code parce qu'on ne peut rien faire d'autre. De nouveaux langages apparaissent qui font en une seule directive ce qui exige des centaines de lignes de C+ ou des milliers d'assembleur

Mais dés qu'on sort des sentiers battus, on est bien obligés de détricoter les process, refaire tout à la main et changer juste ce qui nous intéresse

Bon, la question est volontairement biaisée
Il n'existe pas de réponse satisfaisante, si ce n'est qu'il faut bien surveiller toutes les nouvelles stratégies de productivité des développeurs. Pas seulement les langages mais aussi les IDE's, les générateurs, les outils de refactoring... Et croire les ainés quand ils disent que trois lignes de regex remplacent 50 lignes de splits/merge !
Avatar de Gordon Fowler Gordon Fowler - Expert éminent sénior https://www.developpez.com
le 26/07/2010 à 8:59
Débat sur la complexité des langages statiques déplacé pour ne pas détourner celui-ci de son sujet initial (l'intérêt des langages dynamiques)

=> http://www.developpez.net/forums/d95...s/#post5367400

Cordialement,

Gordon
Avatar de eyquem eyquem - Membre extrêmement actif https://www.developpez.com
le 26/07/2010 à 10:16
Je suis programmeur c#, qui est statique et fortement typé. (...) Comprendre un programme existant est aussi bien plus évident quand on connait le type des objets et que l'on peut remonter à leurs définitions ou la définition de leurs membres, et ceci n'est pas possible avec un langage dynamique.

message #1

Est-ce que quelqu’un pourrait expliquer en quoi consiste « remonter à leurs définitions ou la définition de leurs membres » auquel il est fait référence dans cette phrase.

Ceci évoque-t-il une possibilité de C# ou de tout langage dynamique en général ?

Merci.
Avatar de el_slapper el_slapper - Expert éminent sénior https://www.developpez.com
le 27/07/2010 à 9:56
Citation Envoyé par eyquem  Voir le message
Est-ce que quelqu’un pourrait expliquer en quoi consiste « remonter à leurs définitions ou la définition de leurs membres » auquel il est fait référence dans cette phrase.

Ceci évoque-t-il une possibilité de C# ou de tout langage dynamique en général ?

Merci.

Langage statique en général.

ça veut dire que quelque part dans le code, il existe une définition unique de la donnée sur laquelle je suis en train de bosser. Et ça permet de comprendre un peu mieux ce qui se passe.
Offres d'emploi IT
Développeur WEB PHP F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
RESPONSABLE WEB ANALYTICS F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
Développeur Web FULL-STACK
VACALIANS GROUP - Languedoc Roussillon - SETE (34)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil