Question

Je suis sur le point de produire un prototype pour une startup technologique que je viens de rejoindre et j'essaie de choisir la langue à utiliser. Il s'agira d'un simple outil Web avec une base de données MySQL en arrière-plan et des tâches d'intelligence artificielle entre les deux. J'ai utilisé Ruby et PHP à un coût raisonnable dans le passé, mais je me demande si je serais peut-être mieux avec Python ou même avec Perl. Ma principale expérience de programmation est en C / C ++ / Java, mais j’ai l’impression de vouloir quelque chose qui me facilitera la vie au maximum, car je ne fais que développer un prototype.

Je suppose que ce que je recherche, c'est:

  • vitesse de développement
  • bibliothèques AI existantes (par exemple, SVM, réseaux de neurones, classificateurs Bayésiens)
  • facilité d'interaction avec une interface Web

Quelqu'un a des idées à ce sujet?

Était-ce utile?

La solution

Prototype ou pas, si vous devez traiter d’énormes quantités de chiffres, vous aurez peut-être besoin de la rapidité d’un langage Java ou C / C ++ au moins pour les parties IA. Je ne sais pas vraiment ce que vous faites, mais beaucoup de choses sur l'IA demandent beaucoup de calcul. Vous constaterez peut-être que Python VS C fait une différence de 10 minutes à presque 2 heures ou plus (ou d’un jour à un mois).

Votre meilleure option est probablement une approche hybride. Java / C ++ ou quelque chose pour l'IA (je dis seulement Java parce qu'il a une tonne de bibliothèques, j'ai même un livre sur le Data Mining qui traite de plusieurs bibliothèques en Java qui sont librement disponibles et qui exécutent certaines des techniques). Et Python / Ruby / Perl pour tout le reste (comme les web parts).

J'hésite à recommander PHP car vous ne savez jamais ce que vous faites. PHP semble vraiment briller sur le Web et pour les choses liées au Web, mais une fois que vous avez besoin d’utilisations non Web, il semble être plus encombrant qu’autre chose (même si j’ai vu des références à PHP être utilisé comme un logiciel Perl / Python / etc. langage de script par certaines personnes).

Le choix entre Python / Ruby / Perl est presque une question de goût. Sauf que Perl a CPAN, ce qui dépasse tout ce que Python et Ruby ont en ce moment. Comme vous êtes dans une start-up, la vaste sélection de modules sur CPAN que vous pouvez simplement scinder ensemble peut vous apporter une aide précieuse pour faire avancer les choses plus rapidement. Personnellement, j'aime Python sur Perl (je trouve le système d'objet de Perl très laid lors de la construction de vos propres objets, et parfois il me faut un peu pour comprendre comment le code que j'ai écrit il y a des mois fonctionne). Mais je ne peux pas nier la valeur de CPAN.

En bref, vous avez probablement besoin d’un langage de performance pour certains éléments de l’IA et de la facilité et de la rapidité de développement d’un langage de script pour tout le reste, car une start-up consiste à obtenir le produit le plus rapidement possible et à le battre. vos concurrents à commercialiser. J'aimerais recommander Python, mais en fonction de ce que je sais des start-ups, vous devez évaluer CPAN dans votre processus de décision. Le simple fait de pouvoir mettre en place un ensemble de modules qui font ce que vous voulez rapidement peut être très utile pour une start-up.

Je devrais également ajouter que Perl et Python (je ne suis pas sûr de Ruby mais je pense que cela peut) peuvent appeler le code C assez facilement. Vous pouvez donc utiliser les bibliothèques C ou C ++ en créant un ensemble de liaisons au langage. Vous pouvez également essayer d’écrire le tout en Perl / Python / Ruby et, s’il est trop lent, réécrivez cette partie en C ou C ++ et appelez-la à partir du langage de script. Avec tout ce processus de démarrage, une telle réécriture peut s'avérer très coûteuse en termes de réalisation. De plus, comme vous êtes plus à l'aise en C, C ++ ou Java, il vaut peut-être mieux y aller dès le début.

Autres conseils

Les trois composants Ruby, Python et Perl conviennent au développement rapide, aux prototypes et aux applications Web. Je suppose que d'après votre question, la partie la plus importante de ce projet est l'IA. Perl dispose d’un grand nombre de bibliothèques liées à l’IA sur CPAN. Consultez l’espace AI pour un exemple. Il existe également des modules dans d'autres espaces de noms, alors assurez-vous de rechercher des éléments spécifiques tels que "Bayes". ou "SVM".

Je ne connais pas grand chose aux options de bibliothèque AI pour Python ou Ruby. Ma recommandation est de prendre un jour ou deux et de faire des recherches sérieuses sur les bibliothèques pour Perl, Python et Ruby. Puisque vous avez déjà utilisé Ruby auparavant, si vous disposez des bibliothèques dont vous avez besoin, c'est une évidence, et Ruby est certainement convivial pour le Web.

En ce qui concerne le Web, pour Python, j'ai entendu beaucoup de choses positives sur Django . . Pour Perl, je vous conseillerais de consulter Catalyst .

Vous remarquerez que j'ai ignoré PHP. C’est quelque chose que j’essaie de faire le plus possible;)

Vous choisissez une langue parce que c’est le bon outil pour le travail, mais vous ne nous avez pas encore dit quel était le travail. Nous ne savons pas de quels types de bibliothèques vous aurez besoin, ce que d’autres personnes de l’industrie utilisent pour le même travail, etc. La plupart des gens semblent recommander quelque chose en ignorant totalement ce que vous devez réellement faire, ce qui signifie qu'ils ne savent vraiment pas comment vous aider.

Comme vous l'avez déjà signalé:

  • Si vous êtes la seule personne à effectuer votre tâche dans la langue X, vous aurez de la difficulté à vous faire aider par quelqu'un d'autre. Découvrez ce que d'autres personnes ont déjà utilisé pour effectuer des tâches similaires.

  • Si toutes les bonnes bibliothèques pour votre tâche sont dans une autre langue, vous devrez réinventer de nombreuses roues. Au lieu de votre question, demandez quelles bibliothèques réalisent les tâches importantes de votre tâche, puis effectuez des recherches. " AI " est beaucoup trop gros d'un sujet pour recommander quoi que ce soit.

  • Si personne au travail ne connaît la langue que vous souhaitez utiliser, même s'il s'agit d'une langue de prototypage rapide, vous perdrez la rapidité car ils doivent apprendre la langue. Apprendre une langue, c'est plus que connaître sa syntaxe; c'est connaître ses idiomes, ses bibliothèques, sa documentation et bien plus encore. Que savent déjà les gens au travail? Que vont-ils tolérer?

  • Souhaitez-vous vraiment vous simplifier la vie ou le rendre plus facile pour votre client? Ces choses sont parfois contradictoires, vous devez donc vous demander si vous offrez réellement la valeur dont le client a besoin. Les prototypes semblent souvent se transformer en code de production, donc une fois que vous avez commencé, vous êtes souvent coincé avec ce code.

La seule chose que je puisse vraiment commenter est la suivante: PHP est essentiellement un DSL pour le Web, alors que les trois autres (Perl, Ruby, Python) sont des langages plus généraux qui n’ont pas de domaine spécifique, bien que tous soient définitivement compatible Web.

En ce qui concerne votre deuxième point, je pense que PHP sera probablement le pire choix de votre liste.

AI? Certainement LISP

Je pense que Java vous faciliterait la vie.

  • rapidité de développement - vous avez dit que vous la connaissiez déjà.

  • bibliothèques d'IA existantes - consultez JOONE

  • facilité d'interaction avec une interface Web - servlets, JSP, trop d'infrastructure Web à répertorier.

Java s’intègre également facilement à MySQL avec JDBC.

Je suis d'accord avec les autres réponses recommandant Java, notamment parce que vous pourriez avoir besoin de sa rapidité dans le code de l'intelligence artificielle, des bibliothèques, etc., qui sont disponibles.

Une combinaison de Java (servlets) et de JSP fonctionnerait probablement bien.

Cependant, la raison de cette réponse est vivement recommandée:

Allez avec ce que vous savez.

Nouvelles langues ou celles que vous "sorte" de " savoir sont excellents pour le divertissement, et même pour certains projets de développement et de prototypage. Mais si vous avez besoin de quelque chose qui fonctionnera pour vous à long terme, utilisez le meilleur langage pour la tâche que vous connaissez déjà. Dans ce cas, je pense (d'après votre message) que ce serait Java.

Aussi - c'est un prototype maintenant, mais je peux presque garantir que s'il fonctionne, il deviendra le début par défaut de l'application réelle. Je doute vraiment que vous ayez le temps nécessaire pour réécrire la demande à partir de zéro dans une autre langue. Encore une fois, utiliser ce que vous savez maintenant rapportera des dividendes plus tard, au moment où ils "manqueront de temps". vous et vous devez livrer.

A bientôt,

-R

Je pense que Perl serait la solution. Consultez Moose pour Perl OOP, et comme pour les autres bibliothèques que vous recherchez, vous en trouverez certaines sur CPAN (peut-être quelque chose comme les modules bayésiens )

Si vous êtes habitué à la pile / l'environnement Unix, j'opterais pour Python - sympa et facile.

EDIT: vous pouvez implémenter la partie de calcul en C ou C ++ et en faire un module à utiliser dans votre code python. De cette façon, vous obtenez un code de calcul rapide et une colle facile à programmer.

Lisp a été mentionné, mais je pense que Scheme (en particulier le plt-scheme ) est dans Rubis / Python / Perl / PHP. Il n’a pas autant de bonnes bibliothèques que certaines d’entre elles, ce qui est un défaut, mais la plupart des systèmes ont une excellente interface ffi (foreign function interface), ce qui rend facile l’intégration de bibliothèques externes (code C). Une autre force du schéma est son profil de performance; Vous pouvez souvent obtenir des performances proches de celles du type C-code sur les opérations de calcul.

Vous voudrez peut-être jeter un coup d’œil sur GLASS: smalltalk, seaside et une base de données d’objets de pierres précieuses. Mieux vaut Internet que ruby, no orm et le meilleur langage de modélisation.

Je voudrais ensuite jeter un coup d’œil sur les Grails. Il est vraiment facile de s’installer et de travailler en moins d’une heure et vous avez toujours le pouvoir de java en dessous.

Je suis également d'accord avec ceux qui disent: assurez-vous de penser à l'avenir. J'ai souvent été le bénéficiaire de ceux qui ne l'avaient pas fait.

Si c’était moi, j’écrirais le tout en python, puis le profilerait et jetterais les goulets d’étranglement dans pyrex . Lorsque vous développez des algorithmes complexes de type IA, il est utile (1) de développer un langage de haut niveau afin de pouvoir rapidement essayer de nombreuses approches différentes et (2) d’avoir une implémentation de référence dans un langage de haut niveau pour: tester l'implémentation C / C ++ contre. J'utilise python / pyrex de cette façon tout le temps et cela fonctionne bien pour moi.

Si vous créez un prototype rapide et sale, vous avez probablement intérêt à vous en tenir à quelque chose que vous connaissez déjà, en particulier si le prototype doit montrer une autre fonctionnalité sophistiquée; la performance beaucoup ne soit pas une préoccupation majeure ici.

Essayez Python avec Mod_Python. En tant que langage, il comprend de nombreux modules d’apprentissage automatique et de traitement du langage naturel, et il est très facile à lire, à apprendre et à utiliser.

Étant donné que ce n’est pas une application CRUD simple, Java pourrait être une bonne option. Jetez un coup d’œil à Grails ( http://grails.org/ ), qui offre une grande partie de la génération d’échafaudages et de codes un framework comme le fait le rail, mais offre une intégration transparente avec n’importe quelle autre bibliothèque ou framework Java.

PHP ou même SSI serait mon choix pour le prototypage dans ce cas. Mon raisonnement: je n'ai pas à m'inquiéter d'un système de templates, car ils sont tous deux des systèmes de templates. Aucun sens ne perd de temps à choisir un système de gabarit pour un simple prototype. SSI, en particulier, est un choix convaincant. Vous avez toujours le choix des langues pour le traitement CGI. Pour ce qui est du renvoi de données non atomiques, vous pouvez émettre du JSON, puis autoriser l’interface utilisateur à parcourir en boucle la structure de données renvoyée à l’aide de Javascript.

Quelque chose qui gère la mémoire pour vous. Ils prétendent que c'est le changement technologique qui donne le plus gros gain de productivité. Je pense que livre-à-livre c # est incroyablement difficile à battre.

À propos de Python:

Si vous avez besoin de performances pour des tâches gourmandes en ressources informatiques, consultez Numeric Python http://numpy.scipy.org/ et Pyrex http: //www.cosc.canterbury .ac.nz / greg.ewing / python / Pyrex / . Numeric Python est une extension Python qui fournit de nombreuses facilités numériques classiques, telles que le code C vectoriel rapide (un outil essentiel pour le travail ANN), etc. Pyrex est un outil qui permet essentiellement de compiler le code Python en un exécutable natif.

Avec Pyrex, vous devez faire attention à l’utilisation de la réflexion, car elle ne peut pas compiler entièrement le code qui utilise certaines constructions réfléchissantes (notamment locals () et globals ()). Je ne mentionne cette restriction que parce que l'IA et le codage exploratoire (impliqué dans la remarque "prototype") tirent souvent avantage de la réflexion plus que d'autres types d'applications.

Si vous êtes un utilisateur Mac, consultez WebObjects pour effectuer toutes les tâches cadre, et vous pouvez vous concentrer sur l'écriture du code neuronal significatif en Java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top