Вопрос

Я собираюсь создать прототип для технологического стартапа, к которому я только что присоединился, и пытаюсь решить, какой язык использовать.Это будет простой веб-инструмент с базой данных MySQL в фоновом режиме и некоторыми элементами искусственного интеллекта, происходящими между ними.В прошлом я в разумных пределах использовал Ruby и PHP, но задаюсь вопросом, не лучше ли мне перейти на Python или даже Perl.Мой основной опыт программирования связан с C / C ++ / Java, но я чувствую, что хочу заняться чем-то, что сделает мою жизнь максимально легкой, поскольку я всего лишь разрабатываю прототип.

Я думаю, что то, что я ищу, это:

  • скорость разработки
  • существующие библиотеки искусственного интеллекта (напримерSVM, нейронные сети, байесовские классификаторы)
  • простота взаимодействия с веб-интерфейсом

У кого-нибудь есть какие-нибудь мысли по этому поводу?

Это было полезно?

Решение

Прототип это или нет, но если вы обрабатываете огромное количество чисел, вам может понадобиться скорость Java или C / C ++, по крайней мере, для частей искусственного интеллекта.Я действительно не знаю точно, что вы делаете, но многие вещи с искусственным интеллектом требуют больших вычислительных затрат.Вы можете обнаружить, что Python против C имеет разницу от 10 минут до почти 2 часов и более (или от дня до месяца).

Вероятно, ваш лучший выбор - это гибридный подход.Java / C ++ или что-то еще для искусственного интеллекта (я говорю Java только потому, что в ней множество библиотек, у меня даже есть книга по интеллектуальному анализу данных, в которой обсуждается несколько библиотек на Java, которые находятся в свободном доступе и выполняют некоторые методы).И Python / Ruby / Perl для всего остального (например, веб-частей).

Я не решаюсь рекомендовать PHP, потому что вы никогда не знаете, что вы можете делать.PHP, кажется, действительно хорош в Интернете и для связанных с ним вещей, но как только вам нужно не веб-использование, он кажется более громоздким, чем что-либо другое (хотя я видел ссылки на PHP, используемый как Perl / Python / etc.как обычный язык сценариев некоторыми людьми).

Выбор между Python / Ruby / Perl - это почти дело вкуса.За исключением того, что Perl имеет CPAN, который превосходит все, что есть у Python и Ruby прямо сейчас.Поскольку вы находитесь в стадии запуска, широкий выбор модулей на CPAN, которые вы можете просто объединить, может помочь вам быстрее завершить работу.Лично мне больше нравится Python, чем Perl (я нахожу объектную систему Perl уродливой при создании ваших собственных объектов, и иногда мне требуется немного времени, чтобы понять, как работает код, который я написал несколько месяцев назад).Но я не могу отрицать ценность CPAN.

Короче говоря, вам, вероятно, нужен язык производительности для некоторых элементов искусственного интеллекта, а также простота и скорость разработки языка сценариев для всего остального, потому что стартап - это создание продукта в кратчайшие сроки и вывод его на рынок без участия конкурентов.Я бы с удовольствием порекомендовал Python, но, основываясь на том, что я знаю о стартапах, вам нужно оценить CPAN в процессе принятия решения.Простая возможность объединить несколько модулей, которые быстро выполняют то, что вы хотите, может иметь огромную ценность при запуске.

Я должен также добавить, что Perl и Python (я не уверен насчет Ruby, но думаю, что to) могут довольно легко вызывать C-код.Таким образом, вы могли бы использовать библиотеки C или C ++, создав набор привязок к языку.Вы также могли бы попробовать написать все это на Perl / Python / Ruby и, если это слишком медленно, переписать эту часть на C или C ++ и вызвать ее с языка сценариев.Учитывая всю эту затею с запуском, подобное переписывание может обойтись очень дорого с точки зрения того, чтобы что-то сделать.Кроме того, поскольку вам удобнее всего работать на C, или C ++, или Java, возможно, стоит просто перейти туда с самого начала.

Другие советы

Все три языка Ruby, Python и Perl хороши для быстрой разработки, создания прототипов и веб-приложений.Исходя из вашего вопроса, я предполагаю, что наиболее существенной частью этого проекта является искусственный интеллект.В Perl действительно есть довольно много библиотек, связанных с искусственным интеллектом, на CPAN.Ознакомьтесь с Пространство имен AI для выборки.Существуют также модули в других пространствах имен, поэтому обязательно ищите конкретные вещи, такие как "Bayes" или "SVM".

Я мало что знаю о возможностях библиотеки искусственного интеллекта для Python или Ruby.Моя рекомендация - потратить день или два и провести серьезное исследование библиотек для каждого из Perl, Python и Ruby.Поскольку вы уже использовали Ruby раньше, если в нем есть нужные вам библиотеки, это несложно, и Ruby, безусловно, удобен для работы в Интернете.

Что касается веб-стороны, то для Python я слышал много хорошего о Джанго.Что касается Perl, я бы рекомендовал взглянуть на Катализатор.

Вы заметите, что я проигнорировал PHP.Это то, что я стараюсь делать как можно чаще ;)

Вы выбираете язык, потому что это подходящий инструмент для работы, но вы еще не сказали нам, в чем заключается работа.Мы не знаем, какие библиотеки вам понадобятся, что другие люди в отрасли используют для той же работы и так далее.Большинство людей, похоже, рекомендуют что-то при полном незнании того, что вам на самом деле нужно сделать, а это значит, что они действительно понятия не имеют, как вам помочь.

Как вы уже отметили:

  • Если вы единственный человек, выполняющий вашу задачу на языке X, вам будет трудно получить помощь от кого-либо еще.Выясните, что другие люди уже использовали для выполнения аналогичных задач.

  • Если все хорошие библиотеки для вашей задачи находятся на другом языке, вам придется изобретать множество колес.Вместо вашего вопроса спросите о том, какие библиотеки выполняют важные части вашей задачи, а затем исследуйте их."Искусственный интеллект" - это слишком большая тема, чтобы что-то рекомендовать.

  • Если никто на работе не знает языка, который вы хотите использовать, даже если это язык быстрого прототипирования, вы потеряете скорость, поскольку им придется изучать язык.Изучение языка - это нечто большее, чем знание его синтаксиса;это знание его идиом, библиотек, документации и многого другого.Что люди на работе уже знают?Что они будут терпеть?

  • Вы действительно хотите облегчить свою жизнь или облегчить ее для вашего клиента?Эти вещи иногда противоречат друг другу, поэтому вам следует подумать, действительно ли вы предоставляете ту ценность, в которой нуждается клиент.Прототипы, похоже, часто превращаются в производственный код, поэтому, как только вы начинаете, вы часто застреваете на нем.

Единственное, что я действительно могу прокомментировать, это:PHP в основном является DSL для Интернета, тогда как остальные три (Perl, Ruby, Python) являются языками более общего назначения, у которых нет определенного домена, хотя все они определенно поддерживают работу в Интернете.

Что касается вашего второго пункта, я думаю, PHP, вероятно, будет худшим выбором из вашего списка.

ИИ?Определенно ШЕПЕЛЯВЫЙ

Я думаю, Java сделала бы вашу жизнь проще.

  • скорость разработки - вы сказали, что уже знакомы с этим.

  • существующие библиотеки искусственного интеллекта - ознакомьтесь ДЖУН

  • простота взаимодействия с веб-интерфейсом - сервлеты, JSP, слишком много веб-фреймворков, чтобы перечислять.

Java также легко интегрируется с MySQL с помощью JDBC.

Я согласен с другими ответами, которые рекомендуют Java, тем более что вам может понадобиться ее скорость в коде искусственного интеллекта, а также для библиотек и т.д.которые доступны.

Комбинация Java (сервлетов) и JSP, вероятно, работала бы хорошо.

Однако причина написания этого ответа заключается в том, чтобы наиболее настоятельно рекомендовать:

Действуйте с тем, что вы знаете.

Новые языки или те, которые вы "вроде" знаете, отлично подходят для забавных вещей и даже для некоторых проектов разработки и прототипирования.Но если вам нужно что-то, что сработает у вас в долгосрочной перспективе, используйте лучший язык для решения задачи, КОТОРЫЙ ВЫ УЖЕ ЗНАЕТЕ.В данном случае, я думаю (судя по вашему сообщению), это была бы Java.

Кроме того, сейчас это прототип, но я могу почти гарантировать, что, если он сработает, он станет запуском реального приложения по умолчанию.Я действительно сомневаюсь, что у вас будет такая роскошь, как время, чтобы переписать приложение с нуля на другом языке, поэтому еще раз повторюсь - использование того, что вы знаете сейчас, принесет дивиденды позже, когда у вас "поджимает время" и вы должны выполнить его.

Ваше здоровье,

Я думаю , что Perl был бы подходящим вариантом .Проверьте Лось для Perl ООП , и что касается других библиотек , которые вы ищете , я уверен , что вы найдете некоторые из них на CPAN ( может быть, что-то вроде байесовские модули )

Если вы привыкли к стеку / среде unix, я бы выбрал Python - приятный и простой.

Редактировать:Вы можете реализовать часть с обработкой чисел на C или C ++ и сделать ее модулем для использования в вашем коде python.Таким образом, вы получаете быстрый код для обработки чисел и простой в программировании "клей".

Lisp был упомянут, но я думаю, что Схема (в частности plt-схема) в некоторых отношениях такой же хороший выбор, как Ruby / Python / Perl / PHP.В нем не так много хороших библиотек, как в некоторых из них, что является минусом, но большинство схем имеют отличный ffi (интерфейс внешней функции), что упрощает интеграцию внешних библиотек (C-код).Еще одной сильной стороной scheme является ее профиль производительности;Вы часто можете приблизиться к производительности типа C-code при обработке чисел.

Возможно, вы захотите взглянуть на СТЕКЛО:smalltalk, seaside и база данных объектов gemstone.Лучший веб, чем ruby, отсутствие orm и лучший язык моделирования.

Я бы еще раз взглянул на grails.Это, безусловно, легко настроить и начать работать в течение часа, и у вас по-прежнему есть возможности java.

Я также согласен с теми, кто говорит, что убедитесь, что вы думаете о будущем.Я слишком много раз получал выгоду от тех, кто этого не делал.

Если бы это был я, я бы написал все это на python, затем профилировал его и записал узкие места на пирекс.Когда вы разрабатываете сложные алгоритмы типа AI, (1) полезно разрабатывать на языке высокого уровня, чтобы вы могли быстро опробовать множество различных подходов, и (2) полезно иметь эталонную реализацию на языке высокого уровня для тестирования реализации на C / C ++.Я постоянно использую python / pyrex таким образом, и у меня это хорошо работает.

Если вы создаете быстрый и грязный прототип, то, вероятно, в ваших интересах придерживаться того, что вы уже знаете, особенно если прототип предназначен для демонстрации какой-то другой необычной функциональности;производительность здесь не может быть серьезной проблемой.

Попробуйте Python с помощью Mod_Python.Как язык, он содержит множество отличных модулей машинного обучения и обработки естественного языка, и его действительно легко читать, изучать и использовать.

Учитывая, что это не простое CRUD-приложение, Java может быть хорошим вариантом.Взгляните на Grails ( http://grails.org/ ) он предлагает большую часть строительных лесов и генерации кода, которые выполняет фреймворк, подобный rails, но предлагает бесшовную интеграцию с любой другой библиотекой Java или фреймворком.

PHP или даже SSI был бы моим выбором для прототипирования в этом случае.Мои рассуждения:Мне не нужно беспокоиться о системе шаблонов, поскольку они обе являются системами шаблонов.Нет смысла тратить время на выбор системы шаблонов для простого прототипа.SSI, в частности, является убедительным выбором, у вас все еще есть выбор языков для обработки CGI, а что касается возврата неатомных данных, вы можете выдать JSON, а затем разрешить пользовательскому интерфейсу выполнять цикл по возвращаемой структуре данных с помощью Javascript.

Что-то, что управляет памятью за вас.Они утверждают, что именно технологические изменения дают наибольший прирост производительности.Я думаю, что c # невероятно трудно превзойти по соотношению цена-качество.

Что касается Python:

Если вам нужна производительность для работы с большими объемами вычислений, посмотрите на Числовой Python http://numpy.scipy.org/ и Пирекс http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ .Numeric Python - это расширение Python, которое предоставляет множество числовых средств старой школы, таких как быстрый код на C - векторная математика (необходимый инструмент для работы с ANN) и т.д.Pyrex - это инструмент, который, по сути, позволяет вам компилировать код Python вплоть до собственного исполняемого файла.

С Pyrex вам нужно быть осторожным при использовании отражения, потому что он не может полностью скомпилировать код, который использует определенные отражающие конструкции (в частности, locals() и globals()).Я упоминаю об этом ограничении только потому, что и искусственный интеллект, и исследовательское кодирование (подразумеваемое вашим замечанием о "прототипе") часто используют преимущества отражения больше, чем другие виды прикладных областей.

Если вы являетесь пользователем Mac, взгляните на Веб - объекты чтобы сделать все необходимое для фреймворка, и вы можете сосредоточиться на написании значимого нейронного кода на Java.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top