Какой язык мне использовать? - PullRequest
5 голосов
/ 06 ноября 2008

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

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

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

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

Ответы [ 20 ]

13 голосов
/ 06 ноября 2008

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

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

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

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

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

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

10 голосов
/ 06 ноября 2008

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

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

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

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

8 голосов
/ 06 ноября 2008

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

Как вы уже указали:

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

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

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

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

7 голосов
/ 06 ноября 2008

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

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

6 голосов
/ 06 ноября 2008

AI? Определенно LISP

4 голосов
/ 06 ноября 2008

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

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

Тем не менее, причина написания этого ответа наиболее рекомендую:

Иди с тем, что ты знаешь.

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

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

Приветствия

-R

4 голосов
/ 06 ноября 2008

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

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

  • существующие библиотеки AI - посмотрите JOONE

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

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

3 голосов
/ 06 ноября 2008

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

2 голосов
/ 06 ноября 2008

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

РЕДАКТИРОВАТЬ: Вы можете реализовать часть обработки чисел в C или C ++ и сделать ее модулем для использования в вашем коде Python. Таким образом, вы получаете быстрый код обработки и простой в программировании клей.

2 голосов
/ 07 ноября 2008

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

...