Подтвердить что ты не робот

Что учиться? Lisp или OCaml или...?

У меня уже есть несколько языков под моим поясом (в грубом порядке): Python, C, С++, PHP, Javascript, Haskell, Java, MIPS, x86. Но прошло уже почти два года с тех пор, как я узнал новый, и я начинаю испытывать зуд. У меня есть несколько критериев:

  • Должен (повторить: должен) иметь бесплатную реализацию Linux
  • Должно отличаться от языков, которые я уже знаю. Другими словами, у него должны быть функции, которые заставляют меня думать о решении проблем по-новому.
  • Должен иметь некоторый потенциал для практического использования. Это не обязательно должна быть следующая Java, но это исключает Brainf * и Shakespeare:) Мне все равно, сколько вакансий у нее есть, но приложения и библиотеки реального мира - это плюс.
  • Должно иметь как минимум достаточно бесплатных учебных материалов, чтобы я начал работать.

Я думал Lisp (CL? что-то еще?) или OCaml. У меня уже есть опыт работы с функциональными языками с Haskell (да, я знаю, что Lisp/OCaml - это мультипарадигма). Я не эксперт. части кода из Real World Haskell все еще могут сгладить мой мозг, но я понимаю основные понятия и некоторые продвинутые (функторы, монады).

Какой из них выбрать? Любые другие языки, которые я забыл? Кроме того, не могли бы вы включить некоторые полезные ссылки на хорошие книги/учебники и т.д.

4b9b3361

Ответ 1

Оба Common Lisp и Ocaml, безусловно, полезны для изучения. Если вы уже знаете Haskell, CL может быть более разным.

SBCL и Clozure CL - оба полезные реализации Common Lisp в Linux. (Обзор различных реализаций: Общий опрос Lisp)

В качестве отправной точки я бы рекомендовал использовать превосходную книгу Питера Сейбела Практический общий Lisp, который доступен как онлайн, так и напечатан.

Указатели сообщества находятся здесь: CLIKI.

Ответ 2

Ни Lisp, ни OCaml не слишком далеки от того, что вы уже знаете. Вот четыре предложения, отобранные отчасти для внутреннего интереса и отчасти для растягивания ваших горизонтов.

  • Логический язык программирования, возможно, Prolog. Я не нашел хороших материалов в Интернете, но книга The Art of Prolog от Sterling и Shapiro отличная. Более простой учебник Clocksin и Mellish также хорош. Основной интерес представляет программирование с отношениями, а не с функциями.

  • A чистый объектно-ориентированный язык, либо Smalltalk или Self. Если вы использовали только гибридные объектно-ориентированные языки, вы будете поражены тем, насколько красивой может быть объектная ориентация. Я связан с Squeak реализацией Smalltalk. Я лично рекомендовал бы изучить Smalltalk перед тем, как заняться "Я"; там очень большое и активное сообщество, и программное обеспечение хорошо развито. Self стоит на плечах Smalltalk и является еще более вдохновляющим дизайном, но сообщество намного меньше. Для тех, кто имеет доступ к цифровой библиотеке ACM, я рекомендую отличный разговор Дейва Унгара на HOPL-III; бумага также довольно хороша.

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

    Вы можете прочитать о обработке строки значка в статье Ральфа Грисволда из Computer Journal.

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

    На веб-сайте HOPL-III также содержатся превосходные слова и беседы о Lua.

Ответ 3

Пролог может быть тем, что вы ищете.

Edit

Первый комментатор прав, мой ответ был довольно коротким и не очень полезным, поэтому:

Моя предпочтительная реализация - SWI-Prolog. Я лично узнал от Prolog Programming for Artificial Intelligence. Этот стиль довольно ясен и содержит много примеров, но у меня нет никакой другой книги по логическому программированию (это позор, действительно:), поэтому у меня нет оснований для сравнения.

Ответ 4

Erlang довольно интересно узнать из-за его суперэффективной модели concurrency и легкости, с которой вы можете писать распределенные системы (для примера, CouchDB был написан в Erlang). Это динамически типизированный функциональный язык, но вы также можете писать код процедурно. Учебник, который я узнал, называется "Начало работы с Erlang" , которое охватывает практически любую часть языка.

Ответ 5

Я собираюсь порекомендовать то, что я еще не пробовал, но планирую, поэтому вы должны сами судить об этом. Там этот язык называется IO, что особенно важно в том, что его основанный на прототипе, например JavaScript, а также заимствует концепции многих других языков. На рынке труда это, вероятно, не существует, но я думал, что упоминаю этот язык.

В противном случае язык из семейства Lisp может отличаться от того, что вы уже знаете. В этой связи я бы рекомендовал Scheme, что, на мой взгляд, более элегантно, чем Common Lisp, Новая концепция, которую вы могли бы найти интересной в Scheme, продолжения.

Если вы берете Путь Схемы, сделайте некоторое время, чтобы смотреть эти видео с 1986 года. Они удивительно.

Ответ 6

Посмотрите на Smalltalk! Либо Cincom VWST, либо Smalltalk/X - не беспокоят Squeak, поскольку интерфейс ужасен). VAST тоже хорош, но на самом деле только Windows ориентирована. И не беспокойтесь о скептиках, которые презирают Smalltalk - они не используют его и застряли в болоте языков цикла редактирования-запуска-отладки и нескольких библиотек, связанных друг с другом.: -)

Почему эти Smalltalks - ну, они приходят в комплекте с превосходной средой разработки IDE, встроенным графическим интерфейсом, лучшим отладчиком, который вы когда-либо увидите, онлайн-справкой и полностью независимы от базовой ОС. Например, программирование ST/X, работающее под Linux, может быть перенесено (исходный код) на Windows ST/X, и оно должно выполняться.

ST/X свободен только с очень незначительными ограничениями на доступ к лицензиям, Cincom предлагает бесплатную версию NC (Not Commercial), которая НЕ ограничена. Я использую ST/X, поскольку я предпочитаю внешний вид по умолчанию это предлагает. Их интерфейсы IDE очень похожи.

Языки без инструментов IDE и GUI просто теряют ваше время, поскольку мир - это действительно GUI, независимо от того, насколько потрясающим является основной язык. Например, Ruby замечательный, но без IDE или простых инструментов GUI это действительно разочаровывает.

Smalltalk нелегко попасть, и его не идеально, (на каком языке?), но очень приятно учиться и использовать. И теперь, когда аппаратные и операционные системы наконец-то дошли до потребностей Smalltalks. очень эффективен.

Ответ 7

Если вы хотите использовать знания Java и функционального программирования, и вы хотите изучить Lisp, попробуйте Clojure.

Реализация бесплатна и кросс-платформенная, включая Linux, потому что она работает на JVM. Будучи Lisp, он достаточно разный (полезными и замечательными способами) с большинства других языков, чтобы сделать интересным. Некоторые функции, такие как неизменяемые структуры данных, мультиметоды, поддержка метаданных, ориентация на безопасный concurrency и т.д., Являются довольно новыми по сравнению с перечисленными вами языками. Clojure сильно ориентирован на практический и полезный язык, а не на академический. Это функциональный язык, но не "чистый", что, возможно, хорошо. Вы также можете тривиально использовать любую библиотеку Java из Clojure.

Clojure - это новый язык, поэтому единственная книга, которая до сих пор существует Программирование Clojure, но это довольно хороший. Там также wiki, который может быть не совсем обновленным, потому что язык все еще развивается очень быстро. список рассылки и канал IRC - очень дружелюбные, приветливые места, чтобы задавать вопросы. Официальный сайт также является хорошим ресурсом, конечно.

Ответ 8

I вторая рекомендация Rainer Common Lisp.

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

Но принесите терпение и настойчивость, вам нужно будет понять множество концепций, которые сначала будут казаться чуждыми.

Ответ 9

С# имеет бесплатную реализацию в Linux в проекте Mono, и, возможно, это очень доступный навык, если вы не полностью анти-Microsoft.

Моя любимая книга С# Pro С# 2008 и платформа .NET 3.5, четвертое издание.

Если вы действительно хотите экзотических, F # - это стиль стиля OCaml, который работает на платформе .NET и моно, и в последнее время он получает много внимания.

http://msdn.microsoft.com/en-us/fsharp/default.aspx

Книги для F #:
http://www.amazon.com/s/ref=nb_ss_gw?url=search-alias%3Daps&field-keywords=f%23

Ответ 10

Вы можете попробовать Tcl. Он был достаточно разным, чтобы спровоцировать неблагоприятную реакцию в моем мозгу, поэтому я не могу сказать вам, как я нашел его другим, но в нем было много хорошего материала (может быть, меньше в наши дни, чем раньше).

Ответ 11

Из предложений, которые я видел до сих пор, мне нравится Lisp (см. Secko) и Smalltalk (см. brett), так как оба дадут вам другой вид языков. Пролог еще больше.

Другим языком, который отличается от других, является Erlang - у меня еще не было возможности изучить его, но он обрабатывает concurrency по-другому. Лучшая ссылка, которую я могу вам дать, - основной сайт.

С точки зрения рекомендаций, Lisp хорош как потому, что в настоящее время используется, так и потому, что он очень старый. Остальным вам придется посмотреть на источники и посмотреть, какой из них больше всего нравится.

Ответ 12

Попробуй ФОРТРАН? Я слышал, что он все еще активно используется научными и математическими сообществами, плюс он должен быть несходным, чтобы быть проблемой обучения.

Составители:
http://gcc.gnu.org/wiki/GFortranBinaries
http://www.g95.org/
http://www.fortran.com/compilers.html
http://www.thefreecountry.com/compilers/fortran.shtml

Иды:
http://www.eclipse.org/photran/
http://force.lepsch.com/ (только для FORTRAN 77)

Обучение:
Введение в современный ФОРТРАН: http://www-uxsup.csx.cam.ac.uk/courses/Fortran/
FORTRAN 90 Учебное пособие: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/fortran.html

Вы также можете изучить Visual Basic.NET, если вы когда-нибудь заставите это поддерживать. Очевидно, у моно есть рабочая реализация Linux: http://www.mono-project.com/Visual_Basic

Ответ 13

Factor довольно радикально отличается от всего, что вы сказали, что знаете, а также всего остального. Он основан на стеке, как и Forth, но имеет довольно обширную библиотеку и множество интересных функций.

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

Ответ 14

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

Perl также является HLL как Lisp, он интересен и интересен в одно и то же время. Это происходит от C, поэтому вы можете забрать его, когда идете. Иногда это может быть тяжело, и некоторые люди теряют во время обучения, но это стоит знать.

Оба языка бесплатны и поставляются с Linux.

Ссылки

Lisp: Если Lisp настолько велико, Введение и учебник для общего Lisp

Perl: PERL - Практическое извлечение и отчетный язык

Книги

В Lisp - Великая книга Пола Грэма на языке Lisp. Это бесплатно, и вы можете скачать его здесь.

Ответ 15

Scala был очень хорош для того, чтобы заставить меня увидеть программирование в новом свете. Я еще не использовал его для чего-то еще, но все равно повлиял на то, как я пишу код на других языках, а не только Java, но PHP. Недавно я написал простой парсер для плагина WordPress, и код намного более функциональный и неизменный, чем это было бы шесть месяцев назад, и лучше для него, несмотря на отсутствие принудительного применения в PHP.

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

Многие люди сравнивают функциональные аспекты Scala с Haskell. Вы даже можете себе представить, что знание Haskell означает, что вы уже знаете, что все Scala могут вас научить, но я этому не верю. Способ Scala объединяет OO и функцию имеет способ сделать это похоже на то, что на самом деле самая верная форма для обоих из них.

Ответ 16

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

После посещения OCaml под Windows некоторое время (и разочарование в проблемах стабильности) я столкнулся с F #, потомком OCaml. Оба они очень похожи (могут скомпилировать много кода), но у OCaml, по-видимому, есть действительно хорошая макросистема (P4) и типы-классы (в поддержку написания "строго типизированных" операторов в отношении общих типов), тогда как F # отличная поддержка асинхронных и параллельных операций, monads, unit-of-measure для числовых типов, а также более чистый синтаксис OO и потрясающая интеграция IDE (VS2008 и будут выпущены в комплекте с VS2010). В наши дни я предпочитаю F #, так как у меня есть доступ ко всей платформе .NET и загрузке сторонних библиотек. На самом деле, я пишу большую часть моего одноразового и полезного кода в F # сейчас; для меня это в целом гораздо более продуктивно, чем С++, JavaScript, С#, PowerShell или что-то еще.

F # работает довольно хорошо под Mono на Linux, и там есть хорошая работа. Компилятор и среда выполнения будут открытыми после стабилизации (выпущены вместе с VS2010), и разработчики считают, что поддержка Mono достаточно важна для ее серьезного рассмотрения для использования не Microsoft.