stas: (Default)
stas ([personal profile] stas) wrote2010-02-12 12:13 am

вопрос читателям

На работе мне иногда надо писать простенькие скрипты, для повседневных нужд. Я в последнее время решил, что буду их писать на Питоне или Руби, если возможно, чтобы таким образом потихоньку осваивать эти два языка.
Я думаю, меня читает некоторое количество людей, которые на этих языках (одном из или сходном или комбинации) пишут регулярно и с удовольствием. Поэтому хочу спросить:

1. Почему ваш любимый язык такой крутой? Т.е. чем он разительно отличается от других динамических языков (с C просьба не сравнивать, чем динамические языки отличаются от C я кагбэ в курсе) и намного их превосходит. Ссылки на библиотеку и модуль antigravity кошерны, но с оговорками - т.е. укажите, полагаете ли вы, что подобный модуль невозможен у конкурентов, или же просто что есть, тем и пользуемся?

2. Что следует читать, чтобы писать на этом языке как правильные пацаны, а не как лох? Подчеркну, меня интересует не мануал и не список синтаксических конструкций, а идиоматика - т.е. какие конструкции считаются правильными/эффективными/одобряемыми обществом, как принято делать разные вещи. Пример для питона.

[identity profile] digest.livejournal.com 2010-02-12 10:24 am (UTC)(link)
Большой половой разницы между Питоном и Руби нет, вопрос привычки. Крутость языка заключается ведь также и в том, что для него написано поразительное количество стандартных и отлаженных 3d-party модулей, а забивать память дублирующей информацией для второго похожего языка я считаю нецелесообразным.

Наличие готового модуля для короткого проекта или скрипта -- ИМХО один из главных плюсов. Разумеется, XML парсер или обработчик запросов HTTP может быть в тысячный раз написан на любом языке, но когда надо "ехать, а не шашечки", то лучше воспользоваться готовым.

Мне лично понравился в свое время Питон: он был более популярным, богаче библиотеки, наличие нормальных IDE и отладчиков. А с появлением Django отпал последний "козырь" руби - on rails. Питон реализован практически везде, включая embedded, managed язык для .NET, скриптовый язык а-ля JavaScript и т.п.

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

Оба языка учить действительно не имеет смысла.

2. Все эти соглашения о коде -- от лукавого. я пишу так, как удобно мне. Лучше всего, конечно, глянуть на стиль исходного кода модулей, чтобы понять принципы, но особых откровений там не будет. Возможно if list: будет более оптимальным в байткоде вместо if len(list) !=0:, но кого это волнует в простых скриптах? Для языковых приколов полезно прочитать что-то вроде language recipes (типа вот-этого для Питона), не более того.

[identity profile] digest.livejournal.com 2010-02-12 07:28 pm (UTC)(link)
ActiveState Komodo -- на очень хорошем уровне, во всяком случае для виндозы. В линухе еще эклипсовый плагин pydev вполне себе работает. Для мгновенных проверок или изучения языка - IDLE (Linux/Windows) или PythonWin (Windows).

[identity profile] showpoint.livejournal.com 2010-02-12 11:05 pm (UTC)(link)
WingIDE очень неплох.

[identity profile] sorhed.livejournal.com 2010-02-12 10:46 am (UTC)(link)
Самый крутой язык для скриптов — Perl. No kidding.

Почему:

1) Для перла есть CPAN (search.cpan.org), в котором уже сделаны практически все библиотеки. Даже чтобы кофе варить;

2) На перле можно всё. Хочется функционального программирования? Оно есть там. Хочется объектно-ориентированного программирования? Оно есть там, причём пятью разными способами на выбор (включая шедевральный Moose и Class::MOP). Там нет «писать как правильные пацаны», потому что твой стиль, если он выдержанный и красивый, автоматически будет считаться правильным (хотя, конечно, это не освобождает от соблюдения perldoc perlstyle).

3) Я люблю лаконичные языки. :)

[identity profile] sorhed.livejournal.com 2010-02-12 06:45 pm (UTC)(link)
С тех пор многое изменилось. :) В перле сейчас благодаря Moose одна из лучших систем OOP в природе. Что до сахара — любители отсутствия синтаксического сахара пишут на джаве, где всё ручками. Но кто бы знал, как мне надоело писать Map<Integer, String> myMap = new HashMap<Integer, String>(), когда во всех нормальных языках есть type inference. Я уж не говорю о геттерах и сеттерах.

[identity profile] manta.livejournal.com 2010-02-12 11:11 pm (UTC)(link)
пользуйте синтаксический инсулин:

public class C {
public static <K,V> Map<K,V> getHM() { return new HashMap<K,V>();}
}

(или что-то в этом духе)

[identity profile] sorhed.livejournal.com 2010-02-14 04:40 pm (UTC)(link)
Я таки могу читать свой код на перле через полгода после его написания. Потому что я опытный тёмный ситх, и блюду perlstyle. :)

[identity profile] unbe.livejournal.com 2010-02-12 11:03 am (UTC)(link)
Большой разницы нет. в питоне раздражает постоянно писать self. в руби раздражает синтаксис в целом. питон знаю лучше, поэтому в основном пишу на нем.

[identity profile] digest.livejournal.com 2010-02-12 02:41 pm (UTC)(link)
Поменяйте self на s - будет короче :)

[identity profile] unbe.livejournal.com 2010-02-12 02:48 pm (UTC)(link)
Это плохая идея. Да и не в длине дело, все равно шорткатом набирается, а в шуме.

[identity profile] digest.livejournal.com 2010-02-12 04:23 pm (UTC)(link)
Понятно, плохая. шЮтка. Но если подумать, self ничем не хуже популярных соглашений по префиксам вроде m_member..

[identity profile] esspe.livejournal.com 2010-02-14 03:57 am (UTC)(link)
Self тоже раздражал, пока не дошло, что наглядно таким способом отделяются переменные объекта от локальных.

[identity profile] cmm.livejournal.com 2010-02-14 10:42 am (UTC)(link)
я всегда, когда это явным образом не противоречило корпоративным стандартам, старался писать this->.  Ибо Нефиг. :)

[identity profile] gianthare.livejournal.com 2010-02-14 12:23 pm (UTC)(link)
Сталкивался, когда пытался код скомпилированный под VC++ перекомпилировать под gcc

[identity profile] oxfv.livejournal.com 2010-02-12 06:45 pm (UTC)(link)
Питон ближе к натуральному языку, лаконичен, но не криптографичен (как перл). Я голосую за питон (впрочем, я не знаю руби). Все библиотеки там есть, включая ценный ctypes.

Вот еще один сборник рецептов для питона, мне нравится: http://pleac.sourceforge.net/pleac_python/index.html

[identity profile] msh.livejournal.com 2010-02-13 01:43 am (UTC)(link)
Я пишу на Perl. Я успел пройти на нем точку, когда перестаешь путаться в синтаксисе и чтение кода не пугает до того, как у меня появился выбор.

Больше всего мне нравится то, что на нем можно писать как угодно - хочешь быстро на соплях, хочешь - совсем production quality.

Вот у меня недавно появилась мысль, как собирать один кусочек софта, я за 10 минут сделал грязный прототип, проверил что работает и еще минут за 20 сделал из него приличного качества скрипт, готовый для вставления в build system.

Опять же, на нем легко писать "не как лох" - он позволяет писать в настолько разных стилях, что всегда можно подобрать что-нибудь по вкусу.

[identity profile] msh.livejournal.com 2010-02-13 03:33 am (UTC)(link)
я просто не понимаю какие в перле могут быть проблемы с структурами данных, там же все очевидно (или я уже забыл что может быть неочевидно)

За 10 минут такие скрипты я не могу написать на других известных мне языках - либо там синтакс многословный и вместо каких-нибудь обычных перловых split и map надо что-то городить, либо нет ничего близкого к CPAN и как только натыкаешься на что-нибудь этакое, 10 минут превращаются в три часа и интеграцию с какими-то странными тулзами, которые еще надо разыскивать.

[identity profile] msh.livejournal.com 2010-02-13 06:27 am (UTC)(link)
Так дело именно в количестве сахара и размере CPAN, это и определяет - займет скрипт 10 минут или час. Написание коротких скриптов само по себе мне большого удовольствия не доставляет, чем быстрее я с этим справлюсь - тем лучше.

[identity profile] migmit.vox.com (from livejournal.com) 2010-02-14 10:27 am (UTC)(link)
Прототипы на хаскеле пишутся быстрее, чем на перле. Серьёзно.

[identity profile] migmit.vox.com (from livejournal.com) 2010-02-14 10:52 am (UTC)(link)
> Следует ли включать во время написания прототипа те 5 лет, которые надо провести за изучением теории категорий и прочих увлекательных вещей, чтобы быть способным их писать?

Студент, раньше не программировавший вообще, начал писать production-ready через неделю изучения. См. "Ada vs. C++ vs. Awk vs. ..."

[identity profile] migmit.vox.com (from livejournal.com) 2010-02-14 01:05 pm (UTC)(link)
Сюрприз: для программирования на Haskell не обязательно даже знать слово "монада".

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

Гм. Неужели в программе
module Main where
main = do
  putStrLn "What's your name"
  name <- getLine
  putStrLn ("Hi, " ++ name ++ "!")

есть что-то настолько сложное по сравнению с другими языками.

[identity profile] sorhed.livejournal.com 2010-02-14 04:42 pm (UTC)(link)
Да. Когда пытаешься отойти от примеров в туториале и написать что-нибудь более серьёзное.

Да и монады — детям не игрушка. Arrows и то понятнее и лучше.

[identity profile] msh.livejournal.com 2010-02-14 03:00 pm (UTC)(link)
Напишите мне, пожалуйста, на хаскеле скрипт, который найдет все MP3 файлы, вытащит оттуда теги и поместит в таблицу в MySQL. Десять минут.

[identity profile] sorhed.livejournal.com 2010-02-14 04:42 pm (UTC)(link)
Это, кстати, хаскелисту несложно. Именно этот пример даже подробно разобран в "Real World Haskell". :)

[identity profile] http://users.livejournal.com/_nik_/ 2010-02-13 11:21 am (UTC)(link)
…5 лет писал на перле, прежде чем впервые посмотрел на питон, бежал в ужасе от синтаксически значимых пробелов, принялся за чтение Pragmatic Programming (книжка по руби), спустя три года всё ещё писал на перле, решил что синтаксические пробелы это не такой уж и ужас-ужас и вот уже два года как счастливый pythonista.

[identity profile] darth-sipid.livejournal.com 2010-02-13 12:32 pm (UTC)(link)
А чего они ужас.. Я хотя и не использую Питон как основной язык (да и пишу на нём мало и как лох) - всё равно он мне нравится :)

[identity profile] http://users.livejournal.com/_nik_/ 2010-02-13 12:42 pm (UTC)(link)
Так они воспринимались поначалу. Теперь то я не считаю это минусом, напротив — полагаю, что читабельность и лаконичность кода от этого дела заметно возрастает, что есть однозначный плюс.

[identity profile] darth-sipid.livejournal.com 2010-02-13 02:53 pm (UTC)(link)
Эта фича действительно затрудняет корявое форматирование кода - в этом её главный плюс (к сожалению, есть ещё товарищи, которые любят писать "в одну строчку").

У меня, правда, есть другая проблема - IDLE (кажется) принудительно заменяет табуляции на пробелы в новых строках (ну люблю я табуляции). А если часть кода написана в другом редакторе (с табуляциями), а часть в IDLE - то ой.

[identity profile] http://users.livejournal.com/_nik_/ 2010-02-13 03:13 pm (UTC)(link)
Я пользуюсь emacs`ом и там есть замечательная команда whitespace-cleanup, которая приводит файл произвольного формата с моему стилю форматирования.