February 2026

S M T W T F S
1234567
891011121314
15161718192021
22232425262728

Style Credit

Expand Cut Tags

No cut tags
Friday, February 12th, 2010 12:13 am

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

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

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

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

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

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

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

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

2. Все эти соглашения о коде -- от лукавого. я пишу так, как удобно мне. Лучше всего, конечно, глянуть на стиль исходного кода модулей, чтобы понять принципы, но особых откровений там не будет. Возможно if list: будет более оптимальным в байткоде вместо if len(list) !=0:, но кого это волнует в простых скриптах? Для языковых приколов полезно прочитать что-то вроде language recipes (типа вот-этого для Питона), не более того.
Friday, February 12th, 2010 07:28 pm (UTC)
ActiveState Komodo -- на очень хорошем уровне, во всяком случае для виндозы. В линухе еще эклипсовый плагин pydev вполне себе работает. Для мгновенных проверок или изучения языка - IDLE (Linux/Windows) или PythonWin (Windows).
Friday, February 12th, 2010 11:05 pm (UTC)
WingIDE очень неплох.
Friday, February 12th, 2010 10:46 am (UTC)
Самый крутой язык для скриптов — Perl. No kidding.

Почему:

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

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

3) Я люблю лаконичные языки. :)
Friday, February 12th, 2010 06:45 pm (UTC)
С тех пор многое изменилось. :) В перле сейчас благодаря Moose одна из лучших систем OOP в природе. Что до сахара — любители отсутствия синтаксического сахара пишут на джаве, где всё ручками. Но кто бы знал, как мне надоело писать Map<Integer, String> myMap = new HashMap<Integer, String>(), когда во всех нормальных языках есть type inference. Я уж не говорю о геттерах и сеттерах.
Friday, February 12th, 2010 11:11 pm (UTC)
пользуйте синтаксический инсулин:

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

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

Sunday, February 14th, 2010 04:40 pm (UTC)
Я таки могу читать свой код на перле через полгода после его написания. Потому что я опытный тёмный ситх, и блюду perlstyle. :)
Friday, February 12th, 2010 11:03 am (UTC)
Большой разницы нет. в питоне раздражает постоянно писать self. в руби раздражает синтаксис в целом. питон знаю лучше, поэтому в основном пишу на нем.
Friday, February 12th, 2010 02:41 pm (UTC)
Поменяйте self на s - будет короче :)
Friday, February 12th, 2010 02:48 pm (UTC)
Это плохая идея. Да и не в длине дело, все равно шорткатом набирается, а в шуме.
Friday, February 12th, 2010 04:23 pm (UTC)
Понятно, плохая. шЮтка. Но если подумать, self ничем не хуже популярных соглашений по префиксам вроде m_member..
Sunday, February 14th, 2010 03:57 am (UTC)
Self тоже раздражал, пока не дошло, что наглядно таким способом отделяются переменные объекта от локальных.
Sunday, February 14th, 2010 10:42 am (UTC)
я всегда, когда это явным образом не противоречило корпоративным стандартам, старался писать this->.  Ибо Нефиг. :)
Sunday, February 14th, 2010 12:23 pm (UTC)
Сталкивался, когда пытался код скомпилированный под VC++ перекомпилировать под gcc
Friday, February 12th, 2010 06:45 pm (UTC)
Питон ближе к натуральному языку, лаконичен, но не криптографичен (как перл). Я голосую за питон (впрочем, я не знаю руби). Все библиотеки там есть, включая ценный ctypes.

Вот еще один сборник рецептов для питона, мне нравится: http://pleac.sourceforge.net/pleac_python/index.html
Saturday, February 13th, 2010 01:43 am (UTC)
Я пишу на Perl. Я успел пройти на нем точку, когда перестаешь путаться в синтаксисе и чтение кода не пугает до того, как у меня появился выбор.

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

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

Опять же, на нем легко писать "не как лох" - он позволяет писать в настолько разных стилях, что всегда можно подобрать что-нибудь по вкусу.
Saturday, February 13th, 2010 03:33 am (UTC)
я просто не понимаю какие в перле могут быть проблемы с структурами данных, там же все очевидно (или я уже забыл что может быть неочевидно)

За 10 минут такие скрипты я не могу написать на других известных мне языках - либо там синтакс многословный и вместо каких-нибудь обычных перловых split и map надо что-то городить, либо нет ничего близкого к CPAN и как только натыкаешься на что-нибудь этакое, 10 минут превращаются в три часа и интеграцию с какими-то странными тулзами, которые еще надо разыскивать.
Saturday, February 13th, 2010 06:27 am (UTC)
Так дело именно в количестве сахара и размере CPAN, это и определяет - займет скрипт 10 минут или час. Написание коротких скриптов само по себе мне большого удовольствия не доставляет, чем быстрее я с этим справлюсь - тем лучше.
[identity profile] migmit.vox.com (from livejournal.com)
Sunday, February 14th, 2010 10:27 am (UTC)
Прототипы на хаскеле пишутся быстрее, чем на перле. Серьёзно.
[identity profile] migmit.vox.com (from livejournal.com)
Sunday, February 14th, 2010 10:52 am (UTC)
> Следует ли включать во время написания прототипа те 5 лет, которые надо провести за изучением теории категорий и прочих увлекательных вещей, чтобы быть способным их писать?

Студент, раньше не программировавший вообще, начал писать production-ready через неделю изучения. См. "Ada vs. C++ vs. Awk vs. ..."
[identity profile] migmit.vox.com (from livejournal.com)
Sunday, February 14th, 2010 01:05 pm (UTC)
Сюрприз: для программирования на Haskell не обязательно даже знать слово "монада".

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

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

есть что-то настолько сложное по сравнению с другими языками.
Sunday, February 14th, 2010 04:42 pm (UTC)
Да. Когда пытаешься отойти от примеров в туториале и написать что-нибудь более серьёзное.

Да и монады — детям не игрушка. Arrows и то понятнее и лучше.
Sunday, February 14th, 2010 03:00 pm (UTC)
Напишите мне, пожалуйста, на хаскеле скрипт, который найдет все MP3 файлы, вытащит оттуда теги и поместит в таблицу в MySQL. Десять минут.
Sunday, February 14th, 2010 04:42 pm (UTC)
Это, кстати, хаскелисту несложно. Именно этот пример даже подробно разобран в "Real World Haskell". :)
Saturday, February 13th, 2010 11:21 am (UTC)
…5 лет писал на перле, прежде чем впервые посмотрел на питон, бежал в ужасе от синтаксически значимых пробелов, принялся за чтение Pragmatic Programming (книжка по руби), спустя три года всё ещё писал на перле, решил что синтаксические пробелы это не такой уж и ужас-ужас и вот уже два года как счастливый pythonista.
Saturday, February 13th, 2010 12:32 pm (UTC)
А чего они ужас.. Я хотя и не использую Питон как основной язык (да и пишу на нём мало и как лох) - всё равно он мне нравится :)
Saturday, February 13th, 2010 12:42 pm (UTC)
Так они воспринимались поначалу. Теперь то я не считаю это минусом, напротив — полагаю, что читабельность и лаконичность кода от этого дела заметно возрастает, что есть однозначный плюс.
Saturday, February 13th, 2010 02:53 pm (UTC)
Эта фича действительно затрудняет корявое форматирование кода - в этом её главный плюс (к сожалению, есть ещё товарищи, которые любят писать "в одну строчку").

У меня, правда, есть другая проблема - IDLE (кажется) принудительно заменяет табуляции на пробелы в новых строках (ну люблю я табуляции). А если часть кода написана в другом редакторе (с табуляциями), а часть в IDLE - то ой.
Saturday, February 13th, 2010 03:13 pm (UTC)
Я пользуюсь emacs`ом и там есть замечательная команда whitespace-cleanup, которая приводит файл произвольного формата с моему стилю форматирования.