На работе мне иногда надо писать простенькие скрипты, для повседневных нужд. Я в последнее время решил, что буду их писать на Питоне или Руби, если возможно, чтобы таким образом потихоньку осваивать эти два языка.
Я думаю, меня читает некоторое количество людей, которые на этих языках (одном из или сходном или комбинации) пишут регулярно и с удовольствием. Поэтому хочу спросить:
1. Почему ваш любимый язык такой крутой? Т.е. чем он разительно отличается от других динамических языков (с C просьба не сравнивать, чем динамические языки отличаются от C я кагбэ в курсе) и намного их превосходит. Ссылки на библиотеку и модуль antigravity кошерны, но с оговорками - т.е. укажите, полагаете ли вы, что подобный модуль невозможен у конкурентов, или же просто что есть, тем и пользуемся?
2. Что следует читать, чтобы писать на этом языке как правильные пацаны, а не как лох? Подчеркну, меня интересует не мануал и не список синтаксических конструкций, а идиоматика - т.е. какие конструкции считаются правильными/эффективными/одобряемыми обществом, как принято делать разные вещи. Пример для питона.
Tags:
no subject
Наличие готового модуля для короткого проекта или скрипта -- ИМХО один из главных плюсов. Разумеется, XML парсер или обработчик запросов HTTP может быть в тысячный раз написан на любом языке, но когда надо "ехать, а не шашечки", то лучше воспользоваться готовым.
Мне лично понравился в свое время Питон: он был более популярным, богаче библиотеки, наличие нормальных IDE и отладчиков. А с появлением Django отпал последний "козырь" руби - on rails. Питон реализован практически везде, включая embedded, managed язык для .NET, скриптовый язык а-ля JavaScript и т.п.
Против Питона могут выступать "отступы как часть синтаксиса" (я знаю это бесило очень большое количество людей), хотя привыкнув, я нашел незагруженный скобками код более читаемым, да в общем-то и все.
Оба языка учить действительно не имеет смысла.
2. Все эти соглашения о коде -- от лукавого. я пишу так, как удобно мне. Лучше всего, конечно, глянуть на стиль исходного кода модулей, чтобы понять принципы, но особых откровений там не будет. Возможно if list: будет более оптимальным в байткоде вместо if len(list) !=0:, но кого это волнует в простых скриптах? Для языковых приколов полезно прочитать что-то вроде language recipes (типа вот-этого для Питона), не более того.
no subject
Почему:
1) Для перла есть CPAN (search.cpan.org), в котором уже сделаны практически все библиотеки. Даже чтобы кофе варить;
2) На перле можно всё. Хочется функционального программирования? Оно есть там. Хочется объектно-ориентированного программирования? Оно есть там, причём пятью разными способами на выбор (включая шедевральный Moose и Class::MOP). Там нет «писать как правильные пацаны», потому что твой стиль, если он выдержанный и красивый, автоматически будет считаться правильным (хотя, конечно, это не освобождает от соблюдения perldoc perlstyle).
3) Я люблю лаконичные языки. :)
no subject
no subject
no subject
no subject
no subject
no subject
1. Структуры данных в Перле сделаны кошмарно. До такой степени, что те же структуры часто проще на C писать - по крайней мере, не надо помнить, где какой префикс и какой формы скобки писать. C хотя бы не стыдится своих указателей :) в Перле же они вылезают в самых неожиданых местах, как из мешка, доверху набитого шилами.
Это, кстати, включает и ОО, которое - по крайней мере в built-in виде - ПМСМ представляет собой злобную насмешку над пользователями. Возможно, с тех пор многое изменилось, но это то, что я помню.
2. Чрезмерное пристрастие к синтаксическому сахару, которое превращается в натуральный синтаксический диабет. Это прикольно, что можно писать сложные программы в 1 строчку и что пользователям рекомендуют писать именно в таком стиле, но этот код совершенно невозможно reuse - он write-only!
no subject
no subject
Вот еще один сборник рецептов для питона, мне нравится: http://pleac.sourceforge.net/pleac_python/index.html
no subject
no subject
no subject
no subject
public class C {
public static <K,V> Map<K,V> getHM() { return new HashMap<K,V>();}
}
(или что-то в этом духе)
no subject
Больше всего мне нравится то, что на нем можно писать как угодно - хочешь быстро на соплях, хочешь - совсем production quality.
Вот у меня недавно появилась мысль, как собирать один кусочек софта, я за 10 минут сделал грязный прототип, проверил что работает и еще минут за 20 сделал из него приличного качества скрипт, готовый для вставления в build system.
Опять же, на нем легко писать "не как лох" - он позволяет писать в настолько разных стилях, что всегда можно подобрать что-нибудь по вкусу.
no subject
На перле, как я упоминал выше, я писал, и довольно долго - несколько лет, но потом бросил, на мой вкус слишком много лишних движений для работы со структурами данных.
no subject
За 10 минут такие скрипты я не могу написать на других известных мне языках - либо там синтакс многословный и вместо каких-нибудь обычных перловых split и map надо что-то городить, либо нет ничего близкого к CPAN и как только натыкаешься на что-нибудь этакое, 10 минут превращаются в три часа и интеграцию с какими-то странными тулзами, которые еще надо разыскивать.
no subject
Заодно увидел конструкцию map +{ lc($_), 1 }, @array - и вспомнил, что именно за это - за то, что в этой конструкции почти каждый символ можно заменить и оно будет работать по-разному совершенно неочевидными способами - я и невзлюбил Перл.
Что касаемо CPAN, то CPAN это голова. Но у руби вроде есть gems, у питонцев - pip, правда, насчет количества не знаю, Перл-то постарше будет...
no subject
no subject
no subject
no subject
no subject
У меня, правда, есть другая проблема - IDLE (кажется) принудительно заменяет табуляции на пробелы в новых строках (ну люблю я табуляции). А если часть кода написана в другом редакторе (с табуляциями), а часть в IDLE - то ой.
no subject
no subject
no subject
no subject
no subject
Потому что любой из перечисленных языков можно освоить, ну скажем щедро, недели за две. Не напрягаясь. Хаскель я бы не взялся за такой срок освоить. Хотя не исключаю, что есть женщины в русских селеньях.
no subject
no subject
no subject
Студент, раньше не программировавший вообще, начал писать production-ready через неделю изучения. См. "Ada vs. C++ vs. Awk vs. ..."
no subject
человекпрограммист - вот как я, например - будет способен продуктивно работать на хаскеле через неделю - увы, мне не верится.no subject
no subject
no subject
> Но вот в то, что простой, обычный человекпрограммист - вот как я, например - будет способен продуктивно работать на хаскеле через неделю - увы, мне не верится.
Гм. Неужели в программе
module Main where main = do putStrLn "What's your name" name <- getLine putStrLn ("Hi, " ++ name ++ "!")есть что-то настолько сложное по сравнению с другими языками.
no subject
no subject
no subject
no subject
Да и монады — детям не игрушка. Arrows и то понятнее и лучше.
no subject
no subject