понедельник, 28 января 2013 г.

Курсы Clojure -- продолжение

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

Скорее всего курсы начнутся через месяц, в последних числах февраля (это пока не точно). Еще мы планируем выдавать сертификаты о прохождении курсов тем, кто выполнит все домашние задания.

С помощью Алекса Отта я составил предварительную программу курсов. Опять же, это пока не официально, возможны изменения.

Вообще я предлагаю всем заинтересованным обсудить программу, что-то подкорректировать, добавить-убрать. Буду очень благодарен за feedback.

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

Всем, кто хочет и может помочь мне с материалами курсов, предлагаю выбрать тему/подтему или даже какой-то совсем уж ограниченный фрагмент занятия. Пожалуйста, связывайтесь по этому поводу со мной через email: d.bushenko-at-gmail.com Имена всех, кто будет помогать мне с материалами, тоже каким-нибудь образом увековечим.

15 комментариев:

  1. У меня в целом очень хорошее впечатление от программы, порадовала часть про DSL - это вполне может быть одним из "конкурентных преимуществ" Clojure я подозреваю.

    Единственное что я бы подчеркнул - от программы в целом хотелось бы трезвого анализа trade off-ов использования clojure для разных задач. Меня в частности беспокоит качество / зрелость / функциональность библиотек для распространенных задач в сравнении с мэйнстримными аналогами. Т.е. хотелось бы трезвой профессиональной оценки инструмента, а не "фанбойского" продвижения какой-то модной штуки (это ни в коем случае не относится лично к вам - просто пытаюсь описать возможный "антипаттерн" для такого рода курса).

    Кстати могу сразу сказать что чуть-чуть знаком с идеями заложенными в clojure - и они мне очень очень нравятся (одних хороших идей впрочем недостаточно для решения многих задач - выбирая между clojure + соотв. веб стэк и скажем groovy/grails для разработки веб приложения - вряд ли я бы выбрал clojure, по кр мере исходя из моих текущих представлений о положении дел там).

    Жаль что по времени несколько пересекается с https://www.coursera.org/course/proglang - и тому и другому хочется уделить достаточно внимания :) (а еще db-class и networks - хотя на эти лично я готов забивать по необходимости :))
    Впрочем я не имею в виду что программу/задания нужно упрощать - как раз таки наоборот, мне кажется курс должен быть достаточно сложным и продвинутым чтобы представлять больший интерес.

    P.S.
    Сори за такой запоздалый и наверно несколько сумбурный фидбэк.

    ОтветитьУдалить
  2. Тут, знаете ли, смотря что понимать под зрелостью. Если речь о наличии готовых плагинов, как есть в Grails или RoR, то, конечно, в Clojure их гораздо меньше. Но если о стабильности платформы и библиотек, то, из моего личного опыта, даже бета-версии кложурных библиотек как правило сравнимы по качеству с релизами аналогичных библиотек для джава или руби. Ну оно и понятно, правильный код на функциональном языке писать проще, чем на императивном.

    А вообще веб-стек кложуры используют в продакшене. RedHat, например, даже сервер приложений для кложуры пишет (http://immutant.org).

    ОтветитьУдалить
  3. P.S. Спасибо за фидбек, мне в самом деле важно знать, нравится ли программа курсов. Кстати, они, похоже, переносятся на март, так что у вас еще будет шанс пройти их :-)

    ОтветитьУдалить
  4. О, интересно, не знал насчет сервера приложений на clojure :)

    Что касается библиотек то под зрелостью я понимаю много чего - наличие необходимых фич, стабильность, документированность, размер комьюнити, интеграция с какими-то third-party вещами с которыми имело бы смысл интегрироваться и тп.

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

    На 100% уверен что вы видели эту статью - http://tonsky.livejournal.com/267239.html - оставлю здесь как пример того что таки не все идеально в мире clojure :)

    Я впрочем не утверждаю что вот все что я перечислил в clojure плохо - собственно надеюсь и ваш курс в том числе поможет сформировать какую-то точку зрения :)

    ОтветитьУдалить
  5. Да, пожалуй, при таких требованиях к инфраструктуре, Clojure -- не самый подходящий язык. Если уж на то пошло, то, вероятно, под ваши требования подойдут всего два языка: Java и C#. Даже такие сверхпопулярные Ruby on Rails и Python со всеми своими батарейками не годятся хотя бы в виду короткого цикла жизни библиотек (особенно для RoR), забагованности и плохой интеграцией с другими платформами.

    Так что да, вы правы, Clojure не может сравниться с Java по библиотекам. Хорошие новости в том, что вы все равно можете их использовать. Так почему бы и нет? Вот пример двухгодичной давности: http://my-clojure.blogspot.com/2011/06/web-clojure.html

    Но еще раз подчеркиваю: я с вами согласен в том, что инфраструктура, написанная именно на Clojure, не особенно зрелая, совсем уж больших ставок на неё делать не стоит, конечно. Но средние проекты на Clojure вполне можно писать. CRM-ы всякие, например. Этому и будут посвящены последние три занятия курсов.

    ОтветитьУдалить
  6. >> Если уж на то пошло, то, вероятно, под ваши требования подойдут всего два языка: Java и C#

    Даже не знаю, я бы так категоричен не был. Вот так навскидку казалось бы что и ruby/rails должны подойти (ну может тщательнее надо будет выбирать гемы которые можно использовать), и groovy/grails вполне подходит.

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

    Да и "требования" это такая штука которая может очень сильно меняться в зависимости от задач - вот мне и интересно в каких задачах можно будет получить выгоду от использования сильных сторон Clojure :) а в каких лучше (пока) не стоит.

    ОтветитьУдалить
  7. Насколько мне известно, для grails 2.x пока что плагинов не так уж и много, в сравнении с 1.х. Что до RoR, то после нескольких лет использования его для хобби-проектов у меня сложилось стойкое мнение: инфраструктура RoR слишком изменчива. С одной стороны, конечно, хорошо, т.к. проект идет вперед. С другой стороны, поддержка написанного кода становится неприятным занятием. Обычная практика рубистов: использовать только те гемы, в исходниках которых смог разобраться. Ну чтобы от автора не сильно зависеть. Вот это, на мой взгляд, очень серьезный минус в карму RoR. Даже Python/Django в этом вопросе как-то более устойчив.

    Да, еще. Все-таки фреймворки вроде RoR и все его подражатели сильно застряли в 2004-м году. Уже давно все стараются делать single-page applications, вовсю пишут хитрые (dart), нехитрые (TypeScript, GWT) и совсем уж бесхитросные (CoffeScript, etc.) языки, пытаются кое-как организовать UI-логикику (Backbone.js, Angular.js, ...) и вообще сделать аналог десктопа в браузере. Но RoR, похоже, это не касается. Всего-то год (или чуть больше, не помню уже) назад отказались от prototype в пользу jquery. Ё-маё, какой шаг вперед! (facepalm).

    Clojure, как и GWT, очень хорошо заточена для SPA-веб-приложений. Но сила Clojure все-таки не в этом. На Clojure приходят те, кого достала ООП-парадигма со всей её неуклюжестью, отстутсвием модульности и реюзабельности кода. У нас на работе я много рекламирую Clojure. Но апологеты Java постоянно говорят: "а мы так и на Java напишем". И вот фиг поспоришь, напишут! В три раза длиннее, в два раза медленнее, но напишут. И скажут, нафиг нам этот твой Clojure. Открываешь исходник, а там... мама дорогая! Первая мысль, что это все кто-то нагенерил. Оказывается -- нет, писано вручную, героическими усилиями. Кому-то эта ситуация кажется нормальной: заказчики довольны, т.к. получили продукт; начальство довольно, т.к. продукт оплачен; программисты довольны, т.к. получили зарплаты и премии. Для аутсорса подходит, короче. Но если у вас не бесконечное количество денег и времени, если вы пилите стартап или свой продукт, то в сторону Java/C# лучше вообще не смотреть.

    А вообще, Ruby -- хороший язык. Просто Clojure -- лучше! ;-)

    ОтветитьУдалить
  8. мне понравилась программа. рассмотрено как основы, так и все основные направления (генерация кода, обработка данных, веб/clojurescript, работа с java, паралельность). можно ещё бы было добавить ссылок на книги по Сlojure

    ОтветитьУдалить
  9. А как записаться и пройти этот курс?

    ОтветитьУдалить
  10. если можете - оповестите о начале курса на wwall@yandex.ru

    ОтветитьУдалить
  11. На данный момент курс находится в разработке. Ориентировочное время начала -- март 2013. Я оповещу о начале курса здесь, в блоге, и много еще где. Думаю, не пропустите :-)

    ОтветитьУдалить
  12. А что про разработку GUI для Desktop-приложений?
    Пытался в свое время приспособить QtJambi для этого,
    но не получилось менять внешний вид работающего приложения
    на лету без перезагрузок (плохо пытался). Сейчас использую
    seesaw (https://github.com/daveray/seesaw).

    При необходимости могу набросать какой-то материал по нему.

    ОтветитьУдалить
  13. Ну, объять необъятное у меня, видимо, не получится. Пока остановлюсь на том обьеме, что я уже запланировал. Я итак "режу по живому", выбрасывая из курса все, что может отпугнуть: лямбда-исчисление, метациклический интерпретатор, паттерн матчинг, монады, комбинаторы парсеров. Так что от десткопной гуйни пока что тоже воздержусь.

    ОтветитьУдалить
  14. Ого. А вы могли бы потом оставить где-нибудь списочек "выброшенных" тем, может быть с парой ссылок по каждой? Не уверен насчет всяких монад и лямбда исчислений, а вот например комбинаторы парсеров как-то жалко даже что выбрасываются :)

    ОтветитьУдалить
  15. Я вот думаю, если курсы пройдут успешно, то организую какой-нибудь второй уровень, для продвинутых. Туда и войдет вся эзотерика :-)

    Про комбинаторы парсеров рекомендую посмотреть сюда: https://github.com/youngnh/parsatron
    Для Clojure это самая красивая библиотека, кстати, монадическая. Потому и монады тоже стоило бы разбирать. Я вот написал свою библиотеку комбинаторов парсеров, без монад. И она выглядит далеко не так элегантно, как parsatron с монадами.

    ОтветитьУдалить