суббота, 24 апреля 2010 г.

Qcon 2010. День третий

С запозданием заканчиваю делиться впечатлениями от поездки на Qcon-London 2010. Кажется, что на третий день спихнули самые сомнительные доклады, чтобы так сказать не потерять аудиторию в первые два дня. А может и нет.

Создатель Erlang рассказывал про Erlang. :) Прикольный дядька оказался, говорил много правды :) В общем, всем идти расширять сознание и учить Erlang. Нет правда. Я уже пошел.


После обеда Ральф Джонсон снова вещал со своего высокого уровня сумрака абстракции о "шаблоне языка для параллельного программирования". Он и еще несколько гуру пишут книгу на эту тему, а университеты инвестируют в это направление. Короче, года через 2-3 (4-5?) можно ожидать новой модной тенденции в сфере параллельного программирования. Хотя с другой стороны чем им Erlang не угодил?


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

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


Ну вот и всё. Ждем Qcon в Сан-Франциско и, конечно, JavaOne!

пятница, 23 апреля 2010 г.

QCon 2010. День второй

Второй день начался с презентации Ральфа Джонсона (да, того самого). Доклад показался мне слегка занудным и скучноватым - видимо профессоры в computer science на седьмом десятке переходят на 5й уровень сумрака такой высокий уровень абстракции, на котором понимать их становится тяжело. Тем не менее, пара мыслей мне показалась интересной:

  • Капитал в ИТ смысле - это не только программное обеспечение, но и знание о том, как оно работает. Сразу вспоминаются слова "документация", "спека", "вики-странички", правда? )
  • Признание кода "legacy" - расписка в собственной некомпетентности по отношению к нему. Когда не хватает знаний об используемых там технологиях или архитектуре (функциональной и инфраструктурной).
  • Скоро программисты будут работать с программами, которые старше их самих. Прям мурашки по коже )


Следующий доклад был у другого апологета. Трек, который начинал Мартин, обещал быть малочисленным, поэтому комнату под него выделили маленькую. А послушать первый доклад пришло много. Как следствие - все полтора часа слушал на ногах, стоя в дверном проеме. Может быть поэтому, а может и потому что видеоряда не было (Мартин просто вещал в народ), доклад показался мне скучным. Несколько философских вещей, которые заставили задуматься (наверное еще что-нибудь напишу по этому поводу):

  • Подумай, где ты работаешь - приносит ли это пользу людям. Становится ли от этого лучше планете.
  • Женщины в ИТ - почему их так мало? Это ненормальное явление и с ним надо бороться. Правда, пока неизвестно как.


Секция "Программное обеспечение в 2015" привлекла меня парой докладов. Первый был о смартфонах. К моему удивлению, спрогнозировали на удивление мало. По сравнению с текущими устройствами, в их потомках появятся датчик температуры, давление, влажности (а оно надо?) и сенсоры (вроде распознаватели отпечатков пальцев - и в топку пароли!). Отметили зоопарк технологий на сегодняшний момент (альтернативные Java и С++, Object C), слабость фреймворков (нет MVC), неприменимость относительно удачных десктопных платформ (Gears, Air, Flash) на мобильных устройствах.

Еще в будущем нас ждет:

  • производительность на смартфонах сравнимая с современными серверами (!)
  • управление голосом, перевод "на лету"
  • использование устройства как пропуск в здение, метро, как платежное средство

Короче, вполне закономерные и эволюционные вещи. Революция уже произошла.


Про программирование Java Virtual Machine рассказывал Alex Buckley. Это действительно огромный труд про написанию подобного приложения. Приводились примеры различных оптимизаций, которые JVM делает. Делается предположение, что JVM и дальше будет увеличивать свое влияние вплоть до "Universe VM". Уже сейчас можно (нужно?):

  • юнит тесты писать на Scala
  • бизнес-логику на Java
  • вэб-приложения на JRuby
  • конфигурационные скрипты на Jithon

Складно :)


Следующему докладу я посвятил отдельную запись.


В конце второго дня был доклад человека, который называет себя "упрощателя софта". Действительно, современные многозвенки иногда производят впечатление артиллерийской установки, бьющей по голубям на крыше. И голуби разлетаются и крышу разносит и люди страдают от осадков. Главный посыл когда проектируете многозвенку - "задумайтесь, оно надо?". Рекомендую посмотреть презентацию и/или видео, это определенно взгляд на многозвенки с другого угла.

суббота, 17 апреля 2010 г.

[Sun] Tech Days 2010

Побывал на tech days 2010. Хотелось сравнить с прошлогодней, особенно в свете всеми известных событий. Ну и на Джеймса Гослинга хотелось посмотреть.

День первый

Пленарка обещала быть интересной: 0 будущем Java в Oracle должен был рассказать Сам. Но не рассказал. Вместо этого почти 2 часа нас снова пичкали JavaFX (доколе?). Половина докладов была один-в-один прошлогодние, что добавляло скуки. Один из топ-менеджеров Oracle, в задачу которого я так понимаю входило "завести" аудиторию, с ней не справился и скучно вещал ничего не обещающие утверждения о том, что "с Java в Oracle все будет хорошо, потому что мы ее любим и ценим". Единственное что было услышано мной в первый (и не последний) раз - о closures в JDK7. 

Затем я отправился в секцию Solaris, где название звучало как обещание озвучить roadmap для Solaris. Опустив "рекламу" (Solaris это надежность, масштабируемость и защищенность), я вынес главное утверждение доклада - в рамках Oracle будут развиваться и Solaris и Linux. Без расставление акцентов. Оба.

Дальше прослушал пару стендовых докладов. JetBrains рассказывали про TeamCity. Ничего нового не узнал. TeamCity быстр удобен и вообще мне нравится :) Потом предствитель OpenJDK (все тот же Sun) рассказывал как собрать OpenJDK самому. Мало что запомнилось, помимо того, что это непросто и займет часы.

После обеда Саймон рассказывал про скриптовые языки в JVM. Запомнилось "Выбирайте  язык исходя из поставленной задачи, JVM всё стерпит". И еще "создатель Groovy признался, что он бы не придумал Groovy, если бы в то время была Scala". Учить Groovy сразу расхотелось :)

Николай Иготти как и в прошлом году рассказывал про VirtualBox. Продукт определенно неплохой, попробую когда начнет поддерживать MacOS как гостевую систему.

В секции стендовых докладов рассказывали про Sun Java Realtime System. За 20 минут успели рассказать что из себя она собственно представляет, но ничего нового я не услышал. Была отличная статья на английской про Java RTS, но ссылку не помню. Сановская реализация сейчас основана на JDK 5 и работает на всех Solaris и на real-time kernel Linux.

День второй

На второй день слушать про JavaFX на пленарке не было никакого желания, поэтому я выбрал сон :). А день начался со стендовых докладов. JetBrains рассказали что эксперимент с бесплатной IDEA был признан успешным, что они дальше будут портировать больше функциональности из платной версии в бесплатную. Еще сказали что дальнейшее развитие видят в минорных вещах, крупный функционал уже сделан. Порадовали проектом IDE для разработки под IPhone. Давно пора :)

Доклад о новых фишках в JDK7 ребята из Sun рассказали неплохо. Спровоцировали пару холиваров и блестяще их парировали пригласив всех в онлайн конференцию по JDK. А вообще, здесь описано лучше и объемнее чем это могу сделать я.

В секции Solaris рассказывали про "многоядерный мир" и как в нем следует разрабатывать приложения (для Solaris, конечно). Было неинтересно, я запомнил только что нужно использовать специальную солярную функцию для выделения памяти, а не malloc.

JetBrains хвастались о MPS. Штука интересная, непростая и наверное полезная. Осталость только придумать где бы ее применить да еще при желании не ломая старое, а встраиваясь в него. С последним пока непонятки... Задумался, является ли Google Protobuf MPS или нет.

Снова Sun рассказывал про новый сборщик мусора как и в прошлом году. В этот раз доклад был менее информативен в технических деталях, а потому зацепил не очень. Главное, (в чем я почему-то заблуждался) это то, что Stop-the-world пауза вызывается для сборок и молодого и старого поколений, хотя сами поколения для G1 достаточно условны. Пообещали что в JDK7 будет стабильная версия. Хотя у меня и теперешняя не падала (ну разве что в IDEA).

И напоследок был интересный доклад про "внутренности JVM". То есть, я думал, что он будет про внутренности. А нам рассказали про оптимизации, которые JVM делает во время JIT компиляции в runtime. Давно хотел это услышать из первых уст. Заниматься микро оптимизациями (вроде замены StringBuffer на StringBuilder) расхотелось совсем. У JVM всё равно получится лучше. Главный посыл - писать код как все, как рекомендуют гуру и лучше не изобретать велосипедов. Потому что JVM оптимизаторы тренируются на похожем коде библиотек, которые все используют.

Ну а дальше были выходные с отличной и нехарактерной для Питера солнечной погодой...

четверг, 15 апреля 2010 г.

Архитектурные качели

Проектируя систему помимо функциональных и нефункциональных требований, архитектор должен держать в уме ещё и различные "best practices". Вроде слабого связывания и повторного использования.

Идеальное слабое связывание - набор компонент, которые ни от кого (кроме себя) не зависят. :) Утопия. Как только 2 компонента начинают иметь общий функционал, этот функционал выносится в отдельный компонент. Эта итерация повторяется до тех пор пока каждый компонент не начинает исполнять свою уникальную задачу. Казалось бы, все хорошо. И связывание слабое и повторное использование максимальное. На деле всё не всегда так. Операцию по выделению дубликатов можно проводить очень долго, спускаясь по уровню декомпозиции все ниже и ниже. В результате может получится "экономия на спичках" когда небольшой и простой функционал (например логирование) выделяется в отдельный компонент, который после выделения становится чрезвычайно негибким в плане изменений и настроек под конкретный компонент, который его использует.

Поэтому качели "слабое связывание <-> повторное использование" должны оставаться в равновесии, без перекосов.

воскресенье, 28 марта 2010 г.

Qcon 2010. День первый

Вводное слово было у Роберта Мартина, который видимо был призван задать позитивный настрой на все три дня конференции. Собственно, у него это получилось. Роберт с такой американской экспрессией рассказывал, как надо писать хороший код. Нового почти ничего не сказал, все те же прописные истины:

  • Функции - небольшой размер (1-4 строки - это нормально, больше - уже много :) )
  • Аргументы функций - в идеале 0. 1 нормально, 2 уже плохо, а 3+ вообще беда. Особняком стоят аргументы boolean - их вообще быть не должно (2 метода с двумя вариациями в названии замен)
  • Имена - чем больше видимость тем длиннее имя
  • Классы - 200-300 строк, 10-30 методов, 0-6 полей
  • тесты, продолжающаяся интеграция, парное программирование

Узнал, что моя обычная практика при внесении изменений в код (затронул класс - пофикси в нем все косяки которые там есть), затронул пакет - если есть что в нем улучшить - улучши. Эта практика небольших инкрементальных улучшений в "бэкграунде" - оказывается называется "Boy Scout Rule". Блин, может я еще что-то делаю, что как-нибудь прикольно называется, а я этого не знаю? :)

Еще новое слово, которое похоже будет все чаще звучать - Craftsmanship. В манифесте собственно все сказано, идея мне нравится, буду пользоваться.

В общем, было весело :) Запала хватило на весь день :)


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

Второй доклад был больше о функциональном программировании в контексте параллелизма. По факту - о F# и о том, насколько лаконичнее в функциональных языках синтаксис. Презентация была достаточно информативна, правда ничего выделить не могу.


Интригующее название "The Craftsman Learns" заставило меня пойти на этот доклад после обеда. Докладчик сразу расположил к себе тем, что был босиком :) Узнал много нового:

  • Учиться это как плыть против течения. Если ты не плывешь вперед, тебе кажется что ты стоишь на месте, но по факту ты движешься назад
  • Спрашивать 5 раз "почему? зачем?" над каждой непонятной вещью
  • Проговаривать вслух вещи над которыми раздумываешь. Рассказать мучающую тебя проблему коту или мягкой игрушке - это может помочь не только сформулировать вопрос, но и тут же ответить на него :)
  • Думая над логическими/рациональными вещами, подключать нерациональную (правую) часть мозга - рисовать, говорить, дрыгать ногой :)
  • Делиться тем, чему сам недавно обучился - это поможет самому лучше понять (как в том анекдоте)
  • После изучения теории нужна практика. Причем внимательная и вдумчивая (я часто грешу одной теорией)
  • Ментальные карты - я даже на iPhone скачал приложение, которое их рисует. Чувствую, что такой техники мне не хватало, частенько бумажки просто исписаны без какой-либо структуры. С другой стороны возникает ощущение структурирования неструктурированного - то есть усложнение непонятного :)

Еще была пара исключительно программистских советов вроде учить по одному языку программирования в год или прочитывать одну техническую книгу в 2 месяц.

Не могу не отметить веселую презентацию. Рекомендую посмотреть.


Про отношения разработчиков и специалистов по развертыванию и сопровождению (людей следящих за системами в работе, следящих за ними, отвечающие за их работоспособность, горячую замену, системные апргрейды, окружающую среду и т.п.) я послушал в 15.00. Ходил собственно чтобы послушать, насколько в Дойче все плохо. Оказалось, что в Дойче всё замечательно. Ну или не всё. Но на твердую четверку. Итак, чего не хватает до пятерки:

  • отделять конфиги от бинарников (у нас не везде)
  • сделать конфиги легкодоступными для просмотра
  • проверять конфиги (имеется ввиду на рабочих станциях перед релизом)
  • показывать значения всех конфигов (значения по умолчанию, даже если они в коде)
  • failfast - быстропадающее приложение. Оно должно падать как можно быстрее, если конфиг некорректен


Больше всего в первый день я ждал доклада про Skype. Рассказывал молодой парень с таким прикольный акцентом. :) Оказывается Skype это:

  • С и С++ в ядре и транспортном уровне
  • Delphi (c ума сойти!) в интерфейсе для Skype клиента
  • PHP на сайте и онлайн-магазине
  • Postgre - БД и около нее

Лейтмотив автора был "функциональной архитектурой должен кто-то заниматься". И "всё гениальное - просто". Больше он ничем не запомнился.


Так закончился первый день. Доклад "мамы Smalltalk" я в расчет не беру - он был уже после пива. Главное, что запомнилось из него - все крутые вещи были придуманы в 70х. Просто тогда у них железа нормального не было :)