ADD-2012 — передний край разработки
Был на ADD-2012. Посмотрел на передний край разработки. Не на тот, где гиганты презентуют новые решения, и не на высокую науку, а на тот, где практики работают и мыслят о движении вперед. Где рассказывают о своих идеях.
Вообще тут нужно отступление об устройстве мира разработки. Многим представляется, что там есть форпост в лице известных и успешных гигантов разработки, таких как Microsoft, Google, Oracle и им подобных,откуда исходит все новое, а остальные — они просто этим пользуются. Как источник новых идей еще рассматривают науку, из которой тоже могут приходить новые идеи, которыми эти гиганты тоже пользуются. Но не нашу науку, а западную, естественно.
Так вот, реально дело обстоит совсем не так. Причина этому — в творческом характере разработки. Я вполне согласен с достаточно старой и известной теорией Jack W.Reeves What is software design (русский вариант), что разработка ПО соответствует проектированию в других отраслях. А потому все, кто занимаются разработкой — они порождают новые оригинальные идеи, а вовсе не следуют чужими путями. Естественно, при этом идет массовое заимствование, использование чужих идей в своих разработках — но комбинации тоже являются оригинальными. Если смотреть на аналогии вне IT, то ближайшей, на мой взгляд, является рынок бытовой электроники, на котором сотни фирм производят множество мобильников, телевизоров, пылесосов и других разнообразных вещей, каждая из которых спроектирована более или менее уникальным образом, чем-то отличается от других, и потому идеи, которые при ее проектировании были придуманы — могут представлять интерес. А в IT это же можно сказать про каждую разработку, потому что программный продукт — это индивидуальное, а не массовое производство.
Интересно, что заблуждение об отсутствии интересных идей в повседневной работе разделяется и большой частью самих разработчиков. И не только теми, кто реально воспроизводит в своей работе чужие идеи, или просто делает рутинную работу, решая в моменте сиюминутные задачи — это заблуждение разделяют и те, кто порождает новые идеи в своей работе. Они не кажутся им интересными и стоящими внимания других, стоящими рассказа на конференциях. Такой вот парадокс.
Но — не все таковы, и ADD — это площадка для тех, кто хочет рассказать о своих новых разработках и идеях, часть из которых еще только предстоит реализовать. И они, кстати, совсем не боятся, что эти идеи кто-то украдет. Потому что если идеи сильно понравятся — то люди, наоборот, придут к ним, чтобы участвовать в реализации совместно. А если идеи окажутся уместными в другом продукте, другой области, то это тоже хорошо и сделает мир лучше. А еще, что важно — это идеи практиков, работающих и выпускающих реальные продукты. И они обычно представляют — чего стоит довести эти идеи до практической реализации. И это придает их выступлениям вес.
Еще там рассказывают об опыте использования совсем новых или даже разрабатываемых продуктов. И это — тоже очень ценно, потому что применение нового продукта для решения практических задач — это совсем не то, что презентация продукта, там вскрывается множество нюансов и особенностей. К тому же, если продукт открытый, первые пользователи часто становятся со-разработчиками. А продуктов — их появляется много, потому как разработка сосредоточена не только в фирмах-гигантах, она сейчас распределена по площади, и многие программисты, делая свои заказы, создают также инструменты для себя, делая их общедоступными.
Ну а участники — они слушают. Но слушают активно — обсуждая в перерывах, подавая активные реплики во время выступлений, высказывая альтернативные точки зрения. Кстати по высказыванию альтернативных идей в репликах из зала эта конференция — наиболее живая.
Сам я в этот раз не выступал — потому что сейчас занимаюсь проектированием систем, а не разработкой и потому мои идеи более уместны на других конференциях. Так что я был просто в роли наблюдателя, смотрел, что происходит на переднем крае разработки. К сожалению, только второй день — в первый была несдвигаемая встреча на работе, увы. Поэтому мои впечатления явно неполны. Что делать…
Так вот, если говорить об основных темах и впечатлениях для меня, то это новые языки и NoSQL базы данных. Темы не новые, но они интенсивно развиваются, и это развитие — интересно смотреть. Об этом было много докладов. Если говорить об языках — то это новый язык Kotlin, который делает JetBrains для JVM, это развитие Groove, Scala, Nemerle, отчасти F#. И это только в один день конференции. Интересно, что в рассказе про Kotlin сказали, что новый язык для JVM независимо начали делать JetBrains, RedHat и Eclipse. А на докладе про Groove докладчика спрашивали — стоит ли сейчас начинать его использовать, или лучше дождаться Kotlin.
А еще — если в одних докладах про Scala учитывают, что часть аудитории ее не знает и делают приличное введение, то в других — уже используют Scala как общеизвестный язык, на котором удобно давать компактные примеры для пояснения мыслей докладчика. Это как раз то самое движение переднего края отрасли в ощущениях.
Про NoSQL базы данных — рассказывали об опыте использования конкретных баз, которых много, со своими плюсами и минусами, область интенсивно развивается и безусловных лидеров там нет.
Еще есть все более развивающаяся тема принципиально другого подхода к разработке, при которой принципиально учитывается ненадежность железа и его сбои — речь идет о высоконагруженных приложениях, работающих в распределенной среде, в кластерной архитектуре, в которой отдельные узлы статистически могут выйти из строя, и выходят. А еще — они могут падать из-за ошибок программистов разных уровней. На работу именно в такой среде ориентированы как многие NoSQL базы данных, так и архитектуры на основе модели акторов — Erlang, Akka. Что интересно, когда на подобном железе работают и традиционные промышленные базы данных, например, Oracle, то вопросы надежности и замены узлов они берут на себя, обеспечивая дублирование или подобные вещи и выдвигая требования к конфигурации. И программист может работать в парадигме абсолютно надежной среды, о которой позаботятся админы. А вот сейчас от такого подхода начинают отказываться. Такая надежность оказывается несоразмерно дорогой по сравнению с ущербом от потерь. Поэтому разработчику предлагается самому о ней позаботится на верхнем или среднем уровне. Например, заказать дублирование некоторых данных на нескольких узлах. Или для критичных входящих запросов — позаботится о проверке, что запрос был принят и обработан, а не пропал по причине крэша ноды системы, а если нет — запустить еще раз. И эта парадигма начинает распространятся из социальных сетей, где надежность, в общем-то, не слишком важна, в область таких приложений как, например, электронные аукционы. Кстати, разработка в облаке тоже не дает надежности — в датацентры амазона, например, попадают молнии, выводя их из строя вместе с данными, и оказывается, что такие кейсы в модель надежности заложены не были.
Еще было две актуальные темы — разработка мобильных приложений и разработка в облаке, но на эти доклады я не ходил — потому что из 3 треков надо было выбирать. Так что тут рассказать не могу, кроме очевидной вещи, что мобильная разработка все больше сближается с обычной, благодаря распространению планшетов и нетбуков устройства образуют практически непрерывный спектр…