• Быстрорастворимое проектирование

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

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

      Эта статья является расшифровкой моего доклада с конференции DotNext 2018 Moscow. Кроме текста, под катом есть видеозапись и ссылка на слайды.


      Читать дальше →
    • Google re:Work — Руководство: Постановка целей с помощью OKR (перевод)

      • Tutorial
      Ниже представлен перевод руководства Google re:Work — Guide: Set goals with OKRs. Я решил не писать с нуля еще один общий обзор по OKR, а просто перевести это, на данный момент, наиболее авторитетное руководство по OKR, и дополнить его ссылками и своими материалами по OKR, которые включают в себя несколько конспектов приложенного видео Google Ventures на русском языке.

      Дополнение: В ноябре 2017 года Рик Клау написал серию твитов, где существенно поправляет некоторые моменты из своей презентации 2012 года, видео которой представлено ниже: Google OKR Video пять лет спустя — обзор опыта Google Ventures по внедрению OKR (2012-2017)


      Введение


      Исследования показали, что приверженность цели помогает повысить производительность труда. Если посмотреть более глубоко, исследования обнаруживают, что постановка вызывающих и четко определенных целей может еще более повысить вовлеченность сотрудников в достижении этих целей. Google часто использует “цели и ключевые результаты” –  “Objectives and Key Results” (OKRs), стараясь поставить амбициозные цели и отследить продвижение к ним.

      OKR – краткий обзор


      • Цели амбициозны и могут ощущаться несколько некомфортными
      • Ключевые результаты измеримы и должны быть легко оцениваемы числом (Google использует шкалу от 0 до 1.0)
      • OKR являются общедоступными, так, что каждый внутри организации может видеть, над чем работают другие
      • “Попаданием в яблочко” для предварительной оценки OKR является достижениие 60-70% от нее. Если кто-то раз за разом полностью достигает своих целей, значит их OKR недостаточно амбициозны, и им нужно думать более масштабно.
      • Низкие оценки следует рассматривать как данные для уточнения дальнейших OKR.
      • OKR не являются синонимом оценки сотрудников.
      • OKR не являются коллективным списком следующих дел.
      Читать дальше →
    • Зоны/круги/сферы влияния, контроля и интереса — модель стратегии личного развития

        image В нескольких последних книгах неожиданно часто начала встречаться тема зон/кругов/ сфер влияния, контроля и интереса. При чем предметные области книг были разнообразные, а описания моделей очень похожи.

        Захотелось разобраться, результаты оказались довольно интересными, чем и хочу поделиться.
        Читать дальше →
      • Трудности на пути создания «универсальной» метамодели для моделирования предметных областей

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



          В итоге те принципы, на основе которых создаются нотации и языки моделирования предметных областей, выбираются разработчиками относительно произвольно. Понятно, что созданные таким образом языки моделирования имеют достаточно ограниченную область применения. Эту область должны были бы описать создатели языка, но разработчики, как правило, это требование игнорируют.
          Читать дальше →
        • Взаимодействие программных систем

            image

            В этой статье я поговорю об связях между программами. Связи между программами или, выражаясь иначе, взаимодействие программ друг с другом в подавляющем большинстве случаев заключается в получении данных одной программой от другой. Например, программа электронных торгов может запрашивать у какой-то другой программы курс валют. Или текстовому редактору может передавать введенный пользователем текст операционная система, используя драйвер клавиатуры. Программы могут предоставлять набор функций для взаимодействия – API. Или даже иметь целые механизмы взаимодействия, называемые протоколами, когда используется множество последовательных вызовов функций, например, для сложного согласования каких-либо параметров. Большим шагом вперед является создание универсальных структур – XML и Json. Программы могут взаимодействовать с другими программами и «невежливым» способом — без протоколов и открытых API: парся данные страницы в случае грабберов, внедряясь в исполняемые файлы как вирусы или, наоборот, убивая их в случае антивирусов.
            Читать дальше →
          • Криптономикон: великий баян, привет из 90-х и лучшая книга о технарях

              Эту книгу я перечитывал много раз, и в переводе, и в оригинале. Настолько много, что, рассказывая о ней, чувствую себя немного странно. Примерно как Капитан Очевидность, который вдруг осознал, что он Капитан.

              И тем не менее, рассказать о ней хочется, хотя бы потому, что роман Нила Стивенсона дает настолько уникальную смесь историй о войне, интернете, технологиях, программистах, шифровании и просто о людях, что задача найти что-то похожее обречена на полный провал. В том числе при попытках искать «что-то такое» в других книгах самого Стивенсона.

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

              Трудно научить криптографической безопасности даже умного человека. Особенно умного.

              Названный одним из характерных представителей стиля «киберпанк», Нил Стивенсон в «Криптономиконе» возвращается к реальности дня сегодняшнего и даже уходит в прошлое (вплоть до древних греков), в попытке оценить роль «технарей» в современном обществе. Книга была опубликована в 1999 году, и 17 лет назад казалось, что автор испытывает чрезмерный оптимизм по поводу влияния компьютеров и интернета на человечество, рисует реалистичную, но в чем-то утопию. Сейчас так уже не кажется. Милые артефакты 20-го века вроде Windows NT и BeOS совершенно не мешают актуальности вселенной «Криптономикона». Технологии ушли вперед, но люди… Люди почти не изменились, как в хорошем смысле, так и в плохом.

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

              • Translation
              imageКто-то считает музыку уделом избранных талантов, кто-то — набором физических закономерностей. Автор материала делает попытку объяснить знакомые каждому музыкальные термины, такие как тон, интервал, амплитуда, нота, октава, партитура, аккорд и так далее с помощью расчетов и технических обоснований. Ниже перевод оригинального текста.

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

              Все остальные правила для меня выглядят совершенно, ну просто абсолютно произвольно. Почему у нас есть 12 нот, но для их обозначения применяются только 7 букв? Откуда взялись знаки при ключе? Почему ни одну статью по музыке в Википедии просто невозможно понять, не прочитав сперва все остальные?
              Читать дальше →
            • Искусство написания простых и коротких функций

              • Translation

              Софт постоянно усложняется. Стабильность и простота расширения приложения напрямую зависят от качества кода.


              К сожалению, почти каждый разработчик, и я в том числе, в своей работе сталкивается с кодом плохого качества. И это — болото. У такого кода есть токсичные признаки:


              • Функции слишком длинные, и на них слишком много задач
              • Часто у функций есть побочные эффекты, которые сложно определить, а иногда даже сложно отлаживать
              • Непонятные имена у функций и переменных
              • Хрупкий код: небольшая модификация неожиданно ломает другие компоненты приложения
              • Плохое покрытие кода тестами или вообще его отсутствие

              Всем знакомы высказывания «я не понимаю, как работает этот код», «бредовый код», «этот код сложно изменить» и другие.


              Однажды мой коллега уволился, потому что пытался справиться с REST API на Ruby, который было трудно поддерживать. Он получил этот проект от предыдущей команды разработчиков.


              Исправление текущих ошибок создавало новые, добавление новых функций рождало новую серию ошибок, и так далее (хрупкий код). Клиент не хотел перестраивать приложение, делать ему удобную структуру, и разработчик принял правильное решение — уволиться.



              Такие ситуации случаются часто, и это печально. Но что делать?

              Читать дальше →
            • Особенности распределения фонда оплаты труда в больших предприятиях РФ

                Оказывается, в свободном доступе есть интересная информация от HeadHunter о повышении фонда оплаты труда (ФОТ) в 2015 году. Со страницы проекта "Банк данных заработных плат" идет ссылка "Сравнивайте зарплаты вашей компании с рынком".

                Прямая ссылка на pdf: Зарплаты в России. Итоги 2015 года.


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

                И вообще, многим придут на ум уже затертые шаблоны:
                • Надо не завидовать, а больше работать, и станешь таким же высокооплачиваемым топ-менеджером.
                • Не нравится – уходи и работай на себя / аутсорсь за валюту на западные компании / переезжай в другие страны.


                Но эти выводы и советы слишком уж лежат на поверхности.
                We need to go deeper.
                Давайте посмотрим, насколько же глубока эта не кроличья нора…
                Читать дальше →
              • Каково это — быть разработчиком, когда тебе сорок

                • Translation
                Примечание от переводчика:

                Этот пост был написан и опубликован на Medium разработчиком приложений Адрианом Космачевским из Швейцарии. Кроме подготовки перевода его публикации, я также пригласил и самого автора, Адриана ( akosma ), на Хабр, для того, чтобы он смог лично ответить на любые вопросы участников сообщества, если таковые возникнут. Думаю, для общего удобства при общении в комментариях с ним стоит использовать английский (и, при желании, дублировать на русском).



                Привет всем, я — сорокадвухлетний программист-самоучка, а это моя история.

                Пару недель назад я наткнулся на твит, в котором была картинка, прикрепленная ниже, и он заставил меня задуматься о моей карьере.

                image

                Эти размышления привели меня туда, откуда все начиналось.

                Я дебютировал в роли разработчика программного обеспечения в 10 часов утра 6 октября 1997 года, в городе Оливос, к северу от Буэнос-Айреса, в Аргентине. Был понедельник. Не так давно я праздновал свой 24-й день рождения.

                Мир в 1997 году


                Тогда он был немного другим. На веб-сайтах не было предупреждений об использовании cookie. Новаторскими в сети были сайты вида Excite.com, а моим любимым поисковиком был AltaVista.

                Мой электронный ящик имел вид kosmacze@sc2a.unige.ch и был расположен на личном веб-сайте, который размещался по адресу http://sc2a.unige.ch/~kosmacze. Тогда мы еще оплакивали принцессу Диану, а Стив Джобс только-только вернулся на роль CEO и убедил Microsoft «вбросить» в Apple Computer 150 миллионов долларов. Digital Equipment Corporation подала в суд на Dell, останки Че Гевары вернули на Кубу, только начался четвертый (!) сезон «Друзей». Был убит Джанни Версаче, скончались Мать Тереза, Рой Лихтенштейн и Жанна Кальман. Люди зависали за Final Fantasy 7 на PlayStation, будто бы были наркоманами, Би-Би-2 начал вещание телепузиков, а Кэмерон только собирался показать миру свой «Титаник».
                Читать дальше →
              • Диалоги о шумах и антропоморфизмах (в поисках человека и сознания)

                  Последние несколько дней в мире идет оживленная дискуссия на тему победы ИИ над человеком в игре Го. В комментариях можно часто встретить споры о том, является ли эта программа интеллектом, подобен ли он человеку — и что вообще такое этот самый интеллект и сознание, и как отличить человека от кофеварки. Я, как и вы, не знаю ответов на эти вопросы, и вместо этого поделюсь с вами весьма любопытной, на мой взгляд, дискуссией на эту тему — взятой с одного закрытого от внешнего мира сайта, где она имела место быть пару лет назад.

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

                  Приятного чтения.
                  Читать дальше →
                • Нейрореволюция в головах и сёлах

                    В последнее время всё чаще и чаще слышишь мнение, что сейчас происходит технологическая революция. Бытует мнение, что мир стремительно меняется.



                    На мой взгляд такое и правда происходит. И одна из главных движущих сил — новые алгоритмы обучения, позволяющие обрабатывать большие объёмы информации. Современные разработки в области компьютерного зрения и алгоритмов машинного обучения могут быстро принимать решения с точностью не хуже профессионалов.

                    Я работаю в области связанной с анализом изображений. Это одна из областей которую новые идеи затронули сильнее всего. Одна из таких идей — свёрточные нейронные сети. Четыре года назад с их помощью впервые начали выигрывать конкурсы по обработке изображений. Победы не остались незамеченными. Нейронными сетями, до тех пор стоящими на вторых ролях, стали заниматься и пользоваться десятки тысяч последователей. В результате, полтора-два года назад начался бум, породивший множество идей, алгоритмов, статей.

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

                    Кто лишится в ближайшие лет десять работы, а у кого будут новые перспективные вакансии.
                    Читать дальше →
                  • Создание архитектуры программы или как проектировать табуретку

                    Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

                    К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

                    Хотелось разобраться, что вообще в себя включает процесс создания архитектуры программы, какие задачи при этом решаются, какие критерии используются (чтобы правила и принципы перестали быть всего лишь догмами, а стали бы понятны их логика и назначение). Тогда будет понятнее и какие инструменты лучше использовать в том или ином случае.

                    Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
                    Читать дальше →
                  • WTM (Waveform temporal memory) – модель нейронной сети для решения задачи адаптивного поведения



                    Представляю на рассмотрение хабрапользователей модель нейронной сети, разработанную для решения задачи адаптивного поведения (и её подзадач: распознавания и прогнозирования последовательностей).
                    Читать дальше →
                  • MaidSafe — распределённая система хранения и обработки данных

                    • Translation

                    MaidSafe – интересная распределённая система передачи и хранения данных. Мне понравилась эта идея и я захотел поделиться с общественностью. Компания MaidSafe зарегистрирована в Шотландии, и разрабатывает свой проект при поддержке спонсоров.

                    Обзор платформы


                    MaidSafe состоит из двух главных компонентов – сеть и клиентские приложения. Сеть находится в разработке, и планируется к выходу к концу 2014 года (уже доступны исходники для компиляции на github. Также готовятся к выпуску приложения, которые на примере покажут использование SAFE API и позволят всем создавать свои собственные приложения.
                    Читать дальше →
                    • +21
                    • 22.2k
                    • 9
                  • Война, мир и ABBYY Compreno: продолжение нашего романа с Толстым

                      Недавно мы рассказывали здесь о том, как делался проект «Весь Толстой в один клик». С помощью 3249 (трех тысяч двухсот сорока девяти) волонтеров и 1 (одной) хорошей OCR-технологии мы оцифровали 46820 страниц 90-томного собрания сочинений писателя, тщательно вычитали их и выложили во всеобщий доступ.

                      Но если вы думали, что наш «роман с Толстым» на этом закончился, то вы ошибались – оцифровав тексты писателя, мы начали исследовать их при помощи технологии извлечения информации ABBYY Compreno – не пропадать же такому богатому материалу. О том, что дал нам «text mining Толстого» и где теперь используются полученные результаты, читайте дальше.

                      Введение


                      Главной целью проекта «Весь Толстой в один клик» было сделать творчество Толстого по-настоящему всеобщим достоянием, чтобы все вышедшие из-под его пера тексты были доступны в один клик в любой точке Земли. Как, кстати, и завещал сам автор, еще при жизни отказавшийся от всех прав на свои тексты (да-да, анонимус, Лев Толстой знал про копилефт и опендату задолго до этих ваших интернетов и Ричарда Столлмана).

                      Однако возможность загрузить книжку в удобном формате в ридер или планшет – не единственный плюс оцифровки. Теперь тексты Толстого можно не только читать, но и «измерять», то есть исследовать разными количественными методами, используя весь арсенал средств автоматической обработки текста (АОТ, она же NLP). Ведь если у вас есть все тексты писателя в электронном виде, даже с помощью одного-двух грамотных поисковых запросов вы можете получить любопытные данные, на добычу которых в иные времена мог потратить недели и месяцы упорного труда какой-нибудь литературовед. А уж если у вас к тому же имеется продвинутая технология анализа естественного языка, то есть шансы сделать серьезное филологическое открытие (даже не будучи филологом). Ниже я расскажу, что удалось намерить и узнать нам, но перед этим – пара слов о том, кто, как и зачем занимается автоматической обработкой художественных текстов и что интересного может при этом получиться.
                      Читать дальше →
                      • +33
                      • 12.7k
                      • 7
                    • WebTorrent: торренты через браузер. Без плагинов, чистый JavaScript



                        Теперь для скачивания и просмотра фильмов с торрентов не нужен отдельный торрент-клиент. Также как и для раздачи файлов по протоколу BitTorrent тоже не нужен отдельный клиент. Достаточно обычного браузера, поддерживаются Chrome, Firefox и Opera (десктоп и Android).

                        Всё это благодаря WebTorrent — гибриду BitTorrent и WebRTC. Скачивание и раздача происходят прямо через сайт. Встроенный плеер начинает показ фильма, как только скачано несколько процентов.
                        Читать дальше →
                      • Давайте поковыряем This War of Mine глубже: что в игромеханике?



                          Игра гениальная. Она ещё год назад взорвала кучу изданий тем, как быстро и эффективно доносит до игрока ужасы войны. Поэтому предлагаю забраться немного «под капот». Сразу говорю — игра не наша, и отношения к нам не имеет.

                          Вообще, я, пожалуй, стану на протяжении пары месяцев рассказывать про хардкор gamedev, точнее, того, что наши коллеги называют game science. Начну с простых и понятных вещей. С далеко не идеальной игромеханики, работающей при этом как часы. Или как удар в голову.

                          Итак, напомню: основная задача игры — погрузить человека в состояние «быть гражданским на войне и попробовать выжить», чтобы даже до самых отмороженных дошло, как это плохо. Соответственно, всё остальное строится именно вокруг этого. При этом сама по себе игра должна быть:
                          • Интересной.
                          • С простым порогом входа.
                          • Реалистичной для задач погружения.

                          Ясное дело, создатели немного намухлевали — но это становится заметно только после детального разбора. Ясно, что логика сеттинга иногда спорит с механикой и геймплеем. Ясно, что недостатков куча, но всё в целом — очень крутое. Поэтому поехали докапываться до мелочей.

                          Внимание, ниже немного спойлеров и много скриншотов (трафик).
                          Читать дальше →
                        • Окончательный вопрос что мы? куда мы движемся? и всего такого

                            Такие вопросы как: «Кто мы?» и «Куда мы движемся?» занимали философов всех времён, но в таких формулировках, и с помощью философии, получить на них ответ лучше чем «42» вряд ли когда-нибудь получится. А вот астрономии уже удалось ответить на вопросы «что мы из себя представляем?» и «куда мы движемся?» буквально.

                            image
                            Читать дальше →