• Разработка ПО: факты против мифов

      Мифы – это попытки осмысления картины окружающего мира, присущие первобытной культуре.

      Материальное производство (обработка объектов физического мира) насчитывает десятки тысяч лет истории. Оно прошло путь от каменных пещер до современных небоскребов, от сигнальных костров до мобильной связи, от навигации по звездам до навигации по космическим спутникам. На этом пути был накоплен колоссальный объем знаний естественных наук: математики, физики, химии, географии, геологии, биологии и проч.

      То, что производят программисты, нематериально – это brainware, результат коллективного мыслительного процесса проектной команды, материализованный на одном из языков программирования. Программной инженерии чуть больше полувека. Если сравнивать с материальным производством, то необходимо констатировать, что разработка ПО пребывает еще в первобытном состоянии.

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

      Вот наиболее распространенные мифы и факты, которые их опровергают.
      Читать дальше →
    • Социнжиниринг в военной пропаганде



        Во время Второй мировой англичане достали личные дела командиров немецких подлодок. Вроде бы не очень важная информация для военных целей – лодки-то уже вышли на задания, что им сделаешь. Но к делу подключились тёртые специалисты по пропаганде. У союзников были ежедневные радиопередачи, и вот пример:
        — Мы обращаемся к вам, командир подводной лодки «U-507» капитан-лейтенант Блюм. С вашей стороны было очень опрометчиво оставить свою жену в Бремене, где в настоящее время проводит свой отпуск ваш друг капитан-лейтенант Гроссберг. Их уже, минимум, трижды видели вместе в ресторане, а ваша соседка фрау Моглер утверждает: ваши дети отправлены к матери в Мекленбург…
        Цитата из «Операция «Гроза» — И. Бунич
        Красота, правда? И, главное, в точности соответствует одному из базовых методов социнжинирингового проникновения внутрь инфраструктуры при направленной атаке.

        В общем, так получилось, что многие современные методы пиара пошли от наших, английских и немецких разработок времён Второй Мировой войны. И пока я писал книгу про то, как рассказывать людям о своей компании, понадобилось залезть для подтверждения и поднять пару исторических фактов. Заодно вскрылся отличный слой совершенно диких — ну или прекрасных — историй и методик убеждения. Про них и расскажу.
        Читать дальше →
      • Жаргон функционального программирования

        • Перевод


        У функционального программирования много преимуществ, и его популярность постоянно растет. Но, как и у любой парадигмы программирования, у ФП есть свой жаргон. Мы решили сделать небольшой словарь для всех, кто знакомится с ФП.


        В примерах используется JavaScript ES2015). (Почему JavaScript?)


        Работа над материалом продолжается; присылайте свои пулл-реквесты в оригинальный репозиторий на английском языке.


        В документе используются термины из спецификации Fantasy Land spec по мере необходимости.


        Arity (арность)


        Количество аргументов функции. От слов унарный, бинарный, тернарный (unary, binary, ternary) и так далее. Это необычное слово, потому что состоит из двух суффиксов: "-ary" и "-ity.". Сложение, к примеру, принимает два аргумента, поэтому это бинарная функция, или функция, у которой арность равна двум. Иногда используют термин "диадный" (dyadic), если предпочитают греческие корни вместо латинских. Функция, которая принимает произвольное количество аргументов называется, соответственно, вариативной (variadic). Но бинарная функция может принимать два и только два аргумента, без учета каррирования или частичного применения.

        Читать дальше →
      • Виды тестирования и подходы к их применению

          Из институтского курса по технологиям программирования я вынес следующую классификацию видов тестирования (критерий — степень изолированности кода). Тестирование бывает:
          • Блочное (Unit testing) — тестирование одного модуля в изоляции.
          • Интеграционное (Integration Testing) — тестирование группы взаимодействующих модулей.
          • Системное (System Testing) — тестирование системы в целом.
          Классификация хорошая и понятная. Однако на практике выясняется, что у каждого вида тестирования есть свои особенности. И если их не учитывать, тестирование станивится обременительным и им не занимаются в должной мере. Здесь я собрал подходы к реальному применению различных видов тестирования. А поскольку я пишу на .NET, ссылки будут на соответствующие библиотеки.
          Подходы к тестированию
        • Обзор инструментария для нагрузочного и перформанс-тестирования

            Как говорят иные отважные люди: «От dev до prod — всего один шаг». Люди опытные добавляют, что шаг этот называется «тестирование», причём самое разнообразное, и нам просто нет смысла им не верить.



            Нагрузка имеет значение: водитель этого грузовика умудрился обрушить мост весом своего ТС, счёт за восстановление составил примерно $21.3M. К счастью, тестирование ПО обходится дешевле!

            Конечно, говоря о тестировании, нужно понять, с чем и за что мы боремся. Мы сознательно ограничили себя и решили сегодня поговорить исключительно про нагрузочное тестирование и тестирование производительности: темы, полярно удалённые друг от друга, крайне интересны в самом практическом выражении. Рассмотрим инструменты для того и другого, не привязываясь к какому-то конкретному стеку технологий, так что не удивляйтесь соседству Яндекс.Танк и BenchmarkDotNet!
            Читать дальше →
          • Кто все эти люди? Давайте спросим К50


              Привет, Хабр. Не будем лить воду до ката, сразу приступим к делу. Оптимизатор ставок в контекстной рекламе платформа К50 предлагает своим клиентам инструменты для увеличения эффективности рекламы. Большая часть имеет отношение к онлайн-среде, что вполне логично, ведь речь идет о сетевых технологиях. Для компаний, у которых обращения по телефону составляют 30% (а в некоторых тематиках – до 70-80%) от общего числа входящих обращений, данных для анализа рекламы было недостаточно. Именно для таких клиентов К50 решили разработать сервис, чтобы получить детальную информацию по каждому звонку, включая его длительность, запись, ключевое слово и цепочку событий-визитов, которая и привела клиента. Звучит сложно, но реализовано это было достаточно оперативно благодаря готовым компонентам Voximplant (ну, чуть-чуть себя похвалили, простите).
              Сорвать покровы бесплатно без регистрации и SMS
            • Как я перестал любить Angular

              Вступление


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


              На дворе 2017ый год и для каждого нового продукта/проекта встает вопрос выбора фреймворка для разработки. Долгое время я был уверен, что новый Angular 2/4 (далее просто Angular) станет главным трендом enterprise разработки еще на несколько лет вперед и даже не сомневался что буду работать только с ним.


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


              Дисклеймер: данная статья строго субъективна, но таков мой личный взгляд на происходящее и касается разработки enterprise-level приложений.

              Читать дальше →
            • Concurrency структуры в .net. ConcurrentQueue изнутри

                ConcurrentQueue можно отнести к lock-free конкурентным структурам данных. В ее реализации нет блокировок (lock, Mutex…) и реализована она с использованием:
                — классической функции CompareExchange;
                — SpinWait
                — volatile (используется как memory-barrier)
                В основу ConcurrentQueue заложена структура ring-buffer (кольцевой буфер).
                Читать дальше →
                • +12
                • 16,3k
                • 4
              • Быстрые релизы огромного масштаба

                • Перевод
                Со временем в софтверной индустрии придумали несколько способов более быстрого и безопасного выпуска качественного кода. Многие основаны на идеях вроде непрерывной интеграции, непрерывной поставки ПО, гибкой методологии разработки, DevOps и разработки через тестирование. Все эти методологии объединяет одно: они позволяют разработчикам быстро выпускать код безопасными, небольшими, последовательными шагами.

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

                В течение многих лет мы обновляли фронтенд Facebook трижды в день, используя простую стратегию веток master и release. Инженеры избирательно выбирали из ветви master изменения в коде, которые прошли ряд автоматизированных тестов, для включения в ветвь release, откуда происходили ежедневные обновления. В целом, таким способом выбиралось от 500 до 700 изменений в день. Раз в неделю мы отрезали новую ветвь release и собирали изменения, которые не отобрались в течение недели.


                Читать дальше →
                • +29
                • 13,6k
                • 7
              • Управление разработкой технологически сложных интернет-приложений в условиях острой нехватки времени

                Вступление


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


                В заметке так же рассматривается больной вопрос трудностей с выплатой зарплаты и как их можно эффективно решать.

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