• Как новые руководители разрушают доверенные им компании

      Эта статья – о рисках смены руководства в больших компаниях и характерных явлениях при попытках игнорировать закон эффективного управления собственностью:
      Эффективно управлять можно только той собственностью, которую мог бы создать сам.
      Кто не может создать, – будет только разрушать!
      И.А. Дедюхова, Кодекс Хамурапи
      Картинка для привлечения внимания читателей из поколений Y и Z:


      Краткое содержание


      Новый директор себе в подчиненные и советники пригласит своих «проверенных людей». Увеличение штата топ-менеджеров в условиях фиксированного ФОТ повлечет за собой сокращение рядовых сотрудников на значительный процент.
      Новый директор в первую очередь будет сокращать те подразделения, работу которых он не понимает. Под прессом психологического давления руководители этих подразделений возмут на себя обязательства самостоятельно разработать планы по сокращению и принять на себя все риски их реализации.
      Сокращения пройдут под флагом повышения эффективности, но для «непонятных директору» подразделений не смогут сформулировать критерии этой эффективности, кроме «минимизации затрат». Цель по минимизации затрат без дополнительных обоснованных ограничений – это цель по уничтожению, и не имеет отношения к настоящей оптимизации.
      Отсекая непонятные ему части компании (выводя в аутсорс и т.п.), директор попытается превратить компанию в ту, работу которой он полностью способен понять, которой он в полной мере способен управлять.
      Проблему нехватки знаний в технической области новый директор и его команда компенсируют «помощью» от западных консалтинговых компаний. Это приведет к ситуации внешнего управления, причем без всякой ответственности за диктуемые извне решения.
      Внешняя и внутренняя отчетность о работе компании до самого конца не будет показывать никаких признаков проблем, т.к. тому, кто принес плохие вести не выдают премию, а рубят голову.


      Читать дальше →
    • Суперсилы WinDbg для .NET-разработчиков

        Продолжая серию публикаций по докладам на конференциях, мы остановились на лучшем докладе DotNext 2016 Moscow, в которой Саша goldshtn Гольдштейн рассказывает о возможностях WinDbg для отладки .NET приложений. Этот действительно мощный инструмент позволяет решать задачи, с которыми не справляется встроенный отладчик Visual Studio.

        Особенно этот материал будет полезен тем, кому сложно смотреть доклады на английском языке, так как расшифровка переведена на великий и могучий!


        Читать дальше →
        • +36
        • 12,1k
        • 2
      • Биологические предпосылки деградации компаний



          Современные научные представления говорят о существовании у процессов функционирования человеческого мозга определенных особенностей, которые:

          • на личном уровне подталкивают к прокастинации;
          • в стартапе по мере его успеха и роста приводят к потере прежней творческой «внутренней атмосферы» и нарастанию бюрократии;
          • в больших компаниях приводят к «иерархическому регрессу».

          Благодаря этим особенностям мышления человека, среднее время нормальной жизни коммерческих компаний составляет 15 лет, а изначальные «Империи добра», типа Гугл и Яндекс, неумолимо со временем приобретают черты «Империй зла».

          Некоторые компании сопротивляются этому, а некоторые даже и не понимают, почему приходит в упадок их внутренняя корпоративная культура. Почему попытки привить хорошие и правильные принципы и практики организации бизнеса не дают ожидаемых результатов…
          Читать дальше →
        • Перевод: full stack разработчик — это миф

          • Перевод
          Вашему вниманию предлагается перевод любопытной статьи Скотта Хадфилда, CTO и со-основателя стартапа “Hello Pretty”. Сейчас в половине вакансий, связанных с вебом и серверной разработкой, встречается волшебная фраза “full stack”. Чаще всего с эпитетами вроде “джедай”, “супер-герой” и “ниндзя”. Кого ищут все эти люди, и кого им на самом деле удается получить в свою команду?
          Читать дальше →
        • Программирование как образ жизни

          • Перевод
          «Человек добился успеха, если он встает утром и ложится спать вечером, а в промежутке занимается тем, чем хочет»
          — Боб Дилан

          Я – программист по образу жизни. Я в одиночку работаю программистом, чтобы обеспечить себя интересной, полезной, гибкой и хорошо оплачиваемой работой. У меня нет инвесторов, я не собираюсь нанимать сотрудников, не говоря уже о том, чтобы стать следующим Google или Facebook. У меня нет личного самолета, и мое лицо вряд ли скоро появится на обложке Newsweek. Меня это устраивает.
          Читать дальше →
        • Детали test-first, которых так не хватало

            Все мы не раз слышали о test-first — философии разработки, которая призывает писать тесты раньше кода. Уверен, что любой, кто пытался применять этот метод на практике, сталкивался с тем, что у него просто не получается написать тест до функции (обычно в этом случае просто игнорируют эту проблему и локально нарушают test-first). Я считаю, что причина подобных провалов фундаментальна, и попытаюсь показать почему.

            Для начала следует уточнить, что здесь и далее я буду говорить про тестирование функции в широком смысле слова как тестирование некоторой условной примитивной единицы кода. Оставим в стороне вопрос, какую подобную единицу нужно тестировать (например, метод или класс), на дальнейший ход рассуждения эти детали влияния не окажут. Я буду использовать выражение «тестирование функции» в этом смысле на протяжении всей статьи.

            Вам может показаться, что индустрия давно разобралась со всеми проблемами, связанными с test-first, и причина всех возможных провалов лишь в том, что мы как разработчики не обладаем достаточной квалификацией для успешного применения нужных техник, а вовсе не в каких-то фундаментальных проблемах. Увы, здесь и там разные программисты задают одни и те же вопросы, как именно делать test-first, и получают порой невразумительные ответы. Думаю, без преувеличения можно сказать, что комьюнити по всему миру что-то подозревает, но многое остается недоговоренным.
            Читать дальше →
          • Коллекция практических советов и заметок по вёрстке

              CSS Refresher


              Это большая коллекция практических советов и заметок по вёрстке. Своеобразная памятка для тех, кто каждодневно использует CSS. Освещаются самые разные темы, от деталей поведения плавающих элементов до использования SVG и спрайтов. Проект постоянно обновляется, активное сообщество github также принимает в нем участие, там добавляются интересные замечания, о которых, возможно, вы и не слышали.

              От переводчика


              Приветствую всех, меня зовут Максим Иванов, и сегодня я подготовил для вас перевод заметок разработчика из Сан-Франциско Васанта Кришнамурти (Vasanth Krishnamoorthy) «CSS Refresher». Web-программирование одна из самых быстро развивающихся отраслей в наше время. Казалось бы, возьми какой-нибудь видеокурс на tuts+ и освой html-верстку, однако, как говорил разработчик Opera Software Вадим Макеев, выступая на конференции CodeFest, они все равно это делают плохо. Но давайте посмотрим, может мы итак все это знаем.

              Содержание


              1. Позиционирование (position)
              2. Отображение элемента в документе (display)
              3. Плавающие элементы (float)
              4. CSS селекторы
              5. Эффективные селекторы
              6. Переотрисовка и перерасчет
              7. CSS3 свойства
              8. CSS3 медиа-запросы
              9. Адаптивный web-дизайн
              10. CSS3 переходы
              11. CSS3 анимации
              12. Масштабируемая векторная графика (SVG)
              13. CSS спрайты
              14. Вертикальное выравнивание
              15. Известные проблемы

              Читать дальше →
            • Постановка задачи компьютерного зрения


                Последние лет восемь я активно занимаюсь задачами, связанными с распознаванием образов, компьютерным зрением, машинным обучением. Получилось накопить достаточно большой багаж опыта и проектов (что-то своё, что-то в ранге штатного программиста, что-то под заказ). К тому же, с тех пор, как я написал пару статей на Хабре, со мной часто связываются читатели, просят помочь с их задачей, посоветовать что-то. Так что достаточно часто натыкаюсь на совершенно непредсказуемые применения CV алгоритмов.
                Но, чёрт подери, в 90% случаев я вижу одну и ту же системную ошибку. Раз за разом. За последние лет 5 я её объяснял уже десяткам людей. Да что там, периодически и сам её совершаю…

                В 99% задач компьютерного зрения то представление о задаче, которое вы сформулировали у себя в голове, а тем более тот путь решения, который вы наметили, не имеет с реальностью ничего общего. Всегда будут возникать ситуации, про которые вы даже не могли подумать. Единственный способ сформулировать задачу — набрать базу примеров и работать с ней, учитывая как идеальные, так и самые плохие ситуации. Чем шире база-тем точнее поставлена задача. Без базы говорить о задаче нельзя.

                Тривиальная мысль. Но все ошибаются. Абсолютно все. В статье я приведу несколько примеров таких ситуаций. Когда задача поставлена плохо, когда хорошо. И какие подводные камни вас ждут в формировании ТЗ для систем компьютерного зрения.
                Читать дальше →
              • Книги для тимлидов и руководителей проектов

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

                  В отечественном IT я часто наблюдаю следующую картину: тимлидом часто становился лучший (?) разработчик из команды (aka 23-летний сеньор). А чтобы стать руководителем проекта (project manager) иногда достаточно просто знать английский и «павэрпойнт» на уровне пользователя. Это реалии отечественного аутсорсинга и с этим нужно как-то жить.

                  В итоге часто получается как-то так:
                  Потому что на десять сеньоров по статистике девять тупят.
                  Читать дальше →
                • 50 типичных ошибок проектирования игровой камеры (часть 2)

                  • Перевод
                  image

                  Эта статья — вторая часть перевода выступления Джона Нески (John Nesky) с GDC14.

                  Первая часть тут.


                  #26 Оставлять угол съёмки постоянным в то время, как персонаж бежит по склону


                  Техника заключается в том, чтобы, как и в предыдущем примере, определять изменение высоты пола перед персонажем. В случае, если высота выше или ниже текущей, можно немного изменить тангаж камеры. Однако если использовать для этих целей анализ наклона поверхности непосредственно под ногами игрока, можно получить неверную информацию, когда поверхность неровная. Поэтому лучше сделать рейкаст на некотором расстоянии впереди персонажа, чтобы получить что-то вроде усреднённого значения изменения высоты. Но и для этого способа характерна ещё одна проблема — рейкаст может легко спутать небольшую стену со склоном холма, поэтому использовать значение нормали в точке пересечения поверхности и рейкаста всё же нужно.
                  Читать дальше →
                  • +17
                  • 14k
                  • 1
                • Видео докладов Badoo с конференции Highload 2015

                    Наконец-то у нас появились видео выступления наших спикеров на Highload 2015, которые мы с удовольствием выкладываем.

                    Если у вас появятся вопросы к докладчикам, задавайте их в комментариях. Ребята на них обязательно ответят.

                    1. «Near-realtime аналитика событий в высоконагруженном проекте», доклад Александра Крашенинникова



                    Еще 3 отличных доклада
                    • +23
                    • 12,1k
                    • 1
                  • 8 принципов планирования разработки, упрощающих жизнь

                      Скажем прямо, русскому человеку планировать тяжело. Люди в России сильны импровизацией и умением собираться в критический момент, выдавая поразительные результаты. Но жизнь показывает, что команда программистов на подобной идеологии далеко не уедет. Героические усилия в одно время не смогут компенсировать пофигизм в другое.


                      Что общего у зомби-апокалипсиса и разработки ПО? Простые правила помогают пережить и то, и другое
                      Читать дальше →
                      • +6
                      • 34,1k
                      • 8
                    • Мастер-класс Бориса Вольфсона. Основы Agile

                      • Tutorial
                      image

                      Этот пост написан по мотивам мастер-класса Бориса Вольфсона (директора по развитию HeadHunter), посвященного (сюрприз!) основам Agile. Материал будет полезен всем, кто либо совсем не знаком с данной методологией разработки сложного ПО, либо имеет о ней смутное представление.
                      Читать дальше →
                    • 11 ошибок ваших бэкапов

                        Всех пользователей можно разделить на две группы: на тех, кто регулярно делает бэкапы и на тех, кто пока не начал их делать. Если вы относитесь ко второй категории, то это означает лишь то, что вы недостаточно хорошо или не в полной мере представляете себе количество и масштабы неприятностей, способных повредить ваши данные – кража, пожар, ураган, вирусы, баги программного обеспечения, поломки железа, ошибки пользователей и всё в таком духе. Ну, или ещё не сталкивались с прохождением «квеста» по восстановления данных после их потери (который, к сожалению, можно успешно пройти далеко не всегда). Как бы там ни было, лучше знать наперед, каких ошибок стоит избегать при резервном копировании, поэтому представляем вашему вниманию одиннадцать ошибок при создании бэкапа. Это даже не столько ошибки, сколько советы и перечень стратегий, которыми не следует пользоваться (в первую очередь, для пользователей Mac). Добро пожаловать под кат.


                        Читать дальше →
                      • FRP (functional reactive programming) на Bacon.js

                        Часто, при создании достаточно сложных приложений на JavaScript наступает тот момент, когда становиться совершенно непонятно почему приложение перестало работать как надо, или наоборот вдруг заработало. Cвязей между элементами приложения становится так много, что уследить за ними даже с хорошими дебаггером очень трудно. И вот диллема: с одной стороны есть хорошо известная методика создания приложений на JS, столь привычная и глубоко описанная, что недостатков мы уже как бы и не замечаем. С другой стороны есть масса библиотек предлагающих нам перейти на другую сторону попробовать что-то новое. К таким библиотекам относиться и Bacon.js, предоставляя реализацию FRP на JavaScript.
                        Читать дальше →
                      • Как изобрести велосипед и познакомиться с FRP

                          Недавно мне выпал шанс заняться веб-приложением для взаимодействия с интерактивной доской (!) для мобильных устройств (!!) на любом стеке технологий, как серверных, так и клиентских (!!!). На этапе прототипа задача представляла собой простейший графический редактор. Заказчик изъявил желание уметь рисовать ломаные каким-нибудь способом, круги, отрезки, произвольные кривые и добавлять текст. Все вроде бы просто, однако, наученный горьким опытом GoF, Фаулера и прочих апологетов всяческих паттернов, я сразу понял, что заказчик лукавит, и что уже через неделю-месяц после прототипа ему понадобится рисовать эллипсы, прямоугольники и кучи прочих ништяков. И все это точно надо будет делать разными способами. По крайней мере, для десктопа и мобил.

                          Собственно, можно все сделать в лоб (для прототипа-то), но выпали выходные, пауза в задачах текущего проекта, и я решил сделать все по-хорошему. И в первый же вечер — callback hell.

                          А потом…
                          Потому что на работе больше заниматься нечем

                          И вот так я изобрел велосипед...
                          • +14
                          • 17,6k
                          • 5
                        • 5 главных рисков при заказной разработке ПО

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


                            Читать дальше →
                            • +7
                            • 28,3k
                            • 1
                          • Действительно прозрачное использование WCF

                              Мотивация


                              Для desktop-мира wcf остаётся самым распространенным способом организации клиент-серверного взаимодействия в .net как для локальных, так и для глобальных сетей. Он гибок в настройке, прост в использовании и прозрачен.

                              По крайней мере, так должно быть. На практике добавление нового сервиса — это рутина. Нужно не забыть прописать конфигурацию на сервере, сделать то же самое на клиенте, нужно написать или сгенерировать proxy-класс. Поддерживать конфиги неудобно. Если сервис изменился, то нужно вносить изменения в proxy-класс. А ещё не забыть про регистрации в IoC-контейнере. И добавление новых хостов для новых сервисов. И еще хочется простой асинхронности. По отдельности всё просто, но даже для статьи я дописывал этот список уже трижды, и не уверен, что не упустил чего-нибудь.

                              Время автоматизировать. Простейший сценарий от создания решения до вызова wcf-сервиса выглядит так:
                              1. Install-Package Rikrop.Core.Wcf.Unity
                              2. Пишем ServiceContract и их реализации
                              3. На сервере и клиенте добавляем одну строку регистрации в IoC (конфиги править не надо)
                              4. Поднимаем хосты с двух строк
                                var assembly = Assembly.GetExecutingAssembly();
                                _serviceHostManager.StartServices(assembly);
                                
                              5. На клиенте резолвим IServiceExecutor<TService>. Эта обёртка служит для вызова методов сервиса и скрывает работу с каналом.
                              6. Можно пользоваться
                                var articles = await _myServiceExecutor.Execute(service => service.GetArticles());
                                

                              Как пользоваться и что внутри
                            • Достаточно Git-а, чтобы быть (менее) опасным

                              imageТы просто-напросто ненавидишь Git? Ты абсолютно счастлив с Mercurial (или, фу, с Subversion), но раз в месяц тебе приходится отважно сталкиваться с Git, потому что каждый, даже его чертова собака, теперь использует GitHub? Тебя терзают смутные подозрения, что половина всех команд Git на самом деле удалят всю твою работу навсегда, но ты не знаешь какие именно и не хочешь проводить три недели, углубляясь в документацию?

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

                              Я постараюсь излагать коротко, но также, чтобы это было потенциально полезно тем людям, кто вообще никогда не сталкивался с контролем версий, поэтому повсюду будет разбросан 101 совет. Не бойся! Я не думаю, что пользователи Mercurial понятия не имеют, что такое патч.
                              Но подожди! Там еще...