• Справочник по собеседованиям для тех программистов, которые их не понимают


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

      Чтобы уменьшить поток этих публикаций (святая простота), ниже будет краткий, но лаконичный справочник по типам собеседований, которые вам стоит ожидать от конкретного типа компании. Справочник основан на личном многолетнем опыте. Надеюсь, это поможет вам (именно тебе, да) выбрать лучшую стратегию успешного получения работы.
      Погнали!
    • Ставим котю на ноги

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

        Читать дальше →
      • 23 минуты. Оправдание тугодумов

          Я всегда думал, что я – тупой. Точнее, что я — тугодум.

          Проявлялось это просто: на совещаниях и обсуждениях я не мог быстро придумывать решение задачи. Все чего-то говорят, иногда умное, а я – сижу и молчу. Даже как-то неудобно было.

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

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

          Просто культура в тех компаниях, где я начинал работать, была модерновая. Ну, как там это бывает – «совещание должно закончиться принятием решения». Вот чего придумали на совещании, то и принимается. Даже если решение — полная фигня.
          Читать дальше →
        • Физика для мобильного PvP шутера и как мы подружили её с ECS

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


            Читать дальше →
          • Мультиплеер в быстрых играх (части I, II)



            1. Части I, II (синглплеер с авторитарным сервером)
            2. Часть III (Появление врага)
            3. Часть IV (Хэдшот!)


            Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

            Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
            Читать дальше →
          • Мультиплеер в быстрых играх (Часть IV: Хэдшот! Путешествуем во времени)

            • Перевод

            1. Части I, II (синглплеер с авторитарным сервером)
            2. Часть III (Появление врага)
            3. Часть IV (Хэдшот!)

            Как повесить идеальный хэдшот если у тебя пинг 2 секунды? Вы узнаете в этой статье.

            Текущий алгоритм работы мультиплеера


            • Сервер получает команды с клиентов и времена их отправления
            • Сервер обновляет состояние мира
            • Сервер с некоторой частотой отправляет свое состояние всем клиентам
            • Клиент отправляет команды и локально воспроизводит их результат
            • Клиент получает обновленные состояния мира и:
              • Применяет состояние от сервера
              • Заново применяет все свои команды, которые сервер не успел применить.
              • Интерполирует предыдущие состояния других игроков
            • С точки зрения игрока, есть два серьезных последствия:
              • Игрок видит себя в настоящем
              • Игрок видит других в прошлом.

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

            • Перевод
            Игры FPS (first-person shooter, шутер от первого лица) стали неотъемлемой частью видеоигровой индустрии ещё с момента появления в 1992 году популярнейшей Wolfenstein 3D. С тех пор жанр эволюционировал: улучшалась графика, увеличивались бюджеты на разработку, развивалась экосистема киберспорта. Но что насчёт их фундамента — механики стрельбы? Как проходило развитие на этом фронте? Почему в некоторых играх оружие кажется реальными, а в других похоже на игрушки?

            Hitscan


            В предыдущую эпоху многие игры для рендеринга 3D-сцен в 2D-изображения использовали технику под названием raycasting («бросание лучей»). Raycasting позволяет движку определять первый объект, с которым пересечётся луч. Но потом разработчики задались вопросом: «Что, если выпустить луч из ствола оружия, чтобы имитировать пулю?» Благодаря этой идее родился hitscan («сканирование попадания»).


            Пример raycasting

            В большинстве реализаций оружия с hitscan при выстреле игрока физический движок выполняет следующие операции:

            • Определяет направление, в котором указывает оружие.
            • Выпускает из ствола оружия луч на заданное расстояние.
            • Использует raycasting для определения того, попал ли луч в объект.

            Если движок определил, что объект находится на линии огня, то он сообщит ему об этом, сказав, что в него «попала» пуля. Затем цель может выполнить все вычисления, необходимые для регистрации повреждений.
            Читать дальше →
          • Новый алгоритм поиска пути в Factorio

            • Перевод

            На прошлой неделе мы говорили в своём блоге об изменениях, которые позволят врагам (biters) не наталкиваться друг на друга, но это было не единственное обновление, связанное с biter-ами. Совпало так, что в обновления этой недели вошло то, над чем мы работали предыдущие несколько недель — обновление системы поиска пути для врагов.

            Поиск пути


            Когда юнит хочет куда-то переместиться, ему сначала нужно понять, как туда добраться. В самом простом случае можно двигаться прямиком к цели, но на пути иногда возникают препятствия — скалы, деревья, гнёзда врагов (spawners), юниты игрока. Чтобы проложить дорогу, мы должны сообщить функции поиска пути (pathfinder) текущую и конечную позиции, а pathfinder вернёт нам (возможно, через много тактов) путь, который просто является набором промежуточных точек (waypoints), по которым должен двигаться юнит, чтобы добраться до места назначения.

            Для выполнения своей работы pathfinder использует алгоритм под названием A* (произносится «A star»). Простой пример поиска пути при помощи A* показан на видео: biter хочет найти путь в обход скал. Функция поиска пути начинает исследовать карту вокруг biter-а (исследование показано белыми точками). Сначала она пытается пойти напрямик к цели, но как только достигает скал, «разливается» в обе стороны, пытаясь найти позицию из которой снова можно будет двигаться к цели.
            Читать дальше →
          • Избегаем тригонометрии

            • Перевод

            Вступление


            Мне кажется, что нам надо использовать меньше тригонометрии в компьютерной графике. Хорошее понимание проекций, отражений и векторных операций (как в истинном значении скалярного (dot) и векторного (cross) произведений векторов) обычно приходит с растущим чувством беспокойства при использовании тригонометрии. Точнее, я считаю, что тригонометрия хороша для ввода данных в алгоритм (для понятия углов это интуитивно понятный способ измерения ориентации), я чувствую, что что-то не так, когда вижу тригонометрию, находящуюся в глубинах какого-нибудь алгоритма 3D-рендеринга. На самом деле, я думаю, что где-то умирает котенок, когда туда закрадывается тригонометрия. И я не так беспокоюсь о скорости или точности, но с концептуальной элегантностью я считаю… Сейчас объясню.
            Читать дальше →
          • Новая иммунотерапия убрала все опухоли у женщины с метастатическим раком молочной железы

            • Перевод


            Работа, опубликованная в Nature Medicine учёными из National Cancer Institute (NCI), описывает новый тип иммунотерапии, который привёл к полному исчезновению опухолей у женщины с метастатическим раком молочной железы, которой осталось всего несколько месяцев жизни.
            Результаты показывают, как естественные опухолевые инфильтрирующие лимфоциты (TIL) были извлечены из опухоли пациента, выращены вне её тела, чтобы увеличить их количество, и введены обратно пациенту для борьбы с раком. Пациент ранее получил несколько форм лечения, включая гормональную терапию и химиотерапию, но никакая из них не остановила прогрессирование рака. После лечения все опухоли пациентки исчезли, и через 22 месяца она все ещё находится в ремиссии.
            Читать дальше →
          • Манипуляция мешами в реальном времени на Unity

            • Перевод
            image

            Одно из преимуществ Unity в качестве платформы для разработки игр — её мощный 3D-движок. В этом туториале вы познакомитесь с миром 3D-объектов и манипуляций мешами.

            В связи с ростом технологий виртуальной и дополненной реальности (VR/AR) большинство разработчиков сталкивается со сложными концепциями 3D-графики. Пусть этот туториал будет для них отправной точкой. Не волнуйтесь, здесь не будет сложной 3D-математики — только сердца, рисунки, стрелки и куча интересного!
            Читать дальше →
            • +14
            • 14,4k
            • 3
          • Глобальное освещение с использованием трассировки вокселей конусами

              В этой статье я расскажу о реализации одного из алгоритмов расчёта глобального (переотражённого / ambient) освещения, применяемого в некоторых играх и других продуктах, — Voxel Cone Tracing (VCT). Возможно, кто-то читал старенькую статью ([VCT]) 2011 года или смотрел видео. Но статья не даёт исчерпывающих ответов на вопросы, как реализовать тот или иной этап алгоритма.


              Рендер сцены без глобального освещения, и с использованием VCT:
              Читать дальше →
              • +39
              • 10,4k
              • 7
            • TDD в геймдеве или «кроличий ад»

              • Перевод
              TDD в геймдеве применяют довольно редко. Обычно проще нанять тестировщика, чем выделить разработчика для написания тестов — так экономятся и ресурсы, и время. Поэтому каждый успешный пример использования TDD становится интереснее. Под катом перевод материала, где эту технику разработки применили при создании передвижения персонажей в игре ElemenTerra.


              Читать дальше →
              • +45
              • 12,9k
              • 6
            • Работа и жизнь айтишника на Кипре — плюсы и минусы

              Кипр — небольшая страна на юго-востоке Европы. Расположена на третьем по величине острове Средиземного моря. Страна входит в Евросоюз, но не входит в шенгенское соглашение.

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



              Я целенаправленно ехал на Кипр потому что мне подходит климат и менталитет местного населения. Под катом — как найти вакансию, получить вид на жительство, ну и парочка лайфхаков для тех, кто уже здесь.
              Читать дальше →
            • Осторожный переезд в Нидерланды с женой и ипотекой. Часть 2: подготовка документов и переезд

                Итак, за примерно год (май 2017 — февраль 2018) я, программист C++, нашел-таки работу в Европе. Я десятки раз откликался на вакансии в Англии, Ирландии, Швеции, Нидерландах и даже в Португалии. Я раз двадцать беседовал по телефону, скайпу и прочим системам видео связи с рекрутерами, и несколько меньше — с техническими специалистами. Я ездил в Осло, в Эйндховен и три раза в Лондон на финальные интервью. Все это подробно описано здесь. В итоге я получил один оффер и принял его.



                Оффер этот был из Нидерландов. Работодателям в этой стране относительно просто пригласить работника из-за рубежа (не из Евросоюза), поэтому бюрократической волокиты немного, а сам процесс оформления занимает всего несколько месяцев.

                Но всегда можно самому себе создать сложности. Что я и сделал, чем затянул свой переезд еще на месяц. Если интересно почитать о хлопотах (нет, не сильно приятных) связанных с переездом IT семьи в Западную Европу — добро пожаловать под кат.
                Читать дальше →
              • Осторожный переезд в Нидерланды с женой и ипотекой. Часть 1: поиск работы

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

                  image

                  В общем, если вам интересен рассказ о том, как C++ программист из Подмосковья искал работу в Европе, желательно в Великобритании, а нашел-таки в Нидерландах, переехал туда сам и привез жену, все это с непогашенной ипотекой в России и с небольшими приключениями — добро пожаловать под кат.
                  Читать дальше →
                • Япония: страна настолько здравого смысла, что он для нас местами иррационален



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

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

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

                      «Мы начинаем разработку новой игры, и нам нужна классная вода. Такую сможешь?»


                      , — cпросили меня. «Да не вопрос! Конечно, смогу», — ответил я, но голос предательски задрожал. «А, еще и на Unity?», — и мне стало понятно, что впереди очень много работы.
                      Читать дальше →
                    • Создание outline на LWRP в Unity

                      Здравствуйте.

                      Я поведаю о том, как создать простой outline effect на новом Lightweight Render Pipeline(LWRP) в Unity. Для этого нужна версия Unity 2018.3 и выше, а так же LWRP версии 4.0.0 и выше.

                      Классический outline состоит из двух-проходного шейдера (two pass shader), но LWRP поддерживает только одно-проходные шейдера (single pass shader). Для исправления этого недостатка в LWRP появилась возможность добавлять пользовательские pass в определенные этапы рендеринга, используя интерфейсы:

                      IAfterDepthPrePass
                      IAfterOpaquePass
                      IAfterOpaquePostProcess
                      IAfterSkyboxPass
                      IAfterTransparentPass
                      IAfterRender
                      
                      Читать дальше →
                      • +13
                      • 7,7k
                      • 7
                    • Создание игры «35ММ». Постапокалипсис в России



                      Всем доброго времени суток, меня зовут Сергей Носков. Сегодня я бы хотел рассказать о создании моего первого полноценного инди-проекта под названием 35ММ, вышедшего в Steam в 2016 году. История конечно давняя, и с тех пор уже было опубликовано несколько статей и интервью на тему проекта, однако, подробного описания процесса разработки не было. Также, практически не были затронуты технические моменты реализации. Об этом, собственно, мы и поговорим.

                      Начнем с небольшой предыстории. 35ММ — это адвенчура с видом от первого лица в сеттинге постапокалипсиса на территории России. В народе — симулятор ходьбы. Игра повествует нам историю путешествия двух странников по опустевшим землям, оставленным цивилизацией. Основная часть населения вымерла после страшной болезни, и теперь природа отыгрывает у человечества свои очки. К сожалению, уже не помню точно, как зародилась идея данного проекта, но точно помню, что на тот момент я был ярым фанатом темы сталкера, игр «Метро» и вообще подобного атмосферного антуража. У меня всегда вызывали трепет и восторг пейзажи заброшенных городов, промышленных зон и деревень. Уж не знаю, что это за болезнь такая и как такую любовь объяснить, но нас таких много. В общем-то, подобной страсти по данной теме было достаточно для того, чтобы начать создание своего небольшого игрового мира.
                      Читать дальше →