• Количественная оценка понятности кода

    image

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

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

    Читать дальше →
  • Как распутывать лапшу, не впадая в депрессию

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

      В статье используется библиотека Backbone.View.Elements

      Проблема первая: маловыразительные селекторы


      Все мы видели лапшу, все мы знаем: лапша в JSе — наверно и в верстке не все хорошо. А раз все так, то код, скорее всего, кишит непонятными манипуляциями с домом. Читать такой код сложно, ведь надо, не упуская мысли автора о том, что здесь вообще происходит, держать в уме кучку невнятных названий для элементов. Итак, давайте придадим коду немножко выразительности:
      _selectors: function () {
          return {
              elemName: '.block__elem-name'
          };
      }
      
      Сложим все селекторы в одном месте и дадим понятное название элементам, для выбора которых они нужны. Выбирать мы их, кстати, будем вот так:
      this._elem('elemName');
      
      вместо
      this.$('.block__elem-name');
      

      Неплохо? Поехали дальше..
    • Почему OpenVPN тормозит?

        Описанная проблема присуща только ветке OpenVPN 2.3, в 2.4 размеры буферов не меняются без требования пользователя.

        Время от времени, мне встречаются темы на форумах, в которых люди соединяют несколько офисов с использованием OpenVPN и получают низкую скорость, сильно ниже скорости канала. У кого-то это может быть 20 Мбит/с при канале в 100 Мбит/с с обеих сторон, а кто-то еле получает и 400 Кбит/с на 2 Мбит/с ADSL/3G и высоким пингом. Зачастую, таким людям советуют увеличить MTU на VPN-интерфейсе до чрезвычайно больших значений, вроде 48000, или же поиграться с параметром mssfix. Частично это помогает, но скорость внутри VPN все еще очень далека от канальной. Иногда все сваливают на то, что OpenVPN — userspace-решение, и это его нормальная скорость, учитывая всякие шифрования и HMAC'и. Абсурд!

        Немного истории

        На дворе июль 2004 года. Типичная скорость домашнего интернета в развитых странах составляет 256 Кбит/с-1 Мбит/с, в менее развитых — 56 Кбит/с. Ядро Linux 2.6.7 вышло не так давно, а 2.6.8, в котором TCP Window Scale включен по умолчанию, выйдет только через месяц. Проект OpenVPN развивается уже 3 года как, к релизу готовится версия 2.0.
        Один из разработчиков добавляет код, который устанавливает буфер приема и отправки сокета по умолчанию в 64 КБ, вероятно, чтобы хоть как-то унифицировать размер буфера между платформами и не зависеть от системных настроек.
        Читать дальше →
      • Интерфейсы в реальном мире

          IT-интерфейсы часто растут из физических. Например, вот аппаратные чекбоксы:



          Вообще, лучший же пример правильного инженерного интерфейса – это гранёный стакан.

          Почему? Очень просто. С одной стороны, он дружелюбен к советским роботам: круглая верхняя полоса позволяет автоматической мойке нащупать его ещё с 40-х годов. С другой стороны, он прощает человеческие ошибки: ребра останавливают скатывание стакана со стола при падении. Плюс он просто красивый.

          Сейчас покажу ещё несколько интерфейсов, которые облегчают жизнь. Общий смысл – попробовать понять, как думал разработчик, чтобы сделать что-то удобнее.
          Читать дальше →
        • Ключевые качества бизнес-аналитика в ИТ

          Доброго времени суток.

          Изложить свои мысли о теме настоящей публикации натолкнула вполне насущная, «жизненная» необходимость — постепенно приближается время, когда возникнет потребность искать/нанимать на открытом рынке бизнес-аналитиков в штат компании (бизнес в области автоматизации процессов управления документами, контроля исполнительской дисциплины и т.д., в «простонародье» — СЭД). Все специалисты этого профиля, опыт и компетенции которых известны, иными словами тех кого знал и кого видел полезным для компании, либо уже в команде, либо устроены тоже неплохо. Проблему осложняет тот факт, что сколько ни старался, не получается сформулировать кратко и адекватно компетенции, особенности, которыми данный субъект должен обладать. Какие личные качества и таланты должен проявлять — что тоже актуально, так как морально подготовился к тому, чтобы искать талантливых новичков и пытаться их «выращивать». Уверен, что размышления ниже по тексту будут полезны менеджерам проектов, собственникам небольших ИТ-компаний интеграторского типа, да и самим бизнес-аналитикам.
          Читать дальше →
        • Питер Тиль: конкуренция – удел проигравших

          • Translation


          Cтэнфордский курс CS183B: How to start a startup. Стартовал в 2012 году под руководством Питера Тиля. Осенью 2014 года прошла новая серия лекций ведущих предпринимателей и экспертов Y Combinator:


          Первая часть курса
          Читать дальше →
        • Теория потока: как создать игру, которую полюбят все

            Всем привет.

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

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


            Читать дальше →
          • Почему 1С это плохо и почему так не любят 1С программистов

              Мы продолжаем то, что мы уже много наделали.

              Черномырдин В.С.

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

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



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

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

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

                  Статья будет полезна тем, кто хочет:

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

                  Перевод статьи Оливера Эмбертона (Oliver Emberton) «How to debug your brain». Оригинал можно найти здесь.

                  Наши мозги – самое глючное барахло после Internet Explorer.


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

                  image

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

                  • Translation
                  imageСтатьи, написанные Oliver Emberton, постоянно вызывают повышенный интерес. Сегодня представляем вам перевод самой свежей публикации автора.

                  Дисклэймер: мы не ставили себе цель дословного или абсолютно точного перевода оригинала. Главное — передать его смысл. Просим помнить об этом при прочтении. Итак, начнем!

                  Если вы хотите следовать своей мечте, скажите «нет» отвлекающим делам!

                  Наш мозг порой ведет себя как пляжный мячик, наполненный пчелами. Сотни противоречащих друг другу импульсов толкают нас в разные стороны.
                  Читать дальше →
                • Потокобезопасные события в C# или Джон Скит против Джеффри Рихтера



                    Готовился я как-то к собеседованию по C# и среди прочего нашел вопрос примерно следующего содержания:
                    «Как организовать потокобезопасный вызов события в C# с учетом того, что большое количество потоков постоянно подписываются на событие и отписываются от него?»


                    Вопрос вполне конкретно и чётко поставлен, поэтому я даже не сомневался в том, что ответ на него можно дать также чётко и однозначно. Но я очень сильно ошибался. Оказалось, что это крайне популярная, избитая, но до сих пор открытая тема. А еще заметил не очень приятную особенность — в русскоязычных ресурсах этому вопросу уделяется очень мало внимания (и хабр не исключение), поэтому я решил собрать всю найденную и переваренную мной информацию по данному вопросу.
                    До Джона Скита и Джеффри Рихтера тоже дойдем, они то, собственно, и сыграли ключевую роль в моем общем понимании проблемы работы событий в многопоточной среде.

                    Особо внимательный читатель сможет найти в статье два комикса в стиле xkcd.
                    (Осторожно, внутри две картинки примерно по 300-400 кб)
                    Читать дальше →
                  • Механика потока эндорфинов на примере трёх космических игр



                      Игрок больше любит получать, чем терять.

                      При GameDev надо учитывать эту прекрасную особенность психики. Проиллюстрирую тремя играми: замечательным Faster than Light (родившемся ещё на ПК), популярном изначально планшетном Out There и пришедшем из настольного мира Galaxy Trucker.

                      Ни в одной из этих игр нет возможности сохраниться.
                      Читать дальше →
                    • Умей говорить «нет» и умей говорить «да»

                        Умей говорить «нет»


                        Старший разработчик Валера работает в роли тимлида на большом и важном проекте для большого и важного заказчика. За окном шумит жаркое лето, по пыльным улицам бегут по своим делам прохожие, голуби крутят пируэты в необъятном казахстанском небе. Жизнь прекрасна – пилотный запуск намечен на конец ноября, команда набрала хороший темп и идет по графику. И тут Валера боковым зрением замечает, как на иконке Скайпа появилась желтая точка – кто-то о нем вспомнил и написал сообщение. Это руководитель проекта: «Зайди ко мне…»
                        Читать дальше →
                      • Образование, которое мы потеряли

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