• Если вы что-то создаёте, избегайте расписания менеджера

    • Перевод


    В книге ”Masters of Doom” о компании id Software и её влиянии на массовую культуру Дэвид Кушнер размышлял о необычном стиле работы ведущего программиста Джона Кармака.

    Чтобы повысить производительность и не отвлекаться от работы над движком Quake, тот принял агрессивный подход — начал постепенно смещать начало рабочего дня. В конце концов Джон садился программировать вечером, а заканчивал перед рассветом. Эти непрерывные отрезки тишины, изоляции и глубокой работы позволили ему создать первый в мире сверхбыстрый 3D-движок. Игра Quake произвела настоящий фурор.
    Читать дальше →
  • Как я не стал программистом в 35 лет


    С самого начала сентября широким потоком хлынули на Хабр публикации об успешном успехе на тему «Детство программиста», «Как стать программистом после N лет», «Как я ушёл в IT из другой профессии», «Путь в программирование» и так далее. Подобные статьи пишут постоянно, но вот сейчас они пошли как-то особенно кучно. Каждый день пишут то психологи, то студенты, то ещё кто-нибудь.

    И в каждой статье звучит знакомая песня: главное, что советуют авторы — «стараться», «не сдаваться», «не бояться» и «идти к своей мечте»; а в комментариях очень часто можно встретить мнение, что ежели ты с самого детства любил компьютеры, то работа с ними в итоге неудивительна. Я хотел бы на примере своей биографии подвести читателей к мысли о том, что начальные условия могут быть важнее, чем приложенные усилия. Вера в справедливый мир способствует психологическому комфорту, но не очень-то корректно отражает реальность.
    Читать дальше →
  • Организация кода в Go

    • Перевод
    • Tutorial

    Зависимости. Дженерики. Они часто звучат в списке проблем в Go сообществе, но есть одна проблема, о которой вспоминают довольно редко — организация кода вашего пакета.


    Каждое Go приложение, с которым я работал, похоже, имеет свой ответ на вопрос "Как я должен организовать код?". Некоторые приложения засовывают всё в один пакет, в то время, как другие группируют логику по типам или модулям. Без хорошей стратегии, которой придерживаются все члены команды, вы рано или поздно увидите, что код сильно разбросан по многочисленным пакетам. Нам нужен некий стандарт для дизайна кода в Go приложениях.


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

    Читать дальше →
    • +28
    • 32,7k
    • 8
  • Понимание джойнов сломано. Это точно не пересечение кругов, честно

      Так получилось, что я провожу довольно много собеседований на должность веб-программиста. Один из обязательных вопросов, который я задаю — это чем отличается INNER JOIN от LEFT JOIN.


      Чаще всего ответ примерно такой: "inner join — это как бы пересечение множеств, т.е. остается только то, что есть в обеих таблицах, а left join — это когда левая таблица остается без изменений, а от правой добавляется пересечение множеств. Для всех остальных строк добавляется null". Еще, бывает, рисуют пересекающиеся круги.


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


      Дело в том, что этот ответ в общем случае неверен. Ну или, как минимум, не точен.

      Читать дальше →
    • Читай старьё

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


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


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


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

        Читать дальше →
      • Мой любимый файл в кодовой базе Chromium

          Код Хромиума весьма обширен, там каждому найдётся что-то по вкусу. А я вот решил рассказать о своём любимом файле в нём (а у вас есть такой?). Этот файл отражает всё: боль, разочарование, надежду, упорство, силу воли, ответственность за чужие провалы и самопожертвование. Я иногда читаю его и плачу и проникаюсь пониманием, какая же огромная часть айсберга скрыта под водой. Это, в общем, даже не файл с кодом. Это файл с конфигом, описывающим баги видеокарт, которые Хромиуму приходится обходить для нормального отображения своих страниц на разных платформах. Вот он: https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json

          О чём вообще идёт речь? Давайте вспомним, как работает браузер: вы набираете какой-то адрес в адресной строке, браузер загружает контент и отображает его. Чуть детальнее об этом рассказывает хорошая статья «What happens when you type google.com into your browser and press enter?» (и сразу несколько её переводов на Хабре). В ней одним из последних пунктов упоминается, мол, «а теперь, когда всё готово, отрисовываем картинку на экране». Ага, вот так берём и отрисовываем, конечно.
          Читать дальше →
        • Прекратите нанимать «эффективных менеджеров». Они не только бесполезны, но и вредны

            Каждая компания проходит несколько жизненных циклов от момента своего основания до собственной «крышки гроба». Конец у разных компаний разный: кто-то не выдерживает конкуренции с более молодыми и гибкими командами, продукты которых годами не вылазят из состояния ранней беты, но все же являются более успешными, другие — становятся частью более крупных корпораций.



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

            Вот как раз в этот момент компанию начинают захватывать «эффективные менеджеры».
            Читать дальше →
          • Дверь, которая с нами здоровается по именам и открывает только сотрудникам отдела


              У нас была пара дней промежутка между большими проектами, и мы решили поиздеваться над дверью руководителя подразделения. Just for fun. Потому что дроны нас в лицо уже узнают — чем дверь-то хуже?

              На момент старта IT-проекта у нас уже была накладная панель, напечатанная на 3D-принтере. За два дня из железа, готовых библиотек и какой-то матери мы сделали прототип устройства, которое учитывает сотрудников или позволяет проверять, что человек прошёл через турникет именно по своему пропуску.

              Никаких денег. Мы использовали только опенсорс.

              Вы можете повторить это минут за 15–20 с нашим скриптом.
              Читать дальше →
            • «Never say never» или Работаем с таймзонами правильно

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

                TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!

                Итак, все кругом твердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?

                Читать дальше →
              • Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

                • Перевод
                Продолжение: Рассказ о том, как не дать мне украсть номера кредиток и пароли у посетителей ваших сайтов
                Представляем вам перевод статьи человека, который несколько лет воровал имена пользователей, пароли и номера кредитных карт с различных сайтов.


                То, о чём я хочу рассказать, было на самом деле. Или, может быть, моя история лишь основана на реальных событиях. А возможно всё это — выдумка.

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

                В результате, скрепя сердце, я решил выложить всё начистоту и рассказать всему миру о том, как я в последние несколько лет воровал имена пользователей, пароли и номера кредитных карт с самых разных сайтов. Возможно, вы — администратор или разработчик одного из них.
                Читать дальше →
              • Security Week 18: Дыра во всех системах с Intel Core, Apple отобрала сертификат у троянца, рансомварь заполонила планету

                  То, о чем так долго говорили большевики безопасники, свершилось. Свершилось почти десять лет назад, а сейчас об этом стало широко известно: в микропрограмме Intel Management Engine обнаружилась уязвимость. В оповещении от Intel указаны версии от 6.0 до 11.6, а, это, на минуточку, все версии, начиная с 2008 года, с платформ для процессоров Intel Core первого поколения.

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

                  Ежу понятно, что встраивая в материнки легитимный аппаратный бэкдор, надо по-максимуму закрутить гайки в системе безопасности, что Intel и сделала. Код iME, например, зашифрован 2048-битным ключом. Но как обычно, что-то пошло не так, и теперь прогрессивная общественность доподлинно узнала о возможности удаленно захватывать доступ к функциям управления ME. Под угрозой машины, в которых реализованы технологии AMT, ISM и SBT. Ну то есть вообще все на интеловских чипсетах под Intel Core.

                  Читать дальше →
                • Как прокрастинировать эффективно: 6 полезных онлайн-сервисов


                    Прокрастинация — явление, жертвой которого становятся все, даже животные не могут ему противостоять. Несколько лет назад проблему ярко описал Тим Урбан на страницах своего блога Wait But Why. И раз уж прокрастинация неизбежна, стоит постараться извлечь пользу и из неё — я составил подборку из шести онлайн-сервисов (и их альтернатив), которые помогут научиться чему-то новому, даже когда работать нет никаких сил.
                    Читать дальше →
                  • Немного о синтаксисе Erlang

                    • Перевод
                    Изначально я планировал выпустить этот опус как дополнение к книге “Learn You Some Erlang”, однако его содержание больше соответствует редакционному материалу, нежели хорошему справочному документу, поэтому я решил просто написать об этом в блоге.

                    Многие новички в мире Erlang успешно изучают его и начинают играться, не вступая с ним в тесное знакомство. Я прочитал много жалоб именно на синтаксис и эти “козьи шарики” (ant turds — ориг.) — «веселый» способ называть символы ,, ;, .. Например, «Как же они бесят», а также многое другое.

                    Я упоминал в книге, что Erlang берет свое начало из Prolog. Это дает нам понять, откуда берутся все эти знаки препинания, но это, увы, не заставляет людей проникнуться любовью к подобной пунктуации. И правда, почему-то никто не говорит мне: «А-а! Prolog! Что ж ты раньше не сказал!» Ввиду этого я предлагаю три возможных способа человеческого чтения кода на Erlang, дабы сделать мир добрее.
                    Читать дальше →
                  • Притча о покрытии кода тестами

                    • Перевод

                    Ранним утром программист спросил великого мастера:
                    — Я готов писать модульные тесты. К какому покрытию кода я должен стремиться?
                    Великий мастер ответил:
                    — Не переживай о покрытии, просто пиши хорошие тесты.
                    Программист улыбнулся, поклонился и ушел.

                    Немного времени спустя другой программист задала этот же вопрос. Великий мастер указал на котел с кипящей водой и сказал:
                    — Сколько зерен риса я должен положить в этот котел?
                    Программист с озадаченным видом ответила:
                    — Как я могу ответить наверняка? Все зависит от того, сколько людей вам надо накормить, насколько они голодны, какие еще блюда вы подаете, сколько риса у вас есть и от многого другого.
                    — Совершенно верно. — сказал великий мастер.
                    Второй программист улыбнулась, поклонилась и ушла.
                    В конце дня...
                  • Заботливое компьютерное кресло

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

                      image

                         Насчет ламината меня быстро успокоили – оказывается, были случаи, когда пневмопатрон выходил через верх, делая больно беспечному владельцу вплоть до летального исхода )
                      Читать дальше →
                    • Начинать программировать никогда не рано: взгляд девятилетнего

                        На днях мне исполнилось 9 лет. Через неделю я пойду в третий класс. И в нем до сих пор нет информатики. Это большой недостаток школьной программы.


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



                          Можно ли создать в России высокотехнологичное производство (например МЭМС) европейского уровня? Уложится ли запуск производства в запланированные сроки и бюджет? Будет ли выпускаемая продукция высококачественной и сможет ли поставляться на экспорт? Ответ компании Маппер – да.

                          Подробности
                        • Руководство по работе с Redux

                          • Перевод
                          • Tutorial
                          Сегодня Redux — это одно из наиболее интересных явлений мира JavaScript. Он выделяется из сотни библиотек и фреймворков тем, что грамотно решает множество разных вопросов путем введения простой и предсказуемой модели состояний, уклоне на функциональное программирование и неизменяемые данные, предоставления компактного API. Что ещё нужно для счастья? Redux — библиотека очень маленькая, и выучить её API не сложно. Но у многих людей происходит своеобразный разрыв шаблона — небольшое количество компонентов и добровольные ограничения чистых функций и неизменяемых данных могут показаться неоправданным принуждением. Каким именно образом работать в таких условиях?

                          В этом руководстве мы рассмотрим создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, пройдём все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого мы будем использовать такие инструменты, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
                          Читать дальше →
                        • Каково это — быть разработчиком, когда тебе сорок

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

                          Этот пост был написан и опубликован на 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 начал вещание телепузиков, а Кэмерон только собирался показать миру свой «Титаник».
                          Читать дальше →
                        • AWS CloudWatch: собственные метрики (Custom Metrics)

                            Привет хабравчане!

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

                            Итак, потребовалось создать метрики по параметрам, которые Cloud Watch считать не умеет. Можно мерять много чего, но, например, возьмём Load Average. Этот странный, но понятный всем параметр, объясняет состояние системы. В целом, мы можем оценивать здоровье сервера по этому состоянию. Естественно, не всегда, но как пример LA идеален.

                            Что же нам для этого нужно?

                            1. Amazon CloudWatch Command Line Tools
                            2. Несколько скриптов

                            Начнём приготовления на сервере.
                            1. В папке /opt создадим папку — aws
                            2. Распакуем утилиты командной строки в папку /opt/aws/mon
                            3. Ключ и сертификат pk-**.pem и cert-**.pem. Уложим в папку /opt/aws/keys
                            4. Нужную папку c Java симлинком направим на /usr/java/latest

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