• Y Combinator рекомендует прочитать в 2016

    • Перевод
    «Чтение и личный опыт формируют мировоззрение. И даже если вы не помните самый момент получения опыта или содержания книги, то их влияние на ваше представление о мире непременно остается в Вас. Ваш разум похож на скомпилированную программу без исходного кода — он работает, но не ясно как.»

    — Пол Грэм, основатель Y Combinator, программист, инвестор, эссеист



    Читать дальше →
    • +16
    • 21,9k
    • 8
  • Отпуск по-программистски, или как я не поучаствовал в конкурсе по программированию на JS. Часть первая

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


      image


      Задача состояла в том, чтобы написать программу на JS, которая будет определять, есть слово с словаре английских слов или нет. Вроде бы просто, но есть пара ограничений, делающих задачу заведомо невыполнимой:
      – Словом считается не просто любое правильное слово английского языка, а именно слово, которое есть в предоставленном словаре из 600K+ слов.
      – Словаря в момент исполнения программы нет, скачать его нельзя, а размер программы, включая данные, не должен превышать 64К. Внешние библиотеки подключать также нельзя, но файл данных может быть заархивирован.
      Благодаря этим условиям вместо однозначного ответа результатом может быть только определение наибольшей вероятности присутствия слова в словаре.


      Сразу скажу, что решение я так и не отправил из-за неудовлетворённостью результатом (решение, которое давало хотя бы 80%, я смог поместить только в 120-130К, а без превышения размера в 64К выжал максимум 70%).
      Тем не менее опыт считаю достаточно интересным и достойным статьи. Под катом много SQL,JS,Python, нейронные сети, а также печальная правда о производительности CPU на хостинге.

      Читать дальше →
    • Профилирование и оптимизация программ на Go

      • Tutorial

      Введение


      В этой статье я расскажу, как профилировать и оптимизировать приложения на языке Go с использованием встроенных и общих инструментов, доступных в ОС Linux.

      Что такое профайлинг и оптимизация? Если ваша программа работает недостаточно быстро, использует слишком много памяти, неоптимально использует процессор, вы хотите понять, в чем дело, и исправить — это и есть профайлинг и оптимизация.

      Я привел такое определение, чтобы сразу отсечь вопросы некорректной работы приложения. В этой статье мы не будем говорить о проблемах мультитредового программирования, о дата-рейсах (англ. data race), о поиске ошибок (англ. debugging). Для всего этого в Go есть свои утилиты и подходы, но оставим эту тему на будущее.



      Читать дальше →
    • Лучшие практики Go, шесть лет в деле

      • Перевод
      В 2014 году я выступил на открытии конференции GopherCon с докладом под названием «Go: Best Practices for Production Environments». В SoundCloud мы были одними из первых пользователей Go и к тому времени уже два года писали на нём и поддерживали Go в бою в той или иной форме. За это время мы кое-чему научились, и я попытался поделиться частью этого опыта.

      С тех пор я продолжал программировать на Go в течение всего рабочего дня, сначала в командах SoundCloud, отвечающих за операционную деятельность и инфраструктуру, а теперь работаю в компании Weaveworks над Weave Scope и Weave Mesh. Также я усердно трудился над Go kit, набором инструментов для микросервисов с открытым исходным кодом. И всё это время я принимал активное участие в развитии сообщества Go-программистов, встречался со многими разработчиками на митапах и конференциях по всей Европе и в США, коллекционируя их истории успехов и провалов.

      В ноябре 2015-го, на шестую годовщину релиза Go, я вспоминал то своё первое выступление. Какие из лучших практик прошли проверку временем? Какие из них устарели или стали неэффективными? Появились ли какие-то новые методики? В марте мне представилась возможность выступить на конференции QCon London, где я рассказал о лучших практиках 2014 года и дальнейшем развитии Go до 2016 года. В этом посте представлена выжимка из моего выступления.

      Ключевые положения я выделил в тексте в виде Top Tips — лучших советов.

      А вот и cодержание:

      1. Среда разработки
      2. Структура репозитория
      3. Форматирование и стиль
      4. Конфигурация
      5. Разработка программы
      6. Логирование и метрики
      7. Тестирование
      8. Управление зависимостями
      9. Сборка и развёртывание
      10. Заключение
      Читать дальше →
    • ABC: Always Be Coding (не переставай программировать)



      Как получить работу инженера?

      Давай на чистоту. Ты хороший кандидат на должность инженера? Как ты сам себя оцениваешь? Много ли компаний, в которых ты бывал на собеседованиях? Каково у тебя отношение пройденных интервью к полученным предложениям о работе? Попробуй воспользоваться следующей формулой (это мое сферическое измерение в вакууме, которое не означает ровным счетом ничего):

      # x = количество компаний, в которых ты проходил собеседования

      # y = количество предложений о работе, которые ты получил

      рейтинг = 100 * log(x) * y / x



      Если твой рейтинг < 90, обязательно прочти это. Если > 120, возможно, тебе это не нужно, но, все равно прочти.

      Читать дальше →
    • Как собеседовать ИТ-специалистов

      • Перевод
      Одна из наших основных задач — сделать IaaS простым и понятным. Для этого мы постоянно оптимизируем работу нашего провайдера и рассказываем об этом здесь. Например, мы уже писали о том, как работает API нашего IaaS-провайдера и делились опытом разработки своего DNS-менеджера.

      Сегодня мы решили взглянуть на западный опыт и рассмотреть тему найма ИТ-специалистов. Для этого мы оттолкнулись от заметки Реджинальда Брэтуэйта (Reginald Brathwaite) из компании Page Duty и кратко проанализировали инсайты, которые он описал.

      Читать дальше →
    • FizzBuzz на TensorFlow

      • Перевод

      интервьюер: Приветствую, хотите кофе или что-нибудь еще? Нужен перерыв?


      я: Нет, кажется я уже выпил достаточно кофе!


      интервьюер: Отлично, отлично. Как вы относитесь к написанию кода на доске?


      я: Я только так код и пишу!


      интервьюер: ...


      я: Это была шутка.


      интервьюер: OK, итак, вам знакома задача "fizz buzz"?


      я: ...


      интервьюер: Это было да или нет?


      я: Это что-то вроде "Не могу поверить, что вы меня об этом спрашиваете."


      интервьюер: OK, значит, нужно напечатать числа от 1 до 100, только если число делится нацело на 3, напечатать слово "fizz", если на 5 — "buzz", а если делится на 15, то — "fizzbuzz".


      я: Я знаю эту задачу.


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


      я: ...


      интервьюер: Вот маркер и губка.


      я: [задумался на пару минут]


      интервьюер: Вам нужна помощь, чтобы начать?


      я: Нет, нет, все в порядке. Итак, начнем с пары стандартных импортов:


      import numpy as np
      import tensorflow as tf

      интервьюер: Эм, вы же правильно поняли проблему в fizzbuzz, верно?


      я: Так точно. Давайте обсудим модели. Я думаю тут подойдет простой многослойный перцептрон с одним скрытым слоем.

      Читать дальше →
    • Ищем уязвимости с помощью google

        Любой поиск уязвимостей на веб-ресурсах начинается с разведки и сбора информации.
        Разведка может быть как активной — брутфорс файлов и директорий сайта, запуск сканеров уязвимостей, ручной просмотр сайта, так и пассивной — поиск информации в разных поисковых системах. Иногда бывает так, что уязвимость становится известна еще до открытия первой страницы сайта.

        Читать дальше →
      • Обновленный Codebattle: игра для программистов

          Привет, Хабр!



          Три недели назад мы (дружная команда образовательного проекта Хекслет) опубликовали пост про наш новый проект — игру для программистов Codebattle. Напомню, идея игры очень простая: вам и сопернику дается задача, вы решаете ее на выбранном вами языке. Вы видите код соперника в реальном времени, результаты запуска тестов и можете общаться с ним и зрителями в чате. Кто первый решит задачу (удовлетворит тестам) — тот победил.

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

          Встречайте — обновленный Codebattle! Вкратце:

          1. Хабраэффект нам не страшен (тьфу-тьфу-тьфу)
          2. Читерить больше не получится (нельзя подогнать решение под тесты)
          3. Добавлять языки стало проще (сейчас уже есть clojure, ruby, js, python, php, java, erlang)

          Подробности под катом →
          Читать дальше →
        • Почему команда SoundCloud перешла на микросервисы

          • Перевод
          Ранее мы уже рассказывали о дата-центре фотосервиса imgix, описывали детективную историю поиска проблем с SSD-дисками проекта Algolia, а сегодня представляем вашему вниманию обсуждение того, как команда стримингового сервиса SoundCloud перешла на использование микросервисов.

          Читать дальше →
          • +34
          • 29,8k
          • 6