Как стать автором
Обновить
253
0.2

Пользователь

Отправить сообщение

Чем программирование сегодня отличается от программирования 20 лет назад?

Время на прочтение 4 мин
Количество просмотров 87K


Я увидел этот вопрос на Quora и начал писать ответ. Но ответ получился слишком большим, так что я превратил его в эту статью.


Вот часть изменений в случайном порядке, которые я заметил в программировании за последние 20 лет:


  • Многие концепции, которые были лишь теоретическими 20 лет назад, сегодня широко применяются на практике. Например, такие функциональные парадигмы как неизменяемость объектов, хвостовая рекурсия, ленивые коллекции, сопоставление с шаблоном, функции первого класса и взгляд свысока на тех, кто всё это не использует.
  • «Десктопным приложением» многие неиронично называют упакованный браузер со страницей по умолчанию и без адресной строки.
Читать дальше →
Всего голосов 170: ↑168 и ↓2 +166
Комментарии 251

Что принёс нам Pandas 1.0

Время на прочтение 2 мин
Количество просмотров 14K


9 января состоялся релиз Pandas 1.0.0rc. Предыдущая версия библиотеки — 0.25.


Первый мажорный релиз содержит множество замечательных нововведений, в том числе улучшенное автоматическое суммирование датафреймов, больше форматов вывода, новые типы данных и даже новый сайт документации.


Все изменения можно посмотреть здесь, в статье же мы ограничимся небольшим, менее техническим обзором самого главного.

Читать дальше →
Всего голосов 40: ↑40 и ↓0 +40
Комментарии 6

Повышение продуктивности при работе с Jupyter Notebook за 5 минут

Время на прочтение 2 мин
Количество просмотров 40K

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


0. Основные горячие клавиши


  • Esc: Переключение между режимом выполнения и редактирования
  • A: Добавление пустой ячейки сверху
  • B: Добавление пустой ячейки снизу
  • DD: Удаления ячейки
  • C: Копирование ячеек
  • X: Вырезание ячеек
  • V: Вставка ячеек

1. Перезапуск блокнота


Для рестарта просто нажмите ESC + 00.


Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 0

Отслеживаем прогресс выполнения в Python

Время на прочтение 2 мин
Количество просмотров 143K

Зачем нужны индикаторы прогресса?


Индикаторы прогресса (progress bar) — визуальное отображение процесса работы. Они избавляют нас от необходимости беспокоиться о том, не завис ли скрипт, дают интуитивное представление о скорости его выполнения и подсказывают, сколько времени осталось до завершения.


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

Читать дальше →
Всего голосов 43: ↑42 и ↓1 +41
Комментарии 11

Создаём линзы для SnapChat с использованием pix2pix

Время на прочтение 3 мин
Количество просмотров 4.3K

Почти такой же заголовок носит и моя предыдущая статья, с той лишь разницей, что тогда я создавал линзы для SnapChat алгоритмически, используя dlib и openCV, а сегодня хочу показать, как можно добиться результата, используя машинное обучение. Этот подход позволит не заниматься ручным проектированием алгоритма, а получать итоговое изображение прямо из нейронной сети.


Вот что мы получим:


Всего голосов 10: ↑10 и ↓0 +10
Комментарии 0

Новые фичи Python 3.8 и самое время перейти с Python 2

Время на прочтение 3 мин
Количество просмотров 41K

Наступил 2020 год, а значит, Python 2 перестал поддерживаться. Если быть совсем точным, то основные разработчики уже перестали заниматься веткой, а выход релиза 2.7.18, приуроченный к PyCon US в апреле 2020 года, ознаменует полное прекращение любой активности, связанной с Python 2.


С другой стороны, совсем недавно состоялся релиз Python 3.8, добавивший немного синтаксического сахара в язык. Python 3.9 же ожидается ещё нескоро, да и пока не похоже что добавит в язык что-то интересное.


Так что если вы вдруг ещё не отказались от Python 2, то дальше тянуть смысла просто нет: поддержка второй версии уже прекратилась, а переход сразу на 3.8 позволит использовать язык в его самом актуальном состоянии ещё долгое время.


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

Читать дальше →
Всего голосов 69: ↑67 и ↓2 +65
Комментарии 75

Что добавят в JavaScript уже в 2020 году

Время на прочтение 4 мин
Количество просмотров 21K

Недавно опциональный доступ к аттрибутам (Optional Chaining) и значение по умолчанию для атрибутов (Nullish Coalescing) перешли на последний, четвёртый этап процесса TC39.


На практике это означает, что эти и другие нововведения станут частью стандарта JavaScript уже в этом, 2020 году. Их мы и рассмотрим в этой статье.


Отслеживать поддержку браузерами можно здесь («2020 features») — прим. перев.


Читать дальше →
Всего голосов 46: ↑44 и ↓2 +42
Комментарии 24

Краткая и на 146% точная история языков программирования

Время на прочтение 4 мин
Количество просмотров 82K


1800


Жозеф Мари Жаккар учит ткацкий станок читать перфокарты, создавая первый многопоточный процессор. Изобретение в штыки приняли ткачихи, которые уже тогда что-то подозревали.


1842


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

Читать дальше →
Всего голосов 195: ↑181 и ↓14 +167
Комментарии 154

Задачки по программированию — плохой способ оценки квалификации Senior Developer'а

Время на прочтение 3 мин
Количество просмотров 60K

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


Читать дальше →
Всего голосов 123: ↑112 и ↓11 +101
Комментарии 392

Советы по написанию самодокументируемого кода

Время на прочтение 3 мин
Количество просмотров 7.1K

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


Давайте разберём несколько важных принципов создания самодокументируемого кода.


Читать дальше →
Всего голосов 19: ↑17 и ↓2 +15
Комментарии 17

4 крутых функции Numpy, которые я использую постоянно

Время на прочтение 2 мин
Количество просмотров 16K

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


Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 1

Используем console.log() в Chrome на полную

Время на прочтение 3 мин
Количество просмотров 40K


Сложно представить себе разработку на JS без вывода информации в консоль. Говоря метафорически, console.log() — лекарство от большинства болезней кода.


Отладка — почти как расследование преступления, где главный преступник тоже вы — Филипе Фортес


Но помимо повсеместно используемой функции console.log(), есть ещё много инструментов, позволяющий сильно упростить процесс. Давайте разберём некоторые из них на простых примерах.

Читать дальше →
Всего голосов 25: ↑20 и ↓5 +15
Комментарии 13

Инстанцирование в Python

Время на прочтение 4 мин
Количество просмотров 37K

Допустим, у вас есть класс Foo :


class Foo(object):
    def __init__(self, x, y=0):
        self.x = x
        self.y = y

Что происходит, когда вы создаёте его объект?


f = Foo(1, y=2)

Какой метод вызывается первым при этом вызове Foo? Большинство новичков, да и, возможно, немало опытных питонистов тут же ответят: «метод __init__». Но если внимательно приглядеться к сниппетам выше, вскоре станет понятно, что такой ответ неверен.


__init__  не возвращает никакого результата, а Foo(1, y=2), напротив, возвращает экземпляр класса. К тому же __init__ принимает self в качестве первого параметра, чего не происходит при вызове Foo(1, y=2). Создание экземпляра происходит немного сложнее, о чём мы и поговорим в этой статье.

Читать дальше →
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 2

Атрибуты и протокол дескриптора в Python

Время на прочтение 6 мин
Количество просмотров 15K

Рассмотрим такой код:


class Foo:
    def __init__(self):
        self.bar = 'hello!'

foo = Foo()
print(foo.bar)

Сегодня мы разберём ответ на вопрос: «Что именно происходит, когда мы пишем foo.bar




Вы, возможно, уже знаете, что у большинства объектов есть внутренний словарь __dict__, содержащий все их аттрибуты. И что особенно радует, как легко можно изучать такие низкоуровневые детали в Питоне:


>>> foo = Foo()
>>> foo.__dict__
{'bar': 'hello!'}

Давайте начнём с попытки сформулировать такую (неполную) гипотезу:


foo.bar эквивалентно foo.__dict__['bar'] .


Пока звучит похоже на правду:


>>> foo = Foo()
>>> foo.__dict__['bar']
'hello!'

Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 2

Точки входа в Python

Время на прочтение 6 мин
Количество просмотров 29K
Многие думают, что точки входа это такие инструкции в setup.py, которые позволяют сделать пакет доступным для запуска из командной строки. Это, в целом, верно, но возможности точек входа не ограничиваются этим.

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



Осторожно: специфический юмор далее по тексту.
Читать дальше →
Всего голосов 39: ↑39 и ↓0 +39
Комментарии 6

Разбираем WTF задачки в JavaScript

Время на прочтение 2 мин
Количество просмотров 34K


JavaScript язык особенный. Сколько его не изучай, всегда найдутся моменты, которые заставят даже матёрого профессионала начать чесать репу.


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


Задачка 1 — «BANANA»


Читать дальше →
Всего голосов 53: ↑47 и ↓6 +41
Комментарии 108

Самый полезный модуль стандартной библиотеки Python, о котором все постоянно забывают

Время на прочтение 2 мин
Количество просмотров 43K


В Python много отличных доступных «из коробки» модулей. Один из самых полезных — collections. Он содержит «специализированные типы для создания контейнеров», являющихся альтернативами универсальным dict, list, set и tuple. Ниже мы рассмотрим три содержащихся в модуле класса, с которыми большинство питонистов сталкивались, но постоянно забывают применять на практике.

Читать дальше →
Всего голосов 58: ↑49 и ↓9 +40
Комментарии 26

Неэффективная эффективность

Время на прочтение 4 мин
Количество просмотров 8.4K


Вы делаете утренний кофе. Хотите приготовить 2 чашки. Вы:


  • Начнёте кипятить воду на 1 чашку, чтобы вода вскипела пораньше, и одна чашка была готова как можно раньше
  • Начнёте кипятить воду на 2 чашки, чтобы приготовить их одновременно и наиболее эффективно?
Читать дальше →
Всего голосов 21: ↑17 и ↓4 +13
Комментарии 16

Прекратите использовать Else в ваших программах

Время на прочтение 2 мин
Количество просмотров 29K

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


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


Дисклеймер: нижеизложенное — исключительно моё субъективное мнение.


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


Читать дальше →
Всего голосов 78: ↑43 и ↓35 +8
Комментарии 179

Превращаем скрипты в красивые инструменты для машинного обучения

Время на прочтение 6 мин
Количество просмотров 15K

Создаём семантический поисковик с машинным обучением в реальном времени за 300 строк Python кода.

Мой опыт подсказывает, что любой более или менее сложный проект по машинному обучению рано или поздно превращается в набор сложных неподдерживаемых внутренних инструментов. Эти инструменты, как правило, мешанина из скриптов Jupyter Notebooks и Flask, которые сложно развёртывать и интегрировать с решениями типа GPU сессий Tensorflow.


Впервые я столкнулся с этим в университете Карнеги, затем в Беркли, в Google X, и, наконец, при создании автономных роботов в Zoox. Зарождались инструменты в виде небольших Jupyter notebooks: утилита калибровки сенсора, сервис моделирования, приложение LIDAR, утилита для сценариев и т.д.


С ростом важности инструментов появлялись менеджеры. Бюрократия росла. Требования повышались. Маленькие проекты превращались в огромные неуклюжие кошмары.


Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 9

Информация

В рейтинге
2 244-й
Зарегистрирован
Активность