За долгие годы работы с компьютером многие люди вырабатывают собственный стиль работы, который позволяет им быть эффективными, но в то же время большинство пользователей ПК часто просто не могут представить себе, что ежедневные задачи можно делать как-то по-другому. Если смотря на экран коллег, вы видете как они печально передвигают мышкой, пытаясь серди десятка открытых окон найти нужное, вам возможно приходило в голову, что должен быть способ получше.
[Read More]F-ограниченный полиморфизм на Python
Параметрический полиморфизм - это свойство языка, которое позволяет в некоторых ситуациях
выполнять один и тот же код для разных типов.
В Python
3.12 ввели гораздо ввели гораздо более удобный синтаксис для выражения параметрического полифорфизма (т.е. удобную форму для дженериков).
Применяем функциональную композицию к ООП коду
На настоящий день наиболее популярным стилем программирования на Python
будет являться ООП.
И это несмотря на то, что язык является мультипарадигмальным и поддерживает множество подходов к написанию программ.
Так, например, достаточно много средств стандартной библиотеке позволяют писать на Python
в вполне вполне функциональном стиле.
И также в последнее время появилось множество библиотек, для, например, реактивного подхода к программированию на Python
.
Об информационной избыточности
Много лет назад ключевым походохом к хранению информации была эффективность с точки зрения оптимизации хранимого объема. Нормализованные модели данных позволяют хранить данные в максимально эффективном виде, также обновлять и поддерживать консистентность данных однако у этого подхода есть недостатки: если наша модель достаточно сложная, на получение данных для визуализации могут понадобиться десятки JOIN’ов
[Read More]Как спроектировать долгосрочное API.
Многие современные API сужествуют годами и вынуждены поддерживать обратную совместимость на протяжении десятков версий. Одна из самых известных библиотек для линейной алгебры и прочих математических вычислений - NumPy сужествует с 2005 года и с тех пор поддерживает постоянство в дизайне API.
[Read More]Группировка в программах
Методы или функции, которые пишем в наших программах, очень часто имеют несколько логических частей. Например, в рамках одной функции, если нам нужно отправить сообщение на сервер, мы можем 1) проверить его доступность, затем 2) отправить сообщение, и потом 3) проверить что сообщение было доставлено. Но достаточно ли такой подход отвечает принципу единственной ответственности SRP?
[Read More]Дефункционализация, CPS и Pandas
Использование apply в питоновской библиотеке Pandas
Типичное преобразование данных при работе с Pandas
зачастую выглядит следующим образом:
import pandas as pd
df = pd.DataFrame({
'City': ['Moscow', 'Stavropol', 'Volgograd'],
'Temperature (C)': [22, 28, 18]
})
def celsius_to_fahrenheit(c):
return (c * 9/5) + 32
df['Temperature (F)'] = df['Temperature (C)'].apply(celsius_to_fahrenheit)
В целом, чаще всего мы просто ходим совершить некоторое преобразование данных в столбце (или создать новый) при помощи какой-либо нашей функции, которая отражает ту или иную прикладную логику.
[Read More]Timestamp вместо логических значений в БД
Один из самых простых, и в то же время эффективных трюков, которые я узнал недавно, связан с хранением логических значений в базе данных. Очень часто информация, для хранения которой мы должны использовать булевый столбец, тесно связана с информацией о том, когда это значение было изменено, даже если это не очевидно с первого взгляда:
[Read More]Эффективная отладка
Шутка про то, что программисты не всё-таки 100% времени проводят отлаживая код (иногда они еще создают новые баги) родилась совсем не на пустом месте. Значительную часть времени разработчики проводят, пытаясь отловить и исправить всевозможные ошибки в зачастую сложных и запутанных системах.
[Read More]Удобство против возможностей
Простые и сложные решения
В мире программирования каждое техническое решение — это баланс между удобством сейчас и возможностями в будущем. Это особенно очевидно на примере двух систем кодирования символов: ASCII и Unicode. Их сравнение ярко демонстрирует, как выбор между текущим удобством и будущими возможностями может влиять на разработку программного обеспечения и обработку данных.
[Read More]