jenyay.net
252 subscribers
113 photos
1 video
2 files
271 links
Программирование (в основном на Python, но не только), Open Source, а ещё сюда публикую новости своего сайта https://jenyay.net

Для связи с автором канала пишите на @jenyay
Download Telegram
А расскажу-ка я вам об одной авантюре, в которую недавно ввязался. Ну, может это и не совсем авантюра, но по крайней мере дело, которое требует к себе особого внимания. Если совсем коротко, то несколько месяцев назад я начал писать книгу про Python.

Как-то так случилось, что весной (кажется) мне написал представитель одного издательства, которое выпускает программерские книжки (Олег, если Вы это читаете, то привет Вам) с вопросом, не хочу ли я написать книжку. А я как раз в это время готовил материал и одновременно вел занятия со студентами по основам Python. С мыслью "а почему бы и нет" я взялся за это дело. Так что, я уже несколько месяцев пытаюсь складывать буквы в слова. Кроме букв иногда даже попадаются странные закорючки.

Ориентируюсь на наших студентов, которые учатся не на программистов, но с расчетом на то, что Python они будут использовать для инженерных задач и обработки данных. Поэтому в книге не будет ничего про веб-программирование, глубоко копать ООП тоже не будем (никакого множественного наследования и метаклассов), но при этом надо будет поподробнее рассказать про библиотеки Numpy, SciPy, Matplotlib и Pandas. При этом подразумевается, что студенты уже имеют представление о том, что такое программирование, переменные и циклы, и, возможно, даже поверхностно знают C.

Я думаю, что тут я буду периодически рассказывать, как продвигаются дела.

#книга_про_python
👍14🔥6
Расскажу поподробнее о том, как идут дела с написанием книги про Python, о которой я писал в прошлом посте.

По предварительным прикидкам книга должна получиться примерно на 500 страниц (скорее всего чуть больше) и состоять из двух частей. В первой будет включать в себя описание синтаксиса языка Python, а вторая посвящена разным математическим и околонаучным библиотекам. Сейчас написал примерно 180 страниц. Все начинается с распухшего введения с описанием того, где используется Python и зачем он нужен инженерам, тут же рассказываю, чем интерпретируемые языки отличаются от компилируемых и почему Python медленный с упоминанием средств, которые все-таки могут поправить эту ситуацию.

Дальше идут главы про основные типы в Python, в которые вплетаются описания конструкций языка. Сначала рассказываю про числовые типы (int, float и complex), затем идет глава про списки, кортежи и массивы с упором на списки и отсылкой на то, что массивы в NumPy будут интереснее, и про них поговорим отдельно. Есть отдельные главы про словари и множества. Строкам посвящены целых две главы: одна про сам класс str и его методы, а вторая про способы форматирования и работы с шаблонами (про оператор % с указанием на то, что он уже устарел, про метод str.format() и про f-строки).

Сейчас пишу главу про функции. По плану на них заложил 40 страниц, может быть удастся ее немного ужать, но не уверен, что получится. Очень хочется доходчиво рассказать про все возможные способы передачи параметров, включая недавно появившиеся символы / и * для разделения позиционных и именованных параметров, потому что все это используется в NumPy.

#книга_про_python
👍122
Покажу, как идут дела с написанием книги про Python. Сразу, как только я взялся за это дело, я завел электронную табличку, в которой каждый раз после работы над книгой помечаю, сколько на данный момент написано страниц. Получается интересный график, а заодно для себя отмечаю, сколько я успеваю написать за день или неделю. Книгой я занимаюсь в свободное от работы время, но стараюсь хотя бы по часу в день на нее выделять.

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

А еще на графике можно заметить явно выделяющиеся участки. Первый - с начала и до 2 августа - там я пытался войти в ритм, пытался понять, в каком стиле писать, и там были самые скучные главу - общие слова про язык, базовые типы и Python как калькулятор. В это время график был неровный и дерганный. Второй участок - со 2 по 12 августа был полностью горизонтальный, потому что начался отпуск и я с друзьями уехал в поездку по Пермскому краю. По возвращению график стал заметно быстрее расти - это я из поездки вернулся, но отпуск на работе еще продолжался. Ну и с начала сентября пока растет тем же темпом, но скорее всего сейчас должен немного замедлиться, потому что часть времени сейчас уходит на подготовку к занятиям со студентами (и еще внезапно аспирантами). А так для себя я решил, что если за неделю я продвигаюсь на 15 страниц, то это нормально.

#книга_про_python
👍9🔥82
Иногда написание книги про Python идет не по тому сценарию, который изначально планировался.

Вот, например, написал я главу про функции. Следующей по первоначальной задумке должна была быть глава про typing - это когда в коде объявляются желаемые типы переменных (например, в аргументах функции и в качестве возвращаемого значения), но эти типы не влияют на выполнение кода, а используются в умных редакторах для того, чтобы ругаться на потенциальных ошибки, а также в линтерах, которые делают то же самое, но в консоли. В этой главе я планирую упомянуть один из таких линтеров - mypy, который устанавливается как пакет через pip. Но до этого я нигде не писал про установку сторонних пакетов, а один из принципов, которого я стараюсь придерживаться в книге - использовать только то, что раньше было описано. И тут началось...

Надо сначала написать главу про установку библиотек. Но библиотеки - это по сути пакеты модулей, и значит, надо предварительно про них тоже рассказать, показать разные способы импорта и то, как оформлять модули и пакеты модулей в своем коде, а заодно показать, что происходит при импорте и зачем нужна переменная _ _name_ _. Только после этого можно рассказывать про установку сторонних библиотек и про pip. Но после того, как рассказал про pip, просто напрашивается написать про виртуальные окружения, рассказать, почему не надо устанавливать модули глобально, показать для начала, как пользоваться стандартным инструментом venv. Дальше было как в тумане..., но в итоге я описал еще Poetry и uv, предназначенные для работы с виртуальными окружениями и для управления пакетами.

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

PS. Забавно, что "uv" в русской раскладке печатается как "гм". Если в книге где-то будет встречаться "гм", то это не значит, что здесь надо остановиться и глубокомысленно задуматься, это значит, что где-то я этот косяк пропустил.

#книга_про_python
👍7😁2
Давно не писал о том, как идут дела с написанием книги про Python, а меня об этом в оффлайне уже несколько раз спрашивали. Поэтому решил, что раз в месяц буду писать мини-отчет о прогрессе. Да и самому полезно оглянуться и посмотреть, что за этот месяц было сделано. Картинка с приростом количества страниц от времени прилагается.

Судя по графику, удалось войти в более-менее рабочий ритм. Обычно книгу я пишу вечером после работы и в выходные. В среднем получается в день продвинутся на 2-3 страницы, а за неделю книга увеличивается примерно на 15 страниц. В последнее время прирост немного больше, потому что сейчас начался более длинный код для примеров.

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

В этом месяце написал главу про typing (необязательное указание типов переменных) и три главы про объектно-ориентированное программирование: про создание классов, наследование и полиморфизм в виде перегрузки операторов.

Сейчас получается вот такая структура книги:

1. Введение.
2. Первый взгляд на Python.
3. Простейшие типы в Python.
4. Пишем скрипты на Python.
5. Массивы, списки и кортежи.
6. Перебор элементов коллекций с помощью оператора for.
7. Словари.
8. Множества.
9. Строки.
10. Форматирование строк.
11. Функции.
12. Функции как объекты.
13. Модули.
14. ООП. Создание классов.
15. ООП. Наследование.
16. ООП. Полиморфизм и перегрузка операторов.
17. Установка библиотек.
18. Виртуальные окружения.
19. Typing.

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

#книга_про_python
👍17
В книге про Python, которую пишу, уже появилось упоминание Python 3.14. Дело в том, что в будущей версии, которая выйдет только во второй половине 2025 года (обычно в октябре), в класс Path из модуля pathlib наконец-то добавили методы copy() и copy_into() для копирования файлов и папок. Не мог не упомянуть этого радостного факта и не написать пару примеров с их использованием (они уже даже работают!).

Для установки Python 3.14, который сейчас находится еще в состоянии глубокой альфы, использовал pyenv.

#книга_про_python #python #программирование
👍8🔥1🎉1
Закончился ноябрь, надо подвести месячный итог написания книги про Python.

За этот месяц написал три с половиной главы:
* про исключения - 21 страница;
* про запись и чтение файлов, и тут же про двоичные строки - 24 страницы.
* про работу с файловой системой (модули os.path, shutil и pathlib) - 25 страниц.
* часть главы про обработку параметров командной строки - пока это скромные 6 страниц.

Итого, за месяц написал 76 страниц. Это очень много для этих глав. Изначально на исключения я закладывал 10 страниц, и все, что касается работы с файлами должно было занимать 20 страниц.

Всего на сегодняшний день написано 402 страницы. Потом во время вычитки придется все это сокращать раза в два.

По планам в декабре хочу написать главы про регулярные выражения и unit-тесты. После этого, наконец, можно будет перейти к описанию библиотек NumPy, Matplotlib и Pandas.

#книга_про_python
👍11🔥4
Как-то неожиданно быстро закончился декабрь. Полноценные итоги года писать не хочу, но итоги месяца по поводу написания книги про Python подвести надо. Этот месяц получился не такой продуктивный, как прошлый, если считать по количеству написанных страниц, хотя по количеству написанных глав вполне себе ничего.

Сначала я дописал 22-ю главу про разбор параметров командной строки. В ней сказал, зачем это надо, как извлекать параметры из переменной sys.argv, показал, насколько это муторно, если делать множество разных именованных параметров. После этого начал рассказывать про использование стандартной библиотеки argparse, о которой когда-то писал большую статью у себя на сайте. Для книги все писал заново и сильно сократил.

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

Написал 24-ю главу про тестирование. Это пока самая спорная глава, и в случае сильного сокращения она первая полетит в корзину. Я разрывался между тем, чтобы описывать стандартный модуль unittest и библиотеку pytest, которую сейчас все используют. Но все-таки решил остановиться на unittest по нескольким причинам. Во-первых, полезно иметь представление о возможностях стандартной библиотеки. Во-вторых, для маленьких скриптов, которые часто используются для обработки данных, обычно не хочется тянуть лишние зависимости, поэтому здесь лучше подойдет unittest. И, в-третьих, если писать про pytest, то надо писать про фикстуры, в которых используется оператор yield, а я до этого ничего не писал про создание генераторов, и хотел бы этой темы избежать. В заключении я сказал, что есть такая замечательная библиотека как pytest со своими особенностями, надеюсь, что это хотя бы простимулирует читателей посмотреть, что это такое. Под конец главы я еще написал раздел про тесты в строках документации.

Глава про тесты была последней, которая была посвящена непосредственно языку Python и стандартной библиотеке. Дальше должны пойти главы, в которых я буду рассказывать про NumPy, Matplotlib и Pandas.

Я уже начал писать главу про NumPy. Пока на протяжении почти 10 страниц описал разные способы создания массивов и начал описывать функции и методы для работы с ними. Стараюсь не сваливаться в пересказ документации, но это сложно, потому что у многих функций есть множество интересных параметров, о которых хочется не просто упомянуть, но и показать примеры их работы.

Кажется, количество глав про NumPy будет несколько больше, чем я ожидал. Всего сейчас уже написано 464 страницы, а я только подхожу к самому интересному.

#книга_про_python
👍11🔥4
Написал в блог традиционный ежемесячный отчет о том, как продвигается написание книги про Python - https://jenyay.net/blog/2025/02/02/kniga-pro-python-progress-za-yanvar-2025-goda/.

Краткое содержание этого поста. Количество страниц перевалило за первоначально планируемые 500, но представитель издательства сказал, что до 700 - это ОК, на эту цифру теперь и ориентируемся.

За последний месяц в первом приближении написал главы про массивы в NumPy, про форматы файлов для хранения данных (текст, CSV, HDF5, Zarr и упомянул еще NetCDF) и про основы работы с библиотекой Matplotlib для построения графиков.

#книга_про_python
👍7🔥2
В книге про Python добрался до написания главы про библиотеку Pandas, которая предназначена для обработки табличных данных. Для примеров кода надо было или придумать, или найти какие-то наборы данных. Поскольку с фантазией на такие вещи у меня все плохо, начал искать бесплатные датасеты в интернете. Перебрал множество вариантов открытых данных, включая статистику по длине клюва пингвинов и продажам автомобилей в Индии, пока не наткнулся на отличный датасет, в котором содержатся все космические запуски разных стран, начиная с запуска первого советского спутника в 1957 году и до 2022 года. Эти данные включают информацию об организациях, отвечающей за запуски, место запуска, дата и время, название космического аппарата, название миссии, сведения о том, используется ли до сих пор такой же тип ракеты-носителя, бюджет миссии (если он известен), и статус миссии - успех или провал. Прям хорошие данные для примера в книге, рассчитанной на инженеров.

#книга_про_python
👍9🔥9
Уже несколько дней назад закончился февраль, а я еще не написал традиционного поста о том, как продвигается написание книги по Python*.

В прошлом месяце я занимался написаним двух глав. Первая из них посвящена разным видам графиков, которые может строить библиотека Matplotlib. Это продолжение предыдущей главы, в которой я описывал основы использования Matplotlib. В новой главе рассказал, как строить графики в виде точек на плоскости (scatter), графики в полярной системе координат (в которой, например, строятся диаграммы направленности антенн), гистограммы, круговые диаграммы в виде пирога, нарезанного на сектора, трехмерные поверхности, линии уровня, а также векторные поля и отдельные вектора.

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

А дальше мне останется написать только две главы, одна будет посвящена JupyterLab, а другая более прикладным инженерным и научным задачам: преобразование Фурье, интерполяция данных, аппроксимация, решение систем уравнений, использование специальных функций вроде функций Бесселя и Ханкеля. Может быть придется что-то сократить, посмотрим по объему.

На сегодня написано 590 страниц. Если следующие две главы вместе не превысят 60 страниц, то этой будет замечательно.

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

#книга_про_python
🔥9👍3
Я долго держался, старался в книге про Python придумывать простые примеры, чтобы не надо было писать большие пугающие формулы. Но в главе, которая, возможно, будет последней, прорвало. Эта глава посвящена библиотеке SciPy и научным вычислениям, и я решил, что здесь можно. В итоге в разделе, в котором пишу про специальные функции, привожу пример, который я даю студентам в качестве домашнего задания - рассчитать эффективную площадь рассеяния идеально проводящей сферы, а для этого используются сферические функции Бесселя и Ханкеля. После этого идет раздел про преобразование Фурье, а поскольку книжка больше про программирование, а не про физику, надо хотя бы поверхностно объяснить, что это такое и где используется. И вот для того, чтобы объяснить, что это такое, пошли формулы с интегралами. Потом еще будут формулы для аналитического расчета спектра некоторых сигналов, но там будет уже не так страшно.

Жаль только, что потом все эти формулы надо будет перенабирать в Ворде, а то я сейчас весь текст пишу в LibreOffice под Линуксом и в либреофисном редакторе формул.

#книга_про_python
🔥7👍6
Ну что ж, кажется, я дописал последнюю главу для книги про Python. Сейчас получилось 650 страниц и 31 глава. Последние две главы посвящены научным расчетам. В предпоследней главе я писал про библиотеку SciPy, модуль с физическими константами, про специальные функции на примере функций Бесселя и про функции для преобразования Фурье и все, что около них. Последняя глава посвящена более продвинутой консоли IPython, блокнотам Jupyter и JupyterLab - среды, которая позволяет перемежать код на Python с результатами выполнения, графиками, формулами и другим оформлением.

Теперь начну опять с первой главы все перечитывать и исправлять. Несколько человек мне писали, что готовы стать бета-тестерами книги. Напишите, плз, мне в личку еще раз (@jenyay), чтобы я никого не забыл. И по мере выправления глав я буду вам показывать, что получается.

#книга_про_python
8🔥15👍6🎉1
Я сейчас сюда мало пишу, да еще и разработку OutWiker пока поставил на паузу, скорее всего до начала лета. Все свободное время и силы сейчас уходят на дописывание книги про Python. В конце мая - начале июня обещал отдать текст в издательство, а перед этим надо успеть перечитать и выправить то, что я уже понаписал (31 главу + введение). Правка первых глав - это самая тяжелая задача, потому что, когда я их писал, то еще не знал, как лучше оформлять код, в каком стиле писать и т.д. Поэтому сейчас все главы привожу к одинаковому стилю и оформлению.

Огромное спасибо тем, кто вызвался почитать то, что получается. Я вам прям очень признателен. Мало того, что уже удалось выявить пару фактических косяков, так вы еще так скрупулезно подошли к вычитыванию и выправлению стиля и литературности, что кажется, вы оставите без работы редактора в издательстве. :) Почти со всеми исправления стиля я соглашаюсь, но где-то переписываю текст немного по-другому.

#книга_про_python
👍15🔥2
Мое молчание здесь затянулось до неприличия. Сейчас полностью сконцентрировался на дописывании книги про Python. Точнее, уже даже не дописывании, а вычитывании и оформлении того, что уже написано. Всю остальную свою деятельность в свободное время пока поставил на паузу.

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

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

#книга_про_python
👍16🔥132🎉1
Когда выйдет книга про Python, которую я должен в этом месяце отдать в издательство, надо будет мне тоже ее почитать - вдруг узнаю что-нибудь новое. В процессе окончательной подготовки глав уже несколько раз с удивлением обнаруживал описание некоторых возможностей, о которых уже сам забыл. А дело постепенно движется к финишу, сейчас выправляю 25-ю главу из 31.

#книга_про_python
👍25🔥3😁21😱1🎉1
Уффф... Наконец-то, отправил текст книги про Python издателю. В последние недели занимался оформлением уже написанных глав и внесением правок от бета-тестеров. Благодаря им книга стала намного лучше, они находили некорректные формулировки, небрежное использование терминов, орфографические, пунктуационные и стилистическое ошибки. После такого количества найденных ошибок мое ЧСВ относительно грамотности письма упало ниже плинтуса. Зато я узнал, что я очень люблю ставить запятые где ни попадя (при внимательном чтении я сам не понимал, зачем я их туда ставил). В общем, огромное им спасибо!

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

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

#книга_про_python
🔥16🎉9👍4😁1