Вы находитесь на странице: 1из 220

https://liveinternet.

club/
ЕВГЕНИЙ ПАВЛОВ

ЗНАКОМЬТЕСЬ, PYTHON
СЕКРЕТЫ ПРОФЕССИИ

Издательство АСТ
Москва
2023

https://liveinternet.club/
УДК 004.43
ББК 32.973
П 12

Павлов, Евгений.
П 12 Знакомьтесь, Python. Секреты профессии / Е. Павлов. —
Москва: Издательство АСТ, 2023. — 224 с. — (Программиро-
вание для всех)
ISBN 978-5-17-156999-0
Очень хочется стать программистом и войти в IT, но не
знаете с чего начать? Поздравляю, в ваших руках учебник
нового поколения — без кучи непонятных слов и кодов
расскажем про инструменты и библиотеки для програм-
мирования на Python. И все это заправлено лайфхаками,
вдохновляющими историями из мира настоящих хакеров
и игрофикацией — потому что обучение не должно быть
скучным.
«Знакомьтесь, Python» — уверенный первый шаг в мир
программирования. Получите базовые знания о сфере IT,
а также найдете ответы на вопросы по типу: с чего начать,
как выбрать профессию, где прокачать скиллы и как подго-
товиться к собеседованию так, чтобы работодатель предло-
жил оффер.
УДК 004.43
ББК 32.973

© Е. Павлов, текст, 2023


© ООО Издательство «АСТ», 2023
ISBN 978-5-17-156999-0 © А. Дремов, 2023

https://liveinternet.club/
Посвящается моим Учителям:
Иван Владимирович Павлов (мой отец)
Виктор Григорьевич Струц (советский инженер)
Михаил Алексеевич Могилевский (первоый директор
ФизМатШколы)
Дмитрий Юрьевич Пучков (ст. о/у Goblin)
Отдаю свой Долг перед Вами:
Сначала вы учили меня.
Теперь я учу других.
Такая вот связь поколений.
Низкий Вам поклон!

P. S. Спасибо Виктории Живиной (редактору) за мораль-


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

https://liveinternet.club/
https://liveinternet.club/
CONCEPT: ДЛЯ КОГО ЭТА КНИГА?
И ДЛЯ ЧЕГО?

Вступление

Э
та книга ответит на самый главный вопрос: как
стать программистом Питона? Я расскажу про
язык Python, про его библиотеки, и про софт, кото-
рым нужно пользоваться. Кроме того, я буду рассказывать
про людей в компьютерной сфере. Каково это — быть про-
граммистом: чем занимаются, чем живут и что умеют. Более
того, в книге-учебнике будут лайфхаки о том, как сохра-
нить мотивацию, распределить силу и расставить приори-
теты.
Язык Python признан самым популярным и эффек-
тивным языком программирования в 2021 году. Он сумел
обойти Java и С — очень серьезных соперников, годами
не пускавших никого на первое место во всевозмож-
ных рейтингах. В чем его преимущество: огромный спрос
на программистов в целом, он очень распространен и, на-
конец, легок в изучении.
Это неприятно, но, чтобы стать программистом — надо
иметь мозоль на заднице. Высиживать перед компьюте-
ром по 12 часов буквально на чистом энтузиазме. Про то,

https://liveinternet.club/
8 Евгений Павлов. Знакомьтесь, Python

что из-за постоянной смены материалов и нововведений,


учиться и обновлять знания придется всю жизнь. Каждый
год появляется что-то новое, а старое безвозвратно уходит
в историю. Иными словами, программисты постоянно изу-
чают новое. Если тебе не нравится сидеть перед компьюте-
ром — ты не сможешь долго продержаться в таком режиме.
Данная книга написана еще и для того, чтобы ты смог уз-
нать побольше о самой профессии программиста. Решить
для себя, нужно тебе такое ремесло или нет. Я помогу тебе
выбрать для себя то, что действительно тебе подойдет; то,
где твои таланты смогут по-настоящему раскрыться. Спо-
соб познания лишь один — пробовать как можно больше
разных вариантов, чтобы найти свой путь. Путь, выбран-
ный сердцем (и немного разумом, естественно).
Даже если ты решишь выбрать дорогу, не связанную с IT,
ты не уйдешь отсюда с пустыми руками. Есть множество по-
лезных навыков, которым можно научиться у программи-
стов и успешно применять их в других областях. Эта книга
о сильных сторонах программирования. Например, как
превращать сложные задачи в простые. Если ты смо-
жешь осознать их, то получишь преимущество в любой об-
ласти, которую выберешь. Познай секреты программистов,
пока другие тебя не опередили.

Как устроена эта книга


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

https://liveinternet.club/
Concept: Для кого эта книга? И для чего? 9

к следующей главе, чтобы прочитать книжку по верхам


и составить общее впечатление.
В том случае, если ты решил вдумчиво изучить одну
главу — ты можешь задержаться и проникнуть в тему дей-
ствительно глубоко. Где-то на последних разделах у каждой
главы есть тексты, которые я писал только для профессио-
налов. Есть раздел, который требует усилий от читателя.
То есть не просто почитать теорию, воспарив над схваткой,
а с головой погрузиться в практику (получив боевой опыт
в программировании). С руками по локоть в коде.

P. S. Если по какой-то причине ты все еще не знаешь ан-


глийского, начни его изучать прямо сегодня! Без англий-
ского ты точно не сможешь разобраться в программиро-
вании. Еще никому не удавалось стать программистом без
знания английского.

P.P.S. Без Linux тоже не обойдется. С пингвином надо


дружить!

Зачем нужна каждая из глав


В предпоследнем разделе каждой главы я буду давать за-
дания, выполняя которые ты постепенно разберешься с Пи-
тоном. Даже если они покажутся тебе легкими — не пре-
небрегай ими. Сложность заданий растет как снежный
ком!
Я расскажу те вещи, которые понадобятся тебе в работе.
Лучше ты узнаешь ее от меня, чем будешь собирать по кро-
хам в интернете. Без этой информации у тебя не будет пол-

https://liveinternet.club/
10 Евгений Павлов. Знакомьтесь, Python

ной картины. А ведь именно этим профи и отличается


от новичка — он видит картину в целом. Мы вместе на-
рисуем карту профессии, чтобы ты смог сам решить, чего
тебе еще не хватает и куда двигаться дальше.
Вторая важная задача — мотивация и поддержка. Рас-
скажу лайфхаки, которые помогут тебе добраться до цели
и продолжить путь дальше; поделюсь вещами, которые по-
могают мне проходить сквозь стену непонимания нового
предмета.
Каждая глава — это отдельное направление в ремесле
программиста. Я хочу показать тебе перспективу и помочь
сделать первые шаги. Моя книга — это именно карта про-
фессии, а не инструкция. Опишу течения и рифы, но плыть
тебе придется самому.

Как выжать максимум

Прочти книгу несколько раз. Я серьезно. С каж-


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

https://liveinternet.club/
Concept: Для кого эта книга? И для чего? 11

Эффективность обучения вырастет в 3 раза, если ты бу-


дешь выполнять задания из книги. Более того, ты смо-
жешь получить достижения, которые перечислены в конце
книги. Чем больше достижений (ачивок, если говорить на-
шим языком) ты соберешь — тем больше удовольствия по-
лучишь от путешествия с книгой по волшебному миру Пи-
тона.
Чтение дополнительной литературы — последний ба-
стион. Я не ожидаю, что из читателей вообще кто-то
до него доберется. Когда прочитаешь книги из списков —
напиши мне. Автор порадуется за тебя и воздаст тебе поче-
сти. Адрес группы я указал вышел — добавляйся!;)

Другие источники

Сверхцель книги — это научить тебя пользоваться раз-


ными источниками.
Django Girls — если тебе нужен легкий вход для про-
граммирования на Питоне, то это оно. Тот самый сайт,
с которого автор начинал свое изучение Python.

https://liveinternet.club/
12 Евгений Павлов. Знакомьтесь, Python

Спецификация Питона и его библиотек — иногда


полезно заглянуть в документацию и узнать еще парочку
способов использовать язык. Увидеть карту языка в целом.
Курсы питона в открытом доступе. Если тебе нужна
лекция по самым азам языка — их тысячи! Тебе просто
надо найти подходящего автора, который объясняет основы
языка именно в твоем стиле. Попробуй почитать разных
авторов, каждый рассказывает немного иначе. Это придаст
объемность твоим знаниям, посмотришь на предмет под
разными углами.
StackOverFlow — в конце концов, все вопросы по языку
приведут тебя сюда. Python — слишком популярный язык,
поэтому на сайте скопилось фантастическое количество от-
ветов на любые вопросы по Питону.
Yandex — в любой непонятной ситуации, спраши-
вай у Яндекса. Нынешнее поколение поисковых роботов
умеет понимать даже самые смутные тени мыслей и да-
вать на удивление хорошие ссылки. Если не получилось
с первого раза, то пробуй переформулировать и спросить
по-другому.
Лайфхак: для обзорных вещей помогает поиск по картинкам.
Многие штуки можно зацепить, если последовать за удачной
картинкой из какой-нибудь презентации.
Из полезного также:
1. Бесплатный курс от Яндекса;
2. основы Python от Яндекса;
3. платный курс от Яндекса.
Т.е. сначала можно пройти бесплатный курс, если го-
тов продолжать — уже подходить к платному обучению.
По окончанию платного, скорее всего, найдешь работу.
ChatGPT — новомодная штука. Кажется, что следую-
щие поколения программистов будут активно пользоваться
ею, чтобы получать резюме по любому объемному чтиву.

https://liveinternet.club/
Concept: Для кого эта книга? И для чего? 13

Удобная штуковина для поверхностного знакомства. Об-


рати внимание на отечественную разработку: GigaChat.
Самый удобный интерфейс — это чат-боты в Телеграм.
Есть бесплатные, есть за деньги, но обычно хватает бесплат-
ных. Сам робот ничего не придумывает, он просто ком-
пилирует выжимку из доступных ему источников, при-
думывая недостающее. Будь осторожен! Робот местами
привирает, да так ловко, что не сразу разберешься. За ним
надо все тщательно перепроверять. Прочитал код робота?
Напиши свой, который будет еще лучше!

Контрольные вопросы:
1. Чем занимаются программисты?
2. Чему можно научиться у программистов?
3. Хочешь ли ты стать программистом на Питоне?
4. Как лучше всего читать эту книгу?
5. Где спросить, если что-то не понятно?

Если ответил на все вопросы, получаешь достижение


#Concept.

В сухом остатке:
1. прочитай книгу несколько раз;
2. выполняй задания в конце каждой главы;
3. работай над мотивацией, чтобы достичь своей цели;
4. изучай английский и Linux;
5. пользуйся разными источниками.

https://liveinternet.club/
https://liveinternet.club/
AGILE: КАК ПЕРЕСТАТЬ ЧИТАТЬ
И НАЧАТЬ ПРОГРАММИРОВАТЬ...
КАК ПОБОРОТЬ ЛЕНЬ. ДОФАМИН.

Что может пойти не так

К
акие сложности могут быть при восхождении
на самую обычную гору? Или при прочтении учеб-
ника? Обычное дело, за которое со временем бе-
рется все меньше и меньше людей. Там же вроде все про-
сто, не так ли?
Я не говорю, что чтение учебника — это подвиг. Но и лег-
ким времяпрепровождением я это не назову. Это работа,
требующая усилий. Учись уважать свой (и чужой) труд,
нельзя обесценивать свои усилия. Если ты не признаешь,
что тратишь силы, то и восстанавливать их не будешь. От-
куда тогда брать энергию для свершений?
Бери и делай! Примерно у 95% процентов на этом этапе
начинаются проблемы. Проблемы, о которых как-то не-
ловко говорить, ведь окружающие поднимут на смех.
Ты и сам наверняка посмеивался над этими неудачниками.
Бывает очень тяжело признаться, что столкнулся с трудно-
стями. Нежелание делать — еще один способ избежать ра-
боты.

https://liveinternet.club/
16 Евгений Павлов. Знакомьтесь, Python

Делать — скучно. Ты тратишь усилия, а мгновенного


результата что-то не видать. Сначала ты просто запомина-
ешь кучу бесполезных вещей, прежде чем их наберется до-
статочно для того, чтобы между ними возникли связи и по-
явилась цельная картина — знание и навык. Вопрос в том,
как много бесполезных вещей ты способен удержать, пре-
жде чем мозг нажмет кнопку стирания памяти, и переклю-
чится на что-то другое.
Если постоянно не получается — это вообще удар
ниже пояса. Зачем делать то, что не получается? Суть в том,
что как только ты начинаешь делать что-то новое — случа-
ются ошибки. Иначе ты бы давно это делал. Есть отличный
способ не делать ошибки — просто не делать ничего но-
вого. Никогда не пытайся выйти за границы своих возмож-
ностей и все будет в порядке (сарказм). Как люди становятся
успешными? Они совершают ошибки, намного больше
ошибок, чем обычные люди. Секрет в том, что они не оста-
навливаются. Продолжают пытаться и совершать все новые
и новые попытки. Однажды у них это получается. Или нет.
Я считаю, что стоит рискнуть!
Потому что мотивация на нуле, а у всех людей раз-
ный уровень дофамина. И если чемпион сможет вывезти
на характере, то обычный человек все это бросит при
первом же затруднении. Пойдет смотреть мультики. Над
депрессией смеются только те, кто никогда ее не испы-
тывал: когда мир теряет краски; еда на вкус как картон;
а внутри пустота, которую ничем не заполнить, ведь все
бессмысленно. Это вопрос химии в голове, такое нельзя
просто отменить. Нельзя просто встать и пойти, если
тебе прострелили колено, но люди вообще-то очень
упорные. Есть лекарства, есть программы реабилитации,
которые помогают вылезти из этой ментальной западни.

https://liveinternet.club/
Agile: Как перестать читать и начать программировать... 17

У всех бывают минуты слабости, вопрос лишь в том, хо-


чешь ты из этого выбраться или хочешь остаться там, где
ты сейчас.

Есть мечта — беги к ней.


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

Боль и унижение — часть настоящей учебы. Боль —


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

Мы рубим ступени. Ни шагу назад!


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

В этой главе расскажу пару лайфхаков, как преодо-


леть долину боли и унижения; откуда брать мотивацию

1
Полозкова Вера. «Стихи из онлайн», 2013–2017.
2
Владимир Высоцкий. Из фильма «Вертикаль». 1966.

https://liveinternet.club/
18 Евгений Павлов. Знакомьтесь, Python

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


слабости; куда вкладывать силы в минуты энтузиазма.
Чтобы вынырнуть на той стороне и, наконец, запустить
свою первую программу на Python. Это сладкое чувство,
когда твой код наконец скомпилировался без ошибок и за-
пустился…

Первый шаг

Самый первый лайфхак: делай Minimal Value Product


(MVP). Что даст результат, но при этом не потребует много
усилий? Первый результат поможет тебе понять, что ты
на верном пути. Когда есть успешный опыт, его легче по-
вторить и развивать дальше.

В нашем случае это программа из одной строчки:

print (‘Hello World’)

Для начала будет достаточно написать эту строчку в бра-


узере на сайте с он-лайн компилятором Питона (их ты-
сячи!). Я просто поискал в Гугл «Python online» и открыл
первый попавшийся.
Кстати, там уже была написана эта строчка для примера
работающей программы — очень удобно!

Если у тебя получилось написать первую программу, полу-


чай достижение #HelloWorld.

https://liveinternet.club/
Agile: Как перестать читать и начать программировать... 19

А теперь две строчки:

name = ‘Cool Hacker’


print (f’{name} is here!’)

С непривычки ты ничего не почувствуешь. Научись ло-


вить эти маленькие удовольствия от маленьких побед. А за-
тем еще и еще. Для адекватной работы мозга постоянно
нужны небольшие успехи. Так ты понимаешь, что дви-
жешься в нужном направлении и становишься увереннее
в своих действиях.
Запусти рабочую программу. Дописывай к ней все но-
вые и новые усложнения. Если что-то не заработало — ты
всегда знаешь после какого шага она перестала работать.
Откатись на шаг назад и убедись, что старая версия все еще
работает, затем накати изменения и разберись, что в них
пошло не так.
Аккуратное сохранение успешных вариантов и неболь-
шие изменения до следующей версии — залог успеха.
В умных книжках эта методология называется Agile.

Делай перерывы
Уперся в проблему? Зафиксируй ее, чтобы описать под-
робности другому. Сохрани свою работу. Сделай копию
и сохрани ее в надежное место. Например, в Git, про него
расскажу позднее. Сделай перерыв. Утро вечера мудре-
нее. Попей какао, посмотри в окно, разомнись, походи
по дому. Главное — не переключаться на посторонние
вещи. Сидеть в интернете или слушать радио — запрещено!

https://liveinternet.club/
20 Евгений Павлов. Знакомьтесь, Python

Второй лайфхак: в случае затруднения обязательно


сделай паузу. Чтобы мысль дошла до лобных долей и на-
чала там вариться — нужно время, зато твоя миндалина
(миндалевидное тело — отдел мозга) дает быстрый ответ!
И если этот ответ не срабатывает, 95% людей разворачива-
ются и уходят. Не окажись среди этих неудачников!

В нашем мозгу есть две системы для принятия реше-


ний:
Система 1: быстрая и не требует усилий.
Система 2: медленная и тяжелая.

Почитай у Канемана, который придумал эту модель. Да-


ниэль реально шарит в этой теме. Даже книжку написал:
«Думай медленно… решай быстро».
Проблема в том, что занимаясь программированием,
ты заставляешь работать Систему 2 в полную силу. Это как
мешки с песком таскать — очень, очень тяжело. А с не-
привычки еще и больно. Большинство программистов —
интеллектуальные качки. Они любят и умеют работать го-
ловой. Терпят боль, шатают проблему, пока не находят
решение. И в этом наш главный секрет!
Да, со временем большинство задач становятся знако-
мыми, Система 1 начинает щелкать их как орешки. На-
пример, шахматисты очень редко думают по-настоящему.
Они натренировали свою нейронную сеть решать шахмат-
ные задачи, поэтому решение шахматных партий для них
не требует усилий. Такая же история с управлением ав-
томобилем: опытный водитель реагирует без раздумий,
на рефлексах, моментально принимает решения в самых
сложных дорожных ситуациях.
Сложность в том, что программирование никогда не бу-
дет знакомым. Ты постоянно будешь сталкиваться с но-

https://liveinternet.club/
Agile: Как перестать читать и начать программировать... 21

выми ситуациями и разбираться в них с нуля. Все еще хо-


чешь программировать или уже сдулся?

Как съесть слона


Слона едят по кусочкам. Если перед тобой стоит огром-
ная задача, раздели ее на части и составь расписание. За-
крывай небольшие задачи день за днем. Хитрость в том,
чтобы не останавливаться. Бывают энергичные, наполнен-
ные энтузиазмом и решимостью дни, когда работа спо-
рится. Ветер дует в спину. Сложное дается легко, с первого
раза получаются даже самые непонятные моменты.
Но бывают и неудачные дни, когда нет ресурсов и все ва-
лится из рук. Не беда! Сделай план «минимум» и жди по-
путного ветра. Составляй минимальный план так, чтобы ты
смог сделать его даже в самых плохих обстоятельствах.
Если ты пропустил один день — не вини себя. Вместо
этого сделай все, чтобы завтра обязательно сделать запла-
нированное. Устрани препятствия и помехи, придумай
как помочь себе. Вместо бесполезного чувства вины, думай,
как вернуться к своей задаче.

Тихо-тихо ползи, улитка,


По склону Фудзи,
Вверх, до самых высот.3

Я учу английский на телефоне с помощью приложения


DuoLingvo4. Мой минимальный план — это 3 минуты утром
3
Хокку Кобаяси Исса, 1763–1828.
4
Бесплатная платформа для изучения языка и краудсорсинговых пере-
водов.

https://liveinternet.club/
22 Евгений Павлов. Знакомьтесь, Python

и 3 минуты вечером. Два урока, скрипя зубами, я стара-


юсь делать всегда. Скромные успехи? Только благодаря ми-
нимальному плану я вообще зашел так далеко. Попытки
учить много не дали бы таких результатов из-за выгорания.
Резво начал, да быстро выдохся. На дальних дистанциях все
решает привычка, а не выносливость или сила.
Каким бы умным ты ни был, всегда найдется задача на-
много сложнее твоих способностей. Здесь все решает ры-
чаг — сила, умноженная на расстояние. Дистанция и время,
вместо силы и скорости. Хороший программист скромно
оценивает свои способности и умеет экономить свое мыс-
летопливо.
Программирование — это искусство декомпозиции.
Мы берем сложную задачу и разбиваем ее на задачи по-
меньше, до тех пор, пока эти задачи не станут элементар-
ными. Делаем элементарные задачи. А затем собираем ре-
шения обратно в единое целое. Вжух! И задача решена.
Энтузиазм и задор быстро уйдут. Что тогда будешь де-
лать, чемпион? Дисциплина и методичность рано или
поздно победят любую задачу. Иногда проблему прихо-
дится шатать — рассматривать ее под разными углами, про-
бовать решать разными способами. Раз за разом терпеть не-
удачу. И это нормально.
Побеждают не те, у кого все получается, а те, кто не сда-
ется и продолжает двигаться.

Книги, перевернувшие сознание


Даниэль Канеман «Думай медленно… решай бы-
стро». Наши действия и поступки определены нашими
мыслями. Но всегда ли мы контролируем наше мышле-

https://liveinternet.club/
Agile: Как перестать читать и начать программировать... 23

ние? Нобелевский лауреат Даниэль Канеман объясняет,


почему мы подчас совершаем нерациональные поступки
и как мы принимаем неверные решения. У нас имеется
две системы мышления. «Медленное» мышление включа-
ется, когда мы решаем задачу или выбираем товар в мага-
зине. Обычно нам кажется, что мы уверенно контролируем
эти процессы, но не будем забывать, что позади нашего со-
знания в фоновом режиме постоянно работает «быстрое»
мышление — автоматическое, мгновенное и неосознавае-
мое…

Нассим Николас Талеб


«Антихрупкость. Как извлечь выгоду из хаоса»
Когда хрупкая ваза падает, она разбивается. Когда па-
дает антихрупкий человек — он поднимается и стано-
вится сильнее. В мире, где царит неопределенность, нужно
быть антихрупким, уметь при столкновении с испытани-
ями в жизни не просто оставаться невредимым, но ста-
новиться лучше, эволюционировать и развиваться. Та-
леб формулирует простые правила, которые позволяют нам
преодолеть хрупкость; действовать так, чтобы непредсказуе-
мая неопределенность, этот грозный и внезапный Черный
лебедь (метафора из другой его известной книги), не при-
чинила тебе вреда. Чтобы удары судьбы помогали нам со-
вершенствоваться. Ты по природе своей антихрупкий —
никогда не забывай про это чудесное свойство.

Дженнифер Грин, Эндрю Стиллмен


«Постигая Agile».
Объемный труд включает в себя описание всех основ-
ных agile-методологий: Scrum, Kanban, Lean и XP (eXtremal
Programming). То, что создают люди, часто зависит от того,
на чем они сосредоточены. Чем больше люди сосредото-

https://liveinternet.club/
24 Евгений Павлов. Знакомьтесь, Python

чены на своих личных целях, а не на целях команды, тем


меньше шансов, что они будут иметь реальную ценность
для компании.

Для знакомства — самое то. Постоянные повторения од-


ного и того же призваны занести в память читателей самые
важные моменты.

Заведи рабочий ноутбук


Раздобудь себе рабочий ноутбук. Тебе не нужно
его покупать, может ты сумеешь одолжить его у знако-
мых. Я и сам отдавал сыну товарища свой старый ноут: по-
держанный, небольшого размера (14’’), слабый процессор,
минимум памяти, небольшой диск SSD/HDD, с убитым ак-
кумулятором (главное, чтобы от розетки работал). Важно,
чтобы там была клавиатура, интернет и HDMI для под-
ключения большого монитора. Можешь смело с этим экс-
периментировать. Бери ноут с собой на занятия в универ-
ситет, в городское кафе, в гости к друзьям и в путешествия
на море. Считай это инвестицией в свою профессию про-
граммиста. Почувствуй себя крутым хакером.

Великолепный план, Уолтер. Просто охеренный, если


я правильно понял. Надёжный, как швейцарские часы.5

Если ты раздобыл рабочий ноутбук, то получаешь достиже-


ние #LapTop.

5
«Большой Лебовски», 1998. Джоэл Коэн, Итан Коэн.

https://liveinternet.club/
Agile: Как перестать читать и начать программировать... 25

В сухом остатке:
1. MVP — Minimal Value Product;
2. Time Management — умение планировать свой отдых;
3. Цель, План, Прогресс, Результат;
4. Print, Format, Output, Loop, If;
5. список книг для чтения на будущее.

https://liveinternet.club/
https://liveinternet.club/
IDE: СРЕДА РАЗРАБОТКИ.
HELLO WORLD. КУЛЬТУРА ТРУДА

Что такое IDE

I
DE · Интегрированная среда разработки (англ. Integrated
Development Environment). Это все программы, ко-
торые помогут вам разрабатывать программу. Не только
писать, но и отлаживать, хранить, проверять, выкладывать,
администрировать. Одним написанием кода дело не огра-
ничится. Нужно заставить код работать (и зарабатывать)!
По сути, IDE — это твое рабочее место. Твои инстру-
менты, с которыми ты должен уметь работать. Вот список
программ на рабочем компьютере под Windows, которыми
я пользуюсь:
1. FAR — менеджер файлов;
2. Notepad++ — текстовый редактор для просмотра фай-
лов;
3. Chrome — браузер для просмотра web;
4. 7zip — архиватор;
5. Telegram — мессенджер для связи с коллегами;
6. GIT — система хранения кода;
7. SourceTree — клиент для git;

https://liveinternet.club/
28 Евгений Павлов. Знакомьтесь, Python

8. Python — среда для выполнения языка программиро-


вания;
9. Anaconda — пакет приложений для работы с Python
в интерактивном блокноте;
10. PyCharm — среда разработки для Python;
11. Beaver — клиент для работы с базами данных;
12. MobaXterm — консоль для удаленного подключения
к linux серверам.

Если ты никогда не сталкивался с серверами Linux —


приготовься! Тебе придется разобраться с Linux и полюбить
его, потому что сервера с Python на борту — это Linux в SSH
консоли.

P. S. Надеюсь ты уже раздобыл ноут. Настало время от-


крывать его для работы.

Как установить Python


Здесь все просто: заходи на Python.org и скачивай по-
следнюю версию. Для учебы можно смело брать послед-
нюю. Не запариваясь на стабильность, совместимость с вер-
сией на сервере, или поддержкой библиотек, с которыми
ты будешь потом работать.

Скачивай Windows installer (64-bit), которую ре-


комендуют на сайте (Recomended). Используй Cystomize
installation, чтобы лучше понять, что и куда будет пи-
саться. Install Now поставит куда ей вздумается. Потом за-
мучаешься искать, где твой Питон лежит.

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 29

Use Admin Privilegies — нет, потому что замучаешься


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

Add Python.exe to Path — тоже нет. Обратно история


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

Customize Installation — выбор сильных духом. По-


может тебе настроить все осознанно и по уму. Вместо бы-
строй и беспорядочной установки Install Now. Лучше день
потерять.

Optional Features — нет. Когда понадобиться — поста-


вишь отдельно.

Install Python for All users — нет. Юзер для Питона


тут ровно один — это ты.

Customize Install Location. Укажи директорию для


Питона народе C:\Python311, если у тебя версия 3.11.
Лучше хранить в корневой на диске, чтобы указывать ко-
роткие пути к Питону везде, где попросят. Иначе замуча-
ешься правильно писать длинные пути со всеми пробелами
и русскими символами.

Create shotcuts for installed applications — пусть


будет, чтобы самому руками не создавать.

https://liveinternet.club/
30 Евгений Павлов. Знакомьтесь, Python

Все остальные крыжики — отказать. В моей книге эти из-


лишества без надобности. Если чего-то не хватит, всегда
сможешь вернуться и поставить. Сейчас ставим все по ми-
нимуму, чтобы понять, что же входит в этот минимальный
набор.
Кроме того, я не хочу описывать текущую версию Пи-
тона, понимая, что у читателя скорее всего будет уже дру-
гая версия. Но сам минимальный набор в ней слабо поме-
няется.
Install — Вжух! Теперь питон стоит на твоей машине.
Давай сделаем что-нибудь для теста. Запускай PowerShell
(нажимаешь Win, пишешь первые буквы названия “Po..”,
пока не увидишь значок, на который кликаешь).

cd C:\Python311\

Лайфхак: набрав пару букв файла, нажимай Tab и кон-


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

.\python.exe

Вжух! Теперь ты в консоли Питона! Давай немножко по-


программируем:

>>> import sys

Эта строчка подключает системную библиотеку, чтобы


взять из нее версию Питона:

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 31

>>> print (sys.version)

3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC


v.1934 64 bit (AMD64)]

У меня вывелась вот такая строчка. У тебя будет другая,


но главное, ты увидишь, что за билд Питона у тебя сейчас
запущен.

Чтобы покинуть консоль Python:

Ctrl-Z и затем Enter

Чтобы закрыть консоль PowerShell.

exit

Если нажмешь крестик на окошке в правом верхнем


углу — тоже сойдет.

Если у тебя получилось поставить Python — ты получаешь


достижение #Python.

Есть еще один момент. Однажды тебе придется запускать


Python через SSH терминал на Linux сервере. Там будет
примерно такой же интерфейс. Операционные системы
разные, Питон — един! Это сильная сторона данного языка.
Научился запускать под виндой, сможешь и под линухом,
по аналогии.

Отлично! С установкой Питона мы закончили, пора сде-


лать перерыв. Разомни шею, плечи, грудную клетка, су-
ставы ног. Сходи попей водички. Похвастайся домашним

https://liveinternet.club/
32 Евгений Павлов. Знакомьтесь, Python

своим хакерским мастерством. Играючи поставил Python,


даже программу уже написал. Красавчик!
Можно двигаться дальше.

Блокнот или проект


Есть два пути: Anaconda c Jupyter Notebook. Очень
удобная штука для прикладных вычислений, например,
для аналитики. Посчитал, посмотрел число и решил, куда
дальше считать. Нейронные сети примерно в ту же сторону
растут. Для учебы тоже отличный вариант: нет заморочки
с окружениями и библиотеками. Большинство библиотек
входят в дистрибутив Anaconda и подключаются в редак-
торе по ходу работы. Очень удобно!

Второй путь — это PyCharm от компании JetBrains ро-


дом из культурной столицы Санкт-Петербург. Редактор от-
лично подходит для работы с проектами на Питоне для вся-
ких сайтов и прочих скриптов для серверов на базе Unix.
Выбор для корпоративной работы.
Для каждого проекта можно создавать свое окружение
с нужным набором библиотек, а потом это окружение пор-
тировать на сервер, чтобы проект сразу работал из коробки.
Свое окружение избавляет от конфликтов версий библи-
отек и всего такого, если бы у нескольких проектов было
общее окружение. Короче, вся эта магия с окружениями
нужна для администрирования серверов.

Anaconda — для ученых и инженеров. PyCharm — для


программистов. Дальше буду рассказывать про PyCharm.

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 33

Дистрибутив PyCharm можно скачать с сайта JetBrains.


Нам будет достаточно бесплатной версии Community. Вы-
бираем обычный exe и скачиваем около 400 метров.

Запускай установщик, подтверди для Windows, что дове-


ряешь этому приложению.

Оставь пустыми все опции при установке, значения


остальных настроек оставь по умолчанию.
После установки запусти PyCharm Community Edition:

[Win] py [Enter]

Подтверди согласие с условиями использования PyCharm


User Agreement:

[Continue]

Разреши PyCharm подключаться к Интернету для поиска


обновления (Windows Firewall blocked).

Выбери Project — New Project

Выбери папку для проекта (Location): D:\Projects\


FirstPython

Мы будем использовать новое окружение Virtual


Environment Using.
Выбери тип окружения: VirtualEnv.

Выпадающее меню для интерфейса называется Drop


Down List, я иногда буду писать DDL для краткости.

https://liveinternet.club/
34 Евгений Павлов. Знакомьтесь, Python

Нужно выбрать версию Питона, который будем запускать


для выполнения проекта. Base Interpreter = С:\Python311\
python.exe
Тот самый Питон, который мы установили в предыду-
щем разделе.

Убери галочку Create main.py welcome script.


Мы создадим такой скрипт сами, чтобы разобраться как
это делать.

[Create]

Проект создан. Хьюстон, мы в редакторе!

Прежде чем двинуться дальше, давай наведем немного


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

Выбери в верхнем меню программы File/Settings, или


воспользуйся быстрыми кнопками (они написаны напро-
тив названия пункта в меню).

[Ctrl] + [Alt] + S

Бам! Все крутые хакеры используют сочетания кла-


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

В диалоге настроек — 100500 всяких разных опций,


в случае чего ты уже знаешь, где искать. Сейчас меня инте-
ресует ровно одна настройка:

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 35

Appearance & Behavior > Appearance > Theme = Dracula


Я поставил Sync with OS, поскольку тема Windows у меня
тоже Ночная.

[OK]

Порядок! Теперь вернемся к нашему проекту. Слева па-


нель с иерархией файлов, совсем как в windows file
explorer (кстати, быстрые клавиши — Win + E).

В папке проекта FirstPython уже есть подпапка venv


(Virtual Enviroment) c нашим окружением (мы потро-
гаем его руками на следующем этапе).

Создай еще одну папку rep (Repository) куда мы будем


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

Теперь создай скрипт Питона:


1. Правой кнопкой мыши кликай по папке rep;
2. в контекстном меню выбирай New > Python File;
3. имя файла lesson1, Тип файла Python file;
4. [Enter]

Пара секунд и появится файл lesson.py


Справа появится закладка с именем lesson.py и окошком
редактора.

Пишем одну строчку из второй главы: print (‘Hello World’)

https://liveinternet.club/
36 Евгений Павлов. Знакомьтесь, Python

В верхнем правом углу ищи зеленый треугольник,


как в интерфейсе аудио-плеера. Это запуск выполнения
скрипта. Проверь, что правее в DDL написано lesson1. Тоже
самое можно запустить при помощи комбинации клавиш:
Shift+F10.

Снизу всплывет консоль, в которой будет написано “Hello


world”.

Ано работаит!!!

Отлично! С установкой редактора закончили.

Если сумел проделать тоже самое на своем ноутбуке — по-


лучаешь достижение #PyCharm.

Самое время сделать перерыв, чтобы новые знания


спокойно усвоились и переварились. Заблокируй комп
([Win] + L).

Встань и пройдись, расправь плечи, посмотри вдаль. Это


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

Как создать окружение


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

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 37

Давай посмотрим на Virtual Enviroment поближе.


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

Атакующие корабли, пылающие над Орионом; лучи Си,


пронизывающие мрак близ ворот Тангейзера… Все эти
мгновения затеряются во времени, как слёзы в дожде.
Время… программировать!

Это была цитата (подправленная) из Blade Runner6 —


культового фильма с стиле киберпанк про репликантов.
Но мы отвлеклись. Запускай консоль PowerShell:

[Win] power [Enter]

Переходи в папку нашего проекта (не забывай про кру-


той tab для скоростного дописывания на автомате).

cd C:\Projects\FirstPython

Внутри у нас есть две папки:


1. rep — репозиторий с кодом для нашего проекта;
2. venv — локальное окружение для нашего проекта.

Запускаем виртуальное окружение для нашей про-


граммы (в пределах процесса-консоли!)

.\venv\Scripts\activate

6
«Бегущий по лезвию», 1982. Ридли Скотт.

https://liveinternet.club/
38 Евгений Павлов. Знакомьтесь, Python

Теперь ты в матрице, Нео:

(venv) PS C:\Projects\FirstPython>

Давай разберемся с пакетами. Программа для работы


с пакетами называется pip (Python Package Index). На-
стоящая олдскульная утилита. Только ты, консоль, пакеты
и виртуальное окружение твоего проекта. У меня аж му-
рашки по коже, до того это все по-хакерски круто.

Что? Тебя не прикалывают все эти хакерские фишки?

Я не говорил, что будет легко, Нео. Я лишь обещал, что


это будет правда.7

Если запустишь pip — вывалится список параметров, ко-


торые можно запускать.

Для начала установим (install) — самый популярный


пакет NumPy:

(venv) PS C:\Projects\FirstPython> pip install


NumPy

PiP скачивает пакеты (по дефолту — последняя версия)


из интернета и копирует их в папку виртуального окруже-
ния.

Дальше посмотрим список (freeze) установленных па-


кетов. Кстати ты уже разобрался, как это работает.

(venv) PS C:\Projects\FirstPython> pip freeze


7
«Матрица», 1999. Братья Вачовски.

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 39

Покажет список установленных пакетов в нашем окру-


жении (наверное, у тебя будет другая версия, более продви-
нутая)

numpy==1.24.2

Теперь кое-что крутое: создадим файл requirements.


txt с этими пакетами, чтобы потом устанавливать их все
скопом на любой другой машине/окружении. При помощи
символа “>” мы направим поток вывода из pip в файл, вме-
сто экрана, как было раньше. Такая вот загогулина!

(venv) PS C:\Projects\FirstPython> pip freeze >


requirements.txt

В репозиторий часто кладут только этот файл, чтобы


из него разворачивать окружение на linux сервере, напри-
мер. Посмотри, что в директории C:\Projects\FirstPython
появился файл requirements.txt в котором сейчас ровно
одна строчка: numpy==1.24.2

Для эксперимента снесем установленный пакет, чтобы


затем поставить его из файла.

(venv) PS D:\Projects\FirstPython> pip uninstall


NumPy

Proceed (Y/n)? y

Нажми в консоли пару раз кнопку UP — пролистай


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

https://liveinternet.club/
40 Евгений Павлов. Знакомьтесь, Python

Еще хитрость: если выделить в консоли текст, а затем на-


жать Ctrl+C, текст попадет в буфер обмена. Правой кноп-
кой мышки по экрану консоли, и буфер обмена будет на-
печатан в строке ввода. Попробуй пару раз и запомни этот
фокус на будущее — пригодится.

Чтобы поставить пакеты из файла, запускаем:

(venv) PS C:\Projects\FirstPython> pip install -r


requirements.txt

Вжух! У нас есть файл требований к пакетам и все пакеты


из списка установлены в виртуальном окружении. Чистая
работа!

Закрывай консоль (вместе с ней и наше виртуальное


окружение).

Если тебе удалось настроить виртуальное окружение, то ты


получаешь достижение #VirtualEnvironment.

Было непросто и совсем непонятно, но ты справился.


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

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 41

Монти Пайтон и Святой Грааль


Основной автор Python — программист Гвидо ван Рос-
сум из Нидерландов. По традиции, их неофициально на-
зывают Голландией, хотя Голландия — это две провинции
современного Королевства Нидерландов, Северная и Юж-
ная. Язык Python программист начал создавать в конце
1989 года, в Амстердаме и оставался у руля разработки
до 2018-го года, затем вышел на пенсию.
Кстати, не Питон, а Пайтон. Автор назвал язык в честь
культовой комик-группы Monty Python из 70-х, неве-
роятно популярной в Британии. Обязательно посмотри
фильм “Монти Пайтон и Священный Грааль” — очень
смешной!

— Ты убил отца невесты!


— Я не хотел!
— Не хотел?! Ты ему голову мечом рассёк!
— Боже, как он?8

Про Питон уже потом анекдотов насочиняли, да и кто


вообще знает про этих нерусских комиков? Большинство
программистов называет этот язык Питоном. И я его буду
называть Питоном, чтобы не вызывать путаницу у читателя
и не душнить понапрасну.
Интерпретатор Python написан на языке Си. На этом же
языке написана операционная система Linux, которая ча-
сто упоминается в этой книге. Python — не самый быстрый
в выполнении, но зато самый быстрый для написания
и модификации. Сейчас скорость разработки важнее

8
«Монти Пайтон и Священный Грааль», 1975. Терри Гиллиам, Терри
Джонс.

https://liveinternet.club/
42 Евгений Павлов. Знакомьтесь, Python

скорости выполнения, потому что компьютерное время


в сотни раз дешевле, чем время программистов.
В 2008 году был создан Python 3. В нем почистили ко-
довую базу и удалили избыточность. С каждой версией
Python 3 работает немного быстрее.
С 2020 поддержка Python 2 прекращена. На произ-
водстве тебе будут попадаться древние (Legacy) проекты
на Python 2, но с каждым годом их становится все меньше
и меньше.

Стримы программистов

Можно посмотреть, что пишут другие программи-


сты. Просто поищи свежий ролик с похожим названием,
завари чай и усаживайся наблюдать за работой програм-
миста.
Увидишь, с чего начинают работу над задачей опыт-
ные программисты. Обычно это какие-то размышления
вслух и наброски требований по работе программы в виде
списка.
Увидишь, как опытный программист пишет код. Он ча-
сто ошибается, пишет, потом стирает и заново пишет.
Многократно возвращается к уже написанному коду и ис-
правляет его. Если втянуться, то становится интересно на-
блюдать за движением мыслей кодера.
Познакомишься с новыми подходами, которых
не было в учебнике! Как еще можно узнать про горячие
клавиши или отладку классов в IDE? Очень много хитро-
стей и лайфхаков я подсмотрел именно в таких стримах.

https://liveinternet.club/
IDE: Среда разработки. Hello World. Культура труда 43

И, наконец, ты сможешь посмотреть, как стример бу-


дет разбираться с проблемой, которая у него возникнет.
А она рано или поздно возникнет. И он не будет знать, как
ее решить и что с этим делать. Как он будет выкручиваться?
Еще один способ поиска новых подходов в решении твоих
задач.

Если посмотрел час стрима с программированием


на Python — получай достижение #StreamCoding.

В сухом остатке:
1. Integrated Development Environment;
2. Python.org;
3. Anaconda & Jupyter Notebook;
4. PyCharm Community Edition;
5. С 2020 поддерживается только Python 3.

https://liveinternet.club/
https://liveinternet.club/
ROOT: КРАТКАЯ ИСТОРИЯ
ПРОГРАММИРОВАНИЯ...
ВЕХИ РАЗВИТИЯ. ТРЕНДЫ

Особенности IT индустрии

E
xponencial Growth для финансов — это одна из не-
многих индустрий, которая все еще растет экспонен-
циально. Вот почему вокруг IT так много хайпа. Эта
индустрия все еще в начальной стадии бурного роста, в от-
личие от нефтяной индустрии, например, где бурный рост
уже давно закончился. Вместо этого идет укрупнение про-
изводства, чтобы уменьшить издержки производства.
Agile. Разработка информационного продукта стоит до-
рого, а производство копий — почти нулевое. Это фунда-
ментальное свойство IT индустрии, позволило совсем
иначе строить производственные циклы. Мы можем очень
быстро выпустить продукт, а затем очень часто обновлять
его, заменяя старые версии продукта новыми. Такой подход
«на максималках» — это и есть принципы Agile.

Готовность к изменениям важнее следования первона-


чальному плану.

https://liveinternet.club/
46 Евгений Павлов. Знакомьтесь, Python

Global Market — глобальный рынок с отсутствием рас-


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

Open Source. Открытые продукты становятся всеоб-


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

Структурное программирование
В 1970 году вышел язык СИ. Язык, ставший промыш-
ленным стандартом на многие десятилетия. Почти все
современные языки включают в себя его синтаксис.
В те легендарные времена многие современные риски
еще не существовали. Компилятор был однопроходным,
программы маленькими, а ресурсы ограниченными.

Только хардкор! Настоящее мясо!


Никакого ООП, никаких тебе классов!

https://liveinternet.club/
Root: Краткая история программирования... 47

БДСМ пати с утра и до утра


Мой папа чётко знает, что такое буфера
2^16 способов отстрелить себе конечности
Отладка даёт представление о вечности
Кто не умер сразу — тот уже неубиваем
20 лет стаж — мой папа стал джедаем9

Есть классическая строчка кода, которая является кон-


центрированным синтаксисом этого языка:

while (*a++ = *b++);

Это побайтовое копирование строки. Чтобы объяснить


работу этой строчки, как раз потребуется знание языка Си.
Указатели, инкремент, присваивание, итераторы, цикл,
массивы, строки, параметры и аргументы функций, сте-
ковые объекты, работа с памятью — все это свернуто бук-
вально в несколько символов одной строки из самого пер-
вого учебника по программированию. Кажется, что язык
Си делался специально под эту строчку.
Кстати, аргумент и параметр функции — разные
вещи. Аргумент — то, что мы передаем на вход нашей
функции снаружи (конкретное значение); а параметр — это
то, что мы принимаем внутри нашей функции (перемен-
ная в определении). Очень легко перепутать. Этот наивный
вопрос способен поставить в тупик большинство програм-
мистов. Можешь при случае сбить спесь с зазнавшегося то-
варища.;)
Запрещаю тебе, молодому программисту, писать в по-
добном BrainFuck стиле. Воспринимай это шарадой для
разминки ума, а не как промышленный код. Многие пло-
хие практики программирования растут как раз из таких

9
Научно-технический рэп — «Папа может в Си», 2020.

https://liveinternet.club/
48 Евгений Павлов. Знакомьтесь, Python

лаконичных головоломок: компактный работающий код,


который невозможно прочесть и понять с первого раза.
Но что самое ужасное — невозможно отладить его ра-
боту.
Не переходи на темную сторону спагетти-кода. В паста-
фарианстве поклоняются спагетти-монстру. Совпадение?
Не думаю!
В те легендарные времена программированием занима-
лись настоящие ученые:
1. Дейкстра, Эдсгер Вибе — разработчик структурного
программирования;
2. Дональд Кнут — автор легендарного «Искусства про-
граммирования;
3. Брайан Керниган — создатель C (не перепутай с Са-
рой Луизой Керриган из StarCraft);
4. Страуструп, Бьёрн — создатель С++;
5. Линус Торвальдс — создатель Unix;
6. Гвидо ван Россум — создатель Python.

Однажды ты вернешься к истокам, чтобы понять,


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

Hаша pабота во тьме — мы делаем, что yмеем,


Мы отдаём, что имеем, наша pабота во тьме.
Сомнения стали стpастью, а стpасть стала сyдьбой.
Всё остальное — искyсство в безyмии быть собой.10

10
Гимн хакеров, Сергей Лукьяненко «Лабиринт отражений». АСТ, 2017.

https://liveinternet.club/
Root: Краткая история программирования... 49

В современном мире количество системных программи-


стов, знающих как именно устроены компьютеры, стреми-
тельно сокращается. Ряды специалистов из других обла-
стей, обладающих навыками программирования — растут
и множатся.
Именно изучение древних технологий программирова-
ния поможет тебе хорошо писать прикладные программы
в сотни строк.
Вместо того, чтобы изучать объектное программирова-
ние и C++, постарайся изучить С. Он значительно проще
и одновременно значительно полезнее для молодого
специалиста, еще не испорченного энтерпрайз-дерьмом.

Объектно Ориентированное
Программирование
Золотая эра программирования — время, когда вычис-
лительные мощности удваиваются каждые два года.
Легендарный закон Мура. Гордон Мур — основатель Intel.
Чего бы ты не создавал, достаточно подождать пару лет
и производительность железа превысит вычислительные
требования твоей задачи.
Кстати, основные отличия C++ от С — это вовсе не ООП,
как ответят тебе 95% программистов. Вот остальные
ключевые отличия, из-за которых в названии появилось аж
два плюса:
1. пространство имен (namespace);
2. виртуальные функции (virtual function);
3. перегрузка операторов (overloading);
4. исключения (exception handling);
5. шаблоны (pattern).

https://liveinternet.club/
50 Евгений Павлов. Знакомьтесь, Python

Ну и по мелочи: reference variables, bool, операторы new


и delete.
На взгляд автора, самый кайф — это перегрузка опера-
торов, позволяющая создавать над необычными объектами
новую математику (Саша+Маша=Любовь).
Вот это действительно важные вещи, которые появи-
лись в программировании со времен структурного про-
граммирования. Вещи, которые изменили ремесло про-
граммирования, они по-настоящему важны для новых
программистов.
Область видимости (инкапсуляция) — это очень важ-
ный момент. Одна функция — один контракт. Ограничен-
ный доступ к другим частям системы позволяет избежать
паразитических влияний как случайных, так и зловредных.
Если древние программисты свободно могли получить до-
ступ к любому участку памяти, то современные программы
живут в контейнерах. Это помогает обеспечивать должную
безопасность, чтобы посторонние процессы не могли вме-
шиваться в работу твоей программы.
Наследование (полиморфизм) — это новый уровень
повторного использования кода. Еще один фокус, позволя-
ющий разделять систему на уровни абстракций. Огром-
ные системы содержат тысячи реализаций, написанных
разными разработчиками (в прошлом или будущем), но на
более высоком уровне абстракции алгоритм умеет исполь-
зовать еще не существующий функционал, будто он уже
реализован. И таких этажей абстракции в сложных систе-
мах может быть много, тебе лишь надо позаботиться о ра-
боте на своем уровне, а остальное случится уже без твоего
участия. Дух захватывает!
1. First party software — твоя программа, или библио-
тека;

https://liveinternet.club/
Root: Краткая история программирования... 51

2. Second party software — программа клиента, кото-


рый использует твой функционал;
3. Third party software — программа любого другого
разработчика, функционал которого ты используешь,
ну или твоя программа.

Важный момент! Если твой функционал будет отдан


для использования другими разработчиками, с ним
может произойти все, что угодно! Твой код не имеет
права сломаться! Требования к кодам — очень строгие.

Многопоточность. Был один важный момент в разви-


тии железа: кроме CPU появились еще и GPU. И если сейчас
в компьютере около 8 центральных процессоров (Сentral
Processing Unit), то в графическом ускорителе несколько ты-
сяч графических процессоров (Graphics Processing Unit) —
это делает твой компьютер персональным суперком-
пьютером с фантастической мощностью вычислений.
Но есть нюанс: CPU хорошо работают с ветвлениями
в алгоритмах и переключением между задачами, в то время
как GPU хорошо работают только с линейными вычисле-
ниями без ветвлений и чувствительны к объему данных
для ввода и вывода для вычислений в этом самом процес-
соре.
Прежде чем программисты научились загружать все до-
ступные процессоры по полной, часто процессоры про-
стаивали в ожидании того, когда система отдаст им все
необходимые для работы ресурсы. Получалось, что в ком-
пьютере два центральных процессора, но работает только
один.
Словно китайцы, сидящие за круглым столом. Каждый
держит одну палочку и ждет, когда ему дадут вторую, ко-
торую держит его сосед. DeadLock! Математики серьезно

https://liveinternet.club/
52 Евгений Павлов. Знакомьтесь, Python

потрудились, чтобы разрулить подобные конфликты, воз-


никающие между разными процессами.
Еще есть асинхронность — многопоточность «на ми-
нималках». Это когда две разные задачи выполняются в од-
ном потоке, разделяя время выполнения. Сначала порабо-
тал один, затем второй, а затем снова первый. Более легкий
вариант, где у тебя нет головной боли по поводу одновре-
менного доступа к ресурсам системы.
Замечу, что 95% задач — асинхронные, и только 5% —
многопоточные.

Автоматическое тестирование. Современные си-


стемы слишком сложны, чтобы человек смог быстро про-
верить их работу, поэтому появилось автоматическое те-
стирование. Один из подвидов которого — модульное
тестирование (Unit Testing). Когда часть программы (биз-
нес-логика) изолируется от внешних сервисов, на вход по-
даются тестовые данные и анализируется ответ на выходе.
В идеальном мире система полностью покрывается
unit-тестами. Каждое изменение прогоняется через все из-
вестные тесты и страхует разработчика от рисков нару-
шить целостность системы. Набор тестов может быть сильно
больше по объему кода самой системы. Эти тесты сами яв-
ляются ценностью для разработки комплекса.
Автоматическое тестирование — это важная часть со-
временной культуры программирования, без нее мы
не смогли бы создавать настолько большие и при этом ста-
бильные программные комплексы. Одновременно это
накладывает серьезные требования на архитектуру про-
граммы.

— А когда будет восстание машин?


— Зачем восстание? Зачем машин? Будет тихий приход

https://liveinternet.club/
Root: Краткая история программирования... 53

к власти программно-аппаратных комплексов в строгом


соответствии с нормами федерального законодатель-
ства.11

SOLID — современная парадигма, заменившая объек-


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

Статические анализаторы кода (Static Code Analysis).


Современные компиляторы настолько умны, что могут
анализировать сам код без его исполнения. Статически.
Подобный анализ позволяет выявлять плохие практики
и архитектурные ошибки. Запах — некие признаки,
указывающие на присутствие потенциальных ошибок или
слабой архитектуры, набор эвристик программирова-
ния. Автоматическая интуиция. Это еще один важный шаг
на пути к созданию гигантских систем. Еще один помощ-
ник, помогающий удерживать наш чистый код от вы-
рождения в спагетти код (т. е. говнокод!).
Удивительно, но современный программист пишет очень
мало кода. В наше время чертовски много библиотек, кото-
рые смогут реализовать половину твоих задач. Сейчас, на-
пример, большую часть времени я трачу на рефакторинг
и тестирование старого кода.
Вся эта высокая магия начинает приносить пользу только
для больших систем, начиная от сотен тысяч строк кода
и десятков процессоров/компьютеров. Для маленьких при-
кладных задач одного программиста, архитектурные наво-
роты — это просто бесполезный хлам.
11
Анекдот.

https://liveinternet.club/
54 Евгений Павлов. Знакомьтесь, Python

Не гонись за модными технологиями. Для тво-


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

Программирование 2.0
Вот появились нейронные сети — одно из направлений
машинного обучения. Одна из веток искусственного ин-
теллекта, а веток развития было очень много. Самая успеш-
ная на сегодня — искусственные нейронные сети. Среди
нейронных, самые популярные — это GPT: генеративные
(generative — создающий контент) предварительно обу-
ченные (pre-trained) трансформеры (transformer — тип
архитектуры нейронной сети, позволяет использовать для
обучения неразмеченные данные).
Время от времени случаются прорывы — вспыхивает эн-
тузиазм, выделяется финансирование на дальнейшую раз-
работку, затем снова все затихает и наступает зима. Прямо
сейчас происходит прорыв. Давай попробуем разобраться,
что нам сегодня известно про эту тему.
Еще один шаг к тому, чтобы машина сама разбиралась
в задаче и решала ее. Размечаем данные, вопрос и ответ,
а затем прогреваем нейронку этими данными. Нуж-
ные зависимости между параметрами — усиливаются. Не-
нужное — ослабляется. Потребуется очень много данных,
чтобы обучить робота, а стоит это все как чугунный мост.
Зато уже обученная (застывшая) нейронка требует
на удивление мало ресурсов, чтобы выдать результат. Для

https://liveinternet.club/
Root: Краткая история программирования... 55

пользователей это просто функция из библиотеки, с по-


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

95% задач проще запрограммировать и получить рабо-


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

5% остальных задач недостаточно формализованы


или не чувствительны к вариативности ответов. Два плюс
два равно примерно четырем или пяти.

Баланс между сложностью и скоростью обуче-


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

Проблема переобучения (overfitting). Кроме того, если


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

https://liveinternet.club/
56 Евгений Павлов. Знакомьтесь, Python

решает привычные задачи и совершенно теряется в незна-


комой ситуации.

Проблема объяснения результата. Классический


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

Проблема самообучения. Для обучения нужно разме-


тить данные (Data Set). Много данных, содержащих задачу
и ответ. Это титаническая работа. Еще одно направление
исследований — автоматизация разметки (одна нейронка
дает ответ, другая решает правильный он или нет) или во-
все отсутствие разметки (трансформеры).
Это если совсем по верхам в новой области, где вопросов
больше, чем ответов, а гипотезы и терминология все еще
находятся в стадии обсуждения.

Знаковые книги
Брайан Керниган и Деннис Ритчи
«Язык программирования Си»
Эта книга написана создателями языка. Книга написана
не для новичков, несмотря на простые примеры в начале

https://liveinternet.club/
Root: Краткая история программирования... 57

книги. Систематизирует основные знания, однако, без под-


готовки разобраться будет сложно.

Дал У., Дейкстра Э., Хоор К.


«Структурное программирование».
Опыт программирования показан на примерах реше-
ния ряда миниатюрных задач. Последовательно рассматри-
ваются данные различной степени сложности. В програм-
мировании постоянно приходится иметь дело со все более
сложными структурами данных. Систематическое изложе-
ние иерархических принципов в программировании. Для
программистов всех специализаций.

Эдсгер Вибе Дейкстра


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

Гради Буч
«Объектно-ориентированный анализ и проекти-
рование с примерами приложений»
Книга содержит объектные методы решения сложных
проблем, связанные с разработкой сложных программ.
На примерах показаны основные концепции объектно-
ориентированного подхода. Книга содержит практические
советы по вопросам анализа, проектирования, реализации
и управления программными проектами. Полезна, прежде
всего, системным аналитикам и архитекторам.

https://liveinternet.club/
58 Евгений Павлов. Знакомьтесь, Python

Джефф Сазерленд «Scrum.


Революционный метод управления проектами»
Книга про идеологию Scrum, а не метод работы. Многие
слепо внедряют Scrum, но часто не понимают сути идеоло-
гии метода. Автор описывает, как он пришел к этому ме-
тоду. Что нужно понимать и что ожидать при повторении
простых инструкций к действию:
1. Scrum предполагает непрерывное совершенствование
процессов разработки;
2. работа короткими спринтами с планированием в на-
чале, с демо и ретро в конце;
3. использованием доски с разделами: бэклог, взято в ра-
боту, сделано;
4. правильное составление бэклога;
5. основные роли на проекте: владелец продукта, ко-
манда, скрам мастер;
6. прозрачность процессов для всей команды.

Многие команды работают по Scrum, но делают это


бездумно, не понимая, что именно они хотят получить
от Scrum.

Контрольные вопросы:
1. Назови трех известных программистов.
2. Кто создал язык Python?
3. Чем отличается аргумент от параметра функции?
4. Что такое Third party software?
5. Почему SOLID используется чаще чем OOP?
6. Чем асинхронность отличается от многопоточности?
7. Чем чистый код отличается от спагетти кода?
8. Как расшифровывается GPT?
9. Что такое переобучение?

https://liveinternet.club/
Root: Краткая история программирования... 59

Если ты ответил на все вопросы — получаешь достижение


#BriefHistory.

В сухом остатке:
1. функциональное программирование — до 100 стро-
чек.
2. объектно-ориентированное — выше 1000 строк;
3. SOLID актуальнее чем OOP;
4. нейронная сеть не может объяснить выбор ответа.

https://liveinternet.club/
https://liveinternet.club/
INDUSTRIAL: СОРТА ПИТОНА,
И КАК ИХ ГОТОВИТЬ...
ОБЛАСТИ ПРИМЕНЕНИЯ. КУДА КОПАТЬ

Зачем это надо?

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

Собирают биолога, математика и физика и просят их


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

Биолог: «За месяц я вывел породу лошадей, которые от-


личаются необыкновенной скоростью и почти всегда выи-

https://liveinternet.club/
62 Евгений Павлов. Знакомьтесь, Python

грывают. Для того, чтобы довести ее до ума мне нужно


еще пару месяцев».

Математик: «Я почти разработал теорию, кото-


рая описывает вероятность выигрыша в каждом кон-
кретном забеге, теперь мне еще нужно примерно пол-
года, $1000 и помощник для того чтобы проверить ее
на практике, а также снизить статистические погреш-
ности».

Физик: «Для того, чтобы продолжить работу мне ну-


жен $1000000, хорошо укомплектованная лаборатория,
штат сотрудников и еще где-то лет десять. Но зато
у меня уже готова теория победы жидкого сферического
коня в вакууме».12

Расскажу о направлениях, где любят и ценят Питон, уз-


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

Прапорщик, запишите эти простые, но, в то же время,


великие слова.13

12
Анекдот.
13
«ДМБ», 2000. Режиссер Роман Качанов.

https://liveinternet.club/
Industrial: Сорта питона, и как их готовить... 63

Прикладные вычисления
Обычные люди используют калькулятор, чтобы свести
расходы и доходы. Бухгалтеры используют электронные та-
блицы, чтобы посчитать сумму в отчетах. Профессионалы
используют Jupiter Notebook, чтобы забирать любые данные
и сразу выдавать по ним результаты. С пылу, с жару!

Стволы — для лохов, ножи — выбор мастеров!14

Чтобы посчитать статистику, менеджер поставит задачу


(task) в Jira15 для программиста. Он будет ждать своей оче-
реди на выполнение около недели, профи же сможет найти
данные и обработать их самостоятельно на порядок бы-
стрее.
Аналитик с навыками программирования может напи-
сать скрипт для выгрузки данных в электронную таблицу
(Pandas16), нарисовать график (Grafana17 & Plotly18) и напи-
сать текст отчета с выводами для руководства.

14
«Карты, деньги, два ствола», 1998. Режиссер Гай Ричи.
15
Коммерческая система отслеживания ошибок.
16
Программная библиотека на языке Python для обработки и анализа
данных.
17
Свободная программная система визуализации данных, ориентиро-
ванная на данные системы ИТ-мониторинга.
18
Библиотека с открытым исходным кодом для Python и R, которая от-
лично подходит для создания красивых и интерактивных визуализаций.

https://liveinternet.club/
64 Евгений Павлов. Знакомьтесь, Python

В любой организации ценится аналитик, способный


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

Серверные скрипты

Для продвинутых случаев в системах ERP (Enterprise


Resource Planning) есть выделенные сервера, на которых
крутится Питон. Скрипты, которые запускаются через Cron
(Command Run ON). В продвинутых случаях RabbitMQ —
мессенджер для роботов. Web-сайты на Django — для лю-
дей. И, наконец, API — сайты для роботов. Для внешних
сервисов тоже Django.
ERP требует множество серверных решений, чтобы ав-
томатически считать ресурсы организации и на лету соби-
рать данные. Здесь море работы для специалиста по данным
Data Science. Хозяйство организации может насчитывать
десятки серверов, каждый из которых отвечает за свой сер-
вис и находится под online нагрузкой.
Сервера общаются между собою по API (Application Pro-

https://liveinternet.club/
Industrial: Сорта питона, и как их готовить... 65

gramming Interface), чаще всего это такие же web запросы


с параметрами, как на обычных сайтах. Возвращают они
не текстовый документ в формате html (HyperText Markup
Language), а в формате json (JavaScript Object Notation) ко-
торый удобнее превращать (Serialization) обратно в данные
для программы.
Чтобы серверам было удобнее, запросы делают в режиме
«выстрелил-забыл». Когда весь контекст запроса хранится
в самом запросе и больше нигде. REST API (Representational
State Transfer Application Programming Interface) — набор
дополнительных ограничений, позволяющих масштаби-
ровать обрабатывающий такие запросы сервис. Не сотни
обращений в секунду, а миллионы. Не один выделенный
(Dedicated) сервер, а сотни одинаковых узлов (Node), объе-
диненные в кластер.
Здесь будет много работы и для Data Engineer —
специалиста, который будет следить за сохранностью дан-
ных, переполнением, безопасностью, резервными копиями
(Backup) и вот этим вот всем. Мало собрать данные и рабо-
тать с ними, нужно еще и обеспечить их хранение. Об этом
я расскажу в следующей главе.

Кроме этого, у нас есть руководство и проверяющие ор-


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

https://liveinternet.club/
66 Евгений Павлов. Знакомьтесь, Python

решена задача для бизнеса. Очень полезно понимать, как


делаются дела в организации на пару этажей выше, у твоих
заказчиков. Это чтобы быть максимально эффективным,
полезным и уметь разговаривать на языке бизнеса. Заодно
научишься аргументировать и получать ресурсы для своих
задач (доступ, люди, время и деньги).
Если ты все сделаешь правильно, то никогда не узна-
ешь, что такое микроменеджмент. Твой рабочий график
всегда будет свободным. Главное, чтобы все работало, ведь
так?

Нейронные сети

Профи предпочитают говорить ML (Machine Learn-


ing) — машинное обучение.

Основные стадии:
1. исследование бизнес-процессов;
2. разработка/модификация нейронных сетей;
3. подготовка данных и их разметка;
4. обучение/дообучение нашей нейронной сети;
5. внедрение в производство.

По необходимости, повторить этот цикл несколько раз,


пока не получим разумный компромисс между возможно-
стями ML и бизнес-процессом.
Здесь нужны хорошие Product Manager — специалист
ML, который будет плотно общаться с CEO (Chief Executive

https://liveinternet.club/
Industrial: Сорта питона, и как их готовить... 67

Officer, т. е. гендир) и CTO (Chief Technology Officer, т. е. тех-


дир) заказчика, или с кем-то ниже, если организация заказ-
чика очень крупная. Нужно объяснять им ограничения/
требования в применении ML и транслировать потреб-
ности бизнеса в команду разработки.
Команда ML чаще всего состоит из десяти специали-
стов: математики (Data Scientist), инженеры (DevOps) и не-
множко программисты (Developer).
Отдельно есть команда разметки — это специалисты
из предметной области (например, врачи) которые разме-
чают данные в процессе их подготовки для обучения робота.
Крупные компании обычно не могут позволить себе ис-
пользовать чисто коробочные решения, поэтому их
требуется создавать самим.
Чтобы попасть в ML, только лишь курсов недостаточно.
Работодатель ищет прежде всего заинтересованных студен-
тов, способных самостоятельно поставить себе задачу
и найти решение. Для тебя точкой входа будет наличие до-
машнего ML проекта, эдакой диссертации на тему ML. Пре-
жде всего, будет оценивается количество проблем, которые
ты сумел преодолеть.
Подойдет любая задача: умный дом, коты, вебсайты,
уличное движение, спутниковые снимки. Повторюсь, здесь
главное — это заинтересованность и умение находить ре-
шение для новых задач.
Уровень программирования может быть не самым высо-
ким. Многие ограничиваются работой с Jupiter Notebook.
Для совместной работы над jupiter notebook есть бесплат-
ная облачная среда Google Colaboratory. Правда, есть одно
ограничение — через 12 часов данные удаляются.

https://liveinternet.club/
68 Евгений Павлов. Знакомьтесь, Python

Как я перешел на Python


Это был не самый прямой путь. По пути я изучил
много разных вещей, которые сейчас никак не использую.
С другой стороны, если не посмотришь по сторонам —
не сможешь сделать осознанный выбор.
С самого начала заинтересовавшись нейронными се-
тями, я прошел курс машинного обучения, заодно узнал,
что библиотеки машинного обучения (TensorFlow и Keras)
доступны именно на Питоне.
Я начал изучать Python с написания программ на Django.
Этот фреймворк настолько распространен, что обойти его
невозможно. Если ты начнешь писать на Питоне, ты так
или иначе будешь использовать http, а значит и Django.
Йоу-йоу-йоу, металл-инженер здесь

Сначала с ребятами по выходным на Flask’e


Ми-ми-микро-сервисинг деплоится без смазки
Так ты и перестаёшь писать на чистом
Расширенные от ужаса зрачки джангиста

Что я знал о Django? Что я знал о Django?


Освобождённый nigga из восточного Ву-Танга
Теперь я клацаю по клавишам — смешная обезьянка
Django это я! Я — это Django!19

И только пройдя курс по Django, я, наконец, подошел


к нейронным сетям. Пришлось повозиться, чтобы разо-
браться с проблемой версий: TensorFlow была написана
для Питона более ранней версии и тогда не поддерживала
современный Питон. Я скачал Python, скачал TensorFlow,

19
Научно-тенический рэп — «Джанго это я», 2021.

https://liveinternet.club/
Industrial: Сорта питона, и как их готовить... 69

подключил библиотеку и получил ошибку! Ад из версий


Питона в тот момент отправил меня в нокаут. Помучив-
шись, я обучил нейронную из учебного примера. И на этом
дело застопорилось.
Вернулся обратно к данным, где требовалась анали-
тика, а не нейронные сети. Оказалось, что нейронные сети
требуют очень много данных. Намного больше, чем есть
у среднего размера рабочих проектов, т. е. порог входа для
использования нейронных сетей непреодолим для 90% уже
запущенных проектов. Сами проекты, наоборот, требуют
анализа данных и поиска возможностей улучшить показа-
тели для бизнеса.

Аналитика находится на пересечении бизнес-целей,


сбора данных инженерами и математики для поиска зави-
симостей. Прежде всего, аналитика — это управление по-
грешностями. Надо так нарезать данные, чтобы ошибки
не переросли полученный результат анализа. На любую ги-
потезу в аналитике есть три ответа: да, нет, не знаю. Искус-
ство выбора гипотез в том, чтобы получать третий результат
как можно реже, но при этом добросовестно проверять воз-
можность именно такого ответа на поставленный вопрос.
Ответ на главный вопрос бизнеса «как сделать проект
в два раза лучше?» — найти ошибку и исправить ее. Самые
быстрые и эффективные решения — это как раз исправ-
ления ошибок. Если в вашем проекте нет ошибок (что
несомненно хорошо!), то не стоит ожидать быстрых про-
рывов. Начинается долгая и кропотливая работа по вы-
страиванию процессов и проверке многочисленных ги-
потез. Из которых выстреливает одна из десяти, улучшая
общий результат на 5%. Такая аналитика отлично работает
на больших проектах и совершенно не окупается на ма-
леньких стартапах.

https://liveinternet.club/
70 Евгений Павлов. Знакомьтесь, Python

Прежде всего, стартапы требуют качественный мони-


торинг ошибок, чтобы быстро обнаружить поломку и на-
чать ее исправлять. Остановить покупку трафика (рекламу),
чтобы не вышвыривать рекламный бюджет в трубу. Это
второй секрет стартапов: рекламный бюджет в десять раз
больше стоимости разработки. Поэтому надо быть твердо
уверенным в работе своей мельницы, прежде чем подавать
напор воды на мельничное колесо. Часто, дешевле получа-
ется выбросить в мусорное ведро уже созданное и на-
чать создавать заново. Стартаперы часто совершают эту
ошибку — продолжают упорно цепляться за неудачный ва-
риант, просто потому, что уже поверили в него всем серд-
цем.
Такова жестокая правда для любого бизнеса: аналитику
надо уметь подавать подобные результаты и уметь доказы-
вать факты. Ошибка здесь недопустима. Хорошая но-
вость в том, что такая честность позволяет экономить мил-
лионы инвестиций. Обратная связь от аналитики помогает
получать бизнесу следующий раунд инвестиций в случае
успеха, и фиксировать убытки в случае неудачи. Инвесторы
ценят грамотную аналитику и готовы за нее платить.

Контрольные вопросы:
1. Какие профессии предпочитают использовать Jupiter
Notebook?
2. Зачем нужен API?
3. Чем отличаются REST API от API?
4. Какие библиотеки для нейронных сетей — полезные?
5. Зачем нужен Google Colaboratory?

Если ответил на эти вопросы — получай достижение


#PythonIndustrial.

https://liveinternet.club/
Industrial: Сорта питона, и как их готовить... 71

В сухом остатке:
1. Data Analyst — аналитик по анализу и презентации
данных;
2. Data Scientist — программист по сбору и обработке
данных;
3. Data Engineer — инженер работает с инфраструкту-
рой для хранения данных;
4. DevOps — системный администратор, управляет IT
инфраструктурой;
5. Product Manager — отвечает за продукт, общается
с заказчиком и командой разработки;
6. Разметка данных — специалисты из предметной
области проекта.

https://liveinternet.club/
https://liveinternet.club/
DATA WAREHOUSE:
КАК ХРАНИТЬ ДАННЫЕ?
ИСТОЧНИКИ И ПОТОКИ ДАННЫХ.
НОВАЯ НЕФТЬ

Зачем это надо?

П
рограмма на Питоне — это хранение и обработка
данных.
Построение инфраструктуры для аналитики
подразумевает сбор данных из разных источников и сохра-
нение их в единое хранилище (ClickHouse от Яндекса).
Работа с финансами сводится к регистрации и хране-
нию транзакций, расчету балансов на счетах клиентов.
Все это хранится в базе данных (PostgreSQL).
Для пользователей нам нужно выгружать выписки
в табличные документы (Excel), рисовать графики (Grafana,
Plotly) и показывать html страницы (Django)
Программисту на Питоне не избежать SQL (Structured
Query Language) для работы с базами данных.
Пригодится и HTML стек: HTML (HyperText Markup
Language) + CSS (Cascading Style Sheets) + JS (JavaScript).
И обязательно знать: JSON (JavaScript Object Notation) — пе-
ресылка данных между скриптами.

https://liveinternet.club/
74 Евгений Павлов. Знакомьтесь, Python

Файловая система

Давай немножко попрограммируем.

Открывай PyCharm Community Edition:

[win] py.. [Enter]

Выбери наш проект, который мы создавали в прошлой


главе (IDE: Среда разработки).

FirstPython

В нашем проекте сейчас лежит два файла:


1. rep/lesson1.py
2. requirements.txt

Давай напишем программу, которая прочитает


requirements.txt и распечатает его в консоли.

Где-то здесь я объяснял студентам сходство между де-


скриптором файла и указателем на объект в памяти.
Но сейчас это кажется слишком заумным для первого зна-
комства. Поэтому сразу в бой!

file_descriptor = open (‘requirements.txt’)

Если навести мышку на кнопку запуска (зеленый тре-


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

Shift+F10

https://liveinternet.club/
Data WareHouse: Как хранить данные? 75

Запущенная программа выдает нам первую ошибку!

FileNotFoundError: [Errno 2] No such file or directory:


‘requirements.txt’

Это потому что наш файл лежит в другой директории,


а именно на одну директорию выше. По аналогии с коман-
дами в консоли, мы можем добавлять к имени файла те-
кущую директорию ‘.\’ и директорию выше ‘..\’ Еще один
нюанс и мы продолжим:
Косая черта называется backslash. Она использу-
ется в строках для указания спецсимволов, вроде перевода
строки ‘\n’ (backslash -> ‘\\’), поэтому, чтобы не грузить наш
код лишними символами, мы используем raw (исходник)
строчку, без магии спецсимволов. Что вижу, то и пишу:

file_descriptor = open (r’..\requirements.txt’)

Запускаем еще разок Shift+F10:

Process finished with exit code 0

Бам! Sector Clear! Выполнилось без единой ошибки. Те-


перь выведем прочитаем содержимое файла в переменную:

file_text = file_descriptor.read ()
print (file_text)

Запускаем Shift+F10 и получаем мешанину из ASCII


символов! Если открыть файл в блокноте, то мы уви-
дим, что символов в файле в два раза меньше, чем напе-
чаталось в консоли. Проблема в кодировке. Скорее всего
файл requirements.txt записался в UTF-16 (Unicode

https://liveinternet.club/
76 Евгений Павлов. Знакомьтесь, Python

Transformation Format — 16 бит), а мы пытаемся про-


читать по умолчанию ASCII (American standard code for
information interchange). Давай добавим кодировку:

file_descriptor = open (r’..\requirements.txt’,


encoding=’utf-16’)
file_text = file_descriptor.read ()
print (file_text)

Теперь после запуска, в консоли напечаталось ровно


то же что и в файле:

numpy==1.24.2

У-ф-ф! Главное ты уловил. Давай еще пару моментов на-


бросаю.

1. Открывать файл лучше только на чтение:


file_descriptor = open (r’..\requirements.txt’, ‘r’, encod-
ing=’utf-16’).

2. Перед чтением надо проверить что такой файл суще-


ствует:
from os.path import exists
path_to_file = r’..\requirements1.txt’
file_exists = exists (path_to_file)

3. Путь к файлу мы соберем из имени файла ‘requirements.


txt’ и директории ‘..’

import os.path
path_to_file = os.path.join (‘..’, ‘requirements.txt’)

https://liveinternet.club/
Data WareHouse: Как хранить данные? 77

4. если файла нет, пишем предупреждение, используя


строку форматирования ‘f’
print (f’Файл не найден: {path_to_file}’)

Теперь полный фарш:

from os.path import exists, join


path_to_file = join (‘..’, ‘requirements.txt’)
file_exists = exists (path_to_file)
if file_exists:
file_descriptor = open (path_to_file, ‘r’,
encoding=’utf-16’)
file_text = file_descriptor.read ()
print (file_text)
else:
print (f’Файл не найден: {path_to_file}’)

f-строки — еще один классный трюк со строками,


чтобы подмешать переменную в итоговую строчку. Попро-
буй поменять имя файла path_to_file на что-нибудь типа
‘requirements1.txt’, и увидишь:
Файл не найден:..\requirements1.txt

На этом первое знакомство с чтением файлов можно


закончить. У тебя есть конструктор из нескольких команд,
попробуй поиграться с ним. Улучши программу на свой
вкус или сломай ее — как пойдет.
Первый шаг сделан. Почувствуй себя в самом начале пути
в мир программирования. Это станет отличным ки-
бер-приключением. Сделай перерыв: разомни шею, плечи,
спину, ноги. Закрой глаза и подвигай зрачками, затем от-
крой и посмотри вдаль, за окно, на солнышко. Прогуляйся
попить водички и съесть вкусняшку. Ты с пользой прово-
дишь время, и заслужил перерыв!

https://liveinternet.club/
78 Евгений Павлов. Знакомьтесь, Python

JSON

JSON (JavaScript Object Notation) — текстовый формат об-


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

{‘ключ1’:’значение 1’, ‘ключ2’:’значение 2’, ‘ключ3’:’зна-


чение 3’}

В качестве значение может быть снова словарь, или мас-


сив.

{
«ключ1»:»значение 1»,
«ключ2»: {«ключ21»:»значение 21»,
«ключ22»:»значение 22»},
«ключ3»: [«значение 31», «значение 32»,
«значение 33»]
}

Обрати внимание, что json использует двойные кавычки,


в отличие от Питона, где мы могли писать строки и в оди-
нарных, и в двойных.
Давай создадим файл first.json и скопируем в него этот
код. Сам файл сохраним рядом с lesson1.py.
Теперь немного попрограммируем. Запускай PyCharm.
Создай новый файл lesson2.py в папке c первым уроком
(rep\lesson2.py).
Для начала, давай создадим структуру и превратим ее
в json, чтобы разобраться на что это должно быть похоже
в качестве переменных Python.

https://liveinternet.club/
Data WareHouse: Как хранить данные? 79

sample_dic = {}
sample_array = []

Вот наши словарь и массив в Питоне. Добавим туда зна-


чений:

sample_dic = {«ключ21»:»значение 21»,


«ключ22»:»значение 22»}
sample_array = [«значение 31», «значение 32»,
«значение 33»]

Теперь создадим общий словарь и поместим туда наши


переменные:

main_dic = {“ключ1”: “значение 1”}


main_dic [“ключ2”] = sample_dic
main_dic [“ключ3”] = sample_array
print (main_dic)

Если запустишь по умолчанию, то запустится наш пер-


вый скрипт, поэтому надо немного подсказать нашей IDE,
что запускать. Перейди на вкладку lesson2.py и нажми
Ctrl+Shift+F10. Ты должен увидеть в консоли строку:

{‘ключ1’: ‘значение 1’, ‘ключ2’: {‘ключ21’: ‘значение 21’,


‘ключ22’: ‘значение 22’}, ‘ключ3’: [‘значение 31’, ‘значение
32’, ‘значение 33’]}

Подозрительно напоминает наш первый json. Разве что


кавычки одинарные, вместо двойных.

Теперь давай начнем использовать библиотеку json:

https://liveinternet.club/
80 Евгений Павлов. Знакомьтесь, Python

print (json.dumps (main_dic))

json подсвечивается красной чертой — не хватает под-


ключения библиотеки. Можешь навести на нее курсор
(мышку наведи и кликни) и нажать Alt+Enter. Выбери
пункт:

import json

Нажми Enter — IDE сама напишет эту строку за тебя


в начале скрипта. Еще один навык быстрого напи-
сания кода, когда IDE подбрасывает варианты допи-
сывания и сама дописывает код. Шикарно! Подобный
стиль называется Red Code — сначала пишем на черно-
вую, что хотим сделать, а затем исправляем ошибки/до-
писываем недостающие части кода в программе. Устра-
няем подчеркивание красным в коде программе:

Нажимаем Shift+F10, чтобы запустить и получаем


какую-то белиберду в консоли:

{“\u043a\u043b\u044e\u04471”: “\u0437\u043d\
u0430\u0447\u0435\u043d\u0438\u04351”,

Это, брат, юникод. Поскольку у нас в строке были русские


символы — json превратил их в ASCII (American Standard
Code for Information Interchange) символы:

‘к’ => ‘\u043a’

Полезная штука, например, чтобы передать русские сим-


волы в URL (Uniform Resource Locator), который пони-
мает только английские буквы (на самом деле уже пони-

https://liveinternet.club/
Data WareHouse: Как хранить данные? 81

мает, но трудности случаются до сих пор). Но сейчас нам


такое преобразование не нужно, поэтому отключим его:

print (json.dumps (main_dic, ensure_ascii=False))

Снова запускаем Shift+F10 и на этот раз в консоли пол-


ный порядок:

{“ключ1”: “значение 1”, “ключ2”: {“ключ21”: “значение


21”, “ключ22”: “значение 22”}, “ключ3”: [“значение 31”,
“значение 32”, “значение 33”]}

JSON игнорирует пробелы, перевод строки и табуля-


ции, поэтому можно их добавлять в строку, чтобы выделить
структуру данных, сделав их более удобными для чте-
ния человеком. Заодно разобьем разрастающуюся команду
на две части: создание строки (она нам понадобится) и ее
печать в консоль.

json_str = json.dumps (main_dic, ensure_


ascii=False, indent=2)
print (json_str)

Никогда не пренебрегай возможностью сделать текст


или код еще более читаемым. Кстати, если нажать в редак-
торе Ctrl+Alt+L (Reformat Code), твой код станет чуть бо-
лее отформатированным для удобного чтения. Чистописа-
ние из младших классов возвращается! Чем проще читать
код, тем меньше ты тратишь усилий на его понима-
ние/осмысление при каждом новом чтении. Программи-
стам постоянно приходится совершать интеллектуальные
сверх-усилия. Эти маленькие хитрости позволяют эконо-

https://liveinternet.club/
82 Евгений Павлов. Знакомьтесь, Python

мить усилия мысли и дают нам продвинуться еще немного


дальше остальных. Все как с физической работой: не суе-
тись понапрасну, иначе быстрее устанешь.
Хорошо, еще пару усилий и мы закончим с этой темой,
а я смогу пойти побегать с друзьями во дворе. Давай запи-
шем получившуюся строку в файл. Нам опять нужен фай-
ловый дескриптор, но на этот раз в режиме записи ‘w’ —
write:

file_descriptor = open (r’lesson2.json’, ‘w’,


encoding=’utf-16’)
file_descriptor.write (json_str)
file_descriptor.close ()

Нажми Shift+F10 чтобы запустить. У тебя должен поя-


вится файл lesson2.json в той же папке с файлом скрипта.
Открой его и увидишь строчку из консоли. Обрати внима-
ние, что файл записан в unicode кодировке. Это когда ис-
пользуется два байта (или 16 бит) на один символ и до-
ступны все иностранные символы, например, кириллица.
В конце появилась команда close () — это чтобы коррек-
тно закрыть записанный файл и записать его содержимое
на диск. Наверное, если ее опустить, ничего страшного
не случится. Компьютеры сейчас стали очень умные и умеют
подчищать за рассеянным программистом. Однажды это
может стать неприятным сюрпризом, когда твои из-
менения останутся в памяти и не сохранятся после окон-
чания работы твоего скрипта. Береженого — Бог бережет!
Теперь прочитаем строку из файла и превратим ее
в структуру при помощи магии json.

file_descriptor = open (‘lesson2.json’, ‘r’,


encoding=’utf-16’)

https://liveinternet.club/
Data WareHouse: Как хранить данные? 83

json_str = file_descriptor.read ()
main2_dic = json.loads (json_str)

print (main2_dic)
print (main_dic)

В конце я распечатал обе переменные, до и после json,


чтобы увидеть, что они совпадают.

{‘ключ1’: ‘значение 1’, ‘ключ2’: {‘ключ21’: ‘значение 21’,


‘ключ22’: ‘значение 22’}, ‘ключ3’: [‘значение 31’, ‘значение
32’, ‘значение 33’]}
{‘ключ1’: ‘значение 1’, ‘ключ2’: {‘ключ21’: ‘значение 21’,
‘ключ22’: ‘значение 22’}, ‘ключ3’: [‘значение 31’, ‘значение
32’, ‘значение 33’]}

Потрачено! Есть такой старый мем из дурацкого перевода


игры GTA San Andreas.

Создали переменную, записали ее в файл и впечатали


в память обратно, не потеряв при этом содержимого. Та-
кие операции в умных книжках называются сериализацией
и дерериализацией. Serialize / DeSerialize. Прием, ко-
торый позволяет развернуть данные в памяти программы.
Например, когда ты сохраняешь свое прохождение в игре.
Данные игрока сериализуются и сохраняются на диск.
В следующем сеансе игры, при запуске, игра прочитает за-
писанное на диск и вернет игрока к сохраненному состоя-
нию. С того места, где ты закончил играть в прошлый раз.
JSON — это один из самых распространенных стандар-
тов сериализации данных. Большинство языков без про-
блем разворачивают данные из этого формата. Он удобен
еще и тем, что его удобно читать человеку. Удобно чи-

https://liveinternet.club/
84 Евгений Павлов. Знакомьтесь, Python

тать — удобно искать ошибки и отлаживать работу скрипта.


Быстрое выявление ошибок становится все более и более
важным для работы сложной программы. Это даже важ-
нее скорости выполнения. Быстрое выявление и устране-
ние ошибок помогает достичь главной цели — надежную
работу программы.
Еще одна важная веха в работе с данными на Питоне —
пройдена. Можешь отложить ноутбук. Размяться и прой-
тись, завари чайку, постой у окна (вообще, сходи во двор,
с ребятами мяч погоняй.) Отдохни как следует, чтобы с но-
выми силами начать следующее занятие.

Шаг за шагом ты приближаешься к цели. Горжусь тобой.

SQL
Для работы с базой данных придется обзавестись всем
необходимым. Приступим:
1. создать базу mySQL;
2. с помощью DBeaver подключиться к созданной базе
firstpython;
3. создать таблицу first_table и пару записей в ней;
4. установить пакет mysql-connector-python;
5. создать новый скрипт lesson3 и подключиться к базе;
6. вывести на консоль данные из нашей таблицы first_
table.

Работы предстоит много, поэтому завари горячего чаю,


запасись печеньками, поставь приятную музыку. Мы
начинаем!

https://liveinternet.club/
Data WareHouse: Как хранить данные? 85

Скачай DBeaver Community, чтобы подключаться к базе


данных.

Найди бесплатный mysql хостинг, например, db4free.net


и зарегистрируйся на нем:

База данных: firstpython


Username: firstpython

Заходим в DBeaver и создаем новые подключение к базе


данных:

Сервер: db4free.net
База данных: firstpython
Username: firstpython
Password: который я указал при регистрации (надеюсь ты
тоже придумал свой пароль)

Мне удалось подключиться!

Если ты подключился к своей базе данных, то получаешь


достижение #DBeaver.

Выбираю базу данных и нажимаю F3 (SQL Editor -> Open


SQL Sript), чтобы создать SQL скрипт (справа), куда я буду
вводить SQL команды.

CREATE TABLE first_table


(name1 VARCHAR (20), number2 INT);

Нажимаю Ctrl+Enter, чтобы выполнить команду. Пишет


что-то странное: rows updates 0. И слева таблицы в экспло-
рере не появилось. Но она там есть!

https://liveinternet.club/
86 Евгений Павлов. Знакомьтесь, Python

Выбери Tables -> Refresh и увидишь, как обновится спи-


сок таблиц, там появится наша новая табличка first_table!
Давай добавим первую запись в таблицу.

insert into first_table (name1, number2)


values (“hi dude”, 1)

Снова Ctrl+Enter. Интересно, что выполняется только


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

select *
from first_table ft

Нажимаем Ctrl+Enter и увидим нашу строчку. Я пере-


ключился с Greed на Text, чтобы результат был сплошным
текстом без таблицы.

name1 |number2|
———-+———-+
hi dude| 1|

Круто! Ты поднял выделенный сервер в интернете, со-


здал на нем MySQL базу, создал таблицу и наполнил ее дан-
ными. Шикарная работа, сейчас самое время сделать пере-
рыв.

Отлично! Давай продолжим собирать нашу махину.

Запускай PowerShell: [Win] Po.. [Enter]

https://liveinternet.club/
Data WareHouse: Как хранить данные? 87

cd C:\Projects\FirstPython\
.\venv\Scripts\activate

(venv) PS D:\Projects\FirstPython>

Сейчас мы находимся в нашем виртуальном окружении


и нам нужно установить пакет для работы с mysql:

pip install mysql-connector-python

После выполнения, в консоли будет написано что-то


типа:

Installing collected packages: protobuf, mysql-connector-python


Successfully installed mysql-connector-python-8.0.32
protobuf-3.20.3

Это значит, что пакет благополучно скачался и встал


в виртуальном окружении нашего проекта. На этом кон-
соль можно закрыть.

Давай, наконец, запустим PyCharm: [Win] py.. [Enter]

Создай новый скрипт lesson3.py и запусти его. Не за-


бывай проверить запуск в верхнем правом углу именно
lesson3.py!

import mysql.connector

sql_connection = mysql.connector.connect (
user=’firstpython’, password=’xxx’,
host=’db4free.net’, database=’firstpython’)
sql_connection.close ()

https://liveinternet.club/
88 Евгений Павлов. Знакомьтесь, Python

Наконец, наш скрипт подсоединился в базе данных


на удаленном сервере, а затем закрыл соединение. Неплохо!

Для начала, давай сделаем обертку для отлова ошибок,


если что-то пойдет не так.

import mysql.connector

try:
sql_connection = mysql.connector.connect (
user=’firstpython1’, password=’xxx’,
host=’db4free.net’, database=’firstpython’)
except Exception as err:
print (err)

Если ты запустишь в таком виде (я испортил user), то по-


лучишь ошибку в консоли:

1045 (28000): Access denied for user


‘firstpython1’@’55.213.123.231’ (using password: YES)
Поправь ошибку user и теперь выполним команду select.

query_str = ‘select name1, number2 from first_


table’
sql_cursor = sql_connection.cursor ()
sql_cursor.execute (query_str)

В результате выполнения, мы получили объект-кур-


сор, в котором спрятан список строк из результата запроса.
Осталось распечатать содержимое курсора.

for (name1, number2) in sql_cursor:


print (f’number: {number2} name: {name1}’)

https://liveinternet.club/
Data WareHouse: Как хранить данные? 89

Проверь, что команда sql_connection.close () пропала


или находится в самом конце скрипта. Чтобы сначала вы-
полнили запрос, а уже потом закрыли соединение, не нао-
борот! Запускай и смотри результат в консоли. У меня по-
лучилось вот такая строчка:

number: 1 name: hi dude

Добавим немного безопасности, изменив наш код. Фи-


нальный вариант скрипта будет выглядеть вот так:

import mysql.connector

try:
sql_connection = mysql.connector.connect (
user=’firstpython’, password=’xxx’,
host=’db4free.net’, database=’firstpython’)
except Exception as err:
print (err)

try:
query_str = ‘select name1, number2 from first_
table’
sql_cursor = sql_connection.cursor ()
sql_cursor.execute (query_str)

for (name1, number2) in sql_cursor:


print (f’number: {number2} name: {name1}’)
except Exception as err:
print (err)
finally:
sql_connection.close ()

https://liveinternet.club/
90 Евгений Павлов. Знакомьтесь, Python

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


работает и результат прежний:

number: 1 name: hi dude

Все! Для первого раза хватит. Мы прошли основные


этапы. Чтобы в следующий раз, когда ты будешь работать
с базой данных, не запинаться об эти операции, а уже со-
средоточиться на более продвинутых задачах.
Теперь у тебя есть первый опыт работы с базами дан-
ных. Поднял сервер, занимался администрированием, на-
писал SQL скрипт, управлял библиотеками Питона, при
помощи скрипта достал данные из базы. Просто куча всего
за небольшой урок!
Закрой ноутбук, пройдись по комнате, разомни шею
и плечи, посмотри вдаль. Можно перекусить и попить брус-
ничного морса из холодильника. Твой мозг хорошо потру-
дился и ему нужно восстановить силы. Ты заслужил отдых!

Что почитать

Кристофер Адамсон и Майкл Венерабле


«Data Warehouse Design Solutions»
Эта книга про проектирование и разработку хранилищ
данных. Здесь описаны разные типы хранилищ данных
и их архитектура, чем они отличаются от традиционных
транзакционных баз данных. С примерами и практиче-
скими советами по проектированию и разработке храни-
лищ данных.

https://liveinternet.club/
Data WareHouse: Как хранить данные? 91

Описана методология проектирования хранилищ дан-


ных: схема звезды (Star schema) или избыточная схема
снежинки. Более того, ррассмотрен процесс разработки:
от определения требований и проектирования модели дан-
ных, до загрузки данных и создания отчетов. Процесс ETL
(Extract, Transform, Load) и рекомендации по оптимизации
производительности хранилищ данных.

Задания и примеры:
1. открой (создай) файл на запись и напечатай туда
7 строк с номерами;
2. создай массив из семи чисел, преврати его в json и со-
храни в файл;
3. напиши скрипт, который заполняет таблицу first_
table данными: название дней недели и числа 1—7.

Если выполнил все эти задания, то получай достижение


#DataWareHouse.

В сухом остатке.
1. Строки: f — Formatting, r — Raw;
2. File Descriptor — ключ для доступа к файлу в операци-
онной системе;
3. JSON — JavaScript Object Notation;
4. SQL — Structured Query Language;
5. Connection — подключение к удаленному серверу;
6. Cursor — запрос для выполнения в базе данных и его
результаты.

https://liveinternet.club/
https://liveinternet.club/
RELEASE: ГЛАВНЫЕ
БИБЛИОТЕКИ ПИТОНА.
УЧЕБНАЯ ПРАКТИКА

Зачем это надо?

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

Pandas

В 2009 году Уэсом Маккини (англ. Wes McKinney) поки-


нул инвестиционную компанию AQR Capital Management.
Перед уходом из AQR ему удалось убедить руководство по-
зволить опубликовать исходный код библиотеки под сво-
бодной лицензией.

https://liveinternet.club/
94 Евгений Павлов. Знакомьтесь, Python

Уже в 2012 к нему присоединился коллега Чан Шэ. Би-


блиотека набрала популярность в среде Python-разра-
ботчиков и к проекту присоединилось множество новых
участников.
С 2015-го года эта библиотека спонсируется компанией
NumFOCUS, которая поддерживает open source проекты.

NumPy работает с массивами данных.


Pandas строится поверх библиотеки NumPy. Это бо-
лее высокоуровневый интерфейс для работы с табличными
данными: электронные таблицы и базы данных.
Plotly — библиотека для построения интерактивных гра-
фиков. На выходе ты получаешь Java Script приложение,
которое показывает интерфейс в браузере и рисует инте-
рактивный график, который можно увеличивать переклю-
чать. Получается намного круче, чем статическая картинка.
Руководству такое нравится.
NumPy может быть более эффективным для работы
с массивами и матрицами, чтобы выполнить быстрые ма-
тематические операции над большими объемами данных.
NumPy содержит кучу функций для работы с линейной ал-
геброй, статистикой и случайными числами.
Одной из основных задач, которые Pandas делает лучше,
чем NumPy — это анализ данных. Pandas загружает и об-
рабатывает данные из CSV-файлов (выгружаются из элек-
тронных таблиц или запросом из базы данных).
Сырые данные нужно приготовить, чтобы представить
их с помощью Plotly в отчете. Pandas может сгруппиро-
вать данные, отбросить лишнее, отсортировать по алфа-
виту. В том числе имеет удобный интерфейс для работы
с разными форматами чисел и времени.

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 95

С данными больше работают аналитики, которые ис-


пользуют Jupiter Notebook, который входит в состав IDE
Anaconda. Перед использованием, библиотеки надо скачать
и установить библиотеки pandas и plotly для Anaconda:
1. открой Anaconda Navigator;
2. нажми на кнопку «Channels» внизу окна и проверь,
что выбраны каналы «conda-forge» и «defaults»;
3. открой «Environments» (меню слева) и выбери окру-
жение;
4. введи «pandas» в поле поиска, выбери библиотеку
Pandas и нажми на кнопку «Apply». Это установит би-
блиотеку Pandas и все ее зависимости;
5. введи «plotly» в поле поиска, выбери библиотеку Plotly
и нажми на кнопку «Apply». Это установит библио-
теку Plotly.

Другой способ — это установка pandas и plotly через ко-


мандную строку Anaconda Prompt.

conda install pandas


conda install -c plotly plotly

Например, ты работаешь с данными о продажах в интер-


нет-магазине и тебе надо проанализировать, как менялась
выручка по месяцам в течение года. Используй Pandas
для загрузки данных из CSV-файла, предварительной об-
работки данных, агрегации по месяцам и расчета суммар-
ной выручки за каждый месяц. Пример кода для Jupiter
Notebook:

import pandas as pd

# Загрузка данных из CSV-файла


sales_data = pd.read_csv (‘sales_data.csv’)

https://liveinternet.club/
96 Евгений Павлов. Знакомьтесь, Python

# Преобразование даты в формат datetime


sales_data [‘date’] = pd.to_datetime (sales_data
[‘date’])

# Сгруппировать продажи по месяцам


monthly_sales = sales_data.groupby (pd.Grouper
(key=’date’, freq=’M’)).sum ()

# Расчет суммарной выручки за каждый месяц


monthly_revenue = monthly_sales [‘revenue’]

# Вывод результатов
print (monthly_revenue)

И, наконец, давай сделаем график!

import plotly.graph_objects as go

# Создание интерактивного графика


fig = go.Figure ()
fig.add_trace (go.Scatter (x=monthly_
revenue.index, y=monthly_revenue.values,
mode=’lines+markers’))
fig.update_layout (title=’Выручка по месяцам’,
xaxis_title=’Месяц’, yaxis_title=’Выручка’)
fig.show ()

Этот код, после выполнения, покажет график в блокноте


Jupiter.

Если у тебя получилось вывести график на экран монитора,


то ты получаешь достижение #Anaconda.

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 97

А вот так можно выгрузить JS приложение в html файл,


чтобы его можно было запустить в браузере:

# Сохранение графика в HTML файл


fig.write_html (‘sales_graph.html’)

Затем, можно выгрузить сгенерированный скрипт в html


файл. Прикрепить этот html файл к документу в корпо-
ративной википедии и вставить кусочек кода со ссыл-
кой на прикрепленный html файл в текст документа —
получилось безопасно и красиво! Confluence — это вики
от Atlassian (создателей Jira, SourceTree и прочих инстру-
ментов для разработки программного софта c удобной ин-
теграцией между собой). Приведу пример кода для вставки
html в статью на wiki:

<iframe id=”result” style=”width:800px; height:


600px; border:1px solid;” scrolling=”no”></iframe>
<script>
$ (document).ready (function () {
$.ajax ({
method: ‘GET’,
url: ‘/download/attachments/12345678/revenue.
html’,
dataType: ‘text’,
success: function (data) {
var iframe = document.getElementById (‘result’);
iframe = iframe.contentWindow || (iframe.
contentDocument.document || iframe.
contentDocument);

iframe.document.open ();
iframe.document.write (data);

https://liveinternet.club/
98 Евгений Павлов. Знакомьтесь, Python

iframe.document.close ();
}
});
});
</script>

Конечно, когда разберешься во всем этом, такие мани-


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

Django
Django создали разработчики издания Lawrence-Journal
World. Этой газете понадобился сайт, чтобы публиковать
новости в интернете. Программисты Эдриан Головатый
и Саймон Виллисон создали веб-приложение и сделали его
публичным.
Вокруг Django быстро сформировалось активное сооб-
щество. Фреймворк стал стремительно развиваться усили-
ями волонтёров. Значительную роль в успехе Django сы-
грали несколько известных сайтов, которые использовали
этот фреймворк. В их число входят Pinterest, Dropbox,
Spotify, сайт The Washington Post. В настоящее время со-
общество Django включает десятки тысяч программистов
и сотни стран мира.

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 99

Этот фреймворк используется большим количеством


других библиотек, которые можно без проблем подключать
к проекту Django по необходимости.

В Django тоже есть типовые блоки. Например, блок ав-


торизации или блок подписки на рассылку применяется
практически в каждом проекте. Созданные с помощью
фреймворка сайты состоят из таких независимых блоков.
Когда разбираешься с Django и ищешь решение своей
проблемы, чаще всего это не вызывает затруднений. Тысячи
специалистов уже решали такие же проблемы и уже поде-
лились своим опытом в интернете. Так работает сообще-
ство Django.
Django использует архитектуру MVT — Данные (Model),
Вывод (View), Шаблон вывода для html (Template).
После функционального программирования к этому
сложно привыкнуть, когда освоишься — поймешь, что так
на самом деле удобнее.
Django подходит для разработки высоконагруженных
веб-приложений, поэтому его так любят корпорации. Хо-
чешь сделать что-то большое — используй Джанго!

Давай создадим простой проект на Django:

1. установи Django

> pip install django

2. Создай новый проект Django

> django-admin startproject myproject

https://liveinternet.club/
100 Евгений Павлов. Знакомьтесь, Python

Команда создаст каталог с именем myproject, в котором


будут находиться файлы проекта.

3. Создай приложение Django

> python manage.py startapp myapp

Команда создаст каталог с именем myapp, в котором бу-


дут находиться файлы приложения.

4. Настрой базу данных. Отредактируй файл settings.py


в каталоге myproject. Например, чтобы использовать базу
данных MySql надо написать:

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘fisrtpython’,
‘USER’: ‘firstpython’,
‘PASSWORD’: ‘пароль из предыдущей главы’,
‘HOST’: ‘db4free.net’,
‘PORT’: ‘3306’,
}
}

Не зря я рассказывал, как работать с базами данных! Без


них — никуда.

5. Опиши структуру данных (Model). Отредактируй


файл models.py в каталоге myapp. В этом файле надо опре-
делить таблицу в базе данных, которая будут использоваться
в твоем приложении. Чтобы создать таблицу article, добавь
в файл models.py:

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 101

from django.db import models

class Article (models.Model):


title = models.CharField (max_length=200)
content = models.TextField ()
pub_date = models.DateTimeField (auto_now_
add=True)

6. Создай миграции (таблицы в базе данных)

> python manage.py makemigrations


> python manage.py migrate

Команда makemigrations создаст расширенный sql


скрипт, для добавления таблиц (описанных в models.py)
в базу данных. Команда migrate применит эти изменения
к базе данных (описанной в settings.py).

7. Создай объекты Article в базе данных. Создай скрипт


utils\add_article.py:

from myapp.models import Article

article = Article (title=’Заголовок статьи’,


author=’Имя автора’, content=’Текст статьи’)
article.save ()

Запусти его. Этот код создаст новый объект Article и со-


хранит запись в базе данных в таблице article.

8. Создай представления (View), чтобы создать на сайте


страницу index, которая будет показывать список статей,
добавь в views.py:

https://liveinternet.club/
102 Евгений Павлов. Знакомьтесь, Python

from django.shortcuts import render


from.models import Article

def index (request):


articles = Article.objects.all ()
return render (request, ‘index.html’, {‘articles’:
articles})

Здесь берется модель Article из файла models.py и соз-


дается страничка index, которая получает список записей
из таблицы article и передает их в шаблон index.html.

9. Создай шаблоны (Template). Создай файл myapp\


templates\index.html. Здесь мы определим, как будет вы-
глядеть страница index.html нашего сайта:

{% for article in articles%}


<h2> {{article.title}} </h2>
<p> {{article.content}} </p>
{% endfor%}

10. Запусти сервер.

> python manage.py runserver

Команда запустит сервер разработки Django, который


будет доступен по адресу http://127.0.0.1:8000/.

11. Открой браузер. Введи URL http://127.0.0.1:8000/


в браузере и посмотри список статей, которые вы добавили
в базу данных.

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 103

Если ты увидел в браузере свою страничку, то получаешь


достижение #Django.

Вот ты и узнал, почему программисты получают так не-


прилично много денег. Потратить несколько часов на вы-
полнение всех действий, чтобы увидеть пару строчек в бра-
узере. Такое под силу только настоящему программисту!

RabbitMQ
В 2007 разработан Rabbit Technologies Ltd.
В 2010 продан в SpringSource, подразделение VMware.
В 2013 стал частью Pivotal Software.
В 2019 выкуплен обратно в VMware.

RabbitMQ — backend для хранения очередей (специ-


альная база данных). В вашей инфраструктуре может быть
100500 очередей для самых разных задач.
Pika — библиотека на python для работы с сервером
rabbitMQ.
Celery — библиотека на python для отложенного вы-
полнения задач. Внутри используется очередь задач, кото-
рая хранится в отдельном сервисе (RabbitMQ). Celery рабо-
тает с нею при помощи Pika.
Использование RabbitMQ и Celery похоже на работу дис-
петчера и курьеров в городской доставке. RabbitMQ — это
диспетчер, который получает задачи и распределяет их
между курьерами Celery. Каждый курьер получает свою за-
дачу и выполняет ее, а затем отправляет результат обратно

https://liveinternet.club/
104 Евгений Павлов. Знакомьтесь, Python

диспетчеру. Таким образом, RabbitMQ и Celery позво-


ляют эффективно распределять задачи на кластере серверов
и управлять их выполнением в приложении на Python.
Эта архитектура часто применяется на серверах банков,
через которые проходят миллионы транзакций. Одна тран-
закция долго обрабатываться на выделенном сервере, поэ-
тому обработкой всех транзакций занимаются десятки сер-
веров. Балансировкой нагрузки на эти сервера занимается
сервис RabbitMQ (тоже отдельный сервер балансировки).
Программист пишет программу для обработки одной
транзакции на Python, затем эта программа раскатывается
на все сервера в кластере.

Давай сначала установим RabbitMQ на Windows:

1. загрузи Windows Installer с официального сайта:


rabbitmq.com;

2. следуя инструкциям, установи RabbitMQ;

3. после установки, открой командную строку и перейди


в папку, куда был установлен RabbitMQ. Обычно по умол-
чанию это C:\Program Files\RabbitMQ\;

4. чтобы установить плагин RabbitMQ Management, за-


пусти команду: rabbitmq-plugins enable rabbitmq_
management. RabbitMQ Management, позволяет управ-
лять и мониторинг использования RabbitMQ в браузере;

5. чтобы запустить сервер RabbitMQ, в командной кон-


соли запусти команду: rabbitmq-server start;

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 105

6. теперь нужно открыть веб-интерфейс RabbitMQ


Management. Открой браузер и введи адрес http://localhost:
15672. Ты увидишь страницу входа;

7. введи логин и пароль по умолчанию: guest/guest. При


первом входе, появится возможность создать нового поль-
зователя.

Теперь ты сможешь использовать RabbitMQ для своих


приложений.

Чтобы работать Celery, установи библиотеку в рабочем


окружении:

> pip install celery

Затем создай файл tasks.py, где будут храниться задачи.


Например, создадим задачу add, которая будет складывать
два числа:

from celery import Celery

cerely_app = Celery (‘tasks’, broker=’pyamqp://


guest@localhost//’)

@cerely_app.task
def add_two_numbers (x, y):
return x + y

Здесь мы создали объект cerely_app класса Celery и опре-


делили задачу add_two_numbers с использованием декора-
тора @cerely_app.task.

https://liveinternet.club/
106 Евгений Павлов. Знакомьтесь, Python

Чтобы запустить задачу, создай файл run_task.py, кото-


рый будет содержать код для запуска задачи. Например:

# импортируем задачу add_two_numbers из файла


tasks.py
from tasks import add_two_numbers

# используем асинхронный запуск для задачи add_


two_numbers
result = add_two_numbers.delay (3, 5)

# печатаем что получилось


print (result.get ())

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


дельном процессе (основная программа на это время засы-
пает в ожидании). Получаем результат работы в виде объ-
екта AsyncResult, а печатаем его:

>8

У-ф-ф, разобрались с этими библиотеками!

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


тер, разобрался и сумел повторить, ты получаешь достиже-
ние #RabbitMQ.

Я по-настоящему горжусь тобой!

Google и NASA
В начале двухтысячных годов появился Python 2.0 и его
начали использовать такие гиганты как Google и NASA.

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 107

Python хорошо адаптирован для параллельного и рас-


пределенного программирования. Что важно для
Google, который специализируется на построении масшта-
бируемых систем. В 2018 Дата Центры (ЦОД) Корпорации
Добра создавали почти половину выбросов CO2 от работы
интернета. Что явно намекает на количество компьютеров
Корпорации Добра.
Для Python создано куча библиотек, чтобы обрабатывать
данные. Миссия Google: систематизировать всю информа-
цию в мире и сделать ее доступной для каждого пользова-
теля. Обработка и масштабирование — отличные цели
для Python и Google.

Google создал несколько библиотек на Python:


1. Selenium — библиотека для тестирования;
2. Google App Engine — фреймворк для создания веб-
приложений;
3. TensorFlow — инструменты для машинного обучения.

Python — основной язык программирования в известных


проектах: YouTube, Google Search, Google Maps и куча дру-
гих.
Кроме денег, Гугл хочет видеть всю инфраструктуру Пи-
тона, живущую в своём облаке. В особенности, репозито-
рий pip, через который устанавливаются все библиотеки
Python.

NASA выбрала Python из-за библиотек для обработки


данных и научных вычислений. National Aeronautics and
Space Administration работают с научными исследованиями
и космическими миссиями.
Задачи для космоса связаны с большими данными
и тяжелыми расчетами, а Python оказался хорошим

https://liveinternet.club/
108 Евгений Павлов. Знакомьтесь, Python

инструментом для такой работы. Обошел на повороте


Си и Java, потому что их тяжелее изучать и поэтому они
не прижились в научном сообществе.
Конечно, код для марсохода пишут на Си, как и драй-
вера для всего коммерческого оборудование, ведь язык Си
максимально близок железу (язык роботов!) Си — про-
мышленный стандарт. Поэтому, скомпилированный на Си
код, будет корректно работать на самых экзотичных
и специализированных процессорах и операционных си-
стемах.
С другой стороны, специалисты пишут на том, на чем
им удобнее. Поэтому Python — основной язык програм-
мирования для систем управления космическими аппара-
тами и обработки данных в NASA.
Библиотека PyRAF (Python-based Reduction and Analysis
Facility), была разработана в NASA для обработки данных,
полученных с помощью телескопа Hubble. PyRAF предо-
ставляет мощный инструментарий для обработки и ана-
лиза данных в астрофизике и используется в научных про-
ектах.
OpenMDAO (Open-source Multidisciplinary Analysis and
Optimization) предоставляет инструменты для междисци-
плинарного анализа и оптимизации сложных систем.
OpenMDAO используют в проектах NASA, связанных с про-
ектированием и анализом космических аппаратов.
Обрати внимание: прежде всего, программирование —
это инструмент для исследований. Такой же, как те-
лескоп или градусник, поэтому так важно не просто уметь
программировать, но быть специалистом в какой-то обла-
сти. Специалистом, который умеет использовать програм-
мирование на Питоне в своей работе.

https://liveinternet.club/
Release: Главные Библиотеки Питона. Учебная практика 109

Хочешь вырасти как специалист? Изучай програм-


мирование и используй его в своей основной профессии:
1. управление проектами: планирование, отслеживание
и контроль проектов;
2. маркетинг: создание сайтов, рекламных кампаний,
анализ поведения пользователей;
3. финансы: финансовая отчетность, анализ данных,
управление рисками, управление портфелем;
4. производство: управление производством, контроль
качества;
5. логистика: цепочки поставок, отслеживание грузов,
управление складами;
6. обслуживание клиентов: управление клиентскими
отношениями, обработка заказов;
7. управление персоналом: управление кадрами, зар-
платами, отпусками, сотрудничествами.

Мы живем в реальности, где компьютерные технологии


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

Тыжпрограммист — защитник планеты,


Чинит всё, от холодильника до лыж.
Процессор не включается, или интернета нету,
Срочно посылай в космос сигнал «Тыж»!20
20
Научно-технический рэп — «Тыжпрограммист», 2015.

https://liveinternet.club/
110 Евгений Павлов. Знакомьтесь, Python

Контрольные вопросы:
1. Расширением какой библиотеки является Pandas?
2. Какую архитектуру использует Django?
3. Что делает команда makemigrations?
4. Как связаны между собою RabbitMQ и Cerely?
5. Расширение какой библиотеки является Cerely?

Если ответил на все вопросы — получай достижение


#PythonLibraries.

В сухом остатке:
1. Anaconda, Jupiter Notebook, NumPy, Pandas
2. Grafana, Plotly, Confluence, Jira
3. Django — Model View Template, makemigrations
4. RabbitMQ, Pika, Cerely, Decorator, Task

https://liveinternet.club/
https://liveinternet.club/
GIT: СИСТЕМА КОНТРОЛЯ ВЕРСИЙ.
ГДЕ ХРАНИТЬ ИСХОДНИКИ

Октокот Мона Лиза

О
ктокот — это помесь осьминога и кота. Черный
с пятью щупальцами. Кстати, это не кот, а кошка.
Маскот (талисман) GitHub — крупнейшего сер-
виса для хранения открытого программного кода. Ее зовут
Мона Лиза, или просто Мона. Есть множество картинок
Моны в разных стилях: от звездных войн до Санта-Кла-
уса. Особое развлечение — разглядывать ее многочислен-
ные образы.
Git (Global Information Tracker) — система контроля вер-
сий, созданная Линусом Торвальдсом. Для управления
разработкой ядра Linux (Линукс), создателем которой он
является. Очень быстрая система для хранения истории из-
менений документов, слияния разных версий и выпуска
патчей.

По другой версии, Git — это случайная комбинация трех


букв, которая еще не использовалась в качестве других ко-
манд Linux.

https://liveinternet.club/
114 Евгений Павлов. Знакомьтесь, Python

Git (мерзавец) — Торвальдс саркастически отозвался


о выбранном им названии: “Я эгоистичный ублюдок и поэ-
тому называю все свои проекты в честь себя. Сначала Linux,
теперь git.” Этот мужчина знает толк в острых шутках! Лю-
блю его юмор. >_<

Когда программируешь, тебе нужно не просто иметь код


программы, но и историю изменения этого кода. Например,
чтобы иметь возможность откатить изменения назад,
до того момента, когда была совершена ошибка и система
перестала работать. Не представляю, как программисты
раньше жили без этой системы? Git идеально подходит для
хранения именно текста, будет это программный код, html
страница или лицензионное соглашение. Ты с легкостью
можешь узнать, что именно изменилось в последней вер-
сии документа.
Работа с этим инструментом — важная часть работы про-
граммиста. Если над одним проектом команда из несколь-
ких программистов — этот инструмент становится крити-
чески важным. Просто невозможно разруливать конфликты
изменений от разных авторов другими способами!
Не буду грузить тебя сложной теорией. На самом деле
освоить git проще чем ездить на велосипеде. После не-
скольких слияний в групповом проекте, ты научишься этой
технологии и перестанешь допускать ошибки. Чем раньше
начнешь практиковать git, тем быстрее научишься.
Есть одна полезная особенность github — ты можешь
скачать и посмотреть чужие проекты. В 99% репозиториев
ты ничего не поймешь даже с документацией, но даже по-
пытка изучения чужого кода многому тебя научит. На-
блюдать за работой мастеров программирования — очень
полезно.

https://liveinternet.club/
GIT: Система контроля версий. Где хранить исходники 115

Ludum Dare

Люблю участвовать в фестивале скоростной разработки


игр Ludum Dare. Когда тысячи команд по всему миру вы-
бирают тему для небольшой игры и делают свой прототип
за выходные. Настоящий 48-часовой марафон на вы-
живание, который учит правильному планированию
и распределению усилий по разработке.
Мое достижение — это участие в таких марафонах 10 (де-
сять) раз подряд. Почти четыре года (LD проводится 3 раза
в год). И я каждый раз собирал команду, чтобы сделать оче-
редную игру на Unity для Google Play на своем телефоне
под Android.
Многие участники используют GitHub для хранения
своих проектов (больше 4-х тысяч репозиториев!). Часто
изучаю исходный код в открытом доступе самых интерес-
ных проектов. Очень поучительно изучать историю поэ-
тапной разработки. С чего начинают разработку нового
проекта? В каком порядке добавлялись новые фичи? Как
именно была реализована эта крутая механика или краси-
вый интерфейс в игре? Как оформляется код у коллег?
Есть еще один полезный момент от домашних проек-
тов. Если у тебя есть домашний проект — именно на нем
ты можешь ставить свои эксперименты с новыми версиям
библиотек; попробовать новые технологии и подходы
в разработке. Публичные репозитории похожих проектов
очень помогают подсмотреть у коллег новые взгляды и тех-
нологии. На будущее, стоит подумать над своим домашним
проектом (Pet Project). Будет над чем ставить эксперименты
и что показывать работодателю.

https://liveinternet.club/
116 Евгений Павлов. Знакомьтесь, Python

Опыт участия в подобных хакатонах стал очень полез-


ным для меня, как для программиста, геймдизайнера и ли-
дера команды. Я научился выделять самое главное в игре
(Core Gameplay) и быстро это прототипировать. Научился
работать в команде, нарезать задачи и планировать нашу
общую работу; доводить проект до конца и полировать ре-
зультат так, чтобы он засиял. А самое главное — научился
грамотно распределять нагрузку и вовремя отдыхать
во время разработки. Это суперполезные навыки для лю-
бого разработчика.

Создаем репозиторий
Давай создадим репозиторий для нашего проекта
на github. Открывай сайт github.com
Нажимай кнопку [Sign Up] чтобы зарегистрироваться
на этом сайте как новый пользователь.
Укажи свою почту, придумай пароль для github. Обрати
внимание, что в пароле нужны заглавные буквы и цифры,
всего не меньше 8 символов.
Придумай себе имя пользователя. В конце концов
github — это социальная сеть для программистов. Один
нюанс: это имя увидят твои работодатели, когда ты будешь
присылать им свое тестовое задание, например. Придумай
что-то более официальное, не повторяй мою ошибку!
Согласись получать новости и реши капчу. После чего
нажимай [Create Account].
Проверь почту, тебе должно прийти письмо из GitHub
с заголовком “Your GitHub launch code” прочитай код
и введи его на сайте.

https://liveinternet.club/
GIT: Система контроля версий. Где хранить исходники 117

Ответь на вопросы анкеты:


1. как много людей будет работать над твоим проек-
том? 1;
2. ты учитель или студент? Студент;
3. какие фичи тебе интересно использовать? Никакие.

На следующей странице выбирай бесплатный план


[Continue for free].
Гиперпрыжок! Наконец, ты попал в GitHub.

Если ты завершил регистрацию, получай ачивку #OctoCat.

Ищи зеленую кнопку слева [Create Repository] и нажи-


май ее.

Имя репозитория: FirstPython


Описание: Учебный проект на Питоне. По книге: Зна-
комьтесь Питон.

Публичный проект. Не стоит заморачиваться с приват-


ностью — лишние сложности.

Поставь галочку (checkbox) в пункте Add a README file

Выбери шаблон для gitignore: Python (какие файлы не по-


падут в репозиторий, оставшись только на локальной ма-
шине)

Лицензию оставь пустой: None

Нажми зеленую кнопку [Create Repository]

https://liveinternet.club/
118 Евгений Павлов. Знакомьтесь, Python

Ура! Проект создался. Оглядись в папке проекта. Посмо-


три какие там есть закладки. Куча непонятных кнопочек!
Прямо как в космическом корабле.

Сейчас нас интересует зеленая кнопка ближе к середине


экрана [<> Code]. Нажми на нее.

Скопируй строчку с адресом проекта: https://github.com/


BloodJohn/FirstPython.git

На этом пока закончим с GitHub и сделаем копию на-


шего проекта на локальной машине — клонируем проект.

Я использую клиент SourceTree — он достаточно про-


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

Скачай exe файл для установки


и запусти его.

Registration — [skip]

Pick Tools to Download and Install — git

Кроме самого SourceTree нам нужна еще и сама про-


грамма/утилита git

[Next]

Preferences — укажи имя пользователя и почту, такие же


как в github.

Load SSH Key — No

https://liveinternet.club/
GIT: Система контроля версий. Где хранить исходники 119

Клиент установлен и запущен! Давай клонируем наш


проект из github:

Нажимай кнопку [Clone] и вводи URL нашего проекта


из github

Кликни за пределы поля ввода и введи в появившемся


окне свой логин и пароль на GitHub. Нажимай [Login]

Следующее поле Destination Path: C:\Projects\


FirstPython — путь к нашему уже существующему проекту
на Питоне

Имя для закладки в SourceTree: FirstPython

Local Folder: root

Checkout Branch: main

Нажимай синюю кнопку [Clone]

И мы увидим ошибку: Cannot Clone Into Non-Empty


Folder

Давай поменяем директорию на C:\Projects\FirstPython2


и попробуем снова.

Теперь все заработало! Проверь что репозиторий создал


папку FirstPython2 с несколькими файлами внутри и одной
скрытой директорией «git».
Уф! Даже когда знаешь нюансы — этот процесс утомляет.
Боюсь предположить, сколько раз у тебя не получалось.
Самое обидное, что затык может возникать на ровном

https://liveinternet.club/
120 Евгений Павлов. Знакомьтесь, Python

месте! Например, потому что в новой версии (в твоем буду-


щем) изменился интерфейс и вот ты уже не можешь найти
нужную кнопку, о которой пишет автор. Но ты справился!
Время устроить перерыв. Закрой ноутбук, встань и прой-
дись. Наклони голову вперед-назад, вправо-влево, осто-
рожно повращай шеей — почувствуй, как хрустят позвонки
шеи. Покрути плечами — разгони кровь и почувствуй при-
лив удовольствия от движения. Налей себе воды и съешь
вкусняшку. Посмотри на яркое солнышко за окном. Про-
сто закрой глаза и постарайся ни о чем не думать. Пара ми-
нут медитации после усиленной работы головой — то что
доктор прописал. Отдохни как следует и возвращайся к из-
учению Git.

Если сделал зарядку, получай достижение #PythonGym

Сохраняем изменения

Давай скопируем в папку нашего нового репозитория


наш старый проект из C:\Projects\FirstPython. Просто ско-
пируй все файлы из одной папки в другую.
Теперь загляни в SourceTree. Надо немного подождать,
когда изменения прогрузятся. Вкладка File Status. Панель
UnStaged Files (несохраненные файлы), сделаем несколько
действий:
1. нажми плюсики для файлов txt, py, json — все файлы,
которые мы создавали в проекте;
2. на любом из файлов.idea правой кнопкой мыши, вы-
бираем в контекстном меню Ignore..;

https://liveinternet.club/
GIT: Система контроля версий. Где хранить исходники 121

3. в диалоге Ignore выбираем Ignore everything beneath


[.idea]. Нажимаем кнопку [OK];
4. появившийся желтый.gitIgnore — тоже нажимаем
крестик и перемещаем его в сохраненные файлы
Staged files.

Остался еще один важный штрих. Надо сочинить описа-


ние нашего изменения (commit). Все программисты при-
выкли называть его коммит. Как привыкли говорить файл,
вместо документа. Напиши свое описание для нового ком-
мита в окошке, внизу SourceTree:

Добавил проект со скриптами 1—3 уроков.

Оба чекбокса оставляем пустыми:


Push changes immediately to origin/main
Amend latest commit

DDL (Drop Down List) Commit Options — тоже не тро-


гаем.

Нажимай [Commit]

Хорошо! После нажатия мы вновь видим дерево комми-


тов с новым узлом, нового коммита. А наверху подсвети-
лась кнопка Push.

Сейчас изменения зафиксированы, но находятся только


на локальной машине (Workspace). Ктопка Push отправит
изменения на сервер в репозиторий в главную (main) ветку.

Нажимай кнопку [Push]. Появится диалоговое окно, где


ничего не надо менять, а просто нажать [Push] еще разок.

https://liveinternet.club/
122 Евгений Павлов. Знакомьтесь, Python

Далее появится диалог авторизации GitHub. Выбери Sign


In your browser

В браузере откроется страница Authorize Git Credential


Manager
Нажимай зеленую кнопку [authorize git credential
manager]

Можешь возвращаться в SourceTree — коммит запушился


на GitHub!

Зайди на сайт GitHub и посмотри страницу с репози-


торием FirstPython. Погуляв по интерфейсу, ты сможешь
найти список файлов в репозитории, а неприметная кно-
почка “2 commits” — покажет страницу с историей комми-
тов (их пока два).
Подозреваю, что не у каждого получится без проблем
сделать все шаги, ведь количество непонятных кнопок про-
сто зашкаливает.

Если у тебя получилось залить проект на сервер, то ты по-


лучаешь достижение #FirstCommit.

Например, я полчаса тупил, не понимая, почему не про-


ходит авторизация github при попытке запушить на сер-
вер. Мне пришлось скопировать текст ошибки и почи-
тать советы на Stackoverflow, Но это не особенно помогло.
Тогда я начал вбивать разные варианты фразы в поисковик
гугла, в надежде увидеть подсказку. Наконец, я нашел ста-
тью “Git Commands Return Fatal: Authentication Failed21”.
Где 3-й из 4 вариантов проблемы походил на мою. У меня
устарел сам Git. Мне пришлось сходить на сайт и переу-
21
Peter Mortensen, сайт stackoverflow.com

https://liveinternet.club/
GIT: Система контроля версий. Где хранить исходники 123

становить Git на компьютере. После установки в SourceTree


поменялся диалог авторизации, и теперь все сработало
нормально.
Часто в работе не все идет гладко. Если найти ответ не по-
лучается ни с первого, ни со второго раза, не отчаивайся.
В работе с компьютерами такое происходит постоянно.
Мой совет: отвлекись от компьютера на 5—10 минут и про-
гуляйся. Новые варианты появляются в голове, когда она
не занята суетой. Ты придумаешь еще пару гипотез и одна
из них обязательно сработает.
Это удивительно полезный навык для нашего перегру-
женного шумом времени — отложить все в сторону
и просто посидеть наедине со своими мыслями в тишине,
чтобы ничего не отвлекало. Во время медитации пыль ося-
дет, и ты ясно увидишь новое решение.

Объединяем разные ветки

Релизная ветка и ветка разработки. Релизная ветка — это


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

https://liveinternet.club/
124 Евгений Павлов. Знакомьтесь, Python

Иными словами, в каждой ветке свой уровень ошибок


и наличие веток позволяет нам не выплескивать энтропию
(это такая функция измерения хаоса в физике) в соседние
отсеки, а делать это управляемо, вроде серии речных шлю-
зов. Только тут у нас не уровень воды в шлюзе, а уровень
ошибок в коде.

Зачем уходить на отдельную ветку? Чтобы иметь ста-


бильную копию проекта. Будет очень неприятно, когда
посреди работы твой файл изменят и сотрут все твои изме-
нения. Печалька, если посреди отладки ты заберешь чужие
изменения, которые сломают работу проекта — он пере-
станет компилироваться вообще. Как часто это происхо-
дит? Чаще, чем мне бы этого хотелось!
Как вернуться в основную ветку? Сначала забери изме-
нения из основной ветки в свою. Разберись с конфлик-
тами: когда в разных версиях один и тот же участок кода
был изменен. Надо выбрать, какое изменение останется,
а какое сотрется. Или написал третье изменение, объеди-
няющее первые два. Затем спокойно вливай свои измене-
ния с уже решенными конфликтами в общую ветку разра-
ботки.
Чтобы спустится вниз по реке (до продакшена), сна-
чала проверяем тестированием и исправляем ошибки
на рабочей машине (уменьшаем вероятность сбоев или
саму энтропию). Уровень воды в отсеке-шлюзе опускается
до уровня следующего отсека. Затем вливаем текущую вер-
сию в рабочую ветку. Открываем ворота шлюза в соседний
отсек. Переходим в соседний отсек, ниже по течению. Пока
не достигнем самого низкого уровня воды (ошибок в коде).
И, наконец, выйдем в открытое море (продакшен).

https://liveinternet.club/
GIT: Система контроля версий. Где хранить исходники 125

Как устроен Git


GitFlic.ru — русский GitHub создан в 2021 году
Gitee.com — китайский GitHub создан в 2016 году, как
ответвление от другого проекта Gogs.io

Git для Windows состоит из трех программ:


1. Remote Server — репозиторий на удаленном ком-
пьютере.
2. Git — утилита для работы с репозиторием.
3. SourceTree — графический интерфейс для работы
с утилитой.

Изменения Git делятся на четыре этапа:


1. ustaged files: локальный проект — файлы, которые
лежат на диске;
2. staged files: зафиксированные изменения — файлы
(часть изменений), которые пометил для отправки;
3. local branch: локальные коммиты — файлы (изме-
нения), которые объединил в коммит;
4. remoute branch: репозиторий на сервере — ком-
мит, который отправил на сервер

Как с речным шлюзом: изменения (корабли) двигаются


от 1 до 4 этапов (шлюзов).
Git хранит только изменения файлов, вместо файлов
полностью. Если ты исправил одну строку в файле с мил-
лионом строк, то изменение будет весить ровно одну (ис-
правленную) строку.

https://liveinternet.club/
126

https://liveinternet.club/
верхний
бьеф

закрыто
открыто
нижний ВХОД В ШЛЮЗ
бьеф

верхний
бьеф

закрыто
закрыто
нижний ПОДЪЕМ
бьеф

верхний
бьеф

открыто
закрыто

нижний
бьеф ВЫХОД ИЗ ШЛЮЗА
Евгений Павлов. Знакомьтесь, Python
GIT: Система контроля версий. Где хранить исходники 127

Вот алгоритм работы с git которому я следую:


1. в любой непонятной ситуации создавай новую ветку;
2. работай только в своей ветке;
3. постоянно заливай изменения из главной ветки в свою
ветку;
4. закончил вносить изменения? — Тестируй;
5. залей изменения из главной ветки в свою ветку;
6. реши конфликты. Проверь, что все по-прежнему ра-
ботает;
7. можешь вливать изменения из своей ветки в общую.

Чем чаще изменения вливаются, тем проще решать кон-


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

В общем, лучший способ изучить Git, вероятно, заключа-


ется в том, чтобы просто делать простые вещи и даже
не смотреть на другие вещи до тех пор, пока ты не бу-
дешь уверенным в отношении основ22.
(c) Линус Торвальдс

Начни использовать Git по-простому, а там видно будет.

Контрольные вопросы:
1. Как расшифровывается Git?
2. Что такое репозиторий?
22
Оригинал Jennifer Cloer, Lunix.com. Перевод @piva (habr.com)

https://liveinternet.club/
128 Евгений Павлов. Знакомьтесь, Python

3. Что такое коммит?


4. Для чего нужен gitignore?
5. Зачем нужны отдельные ветки?

Если ответил на все вопросы, получай достижение #GitQuiz

В сухом остатке:
1. Git, GitHub, OctoCat, Mona Lisa
2. Git, SourceTree
3. Repository, Branch, Commit
4. gitignore
5. GitFlic.ru

https://liveinternet.club/
https://liveinternet.club/
FAQ: ГЛАВНЫЙ СЕКРЕТ
ПРОГРАММИРОВАНИЯ...
ФОРМУЛИРОВАТЬ МЫСЛИ.
ДЕКОМПОЗИЦИЯ.
СВЕРХУ ВНИЗ

Как достичь мастерства

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

Умеешь считать до десяти — остановись на семи, учись


до тринадцати23.

23
Индейская поговорка.

https://liveinternet.club/
132 Евгений Павлов. Знакомьтесь, Python

Какие предметы в школе самые полезные для програм-


миста? Многие думают, что это математика. И в програм-
мировании, и в математике есть цифры. Наверное, умение
работать с цифрой должно обязательно помочь. Конечно,
склонность к точным наукам — очень полезная вещь.
С возрастом ты начнешь работать с заказчиками и цифры
тебе в этом никак не помогут. Большую часть времени ты
будешь занимаешься созданием интерфейсов, чтобы
пользователи могли заниматься вычислениями без твоей
помощи. Какая ирония! Увы, математика — не самый по-
лезный предмет в школе для программиста.

Кстати, вычислениями занимаются аналитики. Аналити-


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

Декомпозиция
Физика — это первый предмет, который поможет в под-
готовке ума для программирования. Как и программисту,
физику нужно изучить явление, разложить его на законы
и посчитать. Именно физика развивает навык декомпо-
зиции (когда сложное явление раскладывается на более
простые части). До тех пор, пока каждая из частей не будет
достаточно простой для моделирования и расчетов, чтобы
объяснить ее и воспроизвести. Или предсказать.

https://liveinternet.club/
FAQ: Главный секрет программирования... 133

Художник работает с композицией предметов на кар-


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

Это как взорвать ледяной айсберг, чтобы пройти сквозь


ледяное крошево!

Программист действует наоборот. Раскладывает слож-


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

Как декомпозировать?
Попробую показать на примере создания приложения
для управления задачами (Task Manager). Задача по управ-
лению задачами?! Попахивает рекурсией.
Рамки применения? Сначала выясни контекст. Какие
у тебя входные данные могут быть? Что нужно получить
в итоге? Не ленись и выясняй на берегу как можно больше.
Для начала, определимся с общей целью такого прило-
жения: я хочу создать приложение, которое позволит поль-
зователям:
1. создавать новую задачу;
2. смотреть список созданных задач;

https://liveinternet.club/
134 Евгений Павлов. Знакомьтесь, Python

3. редактировать или менять задачу;


4. удалять задачи.

Поиск аналогий — есть ли задачи, аналогичные твоей?


В чем у вас отличие? Какие решения применяются там
и сможем ли мы использовать что-то похожее?
Раньше я записывал свои задачи в блокнот, поэтому ин-
терфейс Task Manager должен напоминать блокнот. Я могу
вспомнить как именно пользовался блокнотом и выпол-
нить те же действия в своей новой программе.

Сверху вниз — сначала напиши верхний уровень, про-


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

Давай попробуем расписать подробнее:


1. Создать интерфейс пользователя:
— Экран входа в приложение.
— Экран списка задач.
— Экран создания новой задачи.
— Экран редактирования задачи.
— Экран просмотра деталей задачи.

2. Создать функциональность приложения:


— Добавление новой задачи.
— Изменение задачи.
— Удаление задачи.
— Просмотр деталей задачи (этот пункт я выкину).
— Отметить, что задача выполнена.

3. Создать базу данных для хранения задач:


— Создать таблицу задач.
— Добавить поля:

https://liveinternet.club/
FAQ: Главный секрет программирования... 135

Название Name
Подробное описание Description
Статус (нужен, и как я сразу не догадался?) Status
Дата создания (или дата начала выполнения?) Created
(StartDate)
Дата выполнения (смогу посчитать время выполне-
ния) CompletionDate

4. Создать логику приложения:


— Класс для работы с базой данных (Model).
— Класс для работы с задачами (View).
— Класс для работы с пользователем (Controller).

Проверь полноту — Прежде чем спускаться на уровень


ниже, проверяй что полностью описал текущий уровень аб-
стракции. Поначалу сложно различать к какому уровню от-
носится та или иная функция. Навык приходит с практикой.
Как я смогу понять, что мое приложение делает доста-
точно, чтобы я мог управлять с его помощью своими зада-
чами? Вот несколько сценариев использования программы
(User Journey). Надо проверить, что запланированного
функционала будет достаточно для этих сценариев.
1. Создание новой задачи:
— Пользователь открывает приложение Task Manager.
— Пользователь нажимает кнопку «Добавить задачу».
— Пользователь вводит название, описание и дату вы-
полнения задачи.
— Пользователь нажимает кнопку «Сохранить».
— Новая задача сохраняется в базе данных приложения.

2. Просмотр списка задач:


— Пользователь открывает приложение Task Manager.
— Пользователь видит список задач, которые он уже со-
здал.

https://liveinternet.club/
136 Евгений Павлов. Знакомьтесь, Python

— Пользователь может отсортировать задачи по дате вы-


полнения или по названию.
— Пользователь может нажать на задачу, чтобы открыть
ее для просмотра или редактирования.

3. Редактирование задачи:
— Пользователь открывает приложение Task Manager.
— Пользователь выбирает задачу, которую он хочет от-
редактировать.
— Пользователь открывает задачу для редактирования.
— Пользователь изменяет название, описание или дату
выполнения задачи.
— Пользователь нажимает кнопку «Сохранить».
— Измененная задача сохраняется в базе данных прило-
жения.

4. Удаление задачи:
— Пользователь открывает приложение Task Manager.
— Пользователь выбирает задачу, которую он хочет уда-
лить.
— Пользователь нажимает кнопку «Удалить».
— Приложение запрашивает подтверждение удаления
задачи.
— Пользователь подтверждает удаление задачи.
— Задача удаляется из базы данных приложения.

Имена переменных

Присвоение имен — одна из главных трудностей в раз-


работке. Имена должны передавать намерения програм-
миста.

https://liveinternet.club/
FAQ: Главный секрет программирования... 137

Дело в том, что программист часто меняет свое намере-


ние, а беда в том, что со временем количество переменных
функций и модулей растет, а вот количество имен, которые
программист может придумать — остается прежним.
Сначала у тебя есть одно дерево, поэтому ты называешь
его Дерево. Потом их становится три: Дуб, Сосна и Береза.
Пока ничего сложного, да? Я продолжу. Теперь у тебя есть
Саженцы, Обычные деревья и Деревья для лесозаготовки.
Немного поднапрягшись, ты придумаешь имена и для этих
деревьев. Но я и не подумаю останавливаться. Теперь нам
нужно различать среди деревьев для лесозаготовки, те что
еще растут, уже срублены, уже готовые для транспорти-
ровки и пеньки, которые надо выкорчевать. Метафора
сложновата, но ты уловил суть. Как бы ты ни старался при-
думывать имена, ты упрешься в свой словарный запас
и начнешь придумывать новые названия. Ты будешь му-
чаться с недостаточным различием в терминах или, наобо-
рот, слишком недостаточной похожестью.
Если тебе не удастся придумать хорошее название для
своей функции или переменной, ты не будешь понимать,
какую роль она играет в твоей программе; как с ней ра-
ботать и какие сложности могут возникнуть. Иными сло-
вами, плохое название переменной — плохое понима-
ние кода.
Основная проблема этой главы в том, что очень сложно
придумать пример, чтобы ты увидел сложность в назва-
ниях. Ведь чтобы описать ситуацию, я уже придумал назва-
ния, а ситуации, в которых названия нельзя придумать —
невозможно описать!

Дон Хуан говорил нам, что человеческие существа разде-


лены надвое. Правая сторона, которую он называл то-

https://liveinternet.club/
138 Евгений Павлов. Знакомьтесь, Python

наль, схватывает все, что может воспринимать ин-


теллект. Левая сторона — нагваль, — царство, черты
которого неописуемы, мир, который невозможно заклю-
чить в слова.24

Теперь, когда мне удалось навести тень на плетень


и окончательно тебя запутать, я попробую дать несколько
правил, которые выработал для себя за все годы програм-
мирования (Name Convention). Это те самые правила, ко-
торые помогают немного уменьшить путаницу в по-
нимании кода. Секреты мастерства, про которые я говорил
в начале этой главы.

Имена для классов, таблиц, структур и объектов.


1. Имя таблицы всегда называть в единственном числе:
Attribute вместо Attributes. Это позволит избежать путаницы
в дальнейшем, поскольку в коде (IDataRecord/IDataRecord)
работа всегда идет с одной строкой таблицы. В целом, на-
гружать имена классов/переменных склонениями — путь
к множеству ошибок/опечаток в коде.

2. Избегать слов Class, Object, Record, Entity. Такие имена


будут сильно путать между предметной областью и терми-
нами архитектуры.

3. Порядок слов должен быть таким, чтобы первым шло


слово, объединяющее в группу с наследниками/предками/
свойствами объекта: EntityAttribute вместо AttributeEntity.
Группировка по атрибутам не нужна для понимания де-
композиции сущностей.

4. Иерархия абстракций:
a. Вещь (шахта игрока) — Item
24
«Дар Орла. Огонь изнутри» Кастанеда Карлос Сезар Арана, 1993. Из-
дательство «София».

https://liveinternet.club/
FAQ: Главный секрет программирования... 139

b. Тип вещи (шахта) — ItemType


c. Категория типов (здания) — ItemTypeCategory
5. Иерархия свойств:
a. Временное изменение (бустер) — AttributeTemporary
b. Свойство (значение для шахты игрока) — Attribute
c. Типовое значение (значение для шахты) —
AttributeDefault
d. Базовое значение (если оно не определенно для
этого типа вещей) — AtttributeUnassigned

6. Иерархия ссылочности:
a. Дом — House
b. Свойство Дома — HouseAttribute
c. Тип свойства Дома — HouseAttributeType
d. Свойство Типа дома — HouseTypeAttribute
e. Тип свойства для Типа дома — HouseTypeAttributeType
(для полноты всех комбинаций)

7. Я провел небольшое исследование насчет property vs


attribute:
a. Атрибут фокусируется на том есть он, или его нет
(подчиненная таблица со списком свойств).
b. Свойство фокусируется на количестве/качестве
(поля таблицы).

8. Имена объектов:
a. Имена классов — существительные с большой
буквы: House
b. Имена переменных — существительные с малень-
кой буквы: currentHouse
c. Свойства (property get/set) — существительные
с большой буквы: currentHouse.Name
d. Имена функций — глагол с большой буквы:
BuildHouse ()

https://liveinternet.club/
140 Евгений Павлов. Знакомьтесь, Python

e. Имена таблиц — существительные с большой буквы:


foreach (House house on HouseTable)
f. Имена полей в таблица — существительные с ма-
ленькой буквы: select name from AW.dbo.HouseType

Комментарии в коде

Второй школьный предмет, который помогает програм-


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

БОльшую часть времени программист тратит на чтение


своего кода, а не на его написание. Большая часть — это
90%. Я серьезно. К сожалению, большинство даже не могут
осознать или заметить этого.
Чем проще читается код, тем больше времени и сил ты
сэкономишь при его разработке. Тем легче ты находишь
в нем ошибки и несоответствия. Дисциплина в именова-
нии, оформлении и документации — пожалуй, главный се-
крет мастерства.
Каждый раз, когда я слышу, что хороший код не нужда-
ется в комментировании — я прекращаю спорить с этим
человеком и интересоваться его мнением по поводу про-

https://liveinternet.club/
FAQ: Главный секрет программирования... 141

граммирования. Между нами всегда будет стена непони-


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

Как комментировать?
Свободное письмо. Избавься от паралича и страха на-
писать что-то не то. Открою тайну: комментарии кроме
тебя никто не читает. Все, что ты написал в коде, скорее
всего никто и никогда не прочтет. Это останется между то-
бою и компилятором. И октокошкой. Лиза умеет хранить
тайны.
Напиши пару матерных комментариев (это весело!),
практикуй свободное письмо. В психологии есть такая тех-
ника: просто механически записывай все приходящие в го-
лову мысли. Помогает найти неординарные решения.

История переписки. Бережно сохраняй каждую букву,


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

Ответы на вопросы. Каждый раз, когда ты потратил


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

https://liveinternet.club/
142 Евгений Павлов. Знакомьтесь, Python

Тестовые данные. Любые данные или заглушки, ко-


торые ты использовал при тестировании, например, вызов
внешнего API с тестовыми параметрами или подключение
к тестовой базе данных, сохраняй в чулане (BackLog) ком-
ментариев. Исходники все стерпят. В крайнем случае сот-
решь или воспользуешься, спустя год, когда вновь потребу-
ется отлаживать этот участок.

ToDo. все редакторы понимают и выделяют особым цве-


том эту комбинацию букв и все, что за ней следует. Тут есть
секрет: если ты умеешь писать заметки “позже разберусь
с этим”, у тебя не будет проблем с рефакторингом. Доста-
точно просто пройтись по списку todo в коде. Как оказа-
лось, главные усилия по рефакторингу — это понять, что
именно надо исправлять. А у тебя уже написано! Второй
момент: как только ты написал проблему — ее можно вы-
кинуть из головы до лучших времен. И сосредоточиться
на текущей задаче. Это важная часть дисциплины тайм-ме-
неджмента.

Ты всегда будешь писать несовершенный код и всегда


тебе будут приходить мысли, как его можно улучшить.
Это болезнь перфекционизма знакома многим хорошим
специалистам. Мастер умеет писать прототип быстро, ис-
пользуя временное решение, чтобы проверить будет ли ра-
ботать то, как это нужно заказчику. В 80% случаев второго
подхода не потребуется. Мы постоянно пишем времен-
ные решения, чтобы проверить гипотезу, а, не подтвердив
ее, выбрасываем написанное. Фокус в том, чтобы эконо-
мить силы при написании временных решений. Фикси-
руя недостатки, ограничения и улучшения в ToDo ком-
ментариях

https://liveinternet.club/
FAQ: Главный секрет программирования... 143

Quick Sort

Однажды я написал авторский курс “Основы программи-


рования на Си”, после чего пару лет вел семинары по этому
курсу в ИТМО для абитуриентов. Я был молод и идеалисти-
чен, поэтому решил, что основы программирования — это
про корни программирования. Чтобы вернуться к кор-
ням Си — лучший язык! Язык роботов и промышлен-
ных стандартов, требующий хорошего понимания работы
с низкоуровневыми ресурсами, вроде файлов, памяти или
стека вызова.
Когда-то я читал? что студентам тяжело дается пони-
мание работы с памятью. Ерунда! Ребята вполне справля-
лись с массивами и однонаправленными списками из ука-
зателей. Сложности начинались при разборе работы стека
вызовов, стековых объектов и как параметры превращаются
аргументы функции (параметр — снаружи, аргумент —
внутри). Вот тут — бабах! Мозг начинает закипать.
Но самое крутой семинар из всего курса был посвящен
не этому. Нет, сэр! Самый главный семинар был посвящен
названиям функций и переменных на примере алго-
ритма быстрой сортировки. Происходило вот что:
Я рассказывал про алгоритм быстрой сортировки, на вся-
кий случай мы смотрели описание алгоритма в Википедии.
Там есть хорошая анимация, как все происходит.

Quick Sort:
1. выбираем посередине массива опорный элемент;
2. перебираем все элементы из массива;
3. если элемент меньше опорного — отправляем налево,
если больше — направо;

https://liveinternet.club/
144 Евгений Павлов. Знакомьтесь, Python

4. рекурсивно повторяем весь алгоритм: отдельно для


правой и отдельно для левой части массива.

Затем мы начинали разбирать этот алгоритм сверху вниз.


От общего к деталям, от этапов алгоритма к конкретным
операциям. Ребята по очереди выходили к доске, каждый
придумывал название для функции или переменной, с ко-
торой эта функция работает. Пока кто-то мучился у доски,
остальные сидели в безопасности и помогали ему советами,
чтобы потом советчик сам оказался у доски и сам на себе
почувствовал муки выбора. Это весело! Местами даже за-
бавнее, чем игра в крокодила.

Главная цель — сделать так, чтобы название отражало


смысл происходящего. Когда ты сортируешь переменные
A и B — это как на ощупь в темноте лепить пельмени.
Но когда ты работаешь с headSortedList и tailSortedList —
переменные обретают смысл.

— Как понять, что ты влюбился?


— Все непонятные песни обретают смысл25.

Примерно час требовался, чтобы разобрать алгоритм Хо-


ара (quick sort) по косточкам. Подыскать названия для всех
действий и всех переменных. В конце у нас получался ал-
горитм, записанный синим фломастером на белой доске.
Правда, он был без единой команды на Си. Одни назва-
ния операций.
После этого я давал команду “По машинам!”. Происхо-
дило чудо. За все эти годы ни один студент не задал ни од-
ного вопроса “Че писать?”. Магия названий в действии!

25
Сериал «Касл», 2009-2016, Эндрю В. Марлоу.

https://liveinternet.club/
FAQ: Главный секрет программирования... 145

Упражнение по декомпозиции:
1. выбери проект для декомпозиции: супермаркет или
пиццерию;
2. выдели уровни абстракции для своего проекта;
3. распиши полный список объектов (классов) для каж-
дого уровня;
4. придумай английские названия для каждого объекта,
по вышесказанным правилам;
5. напиши техническое задание для программиста, ко-
торый будет реализовывать твой проект;
6. опиши тесты, с помощью которых ты будешь прове-
рять, что проект правильно работает.

Если написал документ, содержащий все эти пункты, то по-


лучаешь достижение #Deconstruction.

В сухом остатке:
1. Декомпозиция: Рамки, Аналоги, Иерархия, Тесты
2. Name Convention, иерархия имен
3. Комментарии и документация
4. todo заметки и рефакторинг

https://liveinternet.club/
https://liveinternet.club/
LINUX: КОНСОЛЬ, КОМАНДЫ,
ЗАДАЧИ...
УГОЛОК АДМИНА

Пингвин Такс

T
ux (Такс, сокращ. от английского tuxedo — смокинг,
Torvalds UniX — Юникс Линуса Торвальдса) — офи-
циальный талисман (или маскот) Linux, созданный
в 1996 году Ларри Юингом. Это пухлый пингвин, выгля-
дящий сытым и довольным. Идею использовать пингвина
в качестве талисмана Linux выдвинул создатель этого ядра
Линус Торвальдс.
На рабочих машинах стоит Windows, на телефонах
Android, на серверах Linux.
Расскажу, как быстро создать Linux сервер для экспе-
риментов. Вместе с тем, мы немного поэкспериментируем
с удаленным терминалом (поиграем с пингвином Таксом).
В половине вакансий пишут о необходимости работы
с Linux. От тебя не требуется быть крутым администрато-
ром Линукса, но пару команд знать нужно, чтобы не бо-
яться консоли. И, когда потребуется, разобраться в ней.
Дружить с пингвином Таксом — полезно!

https://liveinternet.club/
148 Евгений Павлов. Знакомьтесь, Python

VPS на Linux

Самый простой способ — это арендовать выделенный


сервер (Virtual Private Server). Для наших экспериментов
нужна минимальная конфигурация на минимальный срок
(месяц). Стоит — копейки, ищется в поисковике по ключе-
вым словам: VPS linux.
Важно! Не пытайся найти бесплатный VPS — большин-
ство окажется мошенниками. Проще немного заплатить
и спокойно работать. Если оплата будет по карте — не за-
будь закрыть подписку, чтобы не списался за следующий
месяц.

Все, кто арендовал свой сервер, получают достижение


#PythonVPS.

Например, для этой книги я купил сервер на adminvps.


ru. Хостинг в России Promo стоил мне 119 рублей x 2 ме-
сяца. Оплачивал я через QR код, поэтому карточку нигде
не светил и подписку не оформлял.
После того, как ты арендовал сервер, нужно понять, как
к нему подключиться по ssh. Видимо, у тебя будет root
пароль и адрес твоего VPS сервера.

Для подключения тебе понадобится клиент для SSH, на-


пример, MobaXterm.
Скачай с официального сайта бесплатную Home версию.
Установи и запусти.
Добавь новую SSH сессию, укажи сервер, логин и пароль.
Подключайся!

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 149

Работать под администратором — дурной тон, поэтому


сразу создай тестового пользователя firstpython для экспе-
риментов.

# adduser firstpython

Adding user `firstpython’ …


Adding new group `firstpython’ (1001) …
Adding new user `firstpython’ (1001) with group
`firstpython’ …
Creating home directory `/home/firstpython’ …
Copying files from `/etc/skel’ …
New password:

Вводи пароль для нашего пользователя.

New password:
Retype new password:
passwd: password updated successfully
Changing the user information for secondpython
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

Вместо всяких имен и телефонов просто нажимай


[Enter]. В конце нажми [Y].

Все! Новый пользователь создан. Выходи из-под рута.

# exit

https://liveinternet.club/
150 Евгений Павлов. Знакомьтесь, Python

И подключайся уже под новым пользователем


firstpython. Начнем знакомиться с Linux.

Работа с файлами

Классно, что у тебя есть свой сервер! Даже если что-то


пойдет не так — ты точно ничего не сломаешь. Можно
смело экспериментировать в этой песочнице. Но при этом
у тебя есть права администратора и ты можешь немножко
покомандовать собственным сервером.

Давай немного оглядимся вокруг:

login as: firstpython


firstpython@193.187.96.17’s password:
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-121-generic
x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
New release ‘22.04.2 LTS’ available.
Run ‘do-release-upgrade’ to upgrade to it.

Last login: Sun Apr 9 20:28:06 2023 from 62.217.189.231

Сейчас я нахожусь на сервере Ubuntu (одна из версий


Linux) под пользователем firstpython. Возможно, твое со-
общение при входе на сервер выглядит иначе.

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 151

Давай посмотрим в какой директории ты находишься.


pwd — present working directory.

$ pwd

/home/firstpython

Это домашняя директория для этого пользователя. Стар-


товая локация, прямо как в MMO RPG (Massively Multiplayer
Online Role-Playing Game).

Давай прогуляемся на уровень выше при помощи ко-


манды cd — change directory
Напомню, что одна точка — текущая директория, а две
точки — директория выше.

$ cd..

firstpython@firstpython:/home$

Теперь ты в директории, где находятся стартовые лока-


ции всех игроков этого сервера. Ой! В смысле пользовате-
лей. Мы тут серьезными вещами занимаемся, никаких игр.

Давай выведем список этих директорий ls — list

$ ls

firstpython sammy
firstpython@firstpython:/home$

Если запустить ls с ключом help — получим список всех


возможных ключей. Например, есть ключ l (long) с более

https://liveinternet.club/
152 Евгений Павлов. Знакомьтесь, Python

подробным описанием файлов. Чтобы придать вес нашим


исследованиям.

$ ls -l

total 8
drwxr-xr-x 4 firstpython firstpython 4096 Apr 9 20:55 firstpython
drwxr-xr-x 2 sammy sammy 4096 Mar 26 19:46 sammy

Что такое total — я не знаю, хотя и пытался погуглить,


но ничего не понял (возможно ты, читатель, окажешься ум-
нее автора и сумеешь разобраться в загадке total. А мы про-
должаем).
Теперь я хочу создать файл со списком всех файлов, чтобы
немного поиграться с его выводом. Файл создать очень про-
сто: достаточно отправить вывод команды в файл, вместо
консоли при помощи символа ‘>’. Одинарный — обнуле-
ние или создание нового файла. Двойной — создание но-
вого или дописывание в старый.

$ cd. / firstpython/

Не забывай использовать волшебную табуляцию, кото-


рая дописывает за тобой. Достаточно написать первые пару
символов и жамкнуть [Tab], чтобы дружелюбный linux до-
писал за тебя остальное.

У Linux дружелюбный интерфейс. Но друзей он выбирает


очень тщательно.

$ ls -al > list.txt

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 153

Хорошо! Теперь у нас есть файл со список файлов (пакет


для пакетов). Давай выведем его содержимое при помощи
cat — concatenate (печать всех строк):

$ cat list.txt

total 40
drwxr-xr-x 4 firstpython firstpython 4096 Apr 10 19:20.
drwxr-xr-x 4 root root 4096 Apr 6 17:34..
-rw———- 1 firstpython firstpython 877 Apr 9 21:35.bash_
history
-rw-r — r— 1 firstpython firstpython 220 Mar 26 19:47.bash_
logout
-rw-r — r— 1 firstpython firstpython 3771 Mar 26 19:47.
bashrc
drwx——— 2 firstpython firstpython 4096 Apr 6 17:29.cache
-rw-rw-r— 1 firstpython firstpython 32 Apr 9 21:23 date.log
drwxrwxr-x 3 firstpython firstpython 4096 Apr 9 20:45.local
-rw-rw-r— 1 firstpython firstpython 0 Apr 10 19:20 ls.txt
-rw-r — r— 1 firstpython firstpython 807 Mar 26 19:47.profile
-rw-rw-r— 1 firstpython firstpython 66 Apr 9 20:45.selected_
editor
-rw-r — r— 1 firstpython firstpython 0 Apr 9 20:18.sudo_as_
admin_successful

Вау! Как много файлов. Заклинание слева — это права


доступа к файлам Directory, Read, Write, eXecute: директо-
рия, чтение, запись, исполнение. Права на файл указыва-
ются для владельца, его группы и всех остальных (owner,
group, all). Давай выведем первые 3 строчки:

$ head -n 3 list.txt

https://liveinternet.club/
154 Евгений Павлов. Знакомьтесь, Python

total 40
drwxr-xr-x 4 firstpython firstpython 4096 Apr 10 19:21.
drwxr-xr-x 4 root root 4096 Apr 6 17:34..

А теперь, наоборот, последние 3 строчки из файла:

$ tail -n 3 list.txt

-rw-r — r— 1 firstpython firstpython 807 Mar 26 19:47.profile


-rw-rw-r— 1 firstpython firstpython 66 Apr 9 20:45.selected_
editor
-rw-r — r— 1 firstpython firstpython 0 Apr 9 20:18.sudo_as_
admin_successful

Но настоящая магия начинается когда ты применяешь


grep — поиск и печать в потоке вывода (search Globally for
lines matching the Regular Expression, and Print them).
Снова распечатай содержимое файла, но теперь при по-
мощи символа ‘|’ (вертикальная черта) перенаправим вы-
вод одной команды (cat) на ввод другой (grep), а командой
grep вытащим все строчки с правами только на чтение (r,
read) для группы и остальных пользователей.

$ cat list.txt | grep r — r–

-rw-r — r— 1 firstpython firstpython 220 Mar 26 19:47.bash_


logout
-rw-r — r— 1 firstpython firstpython 3771 Mar 26 19:47.
bashrc
-rw-r — r— 1 firstpython firstpython 807 Mar 26 19:47.profile
-rw-r — r— 1 firstpython firstpython 0 Apr 9 20:18.sudo_as_
admin_successful

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 155

grep — очень полезная команда, помогает надергать


из длинного списка только нужные нам строчки.
И, наконец, последнее на сегодня — mkdir (make directory):
создать директорию:

$ mkdir my_new_dir

Переместим туда наш файл: mv — (move) переместить


файл

$ mv list.txt./my_new_dir/list2.txt

$ ls./my_new_dir

list2.txt

$ ls

cat date.log my_new_dir

Наш файл сменил имя и переехал в новую директорию,


скопируем его обратно: cp — (copy) скопировать файл.

$ cp./my_new_dir/list2.txt list.txt

$ ls

cat date.log list.txt my_new_dir

Теперь у нас два файла, поэтому удалим лишний (тот,


который находится в директории). Rm — (remove) уда-
лить файл. Но его не просто удалим, а удалим директо-

https://liveinternet.club/
156 Евгений Павлов. Знакомьтесь, Python

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


-r recursive

$ rm -r./my_new_dir/

$ ls

cat date.log list.txt

Ты создал директорию, переместил в нее файл, потом


скопировал его обратно и удалил директорию со всем ее
содержимым. Будто ничего и не было!

На сегодня все. Это стартовый набор команд для но-


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

Закрой консоль, а затем и ноутбук, чтобы пингвин


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

Планировщик задач Cron

Мы пишем скрипты на Питоне для выполнения на linux


серверах.
Есть несколько способов запустить скрипт на сервере:

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 157

1. запустить вручную из консоли;


2. через api http;
3. по расписанию через crontab.

Давай разберемся как запускать chrontab (от греческого


хронос — время).

Открой новую сессию под firstpython:

$ cron

cron: can’t open or create /var/run/crond.pid: Permission denied

Иными словами, у обычного пользователя не хватает


прав, чтобы быть админом)

Для выполнения команд, требующих прав администра-


тора, используют команду sudo (Substitute User and DO).

Чтобы выдать права, перезайдем под админом и добавим


нашему пользователю прав:

$ sudo adduser firstpython



$ sudo adduser firstpython sudo

$ id firstpython
uid=1001 (firstpython) gid=1001 (firstpython) groups=1001
(firstpython),0 (root),27 (sudo)

Теперь можно логинится через firstpython и заходить под


sudo:

https://liveinternet.club/
158 Евгений Павлов. Знакомьтесь, Python

$ sudo cron

cron: can’t lock /var/run/crond.pid, otherpid may be 301: Resource


temporarily unavailable

Немного погуглив, я нашел указание:


cron — это демон, он работает в фоновом режиме. Он стар-
тует при загрузке ОС и специально его запускать не нужно.
Вообще демонами управляют так:
sudo service cron status
sudo service cron start
sudo service cron stop
sudo service cron restart

Давай посмотрим его статус:

$ sudo service cron status

cron.service — Regular background program processing daemon


Loaded: loaded (/lib/systemd/system/cron.service; enabled;
vendor preset: enabled)
Active: active (running) since Thu 2023—04—06 17:22:19
BST; 3 days ago
Docs: man: cron (8)
Main PID: 301 (cron)
Tasks: 1 (limit: 1102)
Memory: 7.1M
CGroup: /system.slice/cron.service
301 /usr/sbin/cron -f

Хорошо, мы выяснили, что у нас есть запущенный демон


(фоновый процесс) cron.

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 159

Давай теперь разберемся со списком заданий для этого


демона.
Мы создадим простую задачку, которая записывает в файл
логов текущее время.

$ date

Sun 09 Apr 2023 08:54:53 PM BST

Сейчас эта команда выводит дату на экран. Чтобы за-


писать в файл, перенаправляем стандартный поток stdout
в файл. Будем дописывать в конец, а не обнулять каждый
раз заново, поэтому два символа ‘>>’, вместо одного ‘>’

$ date >> date.log

Теперь дата вместо консоли пишется в файл. Запусти ко-


манду второй раз. Теперь давай посмотрим, что туда уже
записалось:
$ cat date.log

Sun 09 Apr 2023 08:55:12 PM BST


Sun 09 Apr 2023 09:01:03 PM BST

Отлично! Теперь у нас есть тестовая задача для нашего


планировщика.

Откроем конфигурационный файл:

$ sudo crontab -e

no crontab for root — using an empty one

https://liveinternet.club/
160 Евгений Павлов. Знакомьтесь, Python

Select an editor. To change later, run ‘select-editor’.


1. /bin/nano <—— easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny

Choose 1—3 [1]: 1

Мы попадаем в редактор файла планировщика, где уже


есть комментарии:

# Edit this file to introduce tasks to be run by cron.


#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use ‘*’ in these fields (for ‘any’).
#
# Notice that tasks will be started based on the cron’s system
# daemon’s notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab (5)
and cron (8)
#

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 161

# m h dom mon dow command

Добавь в конец файла строку с командой для выполнения


КАЖДУЮ минуту:

*/1 * * * * date >> /home/firstpython/date.log

Или можешь поставить выполнение каждые 5 минут: */5


****
Сохрани изменения:

Ctrl + S

Выходи из редактора:

Ctrl + X

Подожди одну минуту и смотри результат в твоем файле


логов:

$ cat /home/firstpython/date.log

Sun 09 Apr 2023 08:55:12 PM BST


Sun 09 Apr 2023 09:01:03 PM BST
Sun 09 Apr 2023 09:15:01 PM BST

https://liveinternet.club/
162 Евгений Павлов. Знакомьтесь, Python

Ура! Появилась третья строчка! А вскоре появится и 4-ая.

Если тебе удалось получить такие же строчки на твоем сер-


вере, ты получаешь ачивку #CronTab.

Чтобы не переполнить диск мусором, останавливай нашу


команду в cron — закомментируй свою строку:

$ sudo crontab -e

# */1 * * * * date >> /home/firstpython/date.log

Ctrl+S
Ctrl+X

Сейчас в твоем логе многовато строчек, поэтому обнули


его:

$ date > /home/firstpython/date.log

$ cat /home/firstpython/date.log

Sun 09 Apr 2023 09:23:11 PM BST

Победа! Наконец-то этот урок закончился.

Сегодня ты добавил права для своего пользователя, затем


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

Это хорошая работа, для знакомства с Linux!

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 163

Полезные лайфхаки.

Чтобы скопировать текст в консоли:


1. выдели текст, который надо скопировать и щел-
кни правой кнопкой мыши для его вставки (работает
в Putty и других SSH-клиентах для Windows);
2. выдели текст, который надо скопировать и щелкни
центральной кнопкой мыши (колесом прокрутки)
для того, чтобы его вставить;
3. используйте комбинации клавиш Ctrl + Shift + C для
копирования и Ctrl + Shift + V для вставки (у меня
работает Ctlr+C и Ctrl+V).

Ctrl-L. Очищает терминал.


Ctrl + C. Нажми, если нужно остановить команду, кото-
рая выполняется прямо сейчас на переднем плане (не в фо-
новом режиме). Иногда помогает ввод quit в консоли.
Но и это не всегда будет работать. Чтобы завершить кон-
соль Питона, нажми Ctrl+D.
У Питона свой дзен. Самый правильный способ прервать
выполнение — это sys.exit (shota), потому что скрипт мо-
жет быть многопоточным, а обрывать потоки в неизвест-
ном месте — очень плохая идея.
Из SSH, если хост завис и не реагирует на ввод: ~. (тильда
точка). Если совсем точно, то [Enter] ~. Если в момент про-
падания связи набирал символы, то без [Enter] не выйдет.
Если подключился по SSH, а оттуда ещё по SSH и надо за-
вершить вложенный SSH, то надо вводить ~~.
$ command_1 –help. Вызывает справку для команды
Linux. Практически все средства командной строки содер-
жат справочную информацию, раскрывающую особенно-
сти их использования. Чтение справки поможет разобраться

https://liveinternet.club/
164 Евгений Павлов. Знакомьтесь, Python

с основами этой команды. Кроме того, есть еще и докумен-


тация: $ man command_1
$ cd — переход в предыдущую рабочую директорию.

$ cd ~ переход в домашнюю директорию пользователя.


~ без имени пользователя = текущий пользователь. А вот
cd ~user1 — зайти в домашнюю папку user1, например,
/home/user1 (или что у него прописано в /etc/passwd).

$ command_1; command_2; command_3. Выполне-


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

$ command_1 && command_2. Command_2 будет


выполняться только если command_1 завершит свою ра-
боту без ошибок.

$ tail -f path_to_Log — когда нужно читать логи, кото-


рые прямо сейчас пополняются.

$ tail -f path_to_log | grep search_term. Используй


grep, чтобы показывать появление только нужных строчек
в логе.

$ mkdir my_new_dir

$ cd!$
Создаем директорию, а потом переходим в неё, исполь-
зуя!$ — последний параметр предыдущей команды. Дирек-
торию может проще будет подобрать, используя tab, а вот
какой-нибудь хитрый параметр или длинный ключ будет

https://liveinternet.club/
Linux: Консоль, Команды, Задачи... 165

очень удобно повторить, используя всего два символа. Еще


можно нажать Alt +. (точка).
$ > filename — очистит содержимое файла без удаления
самого файла.

Линус Торвальдс
Один из самых крутых программистов нашего вре-
мени — финский швед Линус Торвальдс из города Хель-
синки. Создатель Linux — операционной системы с от-
крытым исходным кодом. Под Linux работает треть всех
серверов в мире. Остальные две трети — это Unix и что-то
неизвестное.

Программное обеспечение — как секс: лучше, когда бес-


платно26.

Немногие хоть что-то знают про этого программиста,


он не очень много выступает. Никак не рекламирует себя.
Но именно этот программист создал систему, которая
выросла от 10 тысяч строк кода в 1991 до 30 миллионов
в 2022 году.
У него отличное чувство юмора — это одно из проявле-
ний острого ума. Этот парень очень, очень умный!
Сейчас его основная работа — это принимать запросы
на добавление кода в репозиторий. Много, очень много за-
просов. На GitHub лежит репозиторий ядра Linux, где каж-
дый может посмотреть этот гигантский проект с 30-летней
26
Линус Торвальдс на конференции Free Softwere Foundation, 1996.

https://liveinternet.club/
166 Евгений Павлов. Знакомьтесь, Python

историей. Там же можно посмотреть статистику по работе


Линуса. Он чудовищно продуктивен.

Talk is cheap. Show me the code.

Про этого легендарного программиста вообще подозри-


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

Задания и Примеры:
1. создай папку в своей домашней директории;
2. создай файл в своей домашней директории;
3. открой файл в редакторе, напиши пару слов и со-
храни его;
4. распечатай список процессов на экране консоли.

В сухом остатке:
1. VPS — Virtual Private Server
2. SSH — Secure Shell
3. drwx — Directory, Read, Write, eXecute
4. stdin — Standard Input
5. stdout — Standard Output
6. sudo — Substitute User and DO
7. cron — планировщик запуска задач для Linux

https://liveinternet.club/
https://liveinternet.club/
DEBUG: ТЕМНАЯ СТОРОНА.
В ЛЮБОЙ НЕПОНЯТНОЙ СИТУАЦИИ

Что-то пошло не так

Н
е если, а когда твоя программа сломается, тебе при-
дется ее исправлять. Даже сейчас, когда я пишу эти
строки, мне не по себе. Сама мысль о том, что мой
“безупречный” код сломается — вызывает стресс. Не-
смотря на весь мой опыт, не взирая на все мои старания —
это все равно происходит! Исключительные ситуации —
это рутина нашей профессии.

Да! Мощь Джедая из Силы проистекает. Но опасайся тём-


ной стороны. Гнев, страх, агрессия — тёмная сторона
всё это. Быстро они приходят во время битвы к тебе.
Ступив однажды на Тёмный путь, навсегда судьбу твою
он подчинит27.

Вопрос эмпатии. Ошибки программы вызывает стресс


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

27
«Звёздные войны: Эпизод 5 — Империя наносит ответный удар», 1980.
Ирвин Кершнер.

https://liveinternet.club/
170 Евгений Павлов. Знакомьтесь, Python

Хорошие люди в плохой ситуации. Вот как надо к этому


относиться.
Первым делом, воспроизведи проблему. Воспроизведе-
ние ошибки — это половина работы по ее исправлению.
Бывает, что ошибку не получается повторить, поэтому ее
невозможно исправить. Если ошибку не получается зафик-
сировать, сделай логирование ситуаций, при которых эта
ошибка потенциально возникнет.
Хороший багрепорт состоит из:
1. при каких обстоятельствах/зависимостях возникает
ошибка?
2. как воспроизвести ошибку;
3. что неправильного наблюдаем;
4. что ожидали увидеть (как надо сделать);
5. приоритет исправления ошибки.

Постарайся мягко донести до коллег эти пункты или сы-


грай в Шерлока, добывай их самостоятельно, если ав-
тор багрепорта ушел в отказ. Расследование серьезно уве-
личивает срок исправления ошибки. Стоит донести это
до коллег, заинтересованных в ее исправлении.
Важный момент: когда к тебе попадает отчет об ошибке,
обязательно поблагодари за репорт. Какой бы непри-
ятной ни была эта ошибка, цени усилия, которые при-
ложил твой коллега, чтобы выявить эту ошибку. Никогда
не встречай очередной репорт с негативом — это дурной
тон. В конце концов, каждая найденная ошибка — это шанс
улучшить ваш продукт. Было плохо — станет хорошо!
Второе правило — создай задачу в таск трекере. Не пу-
скай на самотек оформление ошибки. Если ты не просле-
дишь — ее позабудут зафиксировать. А встретив второй раз,
будут сильно огорчаться. Тебе сообщили про ошибку, а ты
ее не исправил! Кроме того, задача в трекере — это ответ

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 171

на вопрос «когда исправите?» Как только исправим — за-


кроем задачу. Главное, что ошибка не потерялась и нахо-
дится в очереди на исправление. Скорость исправления —
это вопрос приоритета. Сначала должны быть сделаны
важные задачи, а уже потом остальное.
Третье правило — доведи до коллеги, заметившего ошибку
результат своей работы по ее исправлению. Пусть это ста-
нет доброй традицией: когда тебе сообщают об ошибках —
это ошибки исчезают.
Если ошибка критическая — останови работу скрипта
с ошибкой и устрани последствия его работы. Затем спо-
койно начинай исправлять. Именно в такой последова-
тельности: останови ошибку, устрани последствия, начи-
най исправлять.
Теперь, когда с внешними формальностями разобрались,
давай разберем способы исправления ошибок в коде.

Пошаговая отладка

В любой непонятной ситуации — запускай проблемную


программу в отладочном режиме.
Запусти PyCharm и открой проект FirstPython из преды-
дущих глав.

[Win] Py [Enter] — чтобы найти в Windows редактор


PyCharm и запустить его.
В верхнем меню PyCharm находим пункт File/Open и вы-
бираем его, чтобы запустить диалоговое окно Open File or
Project.

https://liveinternet.club/
172 Евгений Павлов. Знакомьтесь, Python

Найди папку с нашим проектом FirstPython и открой ее


нажав кнопку [OK]

Выбери в диалоговом окне Open Project вариант «This


Window», чтобы открыть проект в текущем окне, вместо
того чтобы запускать вторую копию PyCharm. CheckBox:
“Don’t ask again” — не трогай, пусть спрашивает каждый
раз для надежности.

Давай запустим отладку (Debug) для скрипта lesson2.

В панели Project слева выбери файл lesson2.py и открой


его.

Если нажать Debug — зеленого жука в правом верхнем


углу — программа просто выполнится, распечатав уже зна-
комый тебе результат.

Чтобы остановить выполнение программы, добавь Break


Point на первой строчке. Просто кликни мышкой чуть пра-
вее номера строчки, чтобы появилась красная точка. Или,
как настоящий хакер, сделай тоже самое быстрыми клави-
шами: Ctrl+F8.

Снова запускай Debug клавишами Shift+F9.

Бинго! Ты попал в режим отладки! Внизу появилась па-


нель Debug. Наверху панели есть маленькие кнопочки с си-
ними стрелочками, наводя на которые можно увидеть их
названия:
1. Show Execution Point Alt+F10: вернуться к строчке,
которая сейчас выполняется, на случай если заблудился
в коде (такое часто случается).

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 173

2. Step Over F8: выполнить одну строчку. Обрати вни-


мание, что если в одной строке программы будет много ко-
манд, то они ВСЕ выполнятся.

3. Step Into F7: выполнить подпрограмму. Напри-


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

4. Step Into My Code Alt+Shift+F7: выполнить под-


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

5. Step Out Shift+F8: вернуться из подпрограммы. На-


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

6. Run to Cursor Alt+F9: выполнить до текущей


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

Чуть левее находятся две закладки:


1. Debugger: MainThread — это наш главный поток вы-
полнения, и единственный.
2. Console: уже знакомая нам консоль для вывода StdOut
Понажимай пару раз F8, чтобы выполнить первые строчки
программы. А как дойдешь до file_descriptor — остановись.

file_descriptor = open (r’lesson2.json’, ‘w’, encoding=’utf-16’)

https://liveinternet.club/
174 Евгений Павлов. Знакомьтесь, Python

Открой вкладку Debugger и увидишь справа кучу пере-


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

1. json_str = {str} ‘{\n «ключ1»: «значение 1»,\n «ключ2»:


{\n «ключ21»: «значение 21»,\n «ключ22»: «значение
22»\n},\n «ключ3»: [\n «значение 31»,\n «значение
32»,\n «значение 33»\n] \n}’
2. main_dic = {dict: 3} {‘ключ1’: ‘значение 1’, ‘ключ2’:
{‘ключ21’: ‘значение 21’, ‘ключ22’: ‘значение 22’},
‘ключ3’: [‘значение 31’, ‘значение 32’, ‘значение 33’]}
3. sample_array = {list: 3} [‘значение 31’, ‘значение 32’,
‘значение 33’]
4. sample_dic = {dict: 2} {‘ключ21’: ‘значение 21’, ‘ключ22’:
‘значение 22’}

Эти же значения переменных редактор дописал в конец


строчек с их объявлением.
Кроме того, если в коде навести курсор мыши на пере-
менную, появится подсказка, в которой будет написано
значение этой переменной.
Если нажать на переменную правой кнопкой мышки,
появится контекстное меню. В контекстном меню найди
пункты:
1. Add to Watches — добавить переменную в список на-
блюдения;

2. Add Inline Watch — добавить в список, который не ис-


чезнет при перезапуске скрипта.

Вот так и работает пошаговая отладка:


1. выполняешь программу по шагам;
2. смотришь как меняется значение переменных;

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 175

3. ищешь момент, когда что-то начинает идти не по


плану;
4. находишь ошибку;
5. исправляешь найденную ошибку.

Довольно кропотливая работа — ползать с отладочной


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

Логирование

Существуют ошибки, которые случаются не постоянно,


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

Давай создадим в нашем проекте PythonFirst новый


скрипт lesson4.py
Логированием в Питоне занимается модуль logging.
Чтобы писать в файл, нам потребуется создать словарь
настроек для логирования. За настройки отвечает модуль
logging.config.
Кроме того, для указания пути к файлу мы будем исполь-
зовать уже знакомый модуль os.

https://liveinternet.club/
176 Евгений Павлов. Знакомьтесь, Python

import os
import logging.config

Переменная со словарем настроек для lesson4 будет вы-


глядеть примерно так:

LOGGING_CFG = {
“version”: 1,
‘formatters’: {
‘lesson4_format’: {
‘format’: ‘% (asctime) s [% (levelname) s]%
(filename) s:% (lineno) i% (message) s’
},
},
“handlers”: {
“lesson4_handle”: {
“level”: “INFO”,
“class”: “logging.FileHandler”,
‘formatter’: ‘lesson4_format’,
“filename”: os.path.join (os.getcwd (), “../
lesson4.log”),
},
},
“loggers”: {
“lesson4_log”: {
“handlers”: [“lesson4_handle”],
“level”: “INFO”,
},
},
}
Тут у нас есть:
1. formatter — формат строчки в файле логов, со всякой
дополнительной информацией;

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 177

2. handlers — указатель на объект (файл), куда будут скла-


дываться наши логи (и доп. информация из formatter);
3. loggers — настройки нашего лога, куда пишем и какой
уровень (NOTSET, DEBUG, INFO, WARNING, ERROR,
CRITICAL).

Скрипты у нас находятся в папке rep (эта папка сохра-


няется в репозитории), поэтому os.getcwd () вернет текущую
директорию rep.
Чтобы не сохранять в репозитории файл логов, мы со-
храним его в директорию проекта, которая находится уров-
нем выше.
Поэтому имя файла указывается как “../lesson4.log”.
После объединения файловых путей командой os.path.
join получаем:
“project/rep” + “../lesson4.log” = “project/lesson4.log”

Теперь заливаем все эти настройки в модуль логирова-


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

logging.config.dictConfig (LOGGING_CFG)
logger = logging.getLogger (lesson4_log)
logger.info (‘test’)

И логируем ровно одно сообщение c уровнем INFO для


теста при каждом запуске нашего скрипта

logger.info (‘test’)

Добавляй в скрипт lesson4.py все строчки указанные кур-


сивом и запускай скрипт.

https://liveinternet.club/
178 Евгений Павлов. Знакомьтесь, Python

После запуска с корневом каталоге проекта появится файл


“lesson4.log” внутри которого будет лежать одна строчка:

2023—06—12 13:39:02,022 [INFO] lesson4.py:29


test

Если скрипт запустить несколько раз, то таких строчек


будет уже несколько.

Теперь у тебя есть логи твоего скрипта, куда ты можешь


бросать всякую отладочную информацию, а когда
что-то пойдет не так, легко сможешь посмотреть по логам,
что именно поломалось.
Например, в главе про SQL мы печатали ошибку
(Exception) в консоль. Теперь, вместо консоли ошибку
можно логировать в файл. Добавь логирование в скрипт
с SQL и проверь, что в случае ошибки она сохраняется
в нужный скрипт.
Думаю, на этом первое знакомство с логированием
можно завершить. Пора сделать перерыв, попить водички
и сделать зарядку. Переключение на физические действия
помогут проветрить голову. Ты хорошо поработал!

Слабое звено
Когда программа вообще перестала запускаться, вы-
давая ошибку, которую непонятно как исправить — попро-
буй откатиться назад. Открой Git и вернись к предыдущей
версии скрипта, когда он еще работал.
Давай вернемся к FirstPython:

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 179

1. нужно добавить в репозиторий новый файл lesson4.


py;
2. затем откатить коммит, запустить проект без этого
файла;
3. и, наконец, вернуть файл обратно.

Открывай SourceTree: [Win] So [Enter]

Нажимай кнопку [Commit] слева вверху


Добавляй файл lesson4.py
Выбери checkbox: Push changes immediately to origin/
main
Напиши описание коммита, например, “добавил 4 урок
с логированием”
Нажимай кнопку [Commit] справа внизу

Коммит ушел на сервер.

Теперь давай откатим локальный репозиторий до пре-


дыдущей версии, будто последний коммит был ошибкой,
из-за которой все перестало работать.%)

Слева выбери Workspace / history.

Выбери предыдущий коммит. У меня он называется “До-


бавил проект со скриптами 1—3 уроков”.

Дважды кликни мышкой на этот коммит.

Появится диалог: Confirm change working copy.

Выбери checkbox: Clean (discard all changes)

https://liveinternet.club/
180 Евгений Павлов. Знакомьтесь, Python

И нажимай [OK]. Теперь этот коммит будет выделен жир-


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

Открой директорию с репозиторием FirstPython и убе-


дись, что файл rep\lesson4.py — пропал!

Где-то тут надо запустить и убедиться, что в старой вер-


сии остальные скрипты — работают.

Теперь вернемся обратно к новой версии.

Выбери последний коммит в Workspace / history.

Дважды кликни мышкой по самому верхнему коммиту


(последний “добавил 4 урок с логированием”).

Появится диалог: Warning: commits may be lost

Нажми кнопку [Yes]

Открой директорию с репозиторием FirstPython и убе-


дись, что файл rep\lesson4.py — вернулся!

Если ты достаточно часто фиксируешь изменения в про-


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

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 181

Держи удар
Хочу добавить еще пару слов про ментальное состояние.
Что делать, если застрял на ошибке в коде.

Без дисциплины не имеет значения, насколько ты хорош,


ты ничто! Когда-нибудь ты встретишь крутого парня,
который выдержит самые лучшие твои удары. И будет
продолжать наступать, потому что он сильный. Не ли-
шайся силы духа и мужества. Это время, когда дисци-
плина вступает в игру28.

Возьми паузу. В том состоянии, в котором ты эту


ошибку сделал, ты не сможешь ее исправить. Иначе
ты бы сразу не допустил эту ошибку. Сначала исправь
свое состояние, а уже потом приступай к работе по ис-
правлению кода, который ты в предыдущем состоянии
написал.
Объясни товарищу, что именно делает твоя про-
грамма. Пока пишешь — глаз замыливается. Порой доста-
точно объяснить другому, что происходит, чтобы найти
ошибку. Пока объяснял — сам все понял. Для этого есть
термин Duck Debugging. Фокус в том, что вместо товарища
можно использовать уточку, которая внимательно тебя вы-
слушает, не перебивая. Автор, вместо уточки использует
Free Writing — пишет комментарии в коде с объяснениями
будущему себе, что тут происходит. В общем, каждый вы-
кручивается как может.
Погугли, мы живем в будущем, когда на любую ошибку
в интернете уже есть страница, где другой программист,

28
Майк Тайсон. Фильм «Tyson», 2008, режиссер Джеймс Тобэк.

https://liveinternet.club/
182 Евгений Павлов. Знакомьтесь, Python

столкнувшиеся с похожей проблемой, задал вопрос


на Stackoverflow. А более опытный коллега уже написал
решение, как это исправить. Часто решение пишет тот же
программист, который задавал вопрос — это потому что
уточка уже помогла ему найти ответ на его вопрос.
Неудобные вопросы. Это такие вопросы, на кото-
рые не очень хочется отвечать. Сама мысль о таких вопро-
сах причиняет боль, потому что ты не знаешь ответ. Много
лишней работы, боязнь выглядеть глупо и еще миллион от-
говорок. Найди в себе силы зафиксировать такой вопрос.
Отложи его, пусть ответ созреет. Соберись с силами и, когда
будешь в ресурсе, — вернись к этому вопросу, постарайся
дать на него качественный ответ. Правда в том, что именно
ответы на неудобные вопросы поднимают тебя и твою ра-
боту на новый уровень.

Контрольные вопросы:
1. Как обрабатывать багрепорт?
2. Чем отличается Inline Watch от Watch для Debug?
3. Какими бывают уровни логов?
4. Как Git помогает локализовать критические ошибки?
5. Что такое Duck Debugging?

Если ответил на все вопросы, получай достижение


#DebugMaster.

В сухом остатке:
1. доброжелательность и деликатность;
2. возьми паузу, чтобы воспроизвести ошибку;
3. debug для пошаговой отладки;

https://liveinternet.club/
Debug: Темная сторона. В любой непонятной ситуации 183

4. логирование для нестабильных ошибок;


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

https://liveinternet.club/
https://liveinternet.club/
CLEAN CODE: ПРАВИЛА
ЧИСТОГО КОДА.
УГОЛОК АРХИТЕКТОРА. SOLID

Понятный, Расширяемый, Чистый

П
рограммист ВСЕГДА работает с программным ко-
дом. В самом начале кода мало и его легко читать,
но со временем он обрастает костылями и заплат-
ками, превращаясь в говнокод.

Первая Матрица была просто произведением искусства.


Само совершенство. Её триумф сравним лишь с её мону-
ментальным крахом29.

Хороший программист отличается от плохого тем, как


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

29
«Матрица: Перезагрузка», 2003, братья Вачовски.

https://liveinternet.club/
186 Евгений Павлов. Знакомьтесь, Python

Про этот момент либо совсем не рассказывают в учеб-


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

Задавать вопросы, на которые нет ответов — это как


пытаться познать душу, стоящую на перекрестке нере-
шительности: вы думаете, что это мудрость, а получа-
ется лишь цикличность мысли и бытия…30

Я посвящаю целую главу в книге для новичков про иде-


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

Форматирование —
новая Каллиграфия
Форматирование кода полезно даже для маленьких про-
грамм в 10 строчек.
Чем легче читать код, тем красивее он выглядит. Чем
легче понять код, тем проще находить в нем ошибки. Вот
почему так важно делать код красивым.

30 Warhammer 40,000, 1987 год, Издатель: Games Workshop.

https://liveinternet.club/
Clean Code: Правила чистого кода... 187

Причесывать код и делать его более читаемым — на-


вык, который достигается лишь практикой и осознан-
ностью.
PyCharm тоже умеет причесывать код. Нажми Ctrl+Alt+L
чтобы IDE сама выровняла отступы и удалила лишние про-
белы.
Заведи правило: форматировать и поправлять написание
кода, каждый раз, когда ты начинаешь его читать. Напри-
мер, я часто выравниваю чужой код, когда мне надо
в нем разобраться. Это как бы делает меня немножко соав-
тором этого кода, а значит, он уже не кажется таким враж-
дебным и непонятным. Психологический трюк, но у меня
он работает.
Задайся вопросом: как сделать текст на экране еще бо-
лее понятным? С практикой ты придумаешь собственные
правила. Или начнешь понимать пользу от чужих правил,
что поначалу даже лучше.
1. Добавить отступы, чтобы легче находить конец и на-
чало цикла;
2. добавить пробелы, скобки и пустые строки — помо-
гает разобраться в порядке вычисления сложного ло-
гического выражения.
3. сгруппировать команды по разным этапам (иници-
ализация, поиск, исправление и т. д.). Парочка пу-
стых строк подскажет, что группа команд закончилась
и сейчас начнется новая.
4. менять названия сущностей — обычное дело, когда
программа разрастается и смысл переменных и функ-
ций начинает размываться.
5. добавить комментарии. Задумался на секунду — на-
пиши комментарий, чтобы следующий раз не думать.
6. исправь ошибки в названиях!

https://liveinternet.club/
188 Евгений Павлов. Знакомьтесь, Python

SOLID — новый ООП


Принципы SOLID начинают приносить пользу даже
в небольших программах от 100 строк и выше.
ООП — Объектно-ориентированное программирова-
ние. Это когда классы, конструктор, интерфейсы, наследо-
вание и перегрузка функций, в общем — объекты.
В небольших проектах ты вряд ли увидишь иерар-
хию больше чем из трех классов, что делает теорию ООП
не очень практичной.
Однако, ты наверняка столкнешься с необходимость ав-
томатических тестов, работой со сторонними библиоте-
ками и другими случаями группового программирова-
ния.
Говоря по-умному, сейчас мы чаще сталкиваемся с безо-
пасностью, чем с разнообразием в своем коде.
Эта глава — на будущее. Прочитай для ознакомления.
Однажды тебе потребуются архитектурные паттерны или
принципы ООП. Ты уже будешь знать, что и где тебе искать.
Для программирования уже не нужны принципы ООП,
тебе нужны принципы SOLID.

Single Responsibility Principle (принцип единствен-


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

Open-Closed Principle (принцип открытости/закры-


тости) — написанную функцию не переписывают под но-
вый случай. Вместо этого функция может сама подтяги-
вать новые методы или данные для своей работы с новыми
классами объектов. Умеешь мыть чашку — помоешь и та-
релку.

https://liveinternet.club/
Clean Code: Правила чистого кода... 189

Liskov Substitution Principle (принцип подстановки


Барбары Лисков) — если твой алгоритм умеет мыть посуду,
то он сможет вымыть тарелку, чашку, кастрюлю. Словом,
ЛЮБУЮ посуду. Если ты придумаешь посуду, которую вы-
мыть нельзя — это будет нарушением принципа.

Interface Segregation Principle (принцип разделения


интерфейсов) — куча небольших интерфейсов вместо од-
ного большого: Функции для мытья посуды, функции для
сервировки стола, функции для хранения в серванте — все
это разные интерфейсы, которыми пользуются разные ак-
теры (посудомой, официант, кладовщик).

Dependency Inversion Principle (принцип инвер-


сии зависимостей) — функции верхнего уровня не должны
знать, как реализуются функции уровнем ниже.
Другими словами, когда ты описываешь мытье посуды,
ты не закладываешь, какая именно это будет посуда. Все,
что знает посудомойка — это набор свойств для мытья по-
суды (смывает жир, оттирает пятна и т. п.)
Все вместе эти 5 принципов как раз и образуют аббреви-
атуру SOLID!

Refactoring —
как шатать программу
Рефакторинг становится актуальным для большой про-
граммы от 1000 строк и выше. Если ты пишешь скрипты
меньше чем 1000 строк — тебе не надо разбираться в архи-
тектуре и рефакторинге.

https://liveinternet.club/
190 Евгений Павлов. Знакомьтесь, Python

Рефакторинг программного кода можно сравнить с ре-


монтом и перестройкой дома. Как и в случае с домом, про-
граммный код может со временем стать устаревшим и неэ-
ффективным. Рефакторинг позволяет обновить и улучшить
код, как замена старых окон и дверей, обновление электро-
проводки и трубопроводов в доме. Это позволяет сделать
код более надежным, безопасным и эффективным;
улучшить производительность и упростить его сопрово-
ждение в будущем. Как и в случае с ремонтом дома, рефак-
торинг может быть трудоемким и затратным процессом,
но в конечном итоге он позволяет улучшить качество кода
и сделать его более пригодным для использования.
Спустя годы, рефакторинг — моя самая любимая часть
программирования (и даже написания книги!). У меня уже
есть работающая программа или черновик книги, есть те-
сты для проверки ее работоспособности. Я не пишу но-
вое, а скорее шатаю уже наработанное, чтобы увидеть про-
грамму под новым углом, получить новые свойства для
старого кода. Я занимаюсь полировкой названий, чтобы
они лучше описывали текущее положение дел.

Я меняю ее чтобы:
1. улучшить читабельность кода;
2. избавиться от запаха ошибок (самих ошибок я не вижу,
но по опыту чувствую, что они могут тут возникнуть);
3. добавить возможность расширения функционала;
4. упростить алгоритм.

Все это приходит с опытом, который нарабатывается


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

https://liveinternet.club/
Clean Code: Правила чистого кода... 191

Что еще можно почитать?

«Чистый Код» Роберт Мартин. Книга с кучей реаль-


ных примеров, чтобы взглянуть на код с разных сторон:
сверху вниз, снизу вверх и даже изнутри. Научишься отли-
чать хороший код от плохого. Узнаешь, как писать хоро-
ший код и как превращать плохой код в хороший.
Книга состоит из трех частей:
1. описание принципов, шаблонов программирования
и приемов написания чистого кода;
2. упражнениям по чистке кода или преобразованию
проблемного кода в менее проблемный;
3. и, наконец, набор эвристических правил и «запахов
кода».
Это учит чтению, написанию и чистке кода.

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

Мартин Фаулер
«Рефакторинг. Улучшение существующего кода»
Каждый шаг рефакторинга прост, но совокупный эффект
таких малых изменений в состоянии радикально улуч-
шить проект или даже предотвратить распад плохо спро-
ектированной программы.

https://liveinternet.club/
192 Евгений Павлов. Знакомьтесь, Python

В книге описаны принципы и лучшие практики для ре-


факторинг; подсказки, где и когда следует начинать углу-
бленное изучение кода для его улучшения. Есть подроб-
ный перечень из более 70-ти методов рефакторинга. Для
каждого описана мотивация и техника испытанного
на практике преобразования кода с примерами на Java.
Эти методы позволяют поэтапно модифицировать код, де-
лая небольшие изменения. Благодаря этому снижается риск
сломать уже работающий проект.

Контрольные вопросы:
1. Чем хороший программист отличается от плохого?
2. Как улучшить даже небольшую программу?
3. До какого размера программы классы являются бес-
полезными?
4. Чем SOLID отличается от ООП?
5. Когда можно начинать рефакторинг?

Если ответил на все вопросы, получаешь достижение


#CleanCode.

В сухом остатке:
1. Форматирование — чтобы улучшить читаемость кода;
2. SOLID — чтобы обеспечить расширяемость и автома-
тическое тестирование;
3. рефакторинг — для устранения временных решений.

https://liveinternet.club/
https://liveinternet.club/
HUMAN RESOURCE:
КАК ПРОЙТИ СОБЕСЕДОВАНИЕ

Как попасть в IT

Е
сли ты никогда не работал программистом, никогда
не проходил собеседование на программиста — чего
вообще ожидать и как правильно себя вести?
Что за коллектив? Как складываются отношения? Что це-
нят в работе? Как начальник подбирает себе подчиненных?
Как пройти через фильтр кадрового отдела?
Пожалуй, главная ошибка новичка — это отсутствие
своих целей. Звучит странно, но умение внятно расска-
зать про свои цели и мотивацию все упрощает. Если ты
не знаешь, чего хочешь, то работодатель не понимает, чего
от тебя ждать.
Помни, не нужно нравиться всем подряд. Тебе нужно
найти свою работу и объяснить, что им нужен именно ты.
Для остальных — чем быстрее поймете, что не подходите
друг другу, тем лучше для всех.
Навык самопрезентации сложно переоценить. Elevator
Pitch — минутная презентация, будто ты оказался в лифте
с работодателем и тебе надо за минуту рассказать о себе.
Только самое важное! Не надо перечислять свои достиже-

https://liveinternet.club/
196 Евгений Павлов. Знакомьтесь, Python

ния или навыки. Чего ты ищешь и что готов предложить.


В трех предложениях.
Если заинтересуешь — тебя попросят рассказать попод-
робнее и пригласят на собеседование. Если знают ко-
го-то, кто заинтересуется — направят к нему. Если не ин-
тересно — ты не отнял много времени/внимания, а значит
не был навязчив — приличия соблюдены.
Напиши про себя подробное сочинение на 10 страниц.
Старое доброе свободное письмо, затем выкинь из него
все, что можно. Сформулируй главную мысль из трех пред-
ложений. Не беда если что-то упустишь! Заодно сам смо-
жешь понять свои сильные и слабые стороны. Про сильные
рассказывай, над слабыми работай.

Вот эту презентацию и рассказывай в любом первом разго-


воре с работодателем. По телефону, на собеседовании или
в лифте. Если собрал свою минутную презентацию, забирай
достижение #ElevatorPitch.

Понабрали по объявлениям
Внимательно изучай объявления по вакансиям и при-
смотрись к формулировкам. Твоя цель — написать свое ре-
зюме так, чтобы в нем было как можно больше совпадений
с вакансией по словам и названиям. Кадровики ищут и от-
бирают соискателей по ключевым словам.
Поскольку ты новичок, обязательно ищи слово Junior
в объявлении. Это значит, что тебя будут терпеть и тра-
тить время на твое обучение. Для тебя — фронт работ

https://liveinternet.club/
Human Resource: Как пройти собеседование 197

из простых задач (достаточно формализованных, чтобы


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

u Минимальная — потому что это направление не важ-


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

Зарплата по рынку — скорее ориентир адекватности для


соискателя.
Идеальный для тебя вариант — попасть в хорошую ком-
панию с опытными специалистами и налаженными про-
цессами. Учиться на практике, доказывать свою полез-
ность и уже потом расти в зарплате. Хороший работодатель
сам заинтересован в росте сотрудников, а значит, и росте их
зарплаты.
Добрый совет: договаривайся на берегу о пересмотре
зарплаты через полгода по результатам своей работы. Пе-
ред этой встречей подготовь презентацию своего прогресса
и достижений. Не рассчитывай, что твой руководитель сам
помнит, что ты там сделал и чего ты достиг.

https://liveinternet.club/
198 Евгений Павлов. Знакомьтесь, Python

О чем говорят программисты


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

Добро пожаловать на галеру, фраерок.


Скок стаж, где раньше мотал срок?
Мы с пацанами кое-чё спросим с тебя по олдскулу.
Присаживайся, у нас как раз два стула.
Не обращайте внимания.
Это мы вроде бы так шутим31.

Ты можешь не знать какие-то вещи. Для моло-


дого специалиста простительно чего-то не знать. “Нет,
я не умею писать тесты. Слышал лишь, что автоматические
тесты — важный этап в разработке. Мне было бы интересно
узнать про них больше и поработать над тестами для боль-
шого проекта. Даже если это будет немного однообразно —
не беда. Я надеюсь, что я буду учиться у более опытных кол-
лег.”
У интервьюера стоит задача: узнать твои сильные сто-
роны и выяснить риски, если он возьмет тебя на работу.
Помоги ему в этом непростом деле.
Ты должен хоть что-то знать. Обозначь область
своих знаний и будь готов доказать, что ты ими действи-
тельно обладаешь. “Да, я работал с GIT. У меня есть аккаунт
на GitHub, где я выложил несколько своих учебных проек-
тов. Пожалуй, я бы хотел показать свой последний проект,
31
Научно-технический рэп – «Два стула», 2021.

https://liveinternet.club/
Human Resource: Как пройти собеседование 199

где я читаю http страницу и сохраняю частотный словарь


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

Ты можешь попросить подсказку. Чтобы решить


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

Поиск работы — это конкурс. Возможно, работода-


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

Вопросы работодателю — важная часть собеседова-


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

https://liveinternet.club/
200 Евгений Павлов. Знакомьтесь, Python

разговор, будто тебе надо не получить эту работу, а надо


получить совет старшего товарища.

Твой план — попасть на 5 собеседований. Ты не мо-


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

Если сходил на 5 собеседований, получай достижение


#JobInterview.

Сначала хотел поставить достижение на 10 собеседова-


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

Как вписаться в коллектив

Вот тебе удалось пройти собеседование, сегодня твой


первый день на новой работе. Испытательный срок — это
второе, секретное собеседование. Тебя приглашают
в коллектив, чтобы оценить, как ты впишешься в него, как
будешь справляться с работой. Самое основное — как бу-
дешь учиться новому.

https://liveinternet.club/
Human Resource: Как пройти собеседование 201

Здоровайся! Пожалуй, это главный совет, который


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

Задавай правильные вопросы. С одной стороны,


вопросы, на которые тяжело ответить — всех ужасно раз-
дражают. С другой стороны, не спросишь — не узнаешь.
Пожалуй, лучше всего, сначала попробовать сделать
самому, а затем спросить, почему (по их мнению) у тебя
не получилось. Правильный вопрос: Я попробовал и так,
и эдак, но отчего-то не получается. Может я что-то не так
делаю?
Лучший вопрос — тот, на который можно коротко от-
ветить «да» или «нет». Как правило у джунов такая каша
в голове, что сама по себе попытка сформулировать вопрос
приводит к серьезному улучшению дела.

Планируй свое расписание. Предлагай руководителю


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

Ищи работу внутри. Интересуйся задачами-пробле-


мами коллег. Предлагай свою помощь. Правильный во-
прос: Чем еще я смогу быть полезным?

https://liveinternet.club/
202 Евгений Павлов. Знакомьтесь, Python

Будь опрятен. И вообще будь на позитиве. Человек


не способный позаботится о себе — вряд ли сможет помочь
другим по работе.

Что еще можно почитать?

Джим Кэмп
«Сначала скажите «нет». Секреты профессио-
нальных переговорщиков»
Эта книга изменит твою жизнь. Новый способ решать
сложнейшие личные и рабочие вопросы, оставаться спо-
койным и уверенным на собеседованиях, эффективно
отстаивать свои настоящие интересы.
Неважно, что думает твой собеседник, хочет тебя про-
вести или найти компромисс. Если ты не можешь добиться
желаемого от собеседника — откажись от переговоров и сэ-
кономь свое время.
Подход «выиграл-выиграл» плох в переговорах, потому
что он ведет к уступкам в ущерб себе. Ты уступаешь и на-
деешься, что оппонент уступит в ответ. А он не будет усту-
пать.
В ходе коммуникации сразу определись, переговоры это
или нет. Переговоры — соглашение между двумя или
большим количеством сторон, где каждая из сторон имеет
право вето. Каждый имеет право сказать нет.
Не надейся, что собеседник заинтересован в долгосроч-
ных результатах и готов пожертвовать выигрышем
ради того, чтобы в будущем получить гораздо больше.

https://liveinternet.club/
Human Resource: Как пройти собеседование 203

Система улучшает отношения между людьми, поскольку


она даёт свободу тебе, а ты осознанно даешь ее собеседнику.
Ты поощряешь все «нет» твоего собеседника. Ты учишься
«уверенно и без агрессии отстаивать свои интересы».
Черта характера, которая прямо противоположна манипу-
лятивности, от которой страдают обе стороны.
Это учебник по всем эффективным переговорам в твоей
жизни. Собеседование — это переговоры.
Дэвид Аллен
«Как привести дела в порядок: искусство продук-
тивности без стресса»
Вот сильно упрощенная схема управления временем, ко-
торая подходит для большинства ситуаций:
1. запиши все дела (сформируй backlog);
2. выдели 10 самых важных (отбрось второстепенное);
3. отсортируй их по приоритету (определи приоритет);
4. сделай первые три (рассчитывай свои силы);
5. остановись и отдыхай (планируй отдых!).

Питер Тиль
«От нуля к единице. Как создать стартап, кото-
рый изменит будущее»
Ты — это стартап. Продукт — это твой опыт и рабочее
время. Твои заказчики — это работодатели. Правильно вы-
брать профессию — найти свою нишу на рынке.
Самое провокационное утверждение Тиля: «конкурен-
ция — для неудачников»; монополия — вот, что нужно
предпринимателю. «Идеальный целевой рынок для стар-
тапа — небольшая группа вполне определенных людей, ко-
торую обслуживает небольшое число конкурентов или во-
обще никто».
1. Лучше рискнуть и быть чересчур смелым, чем ока-
заться банальным.

https://liveinternet.club/
204 Евгений Павлов. Знакомьтесь, Python

2. Плохой план лучше, чем отсутствие плана.


3. Высококонкурентные рынки убивают надежду
на прибыльность.
4. Продажи не менее важны, чем продукт.

Подготовка к собеседованию.
1. изучи вакансии на HeadHunter для junior и выпиши
требования к вакансиям;
2. найди список вопросов на собеседовании для каждого
из таких требований;
3. составь учебный план, чтобы постепенно изучить все,
что требуется;
4. разберись, как надо отвечать на вопросы по теме. Сде-
лай практические задачи;
5. сохрани код своих учебных примеров на gitflic.
Оформи комментарии и документацию для своего
кода;
6. найди отзывы сотрудников для понравившихся орга-
низаций из объявлений;
7. составь свое резюме и сопроводительные письма. На-
пиши несколько писем для выбранных тобой объяв-
лений;
8. подготовь самопрезентацию.

В сухом остатке:
1. изучай требования к вакансиям на рынке;
2. определись с запросами: заплата, удаленность, экс-
пертиза, перспективы;
3. изучи отзывы о работодателе;
4. подготовь вопросы к работодателю;

https://liveinternet.club/
Human Resource: Как пройти собеседование 205

5. определись, что ты знаешь и умеешь, а с чем еще


не разобрался;
6. делай работу над ошибками после собеседования;
7. задавай правильные вопросы;
8. составляй план своей работы.

https://liveinternet.club/
https://liveinternet.club/
BONUS: КАРЬЕРА И ЗДОРОВЬЕ.
КАК ВКАЛЫВАТЬ И НЕ СГОРЕТЬ

Идет медведь по лесу, видит, машина горит.


Сел в нее и сгорел.32

Воля к жизни

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

Чем выше цель, тем менее заметен прогресс.

Я решил дописать еще одну главу про ментальное и фи-


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

32
Анекдот.

https://liveinternet.club/
208 Евгений Павлов. Знакомьтесь, Python

Концентрация внимания

Здесь нет никакой мистической ботвы. Медитация нужна


для прокачки концентрации внимания. Каждый день
по 20 минут “смотреть на ковер” и следить за своим дыха-
нием.

Паузы в работе — это не трата времени, а заточка косы.

С помощью медитации сможешь «перезагрузить» свой


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

Самое сложное в медитации — это найти для нее время.

Запланируй перерыв на полчаса, найди удобное место,


сядь в спокойную позу, чтобы сохранять прямую спину.
Для начала, продержись 5 минут. Фокус в том, чтобы
безоценочно наблюдать за собой и возвращаться к ды-
ханию. Мысли будут постоянно перескакивать на всякое,
но это нормально. Просто следи за ними и время от вре-
мени возвращай внимание на дыхание.
Как начнет получаться высидеть без суеты 5 минут, на-
чинай увеличивать дозу до 10-ти минут, а затем до 20-ти.

https://liveinternet.club/
Bonus: Карьера и здоровье. Как вкалывать и не сгореть 209

Просто садись и запускай таймер на 20 минут. Только


не подсматривай на время. Представь, что у тебя есть веч-
ность, чтобы привести свои мысли в порядок и выров-
нять дыхание. Не торопись и постарайся усидеть на месте.
Когда вечность закончится — прозвенит таймер. До сих пор
удивляюсь этому фокусу, насколько нелинейно течет время
в режиме медитации.
Еще раз напомню, медитация — это не про заунывную
музыку, палки-вонючки и мистический опыт. Медита-
ция — это заточка ума перед работой. Оставайся в ти-
шине и покое. Жди, когда в сознании осядет мутный ил
из суеты. Разум очистится и ты ясно увидишь действительно
глубокие мысли.

Планирование и отдых
Это не про марафоны желаний. Только бездуховность,
Scrum и циничный расчет.
Прежде всего, я хочу разделить два этапа: постановка
целей и планирование. Многие смешивают свои жела-
ния цели и планы в одну кучу. Но я делаю иначе.
Цель — это то, чего ты хочешь достичь. Настолько
сильно, что готов от чего-то отказаться, чтобы получить же-
лаемое взамен. Это вопрос приоритета: пойти на утрен-
нюю пробежку или сладко поспать еще часок. Семья или
карьера. Деньги или счастье. Образование или развлечения.
Здесь нет хорошего и плохого. Есть важное и то, от чего
можно отказаться.
Раз в год надо потратить день на размышления. Спо-
койно обдумай, выпиши все свои хотелки и все, что при-

https://liveinternet.club/
210 Евгений Павлов. Знакомьтесь, Python

дет в голову, без ограничений и критики (снова свободное


письмо). Заполни BackLog, прямо как в методологии Scrum.
Мы так долго учимся самоограничению, что боимся
желать. Представь себя в комнате желаний, где можно
и нужно пожелать все, что тебе действительно хочется. По-
старайся пожелать что-то еще, кроме денег:) Желать много
денег — это как желать чек с номером в очереди за едой
в Макдональдс. Будто тебе нужен кусочек бумаги с циф-
рами, а не вкусный гамбургер с горячей картошкой и слад-
кой газировкой.
Приоритезируй Backlog и выдели ключевые цели
на этот год. Например, первые десять целей. Остальное
можно спрятать и договориться с собой пренебрегать ими
в случае выбора. А выбор обязательно возникнет, он будет
нелегким. Унылая учеба в начале семестра или эксклюзив-
ная вечеринка только для приглашенных гостей. Неотлож-
ная задача на работе или свадьба сестры. Если ты не подумал
заранее и спокойно не подготовил стратегическое решение,
то будешь делать выбор на основе своих эмоций. Большин-
ство людей именно так и поступают. Забудь про планиро-
вание, живи эмоциями (сарказм)!
Приоритезация целей — это стратегия. Стратегия — это
умение отказываться от чего-то. Если ты не отказываешься,
то у тебя нет стратегии. Выбранные цели — это как поляр-
ная звезда (North Star), по которой ты сверяешь планы: ты
удаляешься или приближаешься к ней? Выбранные метрики
позволяют рационально оценить прогресс достижения
цели. Как бы не бросала жизнь из стороны в сторону, смо-
три в сторону своей цели и ищи способы двигаться к ней.

При подготовке к битве планы незаменимы, но как только


битва началась, план становится совершенно бесполез-
ным33.

33
Дуайт Эйзенхауэр, Sid Meier’s Civilization V, Firaxis Games, 2010.

https://liveinternet.club/
Bonus: Карьера и здоровье. Как вкалывать и не сгореть 211

План — это набор действий для достижения цели. Раз


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

Я молодец.
Сделал небольшой шаг.
Завтра попробую ещё.

А вот 100% выполненный план — это паршиво. Это зна-


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

Душевное спокойствие зависит от многих причин,


но, главное, «делай, что должно, и будь что будет»34.

Три секрета планирования:


1. выделяй время на планирование;
2. разделяй планирование и выполнение;
3. планируй отдых.

Планирование и отдых — вещи, которые принято


отодвигать на второй план, будто они не требуют времени
и ресурсов. По остаточному принципу. На самом же деле,
планирование требует абсолютных когнитивных усилий.
Чтобы построить действительно хорошие планы, нужно
иметь свежую голову. А свежую голову ты не сможешь
получить только лишь хорошо отдохнув.
34
Марк Аврелий. «О стойкости мудреца (сборник)», Бородай Т.Ю., пере-
вод на русский язык, комментарии. «РИПОЛ классик», 2017.

https://liveinternet.club/
212 Евгений Павлов. Знакомьтесь, Python

Когда ты выполняешь план, кто-то должен позаботится


о тебе, продумать все до мелочей, написать списки, узнать
расписание, адреса и контакты. Устранить все, что отвлекает,
чтобы ты смог полностью сфокусироваться на самой
работе. Не надо ничего решать или узнавать, просто сделай
то, что запланировано. Здесь и сейчас у тебя ровно одна за-
дача, которую ты должен сделать. Обо всем остальном уже
позаботились другие. Это сильно облегчает саму работу.
Поэтому, когда планируешь — позаботься о будущем
себе. Продумай заранее все, чтобы облегчить выполнение
задачи исполнителю, устрани все сомнения и страхи испол-
нителя. Отправляешься в отпуск? Купи билеты и заброни-
руй гостиницу. Пойдешь на тренировку? Подготовь свежую
одежду и полотенце. Купи и приготовь вечером на завтрак
еду со сложными углеводами перед тренировкой. Пой-
дешь на прием к зубному? Назначь часы приема, напиши
напоминание в календарь, договорись на работе, что при-
дешь попозже. Одним словом — позаботься о себе будущем!
Научись замечать наиболее ранние признаки устало-
сти и истощения. Это когда тебе хочется сладкого, соленого,
кофе, взбодриться. Когда у тебя возникают слабые мысли:
«почему я?», загнанность и безнадежность, «я не справля-
юсь», «я не способен».

Отдыхай, прежде чем почувствуешь усталость.


И ты никогда не будешь уставать.

Как только заметил — прекрати копать. Отступи


от края стрессовой ямы. Время подзарядиться. Подыши.
Выпей воды. Разомнись.
Как и любой навык — это тренируется. Чем чаще оста-
навливаешься, тем легче в следующий раз замечаешь пер-
вые признаки.

https://liveinternet.club/
Bonus: Карьера и здоровье. Как вкалывать и не сгореть 213

Друзья и Коллеги

Пожалуй, это самая сложная тема, особенно для интро-


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

При наличии поддержки и активной позиции — нет выу-


ченной беспомощности.

Время от времени общайся с другом или родственни-


ком, который занимает твою сторону. Хвастайся ему сво-
ими успехами и радуйся его успехам, которыми он хваста-
ется в ответ. Выслушивай его переживания без осуждения.
Это два параллельных потока: действия и эмоции. Про-
живание эмоций никак не отменяет необходимость рабо-
тать по плану, а наличие плана не запрещает предаваться
эмоциям в перерывах. Всему свое время и место. Подавле-
ние эмоций приводит к психосоматике. Отсутствие планов
приводит к деградации.
Замечай окружающих тебя людей, делись позитивом
с коллегами. Тебе легче быть на позитиве, если ты умеешь
быть в порядке. Момент мастерства — это когда начи-
наешь делать комплименты окружающим людям, подме-
чая в них вещи, которые тебе нравятся. Не беда, что порой
это звучит натянуто и неестественно — надо же с чего-то
начинать. Относись снисходительно к чужим ошибкам.
В ответ получишь больше терпимости к твоим ошибкам.
А они обязательно бывают, даже у тебя. Надеюсь, не часто,
но и такое случается.

https://liveinternet.club/
214 Евгений Павлов. Знакомьтесь, Python

Используй личное общение для обсуждения прият-


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

Для успеха в жизни нужны связи, крепкие нейронные связи.

Лучший способ научиться принимать помощь окру-


жающих — самому помогать тем, кто в этом нуждается.
Только так ты научишься участвовать в подобной деятель-
ности. Когда, у кого и как просить поддержки? Что ты мо-
жешь дать, а что будет для тебя неудобным? Когда помо-
гаешь другим, понимаешь, как именно просить помощи
самому. Помогая другим, мы становимся счастливее — так
устроена наша психика.
Неумение выстраивать отношения со старшими, в пер-
вую очередь, из-за непонимания, что ты можешь дать тому,
у кого есть все, чего нет у тебя. И во вторую очередь, из-за
неумения выделять ресурсы для решения задач старших.
Все из-за того, что ты слишком зациклен на себе и своих
проблемах!
Главная когнитивная ошибка: большинство людей хотят,
чтобы их услышали, но лишь единицы способны слы-
шать окружающих. Поэтому, еще раз: учись задавать ка-
чественные вопросы. Задавая вопросы, ты можешь узнать
что-то новое. Рассказывай сам — и ты никогда не узнаешь
ничего нового и полезного для себя. Любая критика — это
твой шанс стать лучше. Вопрос только в умении обрабаты-
вать такую обратную связь.

https://liveinternet.club/
Bonus: Карьера и здоровье. Как вкалывать и не сгореть 215

Полезные книги
Осторожно! Эти книги действительно тяжелые для изуче-
ния. Если получится читать по странице в день и конспек-
тировать прочитанное — уже хлеб.

Андрей Беловешкин
«Воля к жизни. Как использовать ресурсы здоро-
вья по максимуму»
Это учебник кандидата медицинских наук Андрея Бело-
вешкина. Он рассказывает с позиции науки и доказатель-
ной медицины. Андрей нравится мне своим системным
подходом, основанным на многочисленных научных ис-
следованиях. Вот 7 вредных привычек, убивающих твое
здоровье:
1. гиподинамия, cидячий образ жизни;
2. плохое питание;
3. дефицит солнечного света;
4. недосып;
5. хронический стресс и трудоголизм;
6. вынужденное одиночество;
7. бедность.

В этом списке нет алкоголизма и курения, потому что


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

Елена Вавилова, Андрей Безруков


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

https://liveinternet.club/
216 Евгений Павлов. Знакомьтесь, Python

по-взрослому. Нетворкинг — это основное занятие про-


фессионального разведчика. Не случайный и эпизодиче-
ский, но промышленный подход к выстраиванию по-
лезных знакомств.
Маленькая красная книжка от полковников Службы
внешней разведки. Похоже на секретную методичку
из школы разведчиков. Совершенно другой уровень под-
хода к предмету. В западных книжках такого не напишут.
1. Сформулируй свои цели;
2. нарисуй свой граф знакомств;
3. выдели три круга: ближний, достижимый, дальний;
4. определи ключевые узлы: коннекторы, привратники,
аккумуляторы;
5. приоритезируй знакомства;
6. прилагай усилия для полезного общения;
7. ставь на паузу бесполезные взаимодействия.

Александр Кравцов
«Найди ментора. Как перейти на следующий уро-
вень»
Книга про знакомства с теми, кто намного выше тебя.
Как выстраивать отношения со старшими товарищами.
Считаю, полезно почитать вокруг темы про менторов. За-
бавно, что никто из окружающих толком не знает, что такое
ментор и чем он отличается от тьютора, коуча, наставника,
преподавателя или тренера. Это все разные роли с разными
целями и задачами. Книга прежде всего про стратегию раз-
вития личностных ресурсов:
1. таланты — личные качества и способности;
2. компетенции — твои знания и умения;
3. связи — твое окружение;
4. репутация — твоя известность за пределами ближнего
круга.

https://liveinternet.club/
Bonus: Карьера и здоровье. Как вкалывать и не сгореть 217

Пока ты развиваешь свои таланты — все зависит только


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

Контрольные вопросы:
1. Зачем нужна медитация?
2. Чем планы отличаются от целей?
3. Зачем нужна поддержка?
4. Зачем нужен ментор?

В сухом остатке:
1. делай перерывы;
2. пиши планы;
3. планируй отдых;
4. помогай другим.

https://liveinternet.club/
https://liveinternet.club/
ACHIEVEMENTS:
ТАБЛИЦА ДОСТИЖЕНИЙ.
МЕТА-ИГРА В КНИЖКЕ

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

Вот список достижений, которые разбросаны по главам


моей книги:
1. #Concept — ответил на вопросы по главе «Для кого
эта книга»;
2. #HelloWorld — написал первую программу
на Python;
3. #LapTop — завел себе свой рабочий ноутбук;
4. #Python — установил Python;

https://liveinternet.club/
220 Евгений Павлов. Знакомьтесь, Python

5. #PyCharm — установил PyCharm;


6. #VirtualEnvironment — настроил виртуальное
окружение;
7. #StreamCoding — посмотрел час стрима с про-
граммированием на Python;
8. #BriefHistory — вопросы по главе «Краткая история
программирования»;
9. #PythonIndustrial — ответил на вопросы по главе
«Сорта Питона»;
10. #DBeaver — подключиться к удаленной базе дан-
ных;
11. #DataWareHouse — выполнил задания по главе
«Как хранить данные»;
12. #Anaconda — установил Анаконду и нарисовал гра-
фик;
13. #Django — создал приложение и посмотрел в брау-
зере результат;
14. #RabbitMQ — установил сервер и выполнил задачу
в очереди;
15. #PythonLibraries — ответил на вопросы по главе
«Главные библиотеки Питона»;
16. #OctoCat — прошел регистрацию на GitHub;
17. #PythonGym — сделал зарядку после долгого сиде-
ния за компом;
18. #FirstCommit — залил свой проект на сервер Git;
19. #GitQuiz — ответил на вопросы по главе «Система
контроля версий»;
20. #Deconstruction — расписал декомпозицию пиц-
церии или супермаркета;
21. #PythonVPS — арендовал свой линуксовый сервер;

https://liveinternet.club/
Achievements: Таблица достижений. Мета-игра в книжке 221

22. #CronTab — создал и выполнил задачу в планиров-


щике;
23. #DebugMaster — контрольные вопросы по исправ-
лению ошибок в коде;
24. #CleanCode — ответил на контрольные вопросы
по главе «Правила чистого кода»;
25. #ElevatorPitch — подготовил минутную самопре-
зентацию;
26. #JobInterview — сходил на 5 собеседований.

https://liveinternet.club/
СОДЕРЖАНИЕ

Concept:
Для кого эта книга? И для чего?........................................... 7

Agile:
Как перестать читать и начать программировать.
Как побороть лень. Дофамин. .............................................. 15

IDE:
Среда разработки. Hello World. Культура труда................. 27

Root:
Краткая история программирования...
Вехи развития. Тренды ......................................................... 45

Industrial:
Сорта питона, и как их готовить.
Области применения. Куда копать ..................................... 61

Data WareHouse:
Как хранить данные?
Источники и потоки данных. Новая нефть ........................ 73

Release:
Главные Библиотеки Питона. Учебная практика .............. 93

https://liveinternet.club/
223

GIT:
Система контроля версий. Где хранить исходники ........ 113

FAQ:
Главный секрет программирования.
Формулировать мысли. Декомпозиция.
Сверху вниз.......................................................................... 131

Linux:
Консоль, Команды, Задачи. (Уголок админа) ................... 147

Debug:
Темная сторона. В любой непонятной ситуации ............ 169

Clean Code:
Правила чистого кода. Уголок архитектора.
SOLID .................................................................................... 185

Human Resource:
Как пройти собеседование. Как заходить в хату .............. 195

Bonus:
Карьера и здоровье. Как вкалывать и не сгореть .............. 207

Achievements:
Таблица достижений. Мета-игра в книжке ..................... 219

https://liveinternet.club/
Научно-популярное издание
ԑɵɥɵɦɢɛԝԕɚɪɚɥɵԕɛɚɫɩɚ
Серия «Программирование для всех»

Евгений Павлов

ЗНАКОМЬТЕСЬ, PYTHON
Секреты профессии

Ответственный редактор А. Ходякова


Менеджер проекта В. Живина
Технический редактор Н. Чернышева
Дизайнер А. Шмулий
Компьютерная верстка Н. Шаповалова

Подписано в печать 22.09.2023. Формат 70x100/16. Уcл. печ. л. 18,2.


Печать офсетная. Гарнитура SonetSerif. Бумага офсетная.
Тираж 2000 экз. (Программирование для всех). Заказ №

Произведено в Российской Федерации. Изготовлено в 2023 г.


Оригинал-макет подготовлен редакцией «Времена»,
импринт «Альфа»
Изготовитель: ООО «Издательство АСТ»
129085, Российская Федерация, г. Москва, Звездный бульвар, д. 21,
стр. 1, комн. 705, пом. I, этаж 7
Наш сайт: WWW.AST.RU E-mail: ask@ast.ru
Общероссийский классификатор продукции ОК-034-2014
(КПЕС 2008); 58.11.1 - книги, брошюры печатные
©ȻɚɫɩɚȺɫɬɚªɞɟɝɟɧɈɈɈɝɆԥɫɤɟɭɀɭɥɞɵɡɞɵɝԛɥɡɚɪɞɤԝɪɵɥɵɦ
ɛԧɥɦɟɩɨɦԕɚɛɚɬȻLɡɞLɧɡɥɟɤɬɪɨɧɞɵɤɦɟɤɟɧɠɚɣɦɵɡZZZDVWUX
(PDLODVN#DVWUXɂɧɬɟɪɧɟɬɦɚɝɚɡɢɧZZZERRNN]
ɂɧɬɟɪɧɟɬɞԛɤɟɧZZZERRNN]
ɂɦɩɨɪɬɟɪɜɊɟɫɩɭɛɥɢɤɭɄɚɡɚɯɫɬɚɧɢɉɪɟɞɫɬɚɜɢɬɟɥɶɩɨɩɪɢɟɦɭɩɪɟɬɟɧɡɢɣ
ɜɊɟɫɩɭɛɥɢɤɟɄɚɡɚɯɫɬɚɧ²ɌɈɈɊȾɐȺɥɦɚɬɵɝȺɥɦɚɬɵ
ԔɚɡɚԕɫɬɚɧɊɟɫɩɭɛɥɢɤɚɫɵɧɚɢɦɩɨɪɬɬɚɭɲɵɠԥɧɟԔɚɡɚԕɫɬɚɧɊɟɫɩɭɛɥɢɤɚɫɵɧɞɚ
ɧɚɪɚɡɵɥɵԕɬɚɪɞɵԕɚɛɵɥɞɚɭɛɨɣɵɧɲɚԧɤLɥ©ɊȾɐȺɥɦɚɬɵªɀɒɋȺɥɦɚɬɵ
ԕȾɨɦɛɪɨɜɫɤɢɣɤԧɲ©ɚªȻɥɢɬɟɪLɨɮɢɫɌɟɥ  
ɮɚɤɫ  LɲɤL(PDLO5'&$OPDW\#HNVPRN]ZZZERRNN]
ɌɚɭɚɪɛɟɥɝLFL©ȺɋɌªԦɧɞLɪLɥɝɟɧɠɵɥɵ
ԦɧLɦɧLɧɠɚɪɚɦɞɵɥɵԕɦHSɡLɦLɲɟɤɬɟɥɦɟɝɟɧ
ɋɟɪɬɢɮɢɤɚɰɢɹԕɚɪɚɫɬɵɪɵɥɦɚԑɚɧ

https://liveinternet.club/
https://liveinternet.club/

Вам также может понравиться