<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Алексей Голобурдин</title><generator>teletype.in</generator><description><![CDATA[Алексей Голобурдин]]></description><image><url>https://img3.teletype.in/files/68/17/68170589-a2b4-4343-bad9-a6188a185c35.png</url><title>Алексей Голобурдин</title><link>https://teletype.in/@t0digital</link></image><link>https://teletype.in/@t0digital?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/t0digital?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/t0digital?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 04 Aug 2026 03:29:04 GMT</pubDate><lastBuildDate>Tue, 04 Aug 2026 03:29:04 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@t0digital/7-boring-points</guid><link>https://teletype.in/@t0digital/7-boring-points?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital</link><comments>https://teletype.in/@t0digital/7-boring-points?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital#comments</comments><dc:creator>t0digital</dc:creator><title>7 скучных тезисов</title><pubDate>Fri, 01 Jul 2022 14:27:17 GMT</pubDate><description><![CDATA[Кажется, не все выкупают мой сарказм в некоторых посылах в телеграмушке и ютубчике. Для тех, кто в танке (надеюсь, фигурально):]]></description><content:encoded><![CDATA[
  <p id="znU4">Кажется, не все выкупают мой сарказм в некоторых посылах в <a href="https://t.me/t0digital" target="_blank">телеграмушке</a> и <a href="https://www.youtube.com/channel/UC9MK8SybZcrHR3CUV4NMy2g" target="_blank">ютубчике</a>. Для тех, кто в танке (надеюсь, фигурально):</p>
  <p id="wdD3"><strong>1. Какой редактор кода или IDE использовать?</strong></p>
  <p id="1pca">Любой. В комментариях читал, как один Человечище писал код фломастером на обоях. Говорит, очень удобно сворачивать код, прям сматываешь рулончиком.</p>
  <p id="Zx0T">Попробуйте разные инструменты и остановитесь на удобном для вас. Если вы учитесь программировать — вам не надо vim. Воспользуйтесь VS Code / PyCharm / любым другим популярным инструментом.</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="1Oax">Потому что в начале пути надо, чтобы всё было просто. Сначала учимся ползать, потом ходить, потом бегать. Можно остаться и на первом этапе, если вас и того, кто вам платит на хлебушек с водичкой, всё устраивает.</p>
  </section>
  <p id="AJ9x"><strong>2. Какой язык программирования (ЯП) лучший?</strong></p>
  <p id="yN4r">Ответ на абстрактный вопрос тоже абстрактный — вообще пофик. Серьёзно. Все языки программирования великолепны. <a href="https://ru.wikipedia.org/wiki/Brainfuck" target="_blank">Brainfuck</a> вот есть. Шучу. Если вы спрашиваете этот вопрос, Brainfuck вам пока рано.</p>
  <p id="6um4">Что сделает этот вопрос неабстрактным? Конкретика. Какой ЯП лучше для системного программирования? Какой ЯП лучше для веб-разработки? Какой ЯП лучше для скриптовых задач? Какой ЯП лучше для разработки DevOps инструментов? Какой ЯП лучше для написания 1С приложений? Какой ЯП лучше для поддержки приложения, написанного на Python?</p>
  <p id="tEux">Всё это про то, что под каждую задачу есть свои инструменты. Гвозди забиваем молотком, дырки (отверстия, прости господи, отверстия!) сверлим дрелью. Для iOS пишут на Swift и изучать Python, чтобы писать iOS приложения так себе затейка, прямо скажем.</p>
  <p id="SRdq">Степень абстрактности снизилась. Но лучше добавить ещё конкретики. Такой как бюджет на задачу, если мы выбираем ЯП для своего проекта. Такой как наличие или отсутствие под рукой готовых специалистов под тот или иной ЯП. Такой как — что мы хотим делать с полученным кодом, надо ли нам его будет продавать, поддерживать, расширять. Это комплексный большой вопрос.</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="USvv">Ответ на этот вопрос сложнее, чем «я знаю ЯП <code>any_lang</code> и он потому точно лучший».</p>
  </section>
  <p id="3LIN"><strong>3. Какой ЯП учить?</strong></p>
  <p id="8TEC">И на этот вопрос нет едино верного ответа. Порекомендовать учить популярный ЯП? С одной стороны да, с другой — можно наоборот выучить непопулярный и пойти за кучу денег поддерживать код, написанный десятки лет назад в каком-то банковском решении. Опять же — нужна конкретика, что вы хотите от себя, жизни, ЯП.</p>
  <p id="uUrH">Рекомендовать учить первым ЯП скриптовый ЯП, скажем, Python? Найдутся те, кто скажут (и небезосновательно скажут), что лучше будет на старте сразу понять работу компьютера, структур данных, памяти, эффективности программ на более низкоуровневом языке.</p>
  <p id="rRD1">Любой ответ не единственно верный.</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="XZiY">Вот на что следует точно обратить внимание — так это на то, что начиная учить любой ЯП, надо настраивать себя а) на долгий путь саморазвития впереди и б) на то, что этот ЯП не будет у вас единственным в арсенале. Если вы останетесь в профессии, вы будете изучать другие языки.</p>
  </section>
  <p id="vv7p">И с этой точки зрения — какая разница, с чего начать? Начните с питона. Популярный, простой, пишут на нём веб, data science, все скриптовые задачи. Алгоритмы, структуры данных, память и эффективность ПО догоните потом, опять же, если захотите/заставят идти дальше.</p>
  <p id="vVVu"><strong>4. Мышь или клавиатура?</strong></p>
  <p id="Wy2V">Мышь, разумеется. Единственный вопрос мироздания с явным однозначным ответом.</p>
  <p id="B4eQ"><strong>5. PHP =  говнокод?</strong></p>
  <p id="sU3d">Я писал много-много лет на PHP. Это мой первый ЯП, на котором я писал основательно, и я его люблю. Но не пишу на нём давно. Там взрослый серьёзный ООП, на PHP написано куча кода, проектов, которые еще долго надо поддерживать. Стоит ли начинать свой путь с PHP сейчас? Мой ответ <a href="https://www.tiobe.com/tiobe-index/php/" target="_blank">нет</a>. Но PHP не равно говнокод по умолчанию. Хотя возможно количество плохого кода на PHP и больше, чем в других ЯП.</p>
  <p id="1nlq">Страшная тайна (которую все знают) — качество кода определяется скиллом разработчика, а не ЯП, на котором код написан. Побьёт каратист боксёра или борец всех заборет? Решает скилл бойца, как бы кому не хотелось услышать что-то другое. А коли боец реально боец, то, занимаясь одним видом единоборств, он будет посматривать и на другие виды, и думать, какие где есть плюсы-минусы и что где можно противопоставить. Так же и с ЯП. Коли вы действительно развиваетесь, то, повторюсь, у вас будет больше одного ЯП со временем в наборе.</p>
  <p id="AEnP">Я видел и, хочется верить, иногда писал прекрасный код на PHP.</p>
  <p id="ytXh"><strong>6. Python = код прекрасней фиалки на рассвете?</strong></p>
  <p id="HdRB">Нннннет! Через меня прошло почти 700 студентов на <a href="https://course01.to.digital/" target="_blank">курсе</a> и я прочёл много плохого кода на Python. Я его видел! Он есть, он существует! Это не выдумка! Чесслово! Когда новичок начинает писать код на любом ЯП, он пишет плохой код. Помните? Сначала ползаем, потом ходим, потом бегаем. Сначала надо, чтобы код решал задачу, и только потом (возможно) начинаем задумываться над качеством кода.</p>
  <p id="RimC">Люди, которые только начали ходить, бегают так себе. Люди, которые только начали писать код, пишут его так себе. Это нормально. Но эти люди уже ступили на правильную дорогу и это главное. А дальше, как писал выше — путь саморазвития через работу и перенятие опыта у других. Не боги горшки обжигают.</p>
  <p id="5nzF"><strong>7. А что вообще важно?</strong></p>
  <p id="aLlg">Важно работать, развиваться и не трындеть. И всё будет чётенько. Инфа сотка.</p>
  <p id="87Ke">И использовать мышь, конечно.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@t0digital/python-pathlib</guid><link>https://teletype.in/@t0digital/python-pathlib?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital</link><comments>https://teletype.in/@t0digital/python-pathlib?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital#comments</comments><dc:creator>t0digital</dc:creator><title>pathlib в Python</title><pubDate>Tue, 10 May 2022 16:26:08 GMT</pubDate><description><![CDATA[В богохранимом PHP есть такая встроенная глобально доступная функция file_get_contents. Она читает локальный или удаленный (http) ресурс в строку. Например:]]></description><content:encoded><![CDATA[
  <p id="rPQS">В богохранимом PHP есть такая встроенная глобально доступная функция <a href="https://www.php.net/file_get_contents" target="_blank">file_get_contents</a>. Она читает локальный или удаленный (http) ресурс в строку. Например:</p>
  <pre id="sS4P" data-lang="php">file_content = file_get_contents(&quot;./localfile.txt&quot;)
webpage_content = file_get_contents(&quot;https://ya.ru&quot;)</pre>
  <p id="gUhl">Удобненько. В Python во всех материалах показывают чтение текстового файла так:</p>
  <pre id="AE3Y" data-lang="python">with open(&quot;./localfile.txt&quot;, &quot;r&quot;) as f:
    file_content = f.read()</pre>
  <p id="GzkR">Больше кода, две строки, табуляция — меньше удовольствия. Однако есть ещё вот такой вариант:</p>
  <pre id="TsVY" data-lang="python">from pathlib import Path

file_contents = Path(&quot;./localfile.txt&quot;).read_text()

file_contents = Path(&quot;./localfile.txt&quot;).write_text(&quot;some string&quot;)</pre>
  <p id="qLAu">Мне нравится такой вариант. Да, <a href="https://docs.python.org/3/library/pathlib.html" target="_blank">pathlib</a> импортировать надо, но его всё равно часто надо импортировать при работе с путями к файлам. Скажем, во многих материалах для получения склейки пути используется конструкция <code>os.path.join()</code>, то есть, чтобы получить путь <code>&quot;current/file.txt&quot;</code> в *nix или <code>&quot;current\file.txt&quot;</code> в Windows пишут <code>os.path.join(&quot;current&quot;, &quot;file.txt&quot;)</code>. И вот то же самое можно сделать с <code>Path</code> таким образом: <code>Path(&quot;current&quot;, &quot;file.txt&quot;)</code>. Импортировали <code>Path</code> и удобно читаем файл:</p>
  <pre id="qKYh" data-lang="python">import json
from pathlib import Path

from django.conf import settings

users = json.loads(Path(settings.BASE_DIR, &quot;users.json&quot;).read_text())</pre>
  <p id="ZzFk">Аналогичное без <code>Path</code>:</p>
  <pre id="W5ZI" data-lang="python">import json
import os

from django.conf import settings

with open(os.path.join(settings.BASE_DIR, &quot;users.json&quot;), &quot;r&quot;) as f:
    users = json.load(f)</pre>
  <p id="W5ZI">Первый вариант с Path мне нравится определённо больше.</p>
  <p id="u6wd">Кстати, можно и так пути склеивать (аналогично будет подставляться правильный разделитель директорий для текущей ОС):</p>
  <pre id="ew96" data-lang="python">html_path = Path(&quot;www&quot;) / &quot;html&quot;  # &quot;www/html&quot; in *nix</pre>
  <p id="aGwt">Вообще в <code>pathlib</code> удобностей много, например:</p>
  <ul id="MV2m">
    <li id="Sf8h">Получить текущую директорию: <code>Path.cwd()</code> (от current working directory)</li>
    <li id="ebaW">Проверить существование файла/директории: <code>Path.exists(&quot;/home/user/filename&quot;)</code></li>
    <li id="ko70">Найти все <code>.py</code> файлы в текущей директории на любом уровне вложенности: <code>Path(&quot;.&quot;).glob(&quot;**/*.py&quot;)</code></li>
    <li id="MpTz">Итерироваться по директории: <code>Path(&quot;./dir&quot;).iterdir()</code></li>
    <li id="YIq6">Получить родителя директории: <code>Path(&quot;/var/www/html/file.txt&quot;).parent</code>, результатом будет путь <code>&quot;/var/www/html/&quot;</code>. Подняться на 3 уровня вверх: <code>Path(&quot;/var/www/html/file.txt&quot;).parents[2]</code>, результатом будет путь: <code>/var</code>.</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@t0digital/obsidian.md</guid><link>https://teletype.in/@t0digital/obsidian.md?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital</link><comments>https://teletype.in/@t0digital/obsidian.md?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital#comments</comments><dc:creator>t0digital</dc:creator><title>Obsidian — лучший софт для ведения заметок</title><pubDate>Mon, 02 May 2022 12:16:53 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/25/ad/25adc52f-ffc0-4aa3-973e-0d4d5c3bcf17.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/bb/c6/bbc62325-e18d-4776-8eb0-f5b2037655ff.png"></img>Воодушевлён Obsidian! Просто воодушевлён. Крутейшая программа.]]></description><content:encoded><![CDATA[
  <p id="cIkX">Воодушевлён <a href="https://obsidian.md/" target="_blank">Obsidian</a>! Просто воодушевлён. Крутейшая программа.</p>
  <figure id="TdhO" class="m_retina">
    <img src="https://img4.teletype.in/files/bb/c6/bbc62325-e18d-4776-8eb0-f5b2037655ff.png" width="1044" />
    <figcaption>Obsidian с темой Minimal в варианте Solarized</figcaption>
  </figure>
  <p id="zeCf">Софт для написания и ведения текстовых заметок для меня — это очень важная часть моей жизни. Важнейшая. Надо что-то сохранить, чтобы потом быстро найти? Записал в заметки. Часто требующаяся информация, реквизиты и тп? Записал в заметки. Надо написать сценарий на Youtube или текст поста? Конечно, в заметки. Накидать туториал по настройке какой-то штуки? Привет, заметки. Написать партнёрам схему интеграции с нами? Заметки, расшарить ссылку, готово.</p>
  <p id="1y73">Пользовался долго Evernote, потом Notion, но, как минимум, пользоваться ими сейчас в РФ небезопасно, так как ты не владеешь своими данными, можно проснуться однажды и прочесть новость, что Evernote/Notion/кто угодно принял решение остановить работу с россиянами и заодно удалить к херам собачьим все их данные, потому что как бы ну а чо нет. <a href="https://www.youtube.com/c/%D0%98%D0%B3%D0%BE%D1%80%D1%8C%D0%A0%D1%8B%D0%B1%D0%B0%D0%BA%D0%BE%D0%B2" target="_blank">Рыбаков</a> рассказывал (и у меня нет причин ему не верить), как люди потеряли доступ к своим моделям и чертежам в САПРах, которые лежали в корпоративных облаках. Вжух и результаты многолетней работы испарились:)</p>
  <p id="WdQn">Поэтому сейчас надо хранить важные данные локально. Заметки — <a href="https://ru.wikipedia.org/wiki/Markdown" target="_blank">Markdown</a> файлы, для синхронизации которых можно использовать, например, git или <a href="https://syncthing.net/" target="_blank">Syncthing</a>. Такие файлы можно писать и читать в любом текстовом редакторе, абсолютно любом.</p>
  <p id="yX8s">Но — хочется ведь удобно. Чтобы эстетически приятно. Чтобы шрифты кириллические и английские нормально работали и тп.</p>
  <figure id="Vno8" class="m_retina">
    <img src="https://img4.teletype.in/files/bf/f6/bff6a7b8-108d-4432-bcf8-1ab3e41db586.png" width="1044" />
  </figure>
  <p id="r9US">И я вчера потратил много времени, перебирая разные варианты. Typora, iA Writer, Zettlr, Bear, Ulysses и много других. Лучший вариант с гигантским отрывом — <a href="https://obsidian.md/" target="_blank">Obsidian</a>. Вообще эта программа позиционируется для ведения картотеки по модной нынче методологии Zettelkasten, но это всё опционально. У Obsidian просто есть всё нужное лично мне и оно отлично работает.</p>
  <h2 id="cRwB">Фичи</h2>
  <p id="lbaf">Vim-mode включается просто из настроек без плагинов:)</p>
  <figure id="H5BB" class="m_retina">
    <img src="https://img4.teletype.in/files/33/02/3302a41d-0de0-40a4-abc7-4255d39e19ca.png" width="834" />
    <figcaption>Настройки Obsidian</figcaption>
  </figure>
  <p id="Dy8M">Много тем. Я поставил тему Minimal и светлый вариант интерфейса, на первом скриншоте выше.</p>
  <p id="NUGC">Корректно работающая подстветка синтаксиса разных языков программирования в блоках с кодом!</p>
  <p id="9Rhp">Экспорт заметки в опрятно и приятно выглядящий PDF документ, который можно отправить кому-то файлом.</p>
  <figure id="5Cy4" class="m_retina">
    <img src="https://img1.teletype.in/files/46/05/4605d403-59b9-4462-b2b4-c9460b8f893f.png" width="1151" />
    <figcaption>Заметка из Obsidian, экспортированная в PDF</figcaption>
  </figure>
  <p id="fCHY">Структура заметок — любая, хоть плоская, хоть сам разнеси по папкам, хоть по тегам. Заметки можно связывать друг с другом, образуя граф (это для картотеки, кому нужно — я пока не планирую строить именно картотеку).</p>
  <figure id="HPQ9" class="m_retina">
    <img src="https://img3.teletype.in/files/25/d3/25d327f8-8be9-497f-b109-efb7402c24d3.png" width="942" />
    <figcaption>Заметки — обычные текстовые файлы, отображаемые в файловом менеджере</figcaption>
  </figure>
  <p id="hsxy">Директориями и md файлами можно управлять удобно из командной строки инструментами *nix или любыми скриптами, скажем, Python. Если понадобится с файлами пакетно что-то сделать — да пожалуйста. Всё в твоих руках.</p>
  <p id="r7hC">Так заметки это просто текст, который индексируется в том числе родным инструментом Mac OS, заметки можно искать просто в <a href="https://ru.wikipedia.org/wiki/Spotlight_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0)" target="_blank">Spotlight</a>!</p>
  <figure id="82io" class="m_retina">
    <img src="https://img3.teletype.in/files/60/74/60742222-ab67-42b0-b4f7-f61e26503add.png" width="769.5" />
    <figcaption>Поиск заметок в родном Spotlight Mac OS</figcaption>
  </figure>
  <p id="VRVy">Есть поиск заметок и в Obsidian и он отлично работает.</p>
  <p id="8rkv">Синхронизируй заметки как угодно, например, с помощью <a href="https://syncthing.net/" target="_blank">Syncthing</a>.</p>
  <p id="9YEU">Много настроек, реально много настроек.</p>
  <p id="w4Dv">Работает на Electron, но работает хорошо — быстрый запуск, есть hotkeys, не вижу тормозов (во всяком случае пока).</p>
  <p id="eLnP">Есть мобильное приложение.</p>
  <p id="qJVz">Очень доволен. Буду переносить заметки сюда.<br /></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@t0digital/communication-culture</guid><link>https://teletype.in/@t0digital/communication-culture?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital</link><comments>https://teletype.in/@t0digital/communication-culture?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital#comments</comments><dc:creator>t0digital</dc:creator><title>Как спрашивать, чтобы вам помогали</title><pubDate>Fri, 22 Apr 2022 12:06:37 GMT</pubDate><description><![CDATA[Замечаю, что молодые ребята часто не умеют общаться. Культура общения — это важно. Что она включает? Уважение к собеседнику.]]></description><content:encoded><![CDATA[
  <p id="No10">Замечаю, что молодые ребята часто не умеют общаться. Культура общения — это важно. Что она включает? Уважение к собеседнику.</p>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="ZxuW">Мне что-то нужно от человека, я хочу его о чём-то спросить или попросить помощи. Моя задача — сделать так, чтобы ответить мне или помочь было как можно легче и приятнее. Потому что, во-первых, мне хочется, чтобы мне помогли, во-вторых, потому что я не хочу создавать дополнительных ненужных сложностей человеку. Эти два пункта, очевидно, связаны. Чем легче мне помочь, тем выше вероятность успеха.</p>
  </section>
  <p id="YRMI">Тормознуть на улице бегущего куда-то человека и неторопливым тоном начать грузить: «<em>Извини, что отвлекаю, но тут такое дело, вопрос очень важный, прошу понять, тут просто дело в том, что мне написала тетя Маша и попросила привезти варенье, она просто очень любит варенье, ну вы знаете про варенье, да? Такая сладкая вкусная штука. Ну вот, и она в общем варенье попросила привезти, клубничное. Она любит. Клубника, говорит, ваще полезная, хорошая, мы, кстати, на даче выращиваем. У нас дача тут в соседнем регионе, там прям хорошо. Птички летом поют, клубничка опять же. Ну вот. И тетя Маша, она на улице Ленина живёт вроде, хотя я чёт и не уверен. Подскажите, пожалуйста, вы тетю Машу не знаете? Нет? Ну плоооохо! Ну а хотя бы где тут улица Ленина?</em>»</p>
  <p id="en9x">Такой монолог вывалить прохожему — это ненормально. Почему?</p>
  <ol id="JGZH">
    <li id="3xm8">Тонна лишней информации. Зачем человеку знать ее? Это упрощает или усложняет ему жизнь, увеличивает или уменьшает желание помочь?</li>
    <li id="oy6c">Долго. Вопрошающий не ценит время собеседника, проявляя тем самым к нему неуважение.</li>
    <li id="T0In">Как сделать помощь вам легкой? Посмотреть самому на карте, где улица Ленина, и спросить стоящего на светофоре человека, не бегущего сейчас, короткий вопрос: «<em>Подскажите, а улица Ленина это вот за тем домом, да?</em>»</li>
  </ol>
  <h2 id="Bosb">Помочь с кодом</h2>
  <p id="w4Eq">Если вы просите помочь с кодом — сделайте так, чтобы помочь вам было легко. Если ваш вопрос про вот эти 3 строки кода, незачем отправлять человеку проект на сотни строк кода. Зачем ему это знать? Никто не захочет вникать в то, что является лишним.</p>
  <p id="px1b">Потрудитесь потратить время, сформулировав свой вопрос предельно чётко и понятно, сделайте всё возможное, чтобы помогающему было предельно очевидно, что вы спрашиваете.</p>
  <p id="h86w">Потрудитесь, чтобы смысл кода был понятен. Подумайте над именованием переменных в коде. Отформатиуйте его нормально.</p>
  <pre id="s5Z2" data-lang="python">def pv(v, p):
    if p == &quot;f&quot;:
        return v &gt;= 56.5
    elif p == &quot;m&quot;:
        return v&gt;= 61.5</pre>
  <p id="31wa">Вы действительно думаете, что кто-то захочет в этом копаться? Это только вы обладаете тайным знанием, что <code>pv</code> — это (внезапно!) пенсионный возраст, <code>v</code> это возраст, а <code>p</code> это пол.</p>
  <p id="3Vfo">Вот так — не будет ли проще помогающему понять, о чём тут речь?</p>
  <pre id="KijW" data-lang="python">from typing import Literal

def is_person_retiree(age_years: int, sex: Literal[&quot;f&quot;, &quot;m&quot;]):
    if sex == &quot;f&quot;:
        return age_years &gt;= 56.5
    elif sex == &quot;m&quot;:
        return age_years&gt;= 61.5</pre>
  <p id="BGGl">Да, надо подумать. Возможно залезть в русско-английский <a href="https://www.deepl.com/ru/translator" target="_blank">переводчик</a>. Натыкать больше буковок на клавиатуре. Жизнь боль.</p>
  <h2 id="J3JS">Дайте необходимую информацию</h2>
  <p id="6UoS">Информации, которую вы дали, должно быть ровно столько, сколько нужно. Если вопрос про 3 строки кода — незачем давать из 500. Но с другой стороны — 2 строки будет мало, и 1 мало. Вопрос по трем, дайте три.</p>
  <p id="QJE2">Лишняя информация не нужна. Необходимая информация нужна. Потрудитесь отделить одно от другого и дать всё нужное и не больше.</p>
  <h2 id="iIKK">Голосовые сообщения</h2>
  <p id="HqRH">Отправить голосовуху с вопросом незнакомому человеку — это из той же серии. Слушать 2 минуты охи-вздохи-чавки или прочесть 3 строки четкого вопроса текстом — что увеличит шанс, что вам ответят? </p>
  <p id="h8Iu">Голосовуха вообще это хоть как-то может быть оправдано в единственном варианте, когда руководитель что-то просит сделать своего сотрудника и пишет голосовуху. Потому что время руководителя дороже времени сотрудника. Возможно для родных или старых друзей это допустимо.</p>
  <p id="qiHI">А когда вы пишете незнакомому человеку вопрос/просьбу голосовухой, то, получается, что вы свое время цените сильнее, чем время того, кого просите о помощи. Когда мне такое приходит, я не ленюсь кидать в ЧС сразу. Умного это чему-то научит, глупый пусть обижается.</p>
  <h2 id="ZKOk">«+»</h2>
  <p id="6p3p">Или вот, пишет человек с вопросом. Было время почитать, пока ждал заказ в кафе. Ответил ему уточняющим вопросом, он мне в ответ прислал, цитата, «+». Плюсик. То есть я нашел время прочесть его 5 абзацев текста, задать 2 уточняющих вопроса, а вопрошающий не нашел времени, чтобы хотя бы написать «да» вместо «+»?</p>
  <h2 id="oWvE">Сразу к делу</h2>
  <p id="reXs"><a href="https://nometa.xyz/" target="_blank">https://nometa.xyz/</a></p>
  <p id="LXP0">Отвратительнейшее начало диалога с незнакомым человеком: «<em>Привет, можно спросить?</em>». Просто потеря времени, см. ссылку выше. Надо писать сразу по делу. «<em>Привет, слушай, а как правильно сделать ____? Прочел много статей уже, но что-то никак не могу разобраться. Буду благодарен, если кинешь ссылкой.</em>»</p>
  <p id="2edD">И без лишней информации. Только то, что относится напрямую к вопросу, кратко и по сути.</p>
  <h2 id="IveP">Сначала сам</h2>
  <p id="QIqb">Или пишут, условно — а у меня машина не едет. Ты задаешь тысячу уточняющих вопросов типа есть ли бензин (да вроде есть), не украли ли колеса (да ну не должны были) и тп, и через пол часа выясняется, что у человека и машины-то нет, потому и не едет. Не надо так. Надо сначала провести какую-то умственную работу самому, прежде чем других грузить своими проблемами.</p>
  <p id="p9TZ">Есть вопрос? А в гугл ходил за решением, точно ходил? А сколько времени за поиском и чтением ссылок в гугле провел, 30 сек или 5 часов?</p>
  <p id="roK9">Очевидно, что сначала надо проработать свой вопрос самому, и только потом обратиться за помощью к кому-то, кто абсолютно негарантированно, но возможно таки поможет. Если общаться умеете и спрашивать.</p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7Sen">Несмотря на то, что айтишники во многом представляются обывателям существами молчаливыми, замкнутыми и странными, стоит понимать, что человеки — животные социальные, и многие вопросы решаются во взаимодействии с другими людьми гораздо быстрее, проще и приятнее. Писать код это хорошо, но уметь общаться — просто необходимо. Основа эффективной коммуникации, и рабочей, и семейной, и дружеской, основа, без которой не будет остального — простое банальное уважение к собеседнику. Всё.<br /></p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@t0digital/imperative-and-declarative-approach2</guid><link>https://teletype.in/@t0digital/imperative-and-declarative-approach2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital</link><comments>https://teletype.in/@t0digital/imperative-and-declarative-approach2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=t0digital#comments</comments><dc:creator>t0digital</dc:creator><title>Императивный и декларативный подход</title><pubDate>Sat, 09 Apr 2022 19:43:32 GMT</pubDate><description><![CDATA[Ревьюил сейчас финальные проекты ребят по курсу и много говорил о декларативном и императивном подходе в программировании. Понимаете разницу?]]></description><content:encoded><![CDATA[
  <p id="VZQo">Ревьюил сейчас финальные проекты ребят по курсу и много говорил о декларативном и императивном подходе в программировании. Понимаете разницу?</p>
  <p id="raH9">На самом деле очень много можно уложить в применение этих подходов.</p>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6ZM0">Мне нравится пример с бутербродом. Когда вы говорите товарищу — дружище, так-так, бросай всё, поднимайся, иди-ка на кухню, левой рукой открывай холодильник, а правой доставай колбасу, затем закрывай холодос, бери нож, отрезай кусок от колбасы, потом от батона, клади колбасу поверх батона и тащи это всё получившееся довольному мне — то вот он императивный подход. Товарищ скорее всего такого не одобрит. Да и вы сами тоже опупеете это всё в таком виде произносить.<br /><br />А вот фраза вроде «сваргань-ка мне бутерброд, пжалста» — это уже декларативный подход. Товарищ сам вполне разберётся, как обращаться с холодильником, батоном и колбасой. Ему не пришлось выслушивать дурацкую тираду, вам не пришлось её произносить, окружающим не захотелось вас поколотить за занудство. Прекрасно.</p>
  </section>
  <p id="RVbb">Декларативный подход — вы декларируете то, что вам надо, не погружаетесь в детали реализации.</p>
  <p id="uY6n">Если переносить это на программирование, то, скажем, задачу распарсить некий запрос на заголовок, содержащий только первую строку, и оставшееся тело запроса, можно разными способами. Можно так — даже не вынося эту логику парсинга в отдельную функцию, разместя её в составе какой-то большей функции обработки запроса:</p>
  <pre id="HdaY" data-lang="python">def process_client_request(request: str):
    &quot;&quot;&quot;какой-то длинный код тут...&quot;&quot;&quot;
    &quot;&quot;&quot;teletype.in не умеет в комменты с символа диеза...&quot;&quot;&quot;
    delimeter_position = request.find(&quot;\n&quot;)
    header = request[:delimeter_position]
    body = request[delimeter_position:]
    &quot;&quot;&quot;и потом тоже какой-то длинный код...&quot;&quot;&quot;</pre>
  <p id="ExIN">Грустно? Ну невесело. Много сложного кода. Какие-то индексы находятся, слайсы по ним ищутся. Там, где сложный код — больше вероятность ошибок, сложнее поддерживать код, дольше, дороже, неприятнее.</p>
  <p id="avvo">Когда мы с <code>find</code> ищем позицию в строке какой-то подстроки — то непонятно, зачем мы это делаем. Может, мы хотим проверить вхождение подстроки в строку. Может, мы хотим обрезать строку. Может, хотим разбить её. Может ещё что-то. Чёрт его знает, надо читать окружающий код, чтобы понять нас. Это сложно. Надо думать. Думать — тяжело.</p>
  <p id="J3Jt">Так лучше:</p>
  <pre id="Y2hZ" data-lang="python">def process_client_request(request: str):
    &quot;&quot;&quot;какой-то длинный код тут...&quot;&quot;&quot;
    header, body = request.split(&quot;\n&quot;, 1)
    &quot;&quot;&quot;и потом тоже какой-то длинный код...&quot;&quot;&quot;</pre>
  <p id="ArFw">А почему так лучше?</p>
  <p id="bZP4">Потому что <code>split</code> это понятный метод разбивки строки на подстроки, это декларативный подход, скрывающий реализацию. Это — декларативно и просто, и думать не надо, чтобы понять, что в коде происходит.</p>
  <p id="3TRH">А можно ещё проще, ещё декларативнее:</p>
  <pre id="uwny" data-lang="python">def parse_request(request: str) -&gt; tuple[str, str]:
    return request.split(&quot;\n&quot;, 1)

def process_client_request(request: str):
    &quot;&quot;&quot;какой-то длинный код тут...&quot;&quot;&quot;
    header, body = parse_request(request)
    &quot;&quot;&quot;и потом тоже какой-то длинный код...&quot;&quot;&quot;</pre>
  <p id="vSHD">Кода стало больше — но код стал лучше.</p>
  <ol id="LkRI">
    <li id="ZNUT">Читать стало проще, приятнее, понятнее. Читая строку <code>header, body = parse_request(request)</code>, мы понимаем, что тут происходит. Тут происходит парсинг запроса, а как именно он там этот парсинг происходит сие есть дело десятое, при желании можно перейти в вызываемую функцию и почитать.</li>
    <li id="cHQA">Ещё один плюс — возможность переиспользовать <code>parse_request</code> ещё где-то.</li>
    <li id="O17L">И ещё один — если задача изменится и нам надо будет парсить запрос как-то иначе, нам не надо будет искать этот код где-то в дебрях другого кода, он лежит себе отдельно в своей отдельной маленькой великолепной функции.</li>
  </ol>
  <p id="QfQZ">Прекрасно.</p>
  <p id="rDCn">А если ещё <a href="https://docs.python.org/3/library/dataclasses.html" target="_blank">dataclass</a> или <a href="https://docs.python.org/3/library/typing.html#typing.NamedTuple" target="_blank">NamedTuple</a> вместо <code>tuple</code> использовать для распаршенного запроса — так вообще будет песня:)</p>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Ob0R">Занимаясь написанием кода, задумывайтесь о том, какой код вы сейчас пишете — императивный или декларативный?<br /><br />Как сделать этот код более декларативным? Как упростить его?</p>
  </section>

]]></content:encoded></item></channel></rss>