1 added
1 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>7 апр 2025</li>
2
<ul><li>7 апр 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>IT-дайджест: главные новости марта 2025 года.</p>
4
</ul><p>IT-дайджест: главные новости марта 2025 года.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Востоковед, интересующийся IT. В прошлом редактор раздела "Системный блок" журнала "Fакел", автор журналов Computer Gaming World RE, Upgrade Special, руководитель веб-ресурсов компании 1С-Softclub.</p>
6
<p>Востоковед, интересующийся IT. В прошлом редактор раздела "Системный блок" журнала "Fакел", автор журналов Computer Gaming World RE, Upgrade Special, руководитель веб-ресурсов компании 1С-Softclub.</p>
7
<p>Сегодня в нашей подборке: создатели Django делятся советами по эффективной работе с LLM и развенчивают миф о непогрешимости опытных инженеров; разработчик Chrome рисует портрет идеального кандидата; "злой марсианин" раскрывает секреты опенсорс-проектов.</p>
7
<p>Сегодня в нашей подборке: создатели Django делятся советами по эффективной работе с LLM и развенчивают миф о непогрешимости опытных инженеров; разработчик Chrome рисует портрет идеального кандидата; "злой марсианин" раскрывает секреты опенсорс-проектов.</p>
8
<p><strong>Содержание</strong></p>
8
<p><strong>Содержание</strong></p>
9
<ul><li><a>Как эффективно использовать LLM для написания кода: советы автора Django</a></li>
9
<ul><li><a>Как эффективно использовать LLM для написания кода: советы автора Django</a></li>
10
<li><a>Секреты Git от инженера Pinterest</a></li>
10
<li><a>Секреты Git от инженера Pinterest</a></li>
11
<li><a>Как сделать опенсорс-проект популярным</a></li>
11
<li><a>Как сделать опенсорс-проект популярным</a></li>
12
<li><a>Как выделиться на собеседовании: советы ведущего разработчика Google</a></li>
12
<li><a>Как выделиться на собеседовании: советы ведущего разработчика Google</a></li>
13
<li><a>Skype - всё, но дело его живёт</a></li>
13
<li><a>Skype - всё, но дело его живёт</a></li>
14
<li><a>React-библиотеки на все случаи жизни</a></li>
14
<li><a>React-библиотеки на все случаи жизни</a></li>
15
<li><a>Храните ценности в Markdown</a></li>
15
<li><a>Храните ценности в Markdown</a></li>
16
<li><a>Чем хорош "нормальный" инженер и почему он нужен вашей команде</a></li>
16
<li><a>Чем хорош "нормальный" инженер и почему он нужен вашей команде</a></li>
17
<li><a>Опенсорс - это дорого, но полезно</a></li>
17
<li><a>Опенсорс - это дорого, но полезно</a></li>
18
<li><a>Необычные сайты, которые стоит посетить</a></li>
18
<li><a>Необычные сайты, которые стоит посетить</a></li>
19
<li><a>Интересное на Reddit</a></li>
19
<li><a>Интересное на Reddit</a></li>
20
</ul><p>В <a>репозитории</a>Саймона Уиллисона находится более 80 приложений, которые он разработал с помощью ИИ. Саймон - один из создателей Django, и в своём блоге он <a>поделился</a>принципами работы с LLM:</p>
20
</ul><p>В <a>репозитории</a>Саймона Уиллисона находится более 80 приложений, которые он разработал с помощью ИИ. Саймон - один из создателей Django, и в своём блоге он <a>поделился</a>принципами работы с LLM:</p>
21
<ul><li><strong>Установите разумные ожидания.</strong>Не ждите, что модель сделает всё за вас. Используйте LLM как усиление своих способностей. Например, вместо "напиши мне полное приложение для управления задачами" лучше попросить "помоги составить структуру базы данных для приложения управления задачами".</li>
21
<ul><li><strong>Установите разумные ожидания.</strong>Не ждите, что модель сделает всё за вас. Используйте LLM как усиление своих способностей. Например, вместо "напиши мне полное приложение для управления задачами" лучше попросить "помоги составить структуру базы данных для приложения управления задачами".</li>
22
<li><strong>Просите у модели варианты решений.</strong>Начинайте с открытых вопросов, чтобы быстрее найти подходящее решение. Вместо "Как написать функцию для сортировки списка" спросите "Какие есть способы отсортировать список чисел по возрастанию в Python?"</li>
22
<li><strong>Просите у модели варианты решений.</strong>Начинайте с открытых вопросов, чтобы быстрее найти подходящее решение. Вместо "Как написать функцию для сортировки списка" спросите "Какие есть способы отсортировать список чисел по возрастанию в Python?"</li>
23
<li><strong>Тестируйте код.</strong>Сгенерированный код всегда требует проверки. Поэтому приготовьте переписывать код до тех пор, пока не получите приемлемый результат. Если вы просите LLM написать функцию для работы с датами, обязательно проверьте граничные случаи: високосные годы, смена часовых поясов, переход через полночь.</li>
23
<li><strong>Тестируйте код.</strong>Сгенерированный код всегда требует проверки. Поэтому приготовьте переписывать код до тех пор, пока не получите приемлемый результат. Если вы просите LLM написать функцию для работы с датами, обязательно проверьте граничные случаи: високосные годы, смена часовых поясов, переход через полночь.</li>
24
<li><strong>Используйте инструменты для запуска кода.</strong>Попробуйте ChatGPT Code Interpreter, Claude Artifacts и ChatGPT Canvas. Например, вы можете попросить Code Interpreter написать и протестировать функцию для анализа CSV-файла, и он не только создаст код, но и покажет результаты его выполнения прямо в чате.</li>
24
<li><strong>Используйте инструменты для запуска кода.</strong>Попробуйте ChatGPT Code Interpreter, Claude Artifacts и ChatGPT Canvas. Например, вы можете попросить Code Interpreter написать и протестировать функцию для анализа CSV-файла, и он не только создаст код, но и покажет результаты его выполнения прямо в чате.</li>
25
<li><strong>Играйтесь с LLM.</strong>Попробуйте создать генератор названий для космических кораблей в стиле Илона Маска. Чем больше вы экспериментируете, тем лучше понимаете возможности модели.</li>
25
<li><strong>Играйтесь с LLM.</strong>Попробуйте создать генератор названий для космических кораблей в стиле Илона Маска. Чем больше вы экспериментируете, тем лучше понимаете возможности модели.</li>
26
</ul><p>Уиллисон напоминает, что LLM не заменит человеческую интуицию и опыт в программировании, но может значительно ускорить разработку. Вместо того чтобы тратить час на поиск оптимального алгоритма сортировки в документации, разработчик может за минуту получить готовое решение от LLM и сосредоточиться на более важных задачах проекта. Но он не должен перекладывать эти важные задачи на LLM.</p>
26
</ul><p>Уиллисон напоминает, что LLM не заменит человеческую интуицию и опыт в программировании, но может значительно ускорить разработку. Вместо того чтобы тратить час на поиск оптимального алгоритма сортировки в документации, разработчик может за минуту получить готовое решение от LLM и сосредоточиться на более важных задачах проекта. Но он не должен перекладывать эти важные задачи на LLM.</p>
27
<p>Ведущий разработчик Pinterest Джордан Катлер поделился малоизвестными командами Git, которые ежедневно помогают ему экономить время и силы. Возможно, они пригодятся и вам.</p>
27
<p>Ведущий разработчик Pinterest Джордан Катлер поделился малоизвестными командами Git, которые ежедневно помогают ему экономить время и силы. Возможно, они пригодятся и вам.</p>
28
<p><strong>Переключение на предыдущую ветку.</strong>Вам необязательно каждый раз вводить полное название ветки:</p>
28
<p><strong>Переключение на предыдущую ветку.</strong>Вам необязательно каждый раз вводить полное название ветки:</p>
29
git checkout jcutler/my-feature-branch<p>Можно использовать короткую команду:</p>
29
git checkout jcutler/my-feature-branch<p>Можно использовать короткую команду:</p>
30
git checkout -<p>Подобный паттерн подойдут и для других популярных команд:</p>
30
git checkout -<p>Подобный паттерн подойдут и для других популярных команд:</p>
31
<ul><li>git merge - - объединяет текущую ветку с предыдущей;</li>
31
<ul><li>git merge - - объединяет текущую ветку с предыдущей;</li>
32
<li>cd - - возвращает вас в предыдущую директорию.</li>
32
<li>cd - - возвращает вас в предыдущую директорию.</li>
33
</ul><p><strong>Отладка с помощью</strong><strong>git bisect</strong><strong>.</strong>Для начала откатитесь к моменту, когда всё работало. Для этого удобно использовать команду:</p>
33
</ul><p><strong>Отладка с помощью</strong><strong>git bisect</strong><strong>.</strong>Для начала откатитесь к моменту, когда всё работало. Для этого удобно использовать команду:</p>
34
git checkout HEAD@{1.week.ago}<p>Вместо 1.week.ago вы можете указать другой интервал. После этого найдите коммит, который сломал проект. Если между рабочим и нерабочим состоянием много коммитов, выручит бинарный поиск:</p>
34
git checkout HEAD@{1.week.ago}<p>Вместо 1.week.ago вы можете указать другой интервал. После этого найдите коммит, который сломал проект. Если между рабочим и нерабочим состоянием много коммитов, выручит бинарный поиск:</p>
35
git bisect start git bisect bad <коммит_с_багом> git bisect good <коммит_без_бага><p>Git сам найдёт середину и предложит проверить, есть ли там ошибка. Если ошибки больше нет, введите команду:</p>
35
git bisect start git bisect bad <коммит_с_багом> git bisect good <коммит_без_бага><p>Git сам найдёт середину и предложит проверить, есть ли там ошибка. Если ошибки больше нет, введите команду:</p>
36
git bisect good<p>Или другую команду, если ошибка осталась:</p>
36
git bisect good<p>Или другую команду, если ошибка осталась:</p>
37
git bisect bad<p>Если хотите, весь процесс можно автоматизировать с помощью скрипта. Ниже пример записи, а сам скрипт можно посмотреть в <a>документации</a>:</p>
37
git bisect bad<p>Если хотите, весь процесс можно автоматизировать с помощью скрипта. Ниже пример записи, а сам скрипт можно посмотреть в <a>документации</a>:</p>
38
git bisect run {скрипт}<p><strong>Поиск коммитов с конкретной строкой</strong><strong>git log -G "regex"</strong><strong>.</strong>С помощью этой команды вы можете найти все коммиты, где встречается определённый текст или регулярное выражение. Например, найдём все коммиты, в которых файл package.json содержит слово "next":</p>
38
git bisect run {скрипт}<p><strong>Поиск коммитов с конкретной строкой</strong><strong>git log -G "regex"</strong><strong>.</strong>С помощью этой команды вы можете найти все коммиты, где встречается определённый текст или регулярное выражение. Например, найдём все коммиты, в которых файл package.json содержит слово "next":</p>
39
git log -G '"next"'-- package.json<p><strong>Избежание конфликтов слияния</strong><strong>git merge -X theirs</strong><strong>.</strong>Эта команда полезна, если вы заранее знаете, изменения из какой ветки должны примениться в конфликтных местах. Предположим, у вас три ветки:</p>
39
git log -G '"next"'-- package.json<p><strong>Избежание конфликтов слияния</strong><strong>git merge -X theirs</strong><strong>.</strong>Эта команда полезна, если вы заранее знаете, изменения из какой ветки должны примениться в конфликтных местах. Предположим, у вас три ветки:</p>
40
master → branch-A → branch-B<p>Допустим, вы работаете в ветке branch-B и хотите, чтобы при слиянии изменения из branch-A имели приоритет:</p>
40
master → branch-A → branch-B<p>Допустим, вы работаете в ветке branch-B и хотите, чтобы при слиянии изменения из branch-A имели приоритет:</p>
41
git merge branch-A -X theirs<p>Или наоборот, если нужно оставить приоритет за текущей веткой:</p>
41
git merge branch-A -X theirs<p>Или наоборот, если нужно оставить приоритет за текущей веткой:</p>
42
git merge branch-A -X ours<p>Ведущий инженер "<a>Злых марсиан</a>" Андрей Ситник занимается опенсорс-разработкой уже более 20 лет. Недавно он <a>поделился</a>своими рекомендациями о том, как сделать проект популярным. Рассказываем.</p>
42
git merge branch-A -X ours<p>Ведущий инженер "<a>Злых марсиан</a>" Андрей Ситник занимается опенсорс-разработкой уже более 20 лет. Недавно он <a>поделился</a>своими рекомендациями о том, как сделать проект популярным. Рассказываем.</p>
43
<p><strong>Не начинайте опенсорс ради славы.</strong>Если хотите популярности, выступайте лучше на конференциях или пишите статьи. Опенсорс редко делает людей знаменитыми - например, у Redux и React Router около 60 тысяч звёзд на GitHub, а у Тима Дорра, мейнтейнера Redux, всего около 5 тысяч подписчиков в X.</p>
43
<p><strong>Не начинайте опенсорс ради славы.</strong>Если хотите популярности, выступайте лучше на конференциях или пишите статьи. Опенсорс редко делает людей знаменитыми - например, у Redux и React Router около 60 тысяч звёзд на GitHub, а у Тима Дорра, мейнтейнера Redux, всего около 5 тысяч подписчиков в X.</p>
44
<p><strong>Не создавайте проект ради строчки в резюме.</strong>Если нужен опыт для портфолио, лучше внесите вклад в крупный репозиторий - исправляйте баги или улучшайте документацию. Опенсорс - это про изменение мира:</p>
44
<p><strong>Не создавайте проект ради строчки в резюме.</strong>Если нужен опыт для портфолио, лучше внесите вклад в крупный репозиторий - исправляйте баги или улучшайте документацию. Опенсорс - это про изменение мира:</p>
45
<p>"Лучшая причина участвовать в опенсорсе - желание что-то изменить. Я создавал PostCSS с целью разнообразить инструменты для работы с CSS, сделать экосистему CSS-решений удобнее. И это получилось!"</p>
45
<p>"Лучшая причина участвовать в опенсорсе - желание что-то изменить. Я создавал PostCSS с целью разнообразить инструменты для работы с CSS, сделать экосистему CSS-решений удобнее. И это получилось!"</p>
46
<p>Формула успеха по Ситнику выглядит так:</p>
46
<p>Формула успеха по Ситнику выглядит так:</p>
47
<p>"Популярность разработчика + продвижение + выгода для пользователей + удача = популярность проекта".</p>
47
<p>"Популярность разработчика + продвижение + выгода для пользователей + удача = популярность проекта".</p>
48
<p>Разработчики редко выбирают инструменты рационально и редко детально изучают описание. Чаще они ориентируются на количество звёзд и бегло просматривают README. Именно поэтому проекту нужны не только хорошая функциональность, но и грамотная подача.</p>
48
<p>Разработчики редко выбирают инструменты рационально и редко детально изучают описание. Чаще они ориентируются на количество звёзд и бегло просматривают README. Именно поэтому проекту нужны не только хорошая функциональность, но и грамотная подача.</p>
49
<p><strong>Развивайте социальные сети и сохраняйте правильный настрой.</strong>Создайте и регулярно ведите аккаунты в соцсетях, желательно на английском языке. У Андрея Ситника 56 проектов, но популярными стали только четыре. Помните: любой проект может провалиться, но именно ваша настойчивость способна повысить шансы на успех:</p>
49
<p><strong>Развивайте социальные сети и сохраняйте правильный настрой.</strong>Создайте и регулярно ведите аккаунты в соцсетях, желательно на английском языке. У Андрея Ситника 56 проектов, но популярными стали только четыре. Помните: любой проект может провалиться, но именно ваша настойчивость способна повысить шансы на успех:</p>
50
Из 56 (!) проектов Андрея Ситника "выстрелило" только четыре<em>Изображение:<a>Evil Martians</a></em><p><strong>Уделите внимание README.</strong>Неважно, откуда пользователи узнают о вашем проекте: в итоге большинство приходит в README. Поэтому оформите его так, чтобы потенциальному пользователю сразу было понятно, зачем ему ваш проект. README должен содержать описание проекта, объяснение его пользы и обзор отличий от аналогичных решений.</p>
50
Из 56 (!) проектов Андрея Ситника "выстрелило" только четыре<em>Изображение:<a>Evil Martians</a></em><p><strong>Уделите внимание README.</strong>Неважно, откуда пользователи узнают о вашем проекте: в итоге большинство приходит в README. Поэтому оформите его так, чтобы потенциальному пользователю сразу было понятно, зачем ему ваш проект. README должен содержать описание проекта, объяснение его пользы и обзор отличий от аналогичных решений.</p>
51
<p>Добавьте примеры, скриншоты и документацию. Любое обновление проекта - это возможность рассказать о нём в блоге. Внедрили новую функцию? Напишите пост. Исправили баг? Поделитесь этим в статье.</p>
51
<p>Добавьте примеры, скриншоты и документацию. Любое обновление проекта - это возможность рассказать о нём в блоге. Внедрили новую функцию? Напишите пост. Исправили баг? Поделитесь этим в статье.</p>
52
<p>Однако, прежде чем следовать этим советам, задумайтесь: а правда ли вы хотите популярности? 🤔 Ведь вместе с ней придут и новые проблемы.</p>
52
<p>Однако, прежде чем следовать этим советам, задумайтесь: а правда ли вы хотите популярности? 🤔 Ведь вместе с ней придут и новые проблемы.</p>
53
<p>Руководитель разработки Chrome Эдди Османи,<a>поделился</a>своим видением идеального кандидата на техническом собеседовании.</p>
53
<p>Руководитель разработки Chrome Эдди Османи,<a>поделился</a>своим видением идеального кандидата на техническом собеседовании.</p>
54
<p>Многие программисты часто слышат примерно следующее: "Решайте задачи на LeetCode", "Повторите структуры данных". Всё это полезно, но, по мнению Османи, есть и недооценённые навыки, о которых редко говорят. Именно они помогают выделиться сильнейшим кандидатам.</p>
54
<p>Многие программисты часто слышат примерно следующее: "Решайте задачи на LeetCode", "Повторите структуры данных". Всё это полезно, но, по мнению Османи, есть и недооценённые навыки, о которых редко говорят. Именно они помогают выделиться сильнейшим кандидатам.</p>
55
<p><strong>Будьте открыты в общении.</strong>Сильный кандидат открыто делится своими мыслями, даже если не полностью уверен в них:</p>
55
<p><strong>Будьте открыты в общении.</strong>Сильный кандидат открыто делится своими мыслями, даже если не полностью уверен в них:</p>
56
<ul><li>"Я вижу два подхода к задаче - кратко расскажу про оба";</li>
56
<ul><li>"Я вижу два подхода к задаче - кратко расскажу про оба";</li>
57
<li>"Раньше я не решал похожих задач, но готов разобраться".</li>
57
<li>"Раньше я не решал похожих задач, но готов разобраться".</li>
58
</ul><p>Интервьюеры особенно ценят кандидатов, которые умеют наглядно и без стеснения показать ход своих мыслей.</p>
58
</ul><p>Интервьюеры особенно ценят кандидатов, которые умеют наглядно и без стеснения показать ход своих мыслей.</p>
59
<p><strong>Используйте неопределённость как преимущество.</strong>На собеседованиях часто дают задачи с подвохом, чтобы проверить поведение кандидата в неясных ситуациях. Многие пытаются скрыть своё незнание, но сильный кандидат, напротив, задаёт уточняющие вопросы, превращая неопределённость в продуктивный диалог.</p>
59
<p><strong>Используйте неопределённость как преимущество.</strong>На собеседованиях часто дают задачи с подвохом, чтобы проверить поведение кандидата в неясных ситуациях. Многие пытаются скрыть своё незнание, но сильный кандидат, напротив, задаёт уточняющие вопросы, превращая неопределённость в продуктивный диалог.</p>
60
<p><strong>Оптимизируйте решение постепенно.</strong>Не стремитесь сразу выдать готовый ответ - это распространённая ошибка новичков. В сложных задачах лучше сначала показать рабочее решение, открыто признать его недостатки, а затем шаг за шагом улучшать код:</p>
60
<p><strong>Оптимизируйте решение постепенно.</strong>Не стремитесь сразу выдать готовый ответ - это распространённая ошибка новичков. В сложных задачах лучше сначала показать рабочее решение, открыто признать его недостатки, а затем шаг за шагом улучшать код:</p>
61
<p>"Интервьюеры ценят умение решать сложные задачи больше, чем способность сразу написать идеальный код".</p>
61
<p>"Интервьюеры ценят умение решать сложные задачи больше, чем способность сразу написать идеальный код".</p>
62
<p><strong>Раскрывайтесь как личность.</strong>Компании вроде Google оценивают не только технические навыки кандидатов. Им также важны увлечения, интересы и ценности человека. Сильный кандидат умеет рассказать о себе и объяснить, что именно привлекает его в технологиях.</p>
62
<p><strong>Раскрывайтесь как личность.</strong>Компании вроде Google оценивают не только технические навыки кандидатов. Им также важны увлечения, интересы и ценности человека. Сильный кандидат умеет рассказать о себе и объяснить, что именно привлекает его в технологиях.</p>
63
<p><strong>Используйте свои неудачи.</strong>Многие инженеры избегают разговоров о прошлых ошибках. Однако сильный кандидат открыто обсуждает свои неудачи и показывает, как они стали источником его роста. Например, попробуйте думать так: "В одном из проектов я недооценил важность нагрузочного тестирования, что привело к проблемам при запуске. Это научило меня всегда уделять внимание производительности, и теперь я использую комплексный подход к тестированию в каждом проекте".</p>
63
<p><strong>Используйте свои неудачи.</strong>Многие инженеры избегают разговоров о прошлых ошибках. Однако сильный кандидат открыто обсуждает свои неудачи и показывает, как они стали источником его роста. Например, попробуйте думать так: "В одном из проектов я недооценил важность нагрузочного тестирования, что привело к проблемам при запуске. Это научило меня всегда уделять внимание производительности, и теперь я использую комплексный подход к тестированию в каждом проекте".</p>
64
<p>В начале 2010-х годов Skype был самым популярным в мире приложением для интернет-звонков (300 млн пользователей на пике). Однако к 2023 году его аудитория сократилась до 36 млн человек. Недавно Microsoft<a>объявила</a>о прекращении работы Skype с 5 мая 😢</p>
64
<p>В начале 2010-х годов Skype был самым популярным в мире приложением для интернет-звонков (300 млн пользователей на пике). Однако к 2023 году его аудитория сократилась до 36 млн человек. Недавно Microsoft<a>объявила</a>о прекращении работы Skype с 5 мая 😢</p>
65
<p>Хотя как мессенджер Skype уже давно уступил конкурентам, однако TechCrunch<a>отмечает</a>: именно Skype первым в 2003 году внедрил революционную технологию сквозного шифрования - функцию, которая сегодня стала стандартом безопасности во всех популярных мессенджерах. Поэтому пусть Skype и исчезает, но его передовые идеи продолжают жить, защищая коммуникации миллиардов пользователей.</p>
65
<p>Хотя как мессенджер Skype уже давно уступил конкурентам, однако TechCrunch<a>отмечает</a>: именно Skype первым в 2003 году внедрил революционную технологию сквозного шифрования - функцию, которая сегодня стала стандартом безопасности во всех популярных мессенджерах. Поэтому пусть Skype и исчезает, но его передовые идеи продолжают жить, защищая коммуникации миллиардов пользователей.</p>
66
Домашняя страница Skype в 2004 году<em>Скриншот:<a>Internet Archive</a>/ Skillbox Media</em><p>Инженер Робин Вирух подготовил подборку React-библиотек на 2025 год. Проверьте, возможно, чего-то не хватает в вашей коллекции.</p>
66
Домашняя страница Skype в 2004 году<em>Скриншот:<a>Internet Archive</a>/ Skillbox Media</em><p>Инженер Робин Вирух подготовил подборку React-библиотек на 2025 год. Проверьте, возможно, чего-то не хватает в вашей коллекции.</p>
67
<p><strong>Начало проекта.</strong><a>Vite</a> - самый популярный инструмент, который ценят за скорость, простоту настройки, поддержку TypeScript, JSX и CSS-препроцессоров. Он работает не только с React, но и с Vue, Svelte и Solid. Для более продвинутых проектов Робин рекомендует рассмотреть альтернативы:<a>Nitro</a>для серверных приложений,<a>Redwood</a>для полноценных фулстек-решений или<a>Waku</a>для простых приложений.</p>
67
<p><strong>Начало проекта.</strong><a>Vite</a> - самый популярный инструмент, который ценят за скорость, простоту настройки, поддержку TypeScript, JSX и CSS-препроцессоров. Он работает не только с React, но и с Vue, Svelte и Solid. Для более продвинутых проектов Робин рекомендует рассмотреть альтернативы:<a>Nitro</a>для серверных приложений,<a>Redwood</a>для полноценных фулстек-решений или<a>Waku</a>для простых приложений.</p>
68
<p><strong>Управление состоянием.</strong>Классическим выбором остаётся<a>Redux</a>, однако новым стандартом становится компактный (∼1 КБ)<a>Zustand</a>. Он упрощает разработку, избавляя от создания сложных структур и шаблонного кода. Альтернативы:<a>XState</a>,<a>Zag</a>,<a>Mobx</a>,<a>Jotai</a>и <a>Nano Stores</a>.</p>
68
<p><strong>Управление состоянием.</strong>Классическим выбором остаётся<a>Redux</a>, однако новым стандартом становится компактный (∼1 КБ)<a>Zustand</a>. Он упрощает разработку, избавляя от создания сложных структур и шаблонного кода. Альтернативы:<a>XState</a>,<a>Zag</a>,<a>Mobx</a>,<a>Jotai</a>и <a>Nano Stores</a>.</p>
69
<p><strong>UI-библиотеки.</strong>В первую очередь Робин предпочитает <a>Material UI (MUI)</a> - библиотеку, которая лидирует во фриланс-проектах благодаря обширной экосистеме, детальной документации и понятному интерфейсу. Ещё ему нравится<a>Mantine UI</a>, а из других достойных вариантов он отмечает<a>Chakra UI</a>,<a>Hero UI</a>,<a>Park UI</a>и <a>PrimeReact</a>.</p>
69
<p><strong>UI-библиотеки.</strong>В первую очередь Робин предпочитает <a>Material UI (MUI)</a> - библиотеку, которая лидирует во фриланс-проектах благодаря обширной экосистеме, детальной документации и понятному интерфейсу. Ещё ему нравится<a>Mantine UI</a>, а из других достойных вариантов он отмечает<a>Chakra UI</a>,<a>Hero UI</a>,<a>Park UI</a>и <a>PrimeReact</a>.</p>
70
<p>Робин также отмечает рост популярности "безголовых" библиотек (headless UI) - компонентов без предустановленных стилей. Этот подход даёт разработчикам полный контроль над внешним видом. Например, вместо готовой кнопки с фиксированным дизайном вы получаете базовую функциональность (клики, состояния) и можете стилизовать её как угодно. Среди популярных headless-библиотек:<a>Shadcn UI</a>,<a>Radix</a>,<a>React Aria</a>,<a>Ark UI</a>,<a>Ariakit</a>,<a>Daisy UI</a>,<a>Headless UI</a>и <a>Tailwind UI</a>(платная).</p>
70
<p>Робин также отмечает рост популярности "безголовых" библиотек (headless UI) - компонентов без предустановленных стилей. Этот подход даёт разработчикам полный контроль над внешним видом. Например, вместо готовой кнопки с фиксированным дизайном вы получаете базовую функциональность (клики, состояния) и можете стилизовать её как угодно. Среди популярных headless-библиотек:<a>Shadcn UI</a>,<a>Radix</a>,<a>React Aria</a>,<a>Ark UI</a>,<a>Ariakit</a>,<a>Daisy UI</a>,<a>Headless UI</a>и <a>Tailwind UI</a>(платная).</p>
71
<p>Разработчик Пётр Мигдау<a>поделился</a>мыслями о проблеме сохранности цифровой информации. Он отметил, что любые публикации в интернете могут со временем исчезнуть. Чтобы избежать потерь, он рекомендует хранить весь важный контент в максимально простых форматах.</p>
71
<p>Разработчик Пётр Мигдау<a>поделился</a>мыслями о проблеме сохранности цифровой информации. Он отметил, что любые публикации в интернете могут со временем исчезнуть. Чтобы избежать потерь, он рекомендует хранить весь важный контент в максимально простых форматах.</p>
72
<p>Оптимальный выбор - Markdown, текстовый формат с понятным синтаксисом. Он позволит открывать файлы даже спустя десятилетия:</p>
72
<p>Оптимальный выбор - Markdown, текстовый формат с понятным синтаксисом. Он позволит открывать файлы даже спустя десятилетия:</p>
73
<p>"Контент, который стоит найти хотя бы один раз, стоит сохранить навсегда".</p>
73
<p>"Контент, который стоит найти хотя бы один раз, стоит сохранить навсегда".</p>
74
<p>Markdown-файлы весят всего несколько килобайт и легко конвертируются в другие форматы. Например, один и тот же файл можно превратить в красивую HTML-страницу или PDF-документ.</p>
74
<p>Markdown-файлы весят всего несколько килобайт и легко конвертируются в другие форматы. Например, один и тот же файл можно превратить в красивую HTML-страницу или PDF-документ.</p>
75
<p>Если захотите попробовать, обратите внимание на <a>Pandoc</a> - это универсальный инструмент для работы с Markdown. Он поддерживает множество форматов: от простых документов Word до сложных научных работ в LaTeX. К примеру, команда pandoc document.md -o document.pdf автоматически создаст PDF из вашего Markdown-файла.</p>
75
<p>Если захотите попробовать, обратите внимание на <a>Pandoc</a> - это универсальный инструмент для работы с Markdown. Он поддерживает множество форматов: от простых документов Word до сложных научных работ в LaTeX. К примеру, команда pandoc document.md -o document.pdf автоматически создаст PDF из вашего Markdown-файла.</p>
76
<p>Когда-то в IT-индустрии<a>появилось</a>представление о так называемом 10x-программисте - асоциальном гении, который якобы способен в одиночку создавать революционные продукты. И на этот счёт даже<a>высказался</a>Алан Юстас, бывший вице-президент по инженерии в Google:</p>
76
<p>Когда-то в IT-индустрии<a>появилось</a>представление о так называемом 10x-программисте - асоциальном гении, который якобы способен в одиночку создавать революционные продукты. И на этот счёт даже<a>высказался</a>Алан Юстас, бывший вице-президент по инженерии в Google:</p>
77
<p>"Один первоклассный инженер стоит в 300 раз больше, чем средний. Я бы предпочёл потерять целый класс выпускников, чем одного исключительного специалиста".</p>
77
<p>"Один первоклассный инженер стоит в 300 раз больше, чем средний. Я бы предпочёл потерять целый класс выпускников, чем одного исключительного специалиста".</p>
78
<p>Хотя многие с самого начала критиковали эту идею, миф о "10x" до сих пор жив. Появляются советы для руководителей -<a>как нанять такого разработчика</a>, и для начинающих инженеров -<a>как им стать</a>.</p>
78
<p>Хотя многие с самого начала критиковали эту идею, миф о "10x" до сих пор жив. Появляются советы для руководителей -<a>как нанять такого разработчика</a>, и для начинающих инженеров -<a>как им стать</a>.</p>
79
<p>Однако Чарити Мейджорс, соосновательница<a>Honeycomb</a>,<a>выступает</a>против этого подхода и призывает обратить внимание на обычных инженеров. Она подчёркивает несколько ключевых моментов.</p>
79
<p>Однако Чарити Мейджорс, соосновательница<a>Honeycomb</a>,<a>выступает</a>против этого подхода и призывает обратить внимание на обычных инженеров. Она подчёркивает несколько ключевых моментов.</p>
80
<p><strong>Продуктивность сложно измерить.</strong>Концепция "10х" создаёт иллюзию, что продуктивность - это некая постоянная и универсальная характеристика. Однако в реальности нет единой метрики, и ни один специалист не может быть лучшим во всех условиях, задачах и командах.</p>
80
<p><strong>Продуктивность сложно измерить.</strong>Концепция "10х" создаёт иллюзию, что продуктивность - это некая постоянная и универсальная характеристика. Однако в реальности нет единой метрики, и ни один специалист не может быть лучшим во всех условиях, задачах и командах.</p>
81
-
<p><strong>Программирование - командная работа.</strong>Даже самый быстрый разработчик не ��скорит проект, если команда не работает слаженно:</p>
81
+
<p><strong>Программирование - командная работа.</strong>Даже самый быстрый разработчик не ускорит проект, если команда не работает слаженно:</p>
82
<p>"Если самый медленный инженер пишет строчку кода за пять часов, то столько же времени понадобится и самому быстрому - потому что они работают вместе".</p>
82
<p>"Если самый медленный инженер пишет строчку кода за пять часов, то столько же времени понадобится и самому быстрому - потому что они работают вместе".</p>
83
<p><strong>Великие команды - это не только звёзды.</strong>Лучшие инженерные компании - вовсе не те, где работают исключительно гении. Это команды, в которых обычные инженеры, обладающие хорошими навыками и опытом, стабильно создают код, решают задачи и способствуют росту бизнеса - изо дня в день, из недели в неделю.</p>
83
<p><strong>Великие команды - это не только звёзды.</strong>Лучшие инженерные компании - вовсе не те, где работают исключительно гении. Это команды, в которых обычные инженеры, обладающие хорошими навыками и опытом, стабильно создают код, решают задачи и способствуют росту бизнеса - изо дня в день, из недели в неделю.</p>
84
<p>Поэтому Мейджорс призывает компании нанимать не "лучших", а подходящих специалистов - тех, кто разделяет ценности команды и готов учиться. Например, джуниор с горящими глазами и желанием развиваться может принести больше пользы, чем опытный, но не умеющий работать в команде разработчик. Главное - не погоня за звёздами, а создание таких процессов, которые помогают сотрудникам развиваться, делиться знаниями и эффективно работать вместе.</p>
84
<p>Поэтому Мейджорс призывает компании нанимать не "лучших", а подходящих специалистов - тех, кто разделяет ценности команды и готов учиться. Например, джуниор с горящими глазами и желанием развиваться может принести больше пользы, чем опытный, но не умеющий работать в команде разработчик. Главное - не погоня за звёздами, а создание таких процессов, которые помогают сотрудникам развиваться, делиться знаниями и эффективно работать вместе.</p>
85
<p>Исследование Гарвардской школы бизнеса<a>показало</a>, что экономическая ценность открытого исходного кода составляет 8,8 трлн долларов. Без использования опенсорса компании тратили бы в 3,5 раза больше средств на разработку и поддержку программного обеспечения.</p>
85
<p>Исследование Гарвардской школы бизнеса<a>показало</a>, что экономическая ценность открытого исходного кода составляет 8,8 трлн долларов. Без использования опенсорса компании тратили бы в 3,5 раза больше средств на разработку и поддержку программного обеспечения.</p>
86
<p>Поразительно, но 95% этой колоссальной ценности создают всего 3000 разработчиков по всему миру. При этом открытый код используется в 96% всех кодовых баз - как в стартапах, так и в корпорациях.</p>
86
<p>Поразительно, но 95% этой колоссальной ценности создают всего 3000 разработчиков по всему миру. При этом открытый код используется в 96% всех кодовых баз - как в стартапах, так и в корпорациях.</p>
87
<p>В исследовании учёные рассчитали стоимость труда - то есть сколько бы стоило создать заново всё существующее опенсорсное программное обеспечение для каждого языка программирования. Вот результаты:</p>
87
<p>В исследовании учёные рассчитали стоимость труда - то есть сколько бы стоило создать заново всё существующее опенсорсное программное обеспечение для каждого языка программирования. Вот результаты:</p>
88
<ul><li>Go - 803 000 000 долларов;</li>
88
<ul><li>Go - 803 000 000 долларов;</li>
89
<li>JavaScript - 758 000 000 долларов;</li>
89
<li>JavaScript - 758 000 000 долларов;</li>
90
<li>Java - 658 000 000 долларов;</li>
90
<li>Java - 658 000 000 долларов;</li>
91
<li>C - 406 000 000 долларов;</li>
91
<li>C - 406 000 000 долларов;</li>
92
<li>Python - 55 000 000 долларов.</li>
92
<li>Python - 55 000 000 долларов.</li>
93
</ul><p>Несмотря на популярность, Python оказался на последнем месте среди ведущих языков по экономической оценке вклада в опенсорс. Это может быть связано с тем, что большая часть экосистемы Python построена на относительно компактных библиотеках, в то время как другие языки включают более масштабные фреймворки и системные компоненты.</p>
93
</ul><p>Несмотря на популярность, Python оказался на последнем месте среди ведущих языков по экономической оценке вклада в опенсорс. Это может быть связано с тем, что большая часть экосистемы Python построена на относительно компактных библиотеках, в то время как другие языки включают более масштабные фреймворки и системные компоненты.</p>
94
Рыночная стоимость опенсорсных проектов на пяти ключевых языках программирования<em>Изображение: Harvard Business School</em><p>Аналитики также рассмотрели популярность языков программирования с точки зрения фактического использования их пакетов и библиотек в реальных проектах. Получилось следующее:</p>
94
Рыночная стоимость опенсорсных проектов на пяти ключевых языках программирования<em>Изображение: Harvard Business School</em><p>Аналитики также рассмотрели популярность языков программирования с точки зрения фактического использования их пакетов и библиотек в реальных проектах. Получилось следующее:</p>
95
<ul><li>Go стал самым "дорогим" - его пакеты используются в проектах в четыре раза чаще пакетов JavaScript. К примеру, популярный фреймворк<a>Gin</a>для Go применяется в миллионах проектов.</li>
95
<ul><li>Go стал самым "дорогим" - его пакеты используются в проектах в четыре раза чаще пакетов JavaScript. К примеру, популярный фреймворк<a>Gin</a>для Go применяется в миллионах проектов.</li>
96
<li>TypeScript продемонстрировал впечатляющий рост: с 10-го места по использованию пакетов в 2017 году он поднялся на 4-е место к 2020 году. Такой рост во многом обязан популярности фреймворков<a>Angular</a>и <a>Next.js</a>, которые используют TypeScript как основной язык.</li>
96
<li>TypeScript продемонстрировал впечатляющий рост: с 10-го места по использованию пакетов в 2017 году он поднялся на 4-е место к 2020 году. Такой рост во многом обязан популярности фреймворков<a>Angular</a>и <a>Next.js</a>, которые используют TypeScript как основной язык.</li>
97
<li>JavaScript, C, Java и Python остаются самыми популярными языками среди разработчиков. Однако Python, несмотря на обширную экосистему, демонстрирует более низкую активность использования отдельных пакетов по сравнению с другими языками.</li>
97
<li>JavaScript, C, Java и Python остаются самыми популярными языками среди разработчиков. Однако Python, несмотря на обширную экосистему, демонстрирует более низкую активность использования отдельных пакетов по сравнению с другими языками.</li>
98
</ul><p>В завершение авторы подчёркивают, что компании должны активнее участвовать в поддержке и развитии открытого ПО, поскольку большая часть современного цифрового мира построена именно на нём.</p>
98
</ul><p>В завершение авторы подчёркивают, что компании должны активнее участвовать в поддержке и развитии открытого ПО, поскольку большая часть современного цифрового мира построена именно на нём.</p>
99
<p>Для начала попробуйте<a>тест</a>, в котором нужно по фотографии угадать, кто перед вами - создатель языка программирования или серийный убийца. Сайт оформлен с детективным антуражем, так что будет непросто.</p>
99
<p>Для начала попробуйте<a>тест</a>, в котором нужно по фотографии угадать, кто перед вами - создатель языка программирования или серийный убийца. Сайт оформлен с детективным антуражем, так что будет непросто.</p>
100
Как вы думаете, может ли эта женщина оказаться убийцей?<em>Скриншот:<a>vole.wtf</a>/ Skillbox Media</em><p>После теста рекомендуем установить<a>rust-stakeholder</a> - забавный инструмент командной строки, который за 30 секунд сделает из вас крутого разработчика. Он выводит в терминал бессмысленный, но впечатляющий текст. Со стороны выглядит так, словно вы гениальный программист. Кто знает, может, скоро эта цитата будет именно о вас:</p>
100
Как вы думаете, может ли эта женщина оказаться убийцей?<em>Скриншот:<a>vole.wtf</a>/ Skillbox Media</em><p>После теста рекомендуем установить<a>rust-stakeholder</a> - забавный инструмент командной строки, который за 30 секунд сделает из вас крутого разработчика. Он выводит в терминал бессмысленный, но впечатляющий текст. Со стороны выглядит так, словно вы гениальный программист. Кто знает, может, скоро эта цитата будет именно о вас:</p>
101
<p>"После того как я начал использовать rust-stakeholder, меня больше не спрашивают о сроках, а просят поделиться своими мыслями на совещаниях совета директоров".</p>
101
<p>"После того как я начал использовать rust-stakeholder, меня больше не спрашивают о сроках, а просят поделиться своими мыслями на совещаниях совета директоров".</p>
102
Хотите повышение? Просто запустите приложение, когда мимо будет проходить ваш менеджер 😄<em>Скриншот:<a>GitHub</a></em><p>Помимо интересных сайтов, мы обнаружили несколько полезных сервисов, которые могут пригодиться каждому разработчику:</p>
102
Хотите повышение? Просто запустите приложение, когда мимо будет проходить ваш менеджер 😄<em>Скриншот:<a>GitHub</a></em><p>Помимо интересных сайтов, мы обнаружили несколько полезных сервисов, которые могут пригодиться каждому разработчику:</p>
103
<ul><li><a>Node Modules Inspector</a> - интерактивный интерфейс для анализа локальных модулей Node.js. Он наглядно отображает содержимое node_modules и анализирует зависимости проекта. С его помощью вы сразу увидите объём занимаемой памяти - например, что пакет lodash весит 500 КБ, а moment.js добавляет ещё 2 МБ к проекту.</li>
103
<ul><li><a>Node Modules Inspector</a> - интерактивный интерфейс для анализа локальных модулей Node.js. Он наглядно отображает содержимое node_modules и анализирует зависимости проекта. С его помощью вы сразу увидите объём занимаемой памяти - например, что пакет lodash весит 500 КБ, а moment.js добавляет ещё 2 МБ к проекту.</li>
104
<li><a>Freesound</a> - библиотека из более чем 680 тысяч аудиофайлов на любой вкус: от птичьего щебета до звука удара по гелиевому шарику. Все файлы вы можете свободно использовать в проектах.</li>
104
<li><a>Freesound</a> - библиотека из более чем 680 тысяч аудиофайлов на любой вкус: от птичьего щебета до звука удара по гелиевому шарику. Все файлы вы можете свободно использовать в проектах.</li>
105
<li><a>Copy any UI</a> - сервис для копирования любого веб-интерфейса по URL-адресу. Вы сможете скопировать, например, дизайн кнопки или форму входа с GitHub. Для начала нужна только регистрация.</li>
105
<li><a>Copy any UI</a> - сервис для копирования любого веб-интерфейса по URL-адресу. Вы сможете скопировать, например, дизайн кнопки или форму входа с GitHub. Для начала нужна только регистрация.</li>
106
<li><a>HTML to Markdown</a> - удобный онлайн-конвертер для преобразования HTML-кода в формат Markdown.</li>
106
<li><a>HTML to Markdown</a> - удобный онлайн-конвертер для преобразования HTML-кода в формат Markdown.</li>
107
</ul><p>В сабреддите learnprogramming пользователь<a>задал вопрос</a>: "Какая внешне простая функция веб-приложения, кажущаяся пользователям лёгкой, на самом деле требует от разработчиков серьёзных усилий?"</p>
107
</ul><p>В сабреддите learnprogramming пользователь<a>задал вопрос</a>: "Какая внешне простая функция веб-приложения, кажущаяся пользователям лёгкой, на самом деле требует от разработчиков серьёзных усилий?"</p>
108
<p>Ответов было много, но больше всего лайков набрали три функции: аутентификация, текстовые формы (автодополнение, сохранение состояния и прочее), календари и всё, что связано со временем.</p>
108
<p>Ответов было много, но больше всего лайков набрали три функции: аутентификация, текстовые формы (автодополнение, сохранение состояния и прочее), календари и всё, что связано со временем.</p>
109
<p>На первый взгляд может показаться, что всё это довольно просто реализовать, но при более глубоком рассмотрении пользователи действительно правы. Возьмём, к примеру, аутентификацию. Кажется, что может быть проще: пользователь вводит логин и пароль, сервер проверяет данные - и либо предоставляет доступ, либо нет.</p>
109
<p>На первый взгляд может показаться, что всё это довольно просто реализовать, но при более глубоком рассмотрении пользователи действительно правы. Возьмём, к примеру, аутентификацию. Кажется, что может быть проще: пользователь вводит логин и пароль, сервер проверяет данные - и либо предоставляет доступ, либо нет.</p>
110
<p>На практике ситуация намного сложнее. Даже в небольшом проекте разработчику необходимо решить целый комплекс задач:</p>
110
<p>На практике ситуация намного сложнее. Даже в небольшом проекте разработчику необходимо решить целый комплекс задач:</p>
111
<ul><li>обеспечить надёжное хранение паролей, сессий и токенов;</li>
111
<ul><li>обеспечить надёжное хранение паролей, сессий и токенов;</li>
112
<li>защитить систему от DDoS-атак и попыток подбора паролей;</li>
112
<li>защитить систему от DDoS-атак и попыток подбора паролей;</li>
113
<li>определить, какие механизмы восстановления пароля внедрить (email, SMS, коды, ссылки);</li>
113
<li>определить, какие механизмы восстановления пароля внедрить (email, SMS, коды, ссылки);</li>
114
<li>реализовать двухфакторную аутентификацию (Google Authenticator, SMS, email);</li>
114
<li>реализовать двухфакторную аутентификацию (Google Authenticator, SMS, email);</li>
115
<li>интегрировать OAuth (вход через Google, GitHub и другие сервисы);</li>
115
<li>интегрировать OAuth (вход через Google, GitHub и другие сервисы);</li>
116
<li>выяснить, как правильно хранить и обновлять токены доступа;</li>
116
<li>выяснить, как правильно хранить и обновлять токены доступа;</li>
117
<li>обеспечить масштабируемость системы.</li>
117
<li>обеспечить масштабируемость системы.</li>
118
</ul><p>Добавьте к этому вопросы интерфейса, удобства использования и безопасности на каждом этапе. В итоге аутентификация - это не просто "вход в систему", а комплексная задача, требующая глубоких знаний в бэкенд-разработке, безопасности, UI/UX и работе с внешними API.</p>
118
</ul><p>Добавьте к этому вопросы интерфейса, удобства использования и безопасности на каждом этапе. В итоге аутентификация - это не просто "вход в систему", а комплексная задача, требующая глубоких знаний в бэкенд-разработке, безопасности, UI/UX и работе с внешними API.</p>
119
<p>В сабреддите computerscience реддитор<a>спросил</a>, что участники думают о книгах Дональда Кнута. Самый популярный ответ получился таким:</p>
119
<p>В сабреддите computerscience реддитор<a>спросил</a>, что участники думают о книгах Дональда Кнута. Самый популярный ответ получился таким:</p>
120
<p>"Дам знать, когда дочитаю. Я начал в 1990-х".</p>
120
<p>"Дам знать, когда дочитаю. Я начал в 1990-х".</p>
121
<p>Но был и серьёзный комментарий. Его автор отметил, что книги Кнута - это не про практики вроде KISS и DRY и не про архитектуру программ. Это глубокий разбор алгоритмов, математически точный подход и умение правильно о них думать. Такие книги полезны тем, кто пишет библиотеки и хочет понимать алгоритмы на фундаментальном уровне.</p>
121
<p>Но был и серьёзный комментарий. Его автор отметил, что книги Кнута - это не про практики вроде KISS и DRY и не про архитектуру программ. Это глубокий разбор алгоритмов, математически точный подход и умение правильно о них думать. Такие книги полезны тем, кто пишет библиотеки и хочет понимать алгоритмы на фундаментальном уровне.</p>
122
<p>Другой участник learnprogramming<a>поделился</a>своей болью. Он попробовал Cursor и потерял мотивацию учить программирование:</p>
122
<p>Другой участник learnprogramming<a>поделился</a>своей болью. Он попробовал Cursor и потерял мотивацию учить программирование:</p>
123
<p>"Я почувствовал себя ничтожеством. Все мои усилия бессмысленны - он пишет код быстрее, лучше и даже оптимизирует его сам".</p>
123
<p>"Я почувствовал себя ничтожеством. Все мои усилия бессмысленны - он пишет код быстрее, лучше и даже оптимизирует его сам".</p>
124
<p>Ему сразу пришли на помощь и дали дельный совет:</p>
124
<p>Ему сразу пришли на помощь и дали дельный совет:</p>
125
<p>"Просто удали Cursor. Используй VS Code. Проблема решена".</p>
125
<p>"Просто удали Cursor. Используй VS Code. Проблема решена".</p>
126
<p>И напоследок: в сабреддите AskProgramming<a>спросили</a>, какой самый недооценённый принцип разработки ПО, которому должен следовать каждый программист? Ответ вас удивит: "Просто будь добрее" 🤗</p>
126
<p>И напоследок: в сабреддите AskProgramming<a>спросили</a>, какой самый недооценённый принцип разработки ПО, которому должен следовать каждый программист? Ответ вас удивит: "Просто будь добрее" 🤗</p>
127
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
127
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>