Точка входа в программирование
Фундаментальные знания по основам программирования Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/zrgj
Show more📈 Analytical overview of Telegram channel Точка входа в программирование
Channel Точка входа в программирование (@prog_point) in the Russian language segment is an active participant. Currently, the community unites 18 115 subscribers, ranking 7 074 in the Technologies & Applications category and 36 470 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 18 115 subscribers.
According to the latest data from 02 September, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -111 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 17.76%. Within the first 24 hours after publication, content typically collects 4.41% reactions from the total number of subscribers.
- Post reach: On average, each post receives 3 218 views. Within the first day, a publication typically gains 799 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 3.
- Thematic interests: Content is focused on key topics such as docker, javascript, kubernetes, браузер, контейнер.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Фундаментальные знания по основам программирования
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/zrgj”
Thanks to the high frequency of updates (latest data received on 03 September, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Data loading in progress...
| Date | Subscriber Growth | Mentions | Channels | |
| 03 September | +3 | |||
| 02 September | +2 | |||
| 01 September | +4 |
await перед загрузкой постов, а строка, которая идёт ниже по коду, напечаталась первой. Выглядит как сломанный await, хотя это ровно его штатная работа.
В Python time.sleep() блокирует всё, и следующая строка честно ждёт. В JavaScript await ставит на паузу только ту функцию, внутри которой стоит, а остальной код бежит дальше. Разбор написал дата-сайентист, который учит JavaScript и объясняет промисы через привычный ему Python: промис здесь объект, который обещает вернуть значение позже.
Скопируйте пример себе и предскажите порядок вывода до запуска, а потом сверьтесь. Ошиблись — значит, нашли своё главное заблуждение о промисах. Пример целиком.
#javascript| 2 | Как CI получает доступ к облаку без пароля в настройках
Классическая схема: в переменных CI лежит ключ от облака, сборка его читает и загружает артефакты. Ключ живёт годами, его копируют в новые проекты, и утечка одного ключа открывает всё. Именно так в августе через непропатченный TeamCity вынесли облачные учётки самой JetBrains, мы разбирали этот инцидент.
Альтернатива называется OIDC, и её теперь поддерживает и TeamCity. Идея простая. Сервер CI получает пару ключей: приватным подписывает, публичный выкладывает по известному адресу. Каждой сборке он выдаёт короткий подписанный документ, JWT, где написано, какой это проект и для какого облака. Сборка показывает документ облаку, облако скачивает публичный ключ, проверяет подпись и выдаёт временный доступ. У TeamCity документ, запрошенный сборкой по HTTP, живёт 5 минут; выданный при старте сборки действует до её таймаута плюс 10 минут.
В конфигурации при этом нет ни одного секрета, только правило «сборкам проекта X можно роль Y». Так же работают GitHub Actions и GitLab CI. Если хотите понять механизм на схеме и увидеть, что внутри JWT, разобрали на сайте.
#основы | 315 |
| 3 | Почему WHERE active OR NOT active не возвращает все строки
В обычной логике это утверждение верно всегда. В SQL есть третье значение: NULL означает «неизвестно», и NULL OR NOT NULL тоже неизвестно, а WHERE оставляет только строки, где условие истинно. Строка с active = NULL молча выпадает. Кристофер Уинслетт из Crunchy Data собрал все места, где так происходит.
Запомнить стоит три вещи. NULL = NULL даёт не true, а NULL, поэтому существует IS NULL, а для сравнения «с учётом неизвестного» есть IS NOT DISTINCT FROM. Любая арифметика с NULL даёт NULL: quantity * unit_price обнулит колонку в UPDATE, если хотя бы одно поле пустое, лечится COALESCE. И самое коварное: x NOT IN (1, 2, NULL) не вернёт ни одной строки, потому что раскрывается в цепочку AND с неизвестным внутри. Автор советует самое простое: где значение обязано быть, ставить NOT NULL в схеме.
#sql #postgresql #основы | 433 |
| 4 | Почему length у строки с одним эмодзи возвращает 5
Откройте консоль браузера и проверьте: "🍋🟩".length даёт 5, [..."🍋🟩"].length даёт 3, а человек видит один значок лайма. Это не баг, это три разных способа считать.
length в JavaScript считает кодовые единицы UTF-16 по 16 бит. Эмодзи лайма это два таких элемента, соединитель ещё один, зелёный квадрат ещё два, итого пять. Spread-оператор идёт по кодовым точкам Unicode, их три: лайм, соединитель, квадрат. А то, что видит человек, называется графемой, и посчитать её умеет только Intl.Segmenter, который знает правила склейки символов.
На этот пример наткнулся разработчик, собиравший текстовый редактор в браузере, и в его разборе видно, где это стреляет: позиция курсора, выделение, лимит символов в поле. Проверьте у себя: если ограничиваете длину ввода через length, пользователь с эмодзи в имени упрётся в лимит раньше, чем вы думали.
#основы #javascript | 506 |
| 5 | Двойное подчёркивание в Python не делает атрибут приватным
Новички часто пишут self.__value и думают, что закрыли поле от внешнего мира. На самом деле Python просто переименовывает его: внутри класса Helper атрибут __value превращается в _Helper__value. Это называется name mangling, и обойти его можно, написав это длинное имя руками.
Ловушка глубже, чем кажется. Переименование зависит только от имени класса, не от модуля. Если два независимых класса в разных файлах называются Helper и оба хранят __value, а кто-то наследуется от обоих, поля сталкиваются в одном и том же _Helper__value: один класс кладёт туда строку, другой число, и код падает с TypeError на сложении. Именно такой пример разбирают сейчас на форуме разработчиков Python, обсуждая, нужна ли языку настоящая приватность.
Что с этим делать сегодня. Одно подчёркивание _value честно говорит «не трогай снаружи» и ничего не переименовывает. А если два класса должны хранить своё состояние независимо, чаще безопаснее не наследоваться от обоих, а держать их объекты внутри как поля.
#python #основы | 599 |
| 6 | Одна настройка — и git branch показывает ветки от самой свежей
Ветки в проекте копятся быстро: своя текущая, пара недоделанных, чужие после ревью, старые с прошлого месяца. По умолчанию git branch выводит их по алфавиту, поэтому нужная теряется где-то в середине списка, и вспомнить, какая из них свежая, невозможно.
Обычно с этим борются самописным скриптом: пробегают по всем веткам, для каждой запрашивают дату последнего коммита и сортируют вывод. Райан Гринберг так и делал несколько лет, пока не выяснил, что современному git это не нужно.
Достаточно один раз выполнить:
git config --global branch.sort committerdate
После этого git branch во всех ваших репозиториях сортирует ветки по дате последнего коммита, свежие оказываются внизу списка. Без --global настройка ляжет только в текущий репозиторий. Для одного запуска есть параметр: git branch --sort committerdate. Минус перед ключом переворачивает порядок, и самая свежая ветка встаёт первой: git branch --sort=-committerdate.
Ключи сортировки берутся из справки git for-each-ref, и там их много. Из полезного: authordate — дата автора коммита вместо даты коммитера, refname — имя ветки, то самое поведение по умолчанию, upstream — имя ветки, за которой следит каждая из выведенных.
#git #основы | 604 |
| 7 | Вставьте команду — explainshell разберёт её по кусочкам
Нашли в туториале команду вроде tar -xzvf archive.tar.gz -C /tmp и не понимаете, что делает каждая буква? Сайт explainshell разбирает команду на части и к каждому флагу подтягивает объяснение прямо из man-страниц — официальной документации утилит Linux.
Понимает пайпы и перенаправления, знает тысячи команд из man-страниц Ubuntu. Полезная привычка: прежде чем запускать чужую команду из интернета, вставить её сюда и посмотреть, что она на самом деле сделает.
explainshell.com
#основы | 619 |
| 8 | Первый проект на Python: собираем игру из знакомых конструкций
После знакомства с основами синтаксиса можно перейти к небольшой программе, которую получится закончить за один курс. На Real Python собирают с нуля консольную игру «Камень, ножницы, бумага» и объясняют каждый этап.
По ходу работы вы потренируетесь получать ввод от пользователя, повторять действия с помощью циклов и делить программу на функции. В проекте также используются словари и перечисления enum. Все эти элементы складываются в одну работающую игру, поэтому видно, зачем они нужны вместе.
Курс состоит из 8 уроков, примерно 48 минут видео и двух скачиваемых материалов. Кроме видео, в него входят текст, упражнения и тест. Код проверен на Python 3.9, заявлена совместимость с версиями 3.4 и новее.
Часть материалов платная: некоторые уроки и итоговый тест доступны только участникам Real Python.
#основы #python #проект | 689 |
| 9 | «У меня работает, а на сервере падает» — про это написан свод из двенадцати правил
Первый рабочий проект почти всегда проходит через один и тот же сюжет: на ноутбуке всё запускается, на сервере ломается. Пароль от базы вписан прямо в код, у коллеги другая версия библиотеки, логи пишутся в файл, который никто не читает, а перезапуск сервиса теряет загруженные пользователем картинки.
Адам Уиггинс, сооснователь Heroku, где на глазах команды разворачивались сотни тысяч приложений, собрал причины таких поломок в The Twelve-Factor App — двенадцать правил для веб-приложений на любом языке. Документ в последний раз обновляли в 2017 году, и с тех пор он не устарел; есть перевод на русский.
Самые полезные для начинающего:
— Один репозиторий на приложение, много развёртываний из него. Прод и ваша локальная копия — это один и тот же код в разных окружениях.
— Зависимости объявляются явно. requirements.txt, package.json, go.mod — чтобы «у коллеги другая версия» перестало быть диагнозом.
— Конфигурация живёт в переменных окружения. Всё, что отличается между вашей машиной и сервером — адрес базы, ключи, пароли, — не должно лежать в коде. Проверка простая: можно ли выложить репозиторий в открытый доступ прямо сейчас.
— База, очередь, файловое хранилище — подключаемые ресурсы. Смена адреса базы должна сводиться к правке переменной окружения.
— Приложение не хранит состояние в себе. Всё, что должно пережить перезапуск, кладётся во внешнее хранилище.
— Логи пишутся в стандартный вывод потоком. Собирать и хранить их — задача окружения.
Документ читается за вечер и объясняет, почему привычные к этому моменту практики устроены именно так.
#основы | 642 |
| 10 | SQL можно изучать в браузере без установки базы данных
SQL нужен, чтобы получать и изменять данные, которые хранятся в таблицах. В начале легко запутаться в командах и правилах, поэтому SQLBolt предлагает короткие уроки с упражнениями прямо на той же странице. База данных на компьютере для занятий не нужна.
Сначала учебник объясняет устройство таблиц и выбор нужных строк. Затем появляются фильтрация, сортировка, объединение нескольких таблиц и функции для подсчётов. После этого можно перейти к командам INSERT, UPDATE и DELETE, а также к созданию структуры таблиц.
Такой порядок подходит тем, кто впервые знакомится с базами данных и хочет сразу проверять каждую новую команду на практике. Авторы предупреждают, что разные системы поддерживают единый стандарт SQL с отличиями. В учебнике упоминаются SQLite, MySQL, PostgreSQL, Oracle и Microsoft SQL.
В 2021 году обсуждение SQLBolt на Hacker News набрало 324 очка и 84 комментария.
#основы #sql #базыданных | 697 |
| 11 | Python Tutor показывает выполнение программы по одному шагу
Когда программа выдаёт неверный результат, новичку бывает трудно понять, в какой момент всё пошло не так. Python Tutor запускает код в браузере и позволяет двигаться вперёд и назад по отдельным шагам.
На экране видно, какие значения сейчас лежат в переменных, как меняются списки и словари, какие объекты связаны друг с другом. Ещё сервис показывает, какая функция выполняется и из какой функции её вызвали. Так можно найти точный шаг, на котором состояние программы стало неправильным, без множества команд print.
Поддерживаются Python, Java, C, C++ и JavaScript. Устанавливать программу и создавать учётную запись не требуется: код можно вставить прямо на сайте. С 2010 года сервисом воспользовались более 25 млн человек из более чем 180 стран. Он создал свыше 500 млн визуализаций и применяется более чем в 10 000 учебных заведений.
#основы #python #отладка | 756 |
| 12 | MMO с 23-летней историей переезжает с Python 2 на Python 3 — и вот почему это долго
Вы наверняка слышали, что Python 2 давно не поддерживается. Живой пример того, во что превращается такой переезд, — EVE Online. Прошлый раз версию интерпретатора в игре меняли в 2010 году.
Масштаб: 2,4 млн строк Python примерно в 20 тысячах файлов, поверх 23 лет данных живых игроков — персонажи, навыки, имущество, внутриигровая валюта. Часть кода написана по правилам Python 2.3 и 2.5, которые тройка уже не принимает.
При пробной компиляции обоими интерпретаторами 95,9% файлов собрались сразу. Осталось около 3300 строк явных несовместимостей: примерно 1500 старых print, 800 литералов вида 123L, 600 старых форм except и 50 операторов <>. Это как раз то, что чинит 2to3.
Опаснее другое: около 20 тысяч строк синтаксически корректны в обеих версиях, но работают по-разному. Классический пример, который стоит запомнить: 1 / 2 даёт 0 в Python 2 и 0.5 в Python 3. Такое не найдёт ни компилятор, ни линтер — только тесты и внимательное чтение.
В нашем канале Zen of Python разобрали план миграции подробнее.
#python #основы | 818 |
| 13 | GitHub Classroom выключили — что делать, если по нему шла ваша учёба
Если вы учились или вели курс через GitHub Classroom, сервис больше не работает. 28 августа GitHub окончательно выключил сайт, API и связанные службы. К этому шли с 26 мая, когда закрыли регистрацию новых пользователей.
Classroom был надстройкой над GitHub для учебных курсов: преподаватель раздавал задание, каждому студенту автоматически создавался репозиторий из шаблона, а автопроверка гоняла тесты и выставляла баллы.
Что уцелело. Ваши аккаунты, репозитории и организации, созданные для работы с Classroom, не тронуты: код и вся история коммитов на месте. Удаляются данные самого Classroom — названия классов и заданий, тесты, описанные вне репозиториев, и списки студентов, подтянутые через LTI.
Что стоит сделать сейчас. Откройте список репозиториев своего аккаунта и убедитесь, что все учебные проекты там видны, а не только по ссылке из интерфейса Classroom. Если проверка задания жила в настройках Classroom, перенесите её в обычный GitHub Actions: создайте в репозитории файл .github/workflows/tests.yml, который запускает ваши тесты на каждый push. Так проверка становится частью проекта и переживает любой сервис.
Список партнёрских сервисов, которые GitHub предлагает вместо Classroom, лежит в обсуждении для преподавателей.
#основы | 819 |
| 14 | Карта бесплатных курсов: что учить по порядку, если начинаете с нуля
Материалов для самоучки много, главная проблема в другом: непонятно, в каком порядке их брать. На r/learnprogramming собрали такую карту: только бесплатные курсы, у каждого честная оценка, сколько часов он займёт.
Фундамент — Missing Semester от MIT: командная строка, Git, отладка, то, чему обычно не учат ни на одном курсе. 15–25 часов.
Дальше CS50x от Гарварда, 100–200 часов на общее устройство программирования. Если хочется сразу писать на Python, вместо него берут CS50P — 50–90 часов.
Git по-настоящему — книга Pro Git: на первые три главы автор карты отводит 6–10 часов.
SQL — SQLBolt: 5–8 часов, после каждого урока упражнение прямо в браузере.
Руки набивать — Exercism, 20–60 часов на один язык.
#основы #git #sql | 747 |
| 15 | Rebase создаёт новые коммиты, и в этом его опасность
Разработчица из Гданьска собрала команды Git, которым её когда-то научил тимлид, для тех, у кого add, commit, pull и push уже на автомате. Многие из них переписывают историю, а опасно это, когда историю уже забрали коллеги.
После git rebase main коммиты D и E превращаются в D' и E' с другими хэшами. Пока ветка только ваша, всё безопасно; если на ней сидят другие, у них всё разъедется. Так же работает git commit --amend, отсюда rejected (non-fast-forward) при пуше. Лечить его стоит через --force-with-lease: пуш пройдёт, только если удалённая ветка не менялась с последнего fetch, иначе Git откажет и чужая работа уцелеет.
Три режима reset: --soft держит изменения в индексе, --mixed в рабочей папке, --hard стирает. Стёрли лишнее? Коммит ещё виден в git reflog, и автор советует сначала git branch rescue <хэш>. Разбор всех десяти команд вышел на dev.to. Задание: сделайте git rebase -i HEAD~3 на своей ветке и сравните хэши.
#git | 810 |
| 16 | BRIN-индекс в 4570 раз меньше B-tree, пока не обновили 5 % строк
Индекс BRIN в PostgreSQL хранит только min и max колонки на диапазон страниц и весит килобайты, что удобно для логов и событий. Инженер, делавший такие же zonemaps в Oracle, измерил на 10 млн строк, что с BRIN делают обычные UPDATE. Ломается он тихо.
Свежий BRIN по created_at весит 48 КБ против 214 МБ у B-tree и отдаёт день за 21,2 мс (1536 страниц). После обновления 5 % строк тот же запрос читает 51 268 страниц и идёт 558,7 мс: 3,8 млн строк достаются и отбрасываются проверкой.
Причина в MVCC: UPDATE кладёт новую версию строки туда, где есть место. Одна январская строка в «мартовском» диапазоне из 128 страниц расширяет его min/max, и он совпадает с любым январским запросом. А pg_stats.correlation ещё показывает 0,921.
Проверьте у себя: в EXPLAIN (ANALYZE, BUFFERS) смотрите на Heap Blocks: lossy, корреляция ничего не покажет. Лечит CLUSTER, но с блокировкой таблицы. Скрипт есть в статье.
#postgresql #sql | 871 |
| 17 | Тимлид рассказывает, как его команда из трёх человек — сам разработчик, аналитик и продакт, ни разу не открывавшие IDE, — за две недели вывела в прод новый сервис на вайб-кодинге. По пути: мёрдж-конфликты между людьми, которые не знают, что такое git pull, ночные смены с часу до восьми утра, потому что днём общий чат с моделью просто не отвечал, и момент, когда за час до демо ИИ-инструмент ушёл на техобслуживание. Честная история про то, что вайб-кодинг ускоряет сильного разработчика — и оставляет беспомощным того, кто ждёт чуда от нейросети.
Как прошёл этот вайбкодинг-эксперимент в новом материале. | 1 027 |
| 18 | Есть у нас один знакомый разработчик, который давно не отдыхал.
Последний отпуск — где-то в районе позапрошлого года. Чемодан на антресолях, паспорт неизвестно где, в комнате — бардак.
Сам он не соберётся, нужна ваша помощь → https://tprg.ru/PgIs | 1 049 |
| 19 | void в C меняет смысл в зависимости от места
Вы видите void в объявлении функции, в скобках после её имени и рядом со звёздочкой у указателя. Выглядит одинаково, а ведёт себя каждый раз по-своему, и в чужом коде легко прочитать одно вместо другого.
У нас вышла статья о том, как одно короткое слово набрало столько ролей. Заодно там история появления слова: его предложил Стивен Борн, тот самый автор Bourne Shell, и придумали его совсем не ради читаемости кода.
Если пишете на C, дочитайте хотя бы до места про функции без параметров: многие узнают там, что объявляли их не так, как думали. Разобрали в статье.
#основы | 9 586 |
| 20 | Сгенерируйте свой первый звук на C++ без библиотек
Звук в компьютере — это просто список чисел. В статье автор пишет ~60 строк на C++, которые строят синусоиду, упаковывают её в WAV и дают файл, который реально можно включить.
Для новичка это отличный способ увидеть, как математика превращается в работающий результат: частота 440 Гц соответствует ноте A4, амплитуда задаёт громкость, а sample rate показывает, сколько отсчётов в секунде. Не нужно знать аудиодвижки, достаточно цикла и пары формул.
#cpp | 1 242 |
