Точка входа в программирование
18.2K subscribers
1.69K photos
293 videos
4 files
3.23K links
Фундаментальные знания по основам программирования

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/zrgj
Download Telegram
В JavaScript легко привыкнуть, что Number подходит для любых чисел: возраст, цена, счётчик, ID — всё вроде работает одинаково. А потом внезапно оказывается, что 9007199254740991 + 2 может дать совсем не тот результат, который вы ожидаете.

В разборе freeCodeCamp объясняют safe integer limit — границу, до которой JavaScript хранит целые числа точно. Дальше начинаются потери точности: большие ID, финансовые значения и счётчики могут незаметно искажаться. Для таких случаев есть BigInt — отдельный тип для больших целых чисел.

Можете проверить это прямо в консоли браузера: Number.MAX_SAFE_INTEGER, Number.isSafeInteger() и пару сложений выше лимита.

#javascript
1
Лексер показывает, как программа начинает понимать ваш код

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

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

Подробнее в разборе.
1
Python-скрипт не обязан быть простынёй из команд сверху вниз

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

Real Python показывает, как постепенно привести скрипт к более взрослому виду: разнести импорты, вынести константы, добавить main(), использовать if __name__ == "__main__", принимать аргументы из командной строки и аккуратнее оформлять вывод.

Хороший следующий шаг после прочтения — взять свой старый скрипт и попытаться его декомпозировать. Хотя бы вынести настройки в константы, а основной запуск положить в main().

#python
1
Первый парсер, который достаёт данные с реальной страницы

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

В разборе freeCodeCamp это проходит пошагово: запросить HTML, разобрать его, выбрать данные по тегам/классам и сложить их в удобный вид. HTML здесь — разметка страницы, а парсер помогает достать из неё нужные куски.

Хороший следующий шаг: взять одну простую страницу с таблицей или списком и вытащить из неё 5–10 строк. Не весь интернет, а маленький понятный кусок.
1
Перед первым сайтом лучше выбрать не фреймворк, а задачу

Когда только начинаешь делать сайты, очень легко застрять в вопросе, что брать: React, Vue, Next или что-то ещё?. Но стек — это не отправная точка, а инструмент под уже понятную задачу.

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

Практический шаг простой: перед выбором технологии выпишите цель сайта, список страниц, данные, которые нужно хранить, и кто будет всё поддерживать. После этого стек выбирается спокойнее.
1
Маленький конвертер текста, где HTML, CSS и JS наконец работают вместе

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

В разборе freeCodeCamp предлагают сделать case converter: поле ввода, кнопки для UPPERCASE, lowercase и Title Case, счётчик символов и слов, копирование текста в буфер и скачивание результата. Буфер обмена — это место, куда попадает текст после команды «копировать».

Проект простой, но полезный: вы связываете разметку, стили, события кнопок и обработку строки в одну работающую страницу.
1
Первый scatter-график в Python без лишней математики

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

В разборе показывают plt.scatter() из Matplotlib: как передать значения по осям X и Y, поменять цвет и размер точек, добавить подписи и сетку. Matplotlib — популярная библиотека Python для графиков.

После чтения можно взять два маленьких списка чисел и построить свой график. А потом выделить одну группу другим цветом, чтобы понять, как визуализация помогает читать данные.
1🤔1
Как поставить боту потолок шагов, чтобы не сжечь бюджет

Если пишете бота, который сам решает, что делать дальше, начните с правила: у цикла обязательно должно быть условие выхода. Агентный цикл — когда модель внутри while True сама вызывает функции и решает, остановиться или идти дальше. Без условия выхода он не падает: делает то, что ему сказали, пока не кончатся деньги. В статье есть случаи, когда такие циклы сжигали десятки тысяч долларов за часы или дни.

Поэтому перед запуском задайте предохранитель: лимит шагов и счётчик. Проверяйте их до очередного вызова модели. Главное: заранее решить, что значит «готово».

Автор собрал минимальный каркас: спецификацию задачи, предохранитель и журнал каждого шага. Посмотрите, как он устроен: пригодится для первых ботов.
2
Как большие сервисы переваривают миллионы операций в день

Свежий разбор freeCodeCamp объясняет масштабирование платформ без прыжка сразу в сложную теорию распределённых систем.

Внутри базовые, но важные кирпичи: балансировщики, кеш, очереди, реплики базы, идемпотентность, мониторинг и подготовка к пикам нагрузки.
2🤔1
Как мы проскочили путь от первого iPhone и сложной разработки под мобильные устройства до эпохи ИИ? Что случилось и к чему это привело — в третьей части цикла об истории российского IT.

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

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

Так решения порождали новые проблемы, а российская IT-индустрия вышла на новый уровень сложности. Подробнее — в материале на Tproger.
2
Один качественный пул-реквест лучше сырых правок

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

Смысл для новичка: лучше взять одну маленькую задачу, разобраться и довести её до результата, чем раскидывать полуфабрикаты. Попробуйте найти в знакомом проекте одну опечатку или простую правку и сделайте пул-реквест, так быстрее почувствуете, как работают открытые проекты.
💯2🔥1🎉1🌚1
Почему код иногда ведёт себя странно: учимся думать как JS-движок

Когда вы только начинаете учить JavaScript, легко запомнить синтаксис и повторять за примерами. Но иногда код ведёт себя не так, как ожидается, и без понимания, как движок выполняет инструкции, разобраться трудно.

Сумит Саха на freeCodeCamp разбирает, как устроен JavaScript изнутри: область видимости переменных, замыкания, события и асинхронность. Не просто синтаксис, а то, что происходит за кулисами.

Начните с простого эксперимента: объявите переменную снаружи функции и ещё одну — внутри. Функция увидит внешнюю, а вот извне внутреннюю не прочитать. Посмотрите на ошибку: так область видимости перестаёт быть абстракцией.
1
Как найти свою первую задачу в open source

Open source — это программы, исходный код которых открыт для всех: можно смотреть, учиться и вносить изменения. Для новичка это способ увидеть реальный проект, который используют другие разработчики, и понять, как работает командная разработка.

Сложнее всего выбрать первый проект. GitHub предлагает начать с Copilot Chat: попросите подобрать проекты на знакомом языке с меткой good first issue. Эта метка означает, что задача подходит для новичков: её обычно можно решить, не разбираясь во всём коде сразу.

В статье от GitHub разбирают, как читать открытый проект и сделать первый вклад. Попробуйте поискать один проект сегодня. Просто посмотрите, какие там задачи.
3🤝1
Forwarded from Веб-страница
Если вы фронтендер и вам нужен бэкенд, этот разбор стоит сохранить

Автор собрал учебный Task Manager API на FastAPI так, чтобы за один проект пройти структуру, SQLAlchemy-модели, Pydantic-схемы, отдельный crud.py и маршруты через APIRouter. Получается 10 эндпоинтов для пользователей и задач — узнаваемая схема сервиса, а не игрушка.

Сохранил бы тем, кто переходит от учебных скриптов к полноценному API и хочет разложить файлы по полочкам. Разбор с кодом на GitHub.

#restapi #фронтенд #бэкенд
3🔥1👏1😁1
Почему async без await — плохая привычка

Кажется, что добавить async к функции «на всякий случай» безопасно. На деле вы меняете правила работы функции: она начинает возвращать не готовое значение, а Promise. Теперь каждый, кто её вызывает, обязан писать await, а значит, и его вызывающие тоже становятся async-функциями.

Так «асинхронность» расползается по коду заразно: вдруг половина проекта завёрнута в Promise, хотя реальной работы с сетью или файлами там нет. Читать такой код сложнее — непонятно, где настоящее ожидание ответа от сервера, а где просто возврат готовой переменной.

Правило проще, чем кажется: если внутри функции нет await, не пишите перед ней async. Добавите потом за минуту, когда это реально понадобится. Разбор Мэтта Смита поможет почувствовать разницу.
2🔥1🎉1
В Go нет классов и наследования — и это не баг, а особенность

Если вы только начинаете Go после Java или Python, первым делом удивит отсутствие классов. Вместо них структуры: обычный набор полей, к которому методы «прикрепляются» отдельно. Конструкторов тоже нет, поэтому обычно пишут вспомогательную функцию вроде NewOrder.

Главная ловушка для новичка: приёмник метода. (o Order) передаёт копию, а (o *Order) передаёт указатель и может менять оригинал. Если метод вроде MarkPaid не меняет статус, проверьте, не забыли ли звёздочку.

Наследования нет, поэтому «расширить» Order до PremiumOrder через extends не получится. Это заставляет думать не в категориях «родитель и ребёнок», а в категориях «данные + поведение». В статье автор разбирает, чем в Go заменяет наследование, и почему серьёзные проекты на этом строятся.
6
Import on interaction: не грузите всё сразу

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

Паттерн import on interaction говорит: тяжёлые куски интерфейса можно подгружать в момент взаимодействия. Например, код видеоплеера загружается не при открытии страницы, а когда пользователь нажал «Play». То же работает с чатами и другими встраиваемыми виджетами.

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

Попробуйте в своём следующем учебном проекте отложить хотя бы один скрипт до клика.
1👏1🤔1
Forwarded from Веб-страница
Авторитетный и рекурсивный DNS: зачем фронтендеру это знать

Если вы меняли хостинг или прикручивали CDN, то видели, как новые записи встают не сразу — кто-то уже попадает на новый сервер, а кто-то ещё стучится в старый. Виноват не фреймворк, а разница между двумя ролями DNS.

Авторитетный сервер считается источником правды для вашего домена: именно он отвечает за его DNS-записи. Рекурсивный резолвер выступает посредником: ходит от корня к TLD, затем к авторитетному серверу и кеширует ответ на своей стороне. Именно кеш резолверов, а не «где-то там в интернете», создаёт задержку при propagation.

Понимание этой разницы помогает быстрее диагностировать, почему одни пользователи видят новую версию сайта, а другие продолжают видеть старую. Разбор от DNS Assistant стоит сохранить, если редактируете зоны.
4
Почему в обучении коду стоит искать трение, а не избегать его

JetBrains Education пишет про friction-maxxing, то есть намеренный поиск трудностей в удобной жизни. В программировании это работает так же: гладкие уроки дают иллюзию знаний, а разбор ошибки самому даёт настоящее понимание.

Низкая проходимость вводных курсов объясняется не «неправильным» мозгом, а мифом, что код для избранных. Чем раньше вы перестанете обходить сложные места и начнёте докапываться до причины бага, тем быстрее вырастёт уверенность.

Возьмите тему, которую прошли бегло, например циклы или обработку ошибок, и решите без подсказок три задачи посложнее обычных. В блоге JetBrains объясняют, почему это полезнее очередного курса в закладках.
💯32
Почему одного Python на компьютере мало и как не запутаться в версиях

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

Тут на помощь приходят две вещи. В статье разбирается pyenv. Он позволяет переключать версии Python под каждый проект, не трогая системную установку. А виртуальное окружение: это изолированная «коробка» со своими пакетами: начните со встроенного venv и pip, а когда проекты подрастут, посмотрите на Poetry, Pipenv или uv.

Главное правило: не смешивайте всё в одну кучу. Отдельный проект — отдельное окружение.
2
ImHex — hex-редактор, который бережёт глаза при ночном реверсе

ImHex нацелен на реверс-инженеров и программистов, которым приходится разглядывать бинарники допоздна. Главная заявка: не только удобная работа с байтами, но и интерфейс, который не выжигает сетчатку к 3 часам ночи.

Если вы копаетесь в файловых форматах, анализируете прошивки или отлаживаете протоколы, проверьте, насколько здесь удобнее классического hex-редактора. Упор на визуальную подачу данных может снизить усталость при долгих сессиях. Исходники лежат на GitHub, можно скачать и потрогать руками.
4