Недавно The New York Times выпустила материал с говорящим заголовком «Goodbye, $165,000 Tech Jobs. Student Coders Seek Work at Chipotle».
Суть, если коротко: золотая лихорадка для джунов в США закончилась. Обещания про «выучи код и будешь получать шестизначную зарплату на старте», на которых выросло целое поколение, разбились о суровую реальность 2025 года.
Несколько фактов из статьи:
- Парень по имени Зак Тейлор с дипломом computer science подал заявки на 5762 вакансии. Результат: 13 собесов, 0 офферов.
- Девушка Манаси Мишра, отучившись на программиста, единственное интервью получила в сети фастфуда Chipotle.
- Уровень безработицы среди свежих выпускников CS — 6.1-7.5%. Это вдвое выше, чем у выпускников с дипломом по биологии или истории искусств. Истории искусств, Карл!
Винят в этом две вещи:
1️⃣ Массовые увольнения в бигтехах, которые перегрели рынок.
2️⃣ Распространение ИИ-инструментов, которые автоматизируют как раз ту самую работу начального уровня, на которую раньше брали джунов.
Более того, статья описывает «ИИ-петлю обреченности» (AI doom loop): соискатели используют ИИ, чтобы массово рассылать сотни резюме, а компании используют ИИ, чтобы так же массово их отсеивать. Выхлоп — нулевой. Нейронки собеседуют нейронки, а человек в этой схеме — лишний. Все как в образовании😂
Девушка из статьи, Манаси, работу в итоге нашла. Не программистом. А в технических продажах, куда пробилась благодаря своему TikTok-аккаунту.
До нас такие тренды доходят всегда с опозданием. Или нет?😄
Суть, если коротко: золотая лихорадка для джунов в США закончилась. Обещания про «выучи код и будешь получать шестизначную зарплату на старте», на которых выросло целое поколение, разбились о суровую реальность 2025 года.
Несколько фактов из статьи:
- Парень по имени Зак Тейлор с дипломом computer science подал заявки на 5762 вакансии. Результат: 13 собесов, 0 офферов.
- Девушка Манаси Мишра, отучившись на программиста, единственное интервью получила в сети фастфуда Chipotle.
- Уровень безработицы среди свежих выпускников CS — 6.1-7.5%. Это вдвое выше, чем у выпускников с дипломом по биологии или истории искусств. Истории искусств, Карл!
Винят в этом две вещи:
Более того, статья описывает «ИИ-петлю обреченности» (AI doom loop): соискатели используют ИИ, чтобы массово рассылать сотни резюме, а компании используют ИИ, чтобы так же массово их отсеивать. Выхлоп — нулевой. Нейронки собеседуют нейронки, а человек в этой схеме — лишний. Все как в образовании
Девушка из статьи, Манаси, работу в итоге нашла. Не программистом. А в технических продажах, куда пробилась благодаря своему TikTok-аккаунту.
До нас такие тренды доходят всегда с опозданием. Или нет?
Please open Telegram to view this post
VIEW IN TELEGRAM
NY Times
Goodbye, $165,000 Tech Jobs. Student Coders Seek Work at Chipotle.
As companies like Amazon and Microsoft lay off workers and embrace A.I. coding tools, computer science graduates say they’re struggling to land tech jobs.
🌚3😢2👨💻1 1 1
Утиная типизация в Python 🦆
"Если это выглядит как утка и крякает как утка..." – принцип знаком многим. Он позволяет писать более обобщенный код, не привязываясь к конкретным классам. Однако, без чётких "правил игры", она может приводить к ошибкам во время выполнения.
К счастью, Python предлагает механизмы для более явного определения интерфейсов: Абстрактные Базовые Классы (ABC) и
Знакомимся со всем этим в карточках!
"Если это выглядит как утка и крякает как утка..." – принцип знаком многим. Он позволяет писать более обобщенный код, не привязываясь к конкретным классам. Однако, без чётких "правил игры", она может приводить к ошибкам во время выполнения.
К счастью, Python предлагает механизмы для более явного определения интерфейсов: Абстрактные Базовые Классы (ABC) и
typing.Protocol
. Они помогают структурировать код и делают его поведение предсказуемее. Знакомимся со всем этим в карточках!
🔥9👍5 3⚡1❤1🙏1🆒1
Вот 6 главных правил:
high
, для простых — low
или medium
. Иначе она начнёт овер-инжинирить калькулятор и писать для него микросервисную архитектуру.<code_editing_rules>
, <persistence>
). <self_reflection>
), а потом уже писать код.А вы как пишите промпты? 👇🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥2🙏1 1
Помните, недавно щупали Matrix-Game 2.0 — нейронку, которая строит мир по нажатию клавиш? Так вот, забудьте. На ринг вышел тяжеловес 🥊
Tencent (да, те самые, что делают PUBG) выкатили Hunyuan-GameCraft — опенсорсный фреймворк на Python для генерации интерактивных игровых миров.
- Память как у слона: Модель помнит сцену и не разваливается после пары поворотов, в отличие от многих предшественников.
- Обучена на AAA-играх: Ее натаскали на миллионе геймплейных роликов из 100+ топовых игр. Она знает, что такое "красиво" и "динамично".
- Ускоренная версия: Есть дистиллированная модель, которая генерит кадры в разы быстрее, приближаясь к реальному времени.
Вот вам статейка с инструкцией по запуску и кратким анализом архитектуры: Hunyuan-GameCraft: Запускаем процедурный игровой мир от Tencent🔙 🔙
Как думаете, сколько лет осталось до игр с полностью генерируемыми мирами, в которые можно будет полноценно играть? Год? Три? Пять? 👇
#щупаем_сорцы
Tencent (да, те самые, что делают PUBG) выкатили Hunyuan-GameCraft — опенсорсный фреймворк на Python для генерации интерактивных игровых миров.
- Память как у слона: Модель помнит сцену и не разваливается после пары поворотов, в отличие от многих предшественников.
- Обучена на AAA-играх: Ее натаскали на миллионе геймплейных роликов из 100+ топовых игр. Она знает, что такое "красиво" и "динамично".
- Ускоренная версия: Есть дистиллированная модель, которая генерит кадры в разы быстрее, приближаясь к реальному времени.
Вот вам статейка с инструкцией по запуску и кратким анализом архитектуры: Hunyuan-GameCraft: Запускаем процедурный игровой мир от Tencent
Как думаете, сколько лет осталось до игр с полностью генерируемыми мирами, в которые можно будет полноценно играть? Год? Три? Пять? 👇
#щупаем_сорцы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1 1
🐍 Алгоритмическая задачка: Прыжки Квантовой Блохи
Представьте себе очень энергичную, но немного дезориентированную квантовую блоху. Она сидит на бесконечной числовой линейке и хочет добраться из одной точки в другую.
Проблема в том, что она должна сделать ровно определенное количество прыжков. Не больше и не меньше!
Условие 🎯
Вам даны три положительных целых числа:
-
-
-
За один прыжок блоха может переместиться либо на одну позицию влево (-1), либо вправо (+1).
Ваша задача — написать функцию, которая вернет количество различных последовательностей прыжков, которые приведут блоху из
Примеры 👇
Пример 1:
Результат: 3
💡 Почему? Есть ровно три уникальных маршрута:
- 1 -> 2 -> 3 -> 2 (вправо, вправо, влево)
- 1 -> 2 -> 1 -> 2 (вправо, влево, вправо)
- 1 -> 0 -> 1 -> 2 (влево, вправо, вправо)
Пример 2:
Результат: 0
💡 Почему? Невозможно добраться до 5 из 2 за 10 шагов. Минимально нужно 3 шага. Оставшиеся 7 шагов (нечетное число) нельзя потратить на пары "туда-обратно", которые компенсируют друг друга.
Жду ваши решения в комментариях! 👇
Представьте себе очень энергичную, но немного дезориентированную квантовую блоху. Она сидит на бесконечной числовой линейке и хочет добраться из одной точки в другую.
Проблема в том, что она должна сделать ровно определенное количество прыжков. Не больше и не меньше!
Условие 🎯
Вам даны три положительных целых числа:
-
start_pos
— начальная позиция блохи.-
end_pos
— конечная цель.-
k
— точное количество прыжков, которое она должна совершить.За один прыжок блоха может переместиться либо на одну позицию влево (-1), либо вправо (+1).
Ваша задача — написать функцию, которая вернет количество различных последовательностей прыжков, которые приведут блоху из
start_pos
в end_pos
ровно за k
шагов.Примеры 👇
Пример 1:
start_pos = 1
end_pos = 2
k = 3
Результат: 3
💡 Почему? Есть ровно три уникальных маршрута:
- 1 -> 2 -> 3 -> 2 (вправо, вправо, влево)
- 1 -> 2 -> 1 -> 2 (вправо, влево, вправо)
- 1 -> 0 -> 1 -> 2 (влево, вправо, вправо)
Пример 2:
start_pos = 2
end_pos = 5
k = 10
Результат: 0
💡 Почему? Невозможно добраться до 5 из 2 за 10 шагов. Минимально нужно 3 шага. Оставшиеся 7 шагов (нечетное число) нельзя потратить на пары "туда-обратно", которые компенсируют друг друга.
Жду ваши решения в комментариях! 👇
🔥3🤔2🤯1 1
Из забавного: изучал по каким запросам выводятся статьи на моем сайте.
Есть перлы, конечно 😅
Сколько боли в этом запросе👨💻
#хих
Есть перлы, конечно 😅
Сколько боли в этом запросе
#хих
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13❤2 2🤣1🙈1
Война DRY, KISS и YAGNI ⚔️ ⚔️
Тебя научили этим трем принципам. Сказали, что это база.
Но тебе не рассказали главного: они постоянно воюют друг с другом.
Профессионализм — это не следовать этим правилам, а осознанно выбирать, какое из них предать в каждой конкретной ситуации.
📖 Читать, как выбрать, какой из принципов предать →
Тебя научили этим трем принципам. Сказали, что это база.
Но тебе не рассказали главного: они постоянно воюют друг с другом.
Профессионализм — это не следовать этим правилам, а осознанно выбирать, какое из них предать в каждой конкретной ситуации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥4👍3🙏1
@xom9IKC напомнил про хорошую рекомендацию 🎓
У Яндекса есть неплохая подборка хэндбуков по it-тематикам, причём не только для начинающих. Посмотреть всё можно здесь.
Что есть сейчас:
🔸 Основы Python
🔸 Основы C++
🔸 Машинное обучение
🔸 Основы алгоритмов
🔸 Математика для анализа данных
🔸 Flutter
Внутри — теория, задачки с автопроверкой и примеры. Я даже сам иногда туда заглядываю, когда готовлю материалы для своих курсов 🌝
Это, конечно, не заменит полноценный курс с наставником и комьюнити, но как бесплатный тренажёр или справочник — топ.
У Яндекса есть неплохая подборка хэндбуков по it-тематикам, причём не только для начинающих. Посмотреть всё можно здесь.
Что есть сейчас:
🔸 Основы Python
🔸 Основы C++
🔸 Машинное обучение
🔸 Основы алгоритмов
🔸 Математика для анализа данных
🔸 Flutter
Внутри — теория, задачки с автопроверкой и примеры. Я даже сам иногда туда заглядываю, когда готовлю материалы для своих курсов 🌝
Это, конечно, не заменит полноценный курс с наставником и комьюнити, но как бесплатный тренажёр или справочник — топ.
✍7❤3👍3🔥2⚡1🙏1🆒1 1
Наткнулся на GitHub-сборник классики: Pacman, Tetris, Flappy Bird... всё на Python. С одной стороны — респект автору, всё работает. С другой — это идеальный пример, набитый классическими «болячками», на которых можно учиться.
Давайте препарируем пару самых интересных случаев. Не для критики, а для образовательных целей. Чем работающий код отличается от хорошего?
Пациент №1: Шашки и порочный круг импортов.
В коде есть классы
Piece
, Pawn
и King
. Пешка (Pawn
) может стать королем (King
). Оба наследуются от Piece
. И чтобы превратить пешку в короля, автор делает вот так внутри метода класса Piece
:# Checkers/Piece.py
def _move(self, tile):
# ...
if self.notation == 'p':
if self.y == 0 or self.y == 7:
from King import King # <--- АТАС!
tile.occupying_piece = King(...)
Диагноз: Импорт внутри метода! Так автор обошел циклическую зависимость (
Piece
импортирует King
, а King
импортирует Piece
). Это симптом больной архитектуры. Фигура не должна знать о правилах своей "прокачки".Лечение: Делегировать! Класс
Board
(доска) должен управлять правилами. Метод _move
просто возвращает True
, а уже Board
проверяет, не пора ли пешке стать королем, и создает новый объект King
. Так мы разрываем порочную связь.Пациент №2: Flappy Bird и суп из глобальных переменных 🐤
# Flappy Bird/game.py
window_width = 600
#...
pipeVelX = -4
bird_velocity_y = -9
birdAccY = 1
Диагноз: Классика. Глобальные переменные и «магические числа». Что такое -4? Что такое 1? Через неделю сам автор забудет. Менять баланс игры — адская боль, нужно выискивать эти цифры по всему коду.
Лечение:
1. Все константы — в отдельный класс
GameConfig
.2. Всю логику и состояние (
score
, bird_velocity_y
) — внутрь класса FlappyBirdGame
и его атрибутов (self.score
).И вот так работающий код превращается в хороший. Разница — в архитектуре и подходе.
Разобрал еще 4 типовые ошибки из этого репо (управление ресурсами, смешение логики и отображения и др.) в статье с примерами.
👉 Читать про 6 ошибок новичка
А какие «костыли» из этого списка вы сами городили в начале пути? Признавайтесь 👇🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2⚡1 1
💡 Разбор задачи про прыжки квантовой блохи
1️⃣ Хорошее решение: инженерный подход (DP + кэш)
Решение через динамическое программирование с мемоизацией — очень хороший вариант. Выглядит он примерно так:
Мы рекурсивно исследуем все пути, а декоратор
Спойлер: можно.
2️⃣ Идеальное решение: комбинаторика
А что, если я скажу, что эту задачу можно решить одной формулой, без всяких рекурсий и DP? 😏
Вся магия кроется в комбинаторике. Давайте рассуждать:
- Пусть
- Очевидно, что общее число шагов
- Итоговая позиция:
У нас есть система из двух линейных уравнений. Решив её, мы легко найдем, что
И тут всё превращается в классическую задачу из комбинаторики:
А это — биномиальный коэффициент, или
Сначала пара проверок на адекватность:
1. Разница в позициях
2. Чётность должна совпадать:
Итоговый код:
Итог: вместо потенциально медленного DP со сложностью
Вот она, сила математики! 🧠
#алгособес
Решение через динамическое программирование с мемоизацией — очень хороший вариант. Выглядит он примерно так:
from functools import cache
def count_dp(start_pos, end_pos, k):
@cache
def dp(p, s):
# Базовый случай: шаги кончились
if s == 0:
return 1 if p == end_pos else 0
# Рекурсивный шаг: прыгаем влево и вправо
return dp(p - 1, s - 1) + dp(p + 1, s - 1)
return dp(start_pos, k)
Мы рекурсивно исследуем все пути, а декоратор
@cache
спасает нас от повторных вычислений для одних и тех же состояний (позиция, оставшиеся шаги). Классика, которая точно сработает на собеседовании. Но можно ли лучше?Спойлер: можно.
А что, если я скажу, что эту задачу можно решить одной формулой, без всяких рекурсий и DP? 😏
Вся магия кроется в комбинаторике. Давайте рассуждать:
- Пусть
R
— количество шагов вправо, а L
— количество шагов влево.- Очевидно, что общее число шагов
R + L = k
.- Итоговая позиция:
start_pos + R - L = end_pos
, откуда R - L = end_pos - start_pos
.У нас есть система из двух линейных уравнений. Решив её, мы легко найдем, что
R = (k + end_pos - start_pos) / 2
.И тут всё превращается в классическую задачу из комбинаторики:
Сколькими способами можно выбрать R шагов "вправо" из k общих шагов?
А это — биномиальный коэффициент, или
C(k, R)
. В Python 3.8+ для этого есть готовая функция math.comb
.Сначала пара проверок на адекватность:
1. Разница в позициях
abs(start_pos - end_pos)
не может быть больше k
.2. Чётность должна совпадать:
(k - abs(start_pos - end_pos)) % 2 == 0
. Если разница нечётная, то и шагов должно быть нечётное кол-во (и наоборот).Итоговый код:
import math
def count_math(start_pos, end_pos, k):
dist = end_pos - start_pos
if abs(dist) > k or (k - dist) % 2 != 0:
return 0
# Находим число шагов вправо
r = (k + dist) // 2
# Считаем C(k, r)
return math.comb(k, r)
Итог: вместо потенциально медленного DP со сложностью
O(k * dist)
мы получаем решение за O(1)
(если считать math.comb
быстрым для разумных k
).Вот она, сила математики! 🧠
#алгособес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1⚡1 1