Машинное обучение digest
54 subscribers
3.71K photos
593 videos
2.26K links
Download Telegram
💻 Какой язык программирования лучше для обучения?

Многие школы используют Java, C#, C или C++, но всё больше образовательных программ переходят на Python.

У Python есть очевидный плюс — на нём легче начать. Это помогает студентам быстрее увидеть результат и сохранять мотивацию.

Но есть и минус.

Python сильно абстрагирует низкоуровневые детали, поэтому студентам сложнее понять, как работают структуры данных, память и другие фундаментальные вещи.

Лично я считаю, что программисты должны становиться polyglots — людьми, которые знают несколько языков.

Фокусироваться на одном языке — стратегическая ошибка.

Но влияет ли язык на результаты обучения?

Исследование John R. Hott (ACM ICER 2025) показывает: почти никак.

Студенты, которые выполняли задания:

- только на Python
- только на Java
- на смеси языков

показали статистически одинаковые результаты.

Не было значимых различий:

- в оценках за программирование
- в письменных заданиях
- в тестах и квизах
- в уровне сложности, который испытывали студенты

Вывод исследования простой:

👉 выбор языка программирования почти не влияет на результаты обучения.

То есть преподавателям не стоит слишком переживать о том, какой язык выбрать для курса.

Гораздо важнее другое.

Вместо бесконечных споров *Python vs Java vs C++* стоит учить студентов:

- как создавать продукты
- как запускать проекты
- как строить бизнес
- как быть независимыми от технологических трендов

Как пишет Zed Shaw в эссе
“AI Didn't Kill Programming, You Did”:

проблема не в AI и не в языках программирования — проблема в том, как люди учатся программированию.

Главная мысль:

🚀 программирование можно выучить на любом языке.

Начните с Logo.
Попробуйте Ada.
Изучите Python, Go, Rust или C.

А ещё лучше — попробуйте придумать свой язык программирования.

Именно так и начинается настоящее понимание компьютеров.

Исследование
https://engineering.virginia.edu/faculty/john-r-hott

Эссе
https://learncodethehardway.com/blog/39-ai-didnt-kill-programming-you-did/

#programming #education #python #java
💡 Не используйте `Stream.peek()` для бизнес-логики

peek() предназначен в первую очередь для отладки: он выполняет побочное действие внутри цепочки и зависит от терминальной операции.


users.stream()
.peek(System.out::println)
.toList();


Для реальной обработки выбирайте:

* map() — преобразовать элементы;
* filter() — отфильтровать;
* forEach() — явно выполнить действие.

Код со скрытыми побочными эффектами сложнее читать, тестировать и поддерживать.

#Java #Streams
☕️ Java-совет: `LongAdder` вместо `AtomicLong` для горячих счётчиков

Частая ошибка в высоконагруженных системах:


private final AtomicLong requests = new AtomicLong();

requests.incrementAndGet();


Проблема: все потоки конкурируют за одну переменную.

Много потоков → больше CAS-коллизий → меньше производительность.

Для метрик лучше:


private final LongAdder requests = new LongAdder();

requests.increment();


Как работает:


AtomicLong:

Thread 1 ─┐
Thread 2 ─┼──> [100000]
Thread 3 ─┘


LongAdder:

Thread 1 → [10]
Thread 2 → [20]
Thread 3 → [15]


sum()


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

Идеально для:

Prometheus metrics
счётчиков запросов
статистики JVM
rate limiter

Но важно:


adder.sum()


не гарантирует точный атомарный снимок.

Используйте:

- LongAdder → метрики и статистика;
- AtomicLong → когда нужно точное значение.

Одна замена класса может заметно улучшить производительность под нагрузкой.

#java #jvm #performance