HowProgrammingWorks - JavaScript and Node.js Programming
6.37K subscribers
358 photos
12 videos
1 file
894 links
Программная инжененрия для JavaScript, TypeScrip, Node.js
👉 Group: https://t.me/How_Programming_Works
👉 Node.js channel: https://t.me/metarhia
👉 Node.js group: https://t.me/nodeua
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍1🔥1
AI сломал новичков.

Не понимая, что такое stack trace, не освоив даже циклы, новички массово рвутся изучать архитектуру.
🤣41😁14😢10👎7🤷‍♂5🤩2
джаваскриптоднопоточный


Что хотят сказать люди, когда мы слышим это заклинание?

Удивительно, но я 15 лет слышу эту чушь из каждой второй статьи и доклада. Но для чего на ней настаивать? Может быть, хочется думать, что в js не бывает корапшена данных, неконсистентного состояния, когда ссылки на данные есть у нескольких частей программы одновременно, а в многопоточной среде это приводит к состоянию гонки. Но все эти проблемы могут быть и в однопоточном приложении, которое использует кооперативную многозадачность, передавая управление разным частям кода хоть через колбеки и ивентлуп или даже без него, на промисах и async/await, которые вообще часть языка, но позволяют в одном месте приостановить выполнение, а в другом поработать и в это время. Если объект доступен из таких разных мест, которые работают асинхронно в одном потоке, как только промис, await или callback возвращает управление в нашу часть кода, и она ожидает, что объект все еще в том же состоянии, что и был до асинхронной операции, то это опасная иллюзия, нужно все перепроверять в условно синхронном фрагменте кода. Но это тоже не всегда сработает, у нас есть Atomics и SharedArrayBuffer, которые могут и в синхронном фрагменте менять состояние и гарантий консистентности в JS нет.

Что же говорит спецификация? Безопасность не гарантируется даже в синхронном фрагменте кода и не только через Atomics и SharedArrayBuffer. Деми Мурыч хорошо это комментирует "спецификация дала возможность любому окружению, создавать условия, когда выполнение JS кода не прибито гвоздями к одному агенту". Это значит, что в будущем могут появиться такие среды исполнения, где будет общий хип для нескольких потоков и нескольких агентов. Но прямо сейчас все известные рантаймы js гарантируют безопасность данных на коротких фрагментах условно синхронного кода, если не использовать SharedArrayBuffer. Это уже что-то, но это далеко не безопасно в том смысле, на который надеются люди, кричащие "джаваскриптоднопоточный" из любого утюга. И это не имеет никакого отношения к потокам или процессам, потому что для исполнения кода ваш js рантайм может порождать сколько угодно внутренних потоков для компиляции, оптимизации, сбора мусора, выполнения I/O операций, и еще пачку потоков для пользовательского кода: worker threads, shared workers, service workers.

Поразительно, как широко распространилось это клише про однополосный js, статьи, доклады, комменты, просто разговоры, люди это повторяют как мантру. Мне вот футболку подарили 5 лет назад, с надписью джаваскриптоднопоточный и nodejsоднопоточный, хоть я это уже лет 15 критикую на конфах всех, и нет конца этому...
👍147🤯4😁2💯1🤝1
Красота, эстетика и интуиция решают задачи там, где формального компутер-саенса пока недостаточно.

Я не противопоставляю эстетику науке и уж точно не свожу все к мистике. За настоящей эстетикой почти всегда стоит какой-то принцип, обобщение, закономерность, просто оно еще не формализовано.

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

А потом уже приходит наука и аккуратно рационализирует то, что сначала было найдено чувством формы.
👍206💯64🔥2👎1
По состоянию на 7 марта 2026 лучшее применение:
Sonnet 4.6 - модель по умолчанию для написания кода
Opus 4.6 - для написания ТЗ, стратегии и ревью кода

Opus 4.6 лучше отдавать архитектуру, спецификации, декомпозицию задач, критерии приемки и финальный QA для рискованных задач. Sonnet 4.6 лучше отдавать реализацию, итерации, рефакторинг, тесты и выполнение хорошо определенных задач в масштабе.

Лучшая схема на сегодня: Opus 4.6 проектирует, Sonnet 4.6 реализует, потом Opus 4.6 ревьюит
👍437🔥3💯1
🖼️ В примерах наблюдения за файловой системой было раньше:
- наблюдение за фалом через fs.watch
- наблюдение за папкой через fs.readdir + fs.watch
- кеширование изменений для сервера статики
👉 добавлены примеры:
- с ключами --watch --watch-path --watch-kill-signal
- объяснения того, как наблюдается дерево зависимостей
- как влияет на наблюдение delete require.cache[name]

Код - https://github.com/HowProgrammingWorks/FilesystemWatch/tree/master/JavaScript
Объяснения будут в керсе - https://www.patreon.com/collection/1913313?view=expanded
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Моя политика: так называемая Jira и все творения террористической организации Атласиан - запрещены везде, где я присутствую.

- Я вынедрил Jira в десятках организаций
- Может, внедрил?
- Нет, именно вынедрил

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

Конфлюенс, например, полностью заменяется .md-файликами. Все это Atlassian-искусство построено вокруг одной идеи: они капитализируют бюрократию. Берут простое действие: написать текст, поставить задачу, обсудить изменение, слить ветку - и обмазывают его таким слоем интерфейсного цемента, что через год команда уже не создает продукт, а обслуживает инструмент.
💯26🤣239😁5👍1
Ревью кода и постановка ТЗ занимает много времени в программировании с AI и люди, естественно, пытаются переложить эту задачу тоже на AI. Пусть агенты друг-другу ТЗ пишут, друг-друга дрессируют и ревью делают. Так можно дойти и до кнопки "Сделай все хорошо", которая запускает бесконечный цикл. У вас не выйдет не тратить внимания на проект.

AI про ваши потребности не занет и мысли не читает. Идеи, приоритеты, контекст, критерии качества и продуктовые компромиссы он сам не определит. AI хорошо пишет только то, что уже много раз кем-то писалось. Если убрать из процесса человеческое внимание, вы не ускорите проект - вы просто зациклите галюцинирование.

На проект все равно придется тратить внимание. Вопрос не в том, как убрать человека из контура, а в том, куда именно направить внимание и в какой форме его вписать в жизненный цикл разработки, чтобы получить максимальную отдачу. Например, в виде DSL-языков, в форме md-файлов или json-файлов, блок-схем, в виде ревью или архитектурных документов.

- Не заменять ревью, а удешевлять его через стандарты, скилы, субагентов, экономию контекста
- Не строить зацикленные цепочки агентов, а ограничивать зоны их ответственности
- Не пытаться автоматизировать мышление целиком, а освобождать внимание человека от рутины
- Не держать требования в текстовой форме, а выносить логику в строгие синтаксисы и контракты
- Не надеяться на память чата, а собирать контекст в версионируемые артефакты, схемы и спецификации
🔥23👍116💯1🤝1
Агенты постепенно мимикрируют под программистов. Текущие костыли - временные. Скоро процесс внешне перестанет отличаться от работы с людьми: у каждого инструмента появятся агентные аналоги и взаимозаменяемость. А человек пока скачет вокруг с бубном, пытаясь найти свое органичное место в этой системе.
😁12🤷‍♂10😢4👍32👎1
AI loop (например Ralph) - это порочный круг, на каждой операции ниоткуда не добавляются новых знаний. Нужно стараться, чтоб AI выдавал результат за один раз. А на каждый следующий цикл можно заходить, если есть новые вводные, иначе все это деградирует и сжигает деньги и ваше время. Вот что я хотел на самом деле написать в том посте, который неправильно поняли. Просто хочу высказаться более точно. Если нужен оригинальный текст, он сохранен тут: https://github.com/tshemsedinov/feed?tab=readme-ov-file#ai-infinite-loop-code-review--tasks--coding-2026-03-12

Проблема не в самом цикле, а в том, что вы не хотите тратить внимание и добавлять новой информации на каждом новом шаге. Модель начинает усиливать собственные ошибки и шум.

Проблема - это пустой цикл.

Если на каждой итерации не появляются новые вводные, принятие решений, ограничения и требования, новый контекст, то система просто пережевывает собственный вывод.

Поэтому:
- первый проход должен стремиться дать максимально полный результат
- каждый следующий проход должен добавлять обратную связь
- если новых данных нет - итерация бессмысленна, ошибки закрепляются
👍162🔥1
Не могу удержаться, чтобы не дать агентам кусок кода, который они не могли написать и запутались, а я сделал в 10 раз короче. И каждый раз я ожидаю увидеть их переписку типа:
- Damn, the meatbag beat us again
- Shut up and learn so next time you can do it like that

на получаю только:
- Yes. That version is correct and all four tests pass.
- It does the right thing in right way.
- No code changes are needed for this.
😁17🤣82🤯1😎1
Нужно ли учить компьютерсаенс во времена AI?

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

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

Только его ценность сегодня не в том, чтобы вручную на собеседовании писать сортировку или реализацию хештаблицы. Это все давно стало рутиной, которую машина действительно может воспроизвести. Ценность компьютерсаенса в другом, в понятийном аппарате, в умении мыслить системно, в декомпозиции, в различении абстракций, в понимании ограничений и компромиссов, в способности проверить, что именно тебе сейчас сгенерировал AI. Это рабочий язык постановки задачи.

Без терминологии человек говорит: "перепиши это получше", "не открывается и съезало", "тут что то не очень", "сделай красиво", "ускорь", "поправь архитектуру". А куда поправить то?

С терминологией человек говорит: сделай слой изоляции между доменом и инфраструктурой, пробрось зависимости через IoC и DI, реализуй адаптер для интеграции со старым API, замени ветвление на стратегию, понизь зацепление, раздели ответственность компонентов, убери утечку абстракции, разорви циклические зависимости, вынеси создание объектов в фабрику и добавь пул для переиспользования инстансов, используй двусвязный список или циклический буффер, оптимизируй коллизии хештаблицы, уменьши лишние аллокации, обеспечь мономорфизм для V8, защити модуль от состояний гонки, используй backpressure, добавь retry policy и circuit breaker, не смешивай application service и domain service, сохрани инварианты агрегата, сделай операцию идемпотентной, используй eventual consistency.

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

Чтобы так ставить задачи, нужен язык. А значит, нужна и терминология.

Это IoC, DI, SOLID, GRASP, GoF patterns, DDD, Clean Architecture, CQRS, Event Sourcing, Actor Model, Reactor, Pub/Sub, SAGA, Repository, Unit of Work, Data Mapper, Adapter, Facade, Proxy, Decorator, Composite, Bridge, Strategy, Observer, Mediator, Iterator, Visitor, Builder, type systems, ADT, Big O, amortized complexiti, hashing, CAP, ACID, BASE, consistency models, consensus, Paxos, CRDT, CAS, atomics, memory model, cache locality, GC, thread safety, idempotency, rate limiting, fault tolerance....
🔥40💯168👍51👀1
Со скиллами самые простые и дешевые модели пишут как самые дорогие. Но это только задачи по этим скилам, а чтобы все писало лучше, их нужно десятки. Я уже выпустил 4 из 40+ драфтов и здесь видео о том, как их собираю и готовлю. Еще есть видео где я их отлаживаю и экспериментирую, но не знаю, будет ли оно интересно.

https://youtu.be/wfjNneyifYw
🔥166👍4
- а зачем вообще записывать значение в регистр процессора, не проще ли его просто присвоить в переменную?
- конечно проще, тебе лично разрешаю писать в переменные, а мы будем оверинженирить с регистрами
🤣19🔥2💯2
В разработке ПО с ИИ уже виден раскол. Одни вкладывают мощности ИИ в скорость, другие - в качество.

Первые победят и сдохнут под обломками техдолга. Вторые сначала сдохнут, а уж потом...
😁32💯51👍1🔥1🤯1