🚀 Patterns 2024 Тренинг с наставниками
Перевод готов, советую его прочитать даже тем, кто не берет курс, потому что это почти статья и там много идей как усовершенствовать свои знания и структурировать их:
Автор утверждает, что это самые важные вещи,
Я сторонник того, чтобы давать людям на собесах возможность листать доки, гуглить и даже спрашивать у нейронок. Что должен проверять собес? Эффективность, способность решать задачи, а не задротство, зубрежку и феноменальную память. Если вы начнете это делать, то внезапно для себя
Если Вы учите программирование и рассчитываете работать в типичном продукте или аутсорсе, в стартапе или фрилансе, то вот на чем можно сэкономить. Но это не касается тех, кто хочет стать системным программистом и работать в технологической компании. Так вот, чтобы быстрее учиться
Пришли студенты, сдали мн�� экзамен, я принял. А через неделю оказывается, что они перепутали и должны были сдавать другому преподавателю и другой предмет.
✨ Я разделяю программистов не на джунов, мидлов и сеньоров, а на системных, прикладных и продуктовых. Чтобы понять, чем они отличается, приведу 20 вопросов для системного программиста на
#Nodejs
А для прикладного я на днях опубликую еще 20 вопросов.
⬢ 1. Чего не хватает в ESM,
В 2005 году дед спросил меня, что я там программирую в этих компьютерах. Подумав, я показал флешку с программой, которая была защищена от копирования. Потом слышу, дед хвастается своему другу:
— Знаешь, что мой внук придумал?
— Ну...
— Как записать программу на зажигалку!
⚡ Самый важный навык в программировании — проектирование связей между абстракциями, но для этого нужно за кодом видеть эти самые абстракции и понимать, что такое связывание и какие у языка есть инструменты для связывания. Это гораздо важнее даже парадигм, которые все строятся
Во всех командах, на которые я имею влияние, как CTO, архитектор, овнер или адвайзер, запрещены Jira, Slack, Trello, Confluence и Microsoft Teams. Потому, что это суета и томление духа.
— Учишься в ВУЗе на программиста? Специальность?
— Я специалист в области обхода двумерных матриц, сортировки массива пузырьком, могу выводить на экран коэффициенты многочлена через std::cout, при помощи модуля crt, и даже через alert(), отлично знаю типы всех моих переменных
#NodeJS
✨🐢🚀✨ 50 вопросов для собеседования на прикладного бекенд программиста:
1. Что можно сделать с помощью for await с объектом request: IncomingMessage?
2. Чем в ноде нативно хешировать пароли и в каких случаях для этого нужны зависимости?
3. Какое API реализует
Кто говорит, что программист должен обязательно учить алгоритмы, тренироваться на литкоде и читать книжку с кабанчиком? Вы тоже не шарите, потому, что не понимаете переходных процессов в полупроводниках, не знаете как возникает диффузионный ток на pn-переходе. Нет у вас базы ))))
— Вы знаете, со временем
#JavaScript
перевернет жизнь всего человечества
— Ничего не будет: ни Java, ни Python, ни C++, ни PHP - один сплошной JavaScript
— Ну, это Вы что-то разгорячились. PHP - тут я согласен, действительно отомрет, но C#, Java
— Вспомните мои слова через 20 лет
Каждой задаче - свой инструмент. Для веба -
#JavaScript
. Кроссплатформенность, тут уже придется взять JS. Обучение на JS. Для бизнеслогики и DSL - только гибкий JS. Для БД - SQL. Для лоукода - JS. Для роботов и контроллеров - JS. Для бекенда -
#NodeJS
. Для AI - TensorFlow...
#js
💡 Паттерны проектирования для
#JavaScript
и
#Nodejs
(самые распространенные):
🧩 EventEmitter (он же Observer), встроен в ноду, а на фронте полифил или EventTarget,
🧩 Proxy - встроен в язык, перехват обращений к объекту,
🧩 Strategy - у нас это просто Object или Map - коллекция
Считаю плохой идеей учиться программированию на базе:
🙅🏻 Алгоритмов - они уже давно есть готовые в языках и платформах, менее 1% программистов будут их реализовывать в работе, а если будут, то их нужно за это наказывать. Вот что действительно нужно, так это краткий обзор
Расскажу, как я придумал учить начинающих программировать: исходим из того, что главные навыки это чтение кода и написание такого кода, который хорошо читается, это основной критерий качества, а значит и учить нужно не столько писать, как читать и исправлять
Чтобы писать на low-code нужно все то же, что и в обычном программировании, но это гораздо менее удобно. Условия и ветвление, циклы, структуры данных, работа с файлами, сетью, БД и прочее, никуда не деваются. Просто у вас не будет возможности:
🖕 писать юниттесты,
🖕 делать ревью
🧑💻 Миф про разделение учебы, работы и жизни — максимально деструктивная позиция для вас, как профессионала и человека. Например, сначала обучился, а потом работаешь, но работаешь только на работе, а живешь только вне работы. Нет, дорогие мои, так не работает, это рецепт — как
Ключевая проблема современности — это то, что люди пишут фронтенд или бек на NodeJS так и не освоив нормально асинхронное программирование. Его знание не наступает сразу после изучения синтаксиса
#JavaScript
и
#TypeScript
, надежность асинхронного кода невозможно полноценно
Самое важное умение в ИТ — это быть вежливым и терпеливым, особенно с младшими коллегами. Все остальное — справочные данные, которые в любое время можно взять из интернета и литературы.
✨ Нужно всегда разделять прикладной и системный код (это минимум два слоя реальности), как и роли программистов, описал подробнее.
🧑💻 Прикладной программист пишет продуктовый код, занимается моделированием предметной области и автоматизацией процессов в ней. Прикладному
⭐ Нода стала невыносимо сложной ☠️ вот что я понял, пока писал все эти вопросы для собеседований. Основная задача фреймворков - это снятие сложности. Так вот они не справляются с этим вообще. Если человек пишет на фреймворке, то он находится под давлением сложности
#NodeJS
,
Тут 4 способа добавления таймаутов к асинхронному API (на примере fetch), конечно fetch поддерживает AbortController, но не все знают про AbortSignal.timeout() и есть API без такой поддержки, так что сравнить есть что. Больше примеров тут:
☘ Программистам важно развивать этику. Ее не заменят ни паттерны, ни линтеры, и стиль кода от этики очень зависит. Например, законопослушный гражданин, но с этическими проблемами, может найти голодного бездомного и перед ним есть бутерброд ради прикола, это законно, но
Мышление программиста насквозь магическое, хоть и спрятано за рационализациями. Сплошная мифология, скрытая за наукообразными паттернами-заклинаниями, транс мистических дейликов, обращение к духам-помощникам, рабочее время — жертвоприношение, отладка — вообще шаманизм.
«Когда нацисты хватали коммунистов, я молчал: я не был коммунистом. Когда они сажали социал-демократов, я молчал: я не был социал-демократом. Когда они хватали членов профсоюза, я молчал: я не был в профсоюзе. Когда они пришли за мной — заступиться за меня было уже некому» М.Н.
Есть разные типы инженеров и на них разный спрос:
1. Для списывания часов
2. Для разработки продуктов
3. Для разработки технологий
Первый тип самый дорогой и спрос самый большой, а третий самый дешевый, часто готовы и бесплатно работать.
#softwaredevelopment
#forms
#api
#crud
На MDN есть статья, как писать на Node.js без фреймворков, с примерами кода из моего бесплатного курса. Но сейчас мы пошли еще дальше, как писать так, чтобы переезд с фреймворка на фреймворк занимал максимум пару часов.
🧩 Паттерн Adapter: разбор примера кода, в котором мы скрываем таймер (setInterval) за классом выдавая наружу контракт асинхронного итератора. Фрагмент из курса про адаптацию паттернов для мира JavaScript, TypeScript и Node.js. Этот и другие примеры кода тут:
Есть такой эффект, и я иногда чувствую вину за его распространение: человек только осваивает язык и платформу, но попадает на сложную лекцию о том, как все устроено внутри, о недокументированных функциях, оптимизациях, высоконагруженных и распределенных системах, многопоточности,
Почему большие коллективы менее эффективны в ИТ, все знают, что до 80% времени уходит на координацию. Но есть еще важный аспект: в крупных коллективах 20% времени уходит на три способа преодоления факапов, которые неизбежно в работе возникают: (1) построение оправданий, (2)
Есть два типа людей:
1. Научился писать круды — устроился формошлепом.
2. Научился делать масштабируемые, надежные, высоконагруженные распределенные системы — устроился формошлепом.
— Доклад на английском?
— На русском, про наш ресерч комплексити хелла в интеграции микросервисов и тонкую контейнеризацию для изоляции контекстов на стейтфул бекенде, оптимизацию перформанса, флексебилити транспортных протоколов для паблик апи, конфигурацию роутинга реквестов...
@fillpackart
Какая проблема, иди преподом на полставки, все отъебутся, получишь любовь и уважение студенток третьего курса, которые, к стати, никогда не стареют, выучишь программирование, в конце концов
Хорошее запоминание знаний, сигнатур методов, паттернов, алгоритмов, не делает вас автоматически профессионалом. Знания в современном мире под ногами валяются и что... значение знаний сильно преувеличено, а чем же тогда отличаются профессионалы? Только опытом и гибкостью ума,
Не только ChatGPT лучше работает, если ему задавать роль, попробуйте задавать роль себе, когда работаете, и вы сильно улучшите результат. Например, представьте себе, что пишете прикладной код и держите в голове внимание на этом, чтобы опять не начать в прикладном коде изобретать
@TatarinFrontend
У меня 13 лет назад было денег на 5 лет, с тех пор я пишу только оупенсорс, ни строчки проприетарного кода, делаю бесплатные лекции, сотни митапов, а теперь этот путь начали повторять десятки учеников, уже сейчас видно, что многие пой��ут ещё дальше. У нас есть большой план.
IT образование: для себя определил, что неприемлемо брать деньги с начинающих, с людей, которые еще не знают что им нужно, которые вообще слабо ориентируются в отрасли. Обратите внимание, большинство трешевых ИТ-школ и "инфобизнесменов" специализируются именно на начинающих, им
⚡️ Это случилось! 🎉 Впервые ChatGPT смог сделать код лучше и быстрее меня. Уже более 6 месяцев я время от времени применяю
#ChatGPT
,
#Bard
,
#Copilot
, просто на тех задачах, которые сам пишу, и все это время они или вообще не могли решить их или делали в 10-20 раз медленнее, с
JavaScrip собеседование: вопросы по асинхронному программированию - Фрагмент семинара из курсов Node.js 2024 и Async 2024
👉 Вопросов на собесы по асинхронному программированию:
👉 Вопросов на собесы по ноде:
👉 Node.js 2024
Это конец старой России, быстрее основывайте новую страну, все может измениться изнутри, табакерка, подполье, партизаны, ну вспомните, как это делается
Вчера на созвоне возник вопрос о халяльном хостинге. Выяснилось, что таковым может быть только bare metal без кубернетиса, потому, что кубер написал по-свински.
Записал стрим — смотрю, а там больше 7 часов, и главное — все по делу, про то, как и чему учиться и про важность культуры, которая проникает через паттерны в JavaScript
⚡️ Асинхронное программирования в JavaScript, Node.js
👉 Описание курса Async 2024:
👉 Старый курс по асинхронности:
👉 Курс Node.js 2024:
👉 Оглавление всех открытых лекций:
✨🐢🚀✨ Что с курсом по Node.js ✨🐢🚀✨
🧩 Формат: в связи с военной и экономической ситуацией очень многие взяли курс и не проходили его, не писали код и не показывали его, не приходили на созвоны, не задавали вопросы. Поэтому я принял решение продлить его и сделать
Для многих софтсикилы — это просто ничего незначащая строка в резюме, это подход дилетантов. А для профессионального ИТ руководителя — практика психологии — это ежедневная реальность. Мы работаем с людьми, больше, чем с кодом и проблем от людей больше. Так что, навыки в
Отличать красивый код от некрасивого, это первое, чему нужно учить. Эстетика и интуиция прививаются насмотренностью хороших и плохих примеров. Еще до того, как человек может написать что-то существенное, он без детального разбора, по внешнему виду способен сказать, испытывает ли
⛔️ Как жить то?
👉 Сократить до минимума инструменты.
👉 Сократить интеграции между ними.
👉 Исключить дублирующие способы коммуникации.
👉 Исключить дублирующие инструменты и форматы документов.
👉 Вместо того, чтобы иметь 10-15 инструментов, можно иметь 3-4.
💥 Увольте своих HR если они говорят вам, что нужно усилить фильтры формальными требованиями и ужесточить скрининг.
— А кто же будет проводить скрининг?
— Сами кандидаты. Попробуйте:
Опубликуйте больше подробностей о проекте и вакансии, о компании и коллективе. Сделайте опросник
По паттерну Middleware нужно отдельно пояснить, он не только приводит нас к race condition, а точнее и к конфликтам по данным и к конфликтам по control flow, но еще и всячески усиливает зацепление (coupling) кода:
⚠️ Провоцирует практику примесей (mixins), например:
— Как дела?
— Как всегда,
Майкрософт идет в никуда,
Делфа пропала,
Джава отстала,
Питон полон понтов,
В Си нехватает бантов,
Пэхапов теперь вовсе нет,
Джаваскрипт мой единственный свет.
Все время уходил от вопроса, про литературу, которую стоит читать программистам, это потому, что мой список выглядит странно и сложно объяснить, почему не Дядя Боб и не Мартин Фаулер... Они тоже, конечно, полезны, но все же мой список такой:
- Рене Декарт
- Людвиг Витгенштейн
-
Если вы слышите про переписывание монолита в микросервисы, то гарантировано — это проект с плохой кодовой базой. Потому, что при хорошей структуре кода, когда есть архитектурные границы, модульность, контрактное программирование, низкое зацепление и все по GRASP, то вопрос
Хамство — вот на что нужно проверять людей при наеме на работу. Хамство, выраженное в любой области, признак холопского мышления и профнепригодности к культурной деятельности, а ИТ это культура, для которой интеллигентность более важна, чем знания.
Как нужно писать вакансию (или CV):
- 10 лет опыта высоконагруженной архитектуры
- 7 лет опыта параллельного программирования
- 5 лет опыта паттернов банды четырех
- 3 года как покрываю код тестами
- 2 года как программирую без switch/case
- 1 год опыта с функциями до 10 строк
-
Для того, чтобы писать прикладной код не нужно все асинхронное программирование, хватит первого столбика, второй полезен, как дополнительные знания, а для бекенда на ноде он обязателен, третий столбик содержит системные вещи, которые нужны для разработки инструментов, платформ и