HowProgrammingWorks - JavaScript and Node.js Programming
6.24K subscribers
256 photos
5 videos
1 file
659 links
Программная инженерия и JavaScript сообщества Метархия.

Ссылки на митапы, группы и каналы сообщества https://github.com/HowProgrammingWorks/Index/blob/master/Links.md
Download Telegram
Как учить языки программирования? Несколько неочевидных подсказок:

🔵 Не нужно сразу стараться понять все, это как с человеческими языками, если концентрироваться на том, что вы не понимаете все на 100%, то обучение заблокировано, со временем пробелы будут закрываться, а после какого-то момента пазлы сложатся,
🟢 Нужно много читать и разбирать хорошего кода, основная деятельность программиста — это не написание, а чтение кода, это так не только во время обучения, но и в работе,
🟡 Нужно изучать плохой код, разбирать почему он плохой и исправлять, переписывать, улучшать, добиваться не скорости и применения сложных конструкций, а читаемости, простоты и понятности,
🔴 Важно делать ошибки, изобретать велосипеды, наступать на грабли, исправлять их и разбирать, в чем была проблема, конфликтовать и приходить к консенсусу, заходить в тупик и находить решение, это эффективнее всего делать в групповом проекте, объединяйтесь и работайте вместе.

Тут мои новые лекции для начинающих и много заданий: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Beginners.md
Forwarded from Asynchronous Programming
Сама логика предметной области имеет асинхронную природу. Ни какие балансировщики и гейтвеи, ни какие облака или FaaS не могут решить проблемы конкуррентного доступа к памяти, cpu, диску, системам ввода-вывода. Но писать доменный код в стиле параллельного программирования — это тупик, а асинхронное программирование не намного проще, тем более на #JavaScript под управлением #nodejs. Мои взгляд на этот вопрос будет в курсе, который готовлю, точной даты не знаю, но до нового года точно будет: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md
⭐️ Тут сведены идеи применения AI, точнее LLMок в разработке программного обеспечения. Что они делают хорошо 🟢, что удовлетворительно 🟧, а что вообще плохо 🛑
🟢 Анализ больших объемов данных, которые человеку сложно внимательно обработать
∙ логов и стектрейсов
∙ memory dumps
∙ dependency trees
∙ git blame
🟢 Портирование:
∙ с одной версии фреймворка или библиотеки на другую
∙ с одного языка на другой
∙ с одной СУБД на другую
∙ с одной OS на другую или поддержка нескольких
🟢 Боты и тулинг для автоматизации обработки кодовой базы и репозиториев:
∙ применение стиля
∙ применение чеклиста изменений
∙ поиск уязвимостей в кодовой базе
∙ маркировка commits, pull requests, issues
∙ расстановка тегов по коммитам и т.д.
∙ автоматизация закрытия тасков, майлстоунов
∙ поиск дубликатов кода, тасков, или перелинковка связанных
∙ аудит объемов работы, качества, сбор статистики
∙ предложения для рефакторинга
∙ поддержание консистентности кодовой базы и стиля
∙ создание спеки стиля кода по примерам кода или кодовой базе проекта
∙ предложение метрик для оценки кода и вычисление этих метрик
🟢 Написание текстов:
∙ подготовка CHANGELOG, HOW TO, Q&A
∙ генерация документации по коду
∙ реверс-инжиниринг кода в ТЗ
∙ поиск отличий между ТЗ, кодом, доками
∙ преобразование между форматами данных, например json, csv, pdf, sql, txt
🟢 Управление проектами
∙ оценка трудоемкости разработки, времени и денег
∙ оценка возможности распараллеливания разработки
∙ поиск слабых мест и выявление проблем в сметах, планах, ТЗ
∙ предложения по оптимизации бизнес-процессов
∙ сбор данных для подготовки принятия решений
🟢 Программирование
∙ алгоритмические задачи, подбор и реализация алгоритмов
∙ портирование, перевод и транспиляция между языками программирования
∙ преобразование между class и prototype в JavaScript
∙ оптимизация по заданному критерию: cpu, ram, i/o, lines, читаемость, сложность, etc.
∙ объяснение кода
∙ генерация примеров использования библиотек или абстракций
∙ ревью пул реквестов
∙ генерация юниттестов, системных тестов
∙ генерация конфигураций
∙ настройка CI/CD
∙ генерация SQL запросов
∙ генерация API, CRUD, формочек
∙ генерация моделей, структур, DTO, схем данных, классов, jsdoc
∙ преобразование моделей между разными синтаксисами
∙ синхронизаций структуры базы данных, схем, моделей, форочек
∙ генерация тайпингов и заголовочных файлов как .h, .d.ts
∙ подготовка контрактов и описание интерфейсов для интеграции систем
∙ генерация парсеров, конвертеров, по примерам входных и выходных форматов данных
∙ генерация валидаторов данных и валидаторов контрактов
🟧 Задачи, которые LLMки делают, но не всегда качественно и с проблемами
∙ терпимо конвертирует код между парадигмами: ООП, процедурное и структурное программирование
∙ гораздо хуже конвертирует между ООП и ФП
∙ асинхронное программирование и задачи с доступом к состоянию из разных мест
∙ олимпиадное программирование
∙ подготовка шаблонов и примеров приложений/проектов
∙ выбор зависимостей
∙ выбор СУБД, языков программирования, платформ, тулинга
∙ концептуальный код, демонстрирующий идею и делающий ее понятнее для многих
🛑 Что плохо решается при помощи LLMок
∙ системное программирование
∙ платформенный код, код библиотек, фреймворков
∙ новые и прорывные технологические решения, которые негде подсмотреть
∙ большинство новых нетипичных задач, когда в интернете мало примеров кода
∙ архитектура систем и структура приложений, даже при наличии множества примеров
😜 Есть такой эффект, и я иногда чувствую вину за его распространение: человек только осваивает язык и платформу, но попадает на сложную лекцию о том, как все устроено внутри, о недокументированных функциях, оптимизациях, высоконагруженных и распределенных системах, многопоточности, сборке мусора, метапрограммировании, ивентлупе и т.д. и вот ему дают задачу (или он сам себе ее ставит) например: «сделать апи для получения с сервера списка городов» и тут он вспоминает про асинхронные генераторы, бекпрешер в стримах, про инверсию управления и начинается... нужно все сделать по науке, чтоб миллион пользователей пришло и что будет, если каждый 10 раз в секунду будет выкачивать список, в котором сотни тысяч записей, а может быть давайте не в JSON слать, а придумаем для этого бинарный протокол и сэкономим на кавычках и запятых, будем строки разделать байтом FF, и обязательно предусмотреть отмену получения списка и докачку, если соединение разорвалось с того же места и чтоб кеширование работало, но была возможность принудительно кеш обновлять... А если справочник меняется, то нужно вебсокетами присылать изменения, нужно придумать в каком формате, и таймаут держать в памяти, что если докачка не началась в течении 5 минут, то уже не начнется, а если соединение восстановлено, но мы подключились к другому процессу или потоку, а если сервер перегрузился нужно же... и это бесконечно, так складывание двух чисел можно защищать от влияния космических лучей... я уже не говорю про микротесты и нагрузочные тесты, которые непременно нужно нужно гонять пару часов. Ну... все это... конечно способствует освоению платформы, это интересно и через пару лет может дать полезные результаты и я не хочу отговаривать от экспериментов, но признайтесь себе, сколько будет пользователей, данных и интенсивности через год, два, три, прикиньте грубо, ну на 2 можно умножить и дать себе отчёт в действительных целях своего R&D
Please open Telegram to view this post
VIEW IN TELEGRAM
🏋️ Что кодворс что литкод позволяют хорошо потренироваться в тех задачах, которых никогда не будет на робочих проектах.
Монитор для Java разработки
👩‍💻 Напоминаю, что тут есть 38 задач по рефакторинку кода JavaScript, очень важно не переписывать с нуля, а понять что работает и пошагово улучшать код

https://github.com/HowProgrammingWorks/Exams
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Metaeducation
🖼 Самый важный навык в программировании — проектирование связей между абстракциями, но для этого нужно за кодом видеть эти самые абстракции и понимать, что такое связывание и какие у языка есть инструменты для связывания. Это гораздо важнее даже парадигм, которые все строятся уже на этом фундаменте, применяя разные синтаксические и вычислительные приемы. Вместо этого все учат алгоритмы, языки, фреймворки, паттерны, которые важны, конечно, но по сути алгоритмы берутся готовые и вам вряд-ли выпадет счастье изобрести принципиально новый и неизвестный науке алгоритм. А все функции, классы и методы библиотек — не больше, чем справочная информация, которую можно и не помнить. Так что, я собираюсь сделать большую пачку заданий на тренировку именно этого навыка — проектирование связывания (зацепления) между абстракциями. Все будет в нашей организации на гитхабе, которая получила в хеадере основные ссылки на материалы https://github.com/HowProgrammingWorks
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Metaeducation
⚡️ Оптимизация до выявления проблем — это признак системного кода, а если вы делаете это в прикладном, то вы или еще учитесь или экспериментируете для себя или вас нужно гнать с проекта. Когда стоит оптимизировать прикладной код: когда вы уперлись в проблему, а до этого просто пишите обычный максимально простой, читаемый и понятный код.
🎉 Опа, чуть не забыл, что сегодня черная пятница, в общем так, курс по ноде продлен на следующий год, количество материалов увеличивается вдвое, оглавление опубликую на днях, а через неделю цена тоже увеличится c $200 до $300 https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2022-2023.md
⚡️ А сегодня кто возьмет за $100 на патреоне план Professional на год, то получает видеозаписи за 2023 https://www.patreon.com/tshemsedinov
Только видеозаписи, это не курс, без ревью, без проверки и обсуждения заданий, но в записях есть чужие ревью.
🖼 Ночь у многих была бессонная, но эфир будет по расписанию, через час
👉 https://www.youtube.com/live/MrenxehBK1g
Вопросы будут приниматься в чате под видео. Готовьте вопросы. Жду на стриме
Please open Telegram to view this post
VIEW IN TELEGRAM