10.9K subscribers
331 photos
17 videos
15 files
714 links
Архитектура | Программирование | Профессиональное развитие

Live канал - https://t.iss.one/soer_live

SOER CLUB - https://soer.pro или https://boosty.to/s0er

Бусты - https://t.iss.one/boost/softwareengineervlog

№ 5101661084
Download Telegram
Пример чувака с претензией на глубокую мысль. Сам же выдаёт супер типовую базу.
Практика - лучший учитель и у врачей, и у программистов. Как только придумают что-то более эффективное я обязательно расскажу. Кстати, у хирургов практики сильно больше, прежде чем их допустят самостоятельно оперировать, программистам ещё повезло, любой может "потыкать" прод.
🔥46👍30🤡31
Оценка сложности кода

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

В итоге проще считать строчки, чем искать другие сложные метрики.

Для отчётности бывает "красиво" показать умные оценки кода, но для практики смысла мало.

Можно еще вспомнить про покрытие кода тестами - это тоже сомнительная метрика. Не совсем бесполезная, но сильно большой пользы тоже нет.

Так что из всего многообразия оценок я в итоге пришёл к выводу, что посчитать строки кода для оценки сложности - более чем достаточно, а для всего остального нужна оценка тех. долга и этого более чем достаточно.

Оценки обычно нужны для того чтобы прикинуть размеры команд и объёмы сопровождения, это в свою очередь помогает рассчитать стоимость владения. Для самих разрабов пользы особо нет, но бизнесу надо знать сколько денег у него уходит и почему.
👍25🤔12🔥7🤮21
Подписчик с ником Das.Kleine.Krokodil сделал подробные таймкоды к последнему стриму.
От души спасибо! Это прям то на что не хватает ни времени, ни сил.
👍80🏆9🥰6
Был ли опыт применения DSL, и если да, то был ли такой, который явно помог(«с ним лучше, чем без него») и по каким критериям/метрикам мерил?


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

Во-первых, потому что надо писать меньше кода.

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


Стоит отметить, что в мире более 7000 языков, большая часть из которых - DSL.


Единственный серьёзный минус разработки своего DSL - это затраты (как цена, так и сроки).

Сделать сразу хорошо и правильно, тоже вряд-ли получится, поэтому идея создать свой dsl уместна, только если речь идёт об "игре в долгую", тогда затраты могут окупиться, и польза превысит потери.
👍25👌53👏1
а я всё не пойму, когда в снг поймут, что тз это пережиток прошлого и максимум составляется техническим менеджментом для низкоуровневого технического персонала типа студентов и джунов.


Странный наброс, если говорить про Россию, то АйТи у нас развито на уровне выше среднего по миру, по факту одна из лидирующих позиций. Начиная от банкинга, заканчивая уровнем информатизации государства.
Опыт показывает, что ТЗ офигенно работает.
👍10623🔥6
Мне тут сбросили ссылку на мое видео 6ти летней давности про то что должен знать архитектор, очень актуальный видос, с подробным ответом. Посмотрел и порадовался за самого себя.
Отметил, что формат канала сильно изменился за эти шесть лет, стал более развлекательным, раньше я пытался больше концентрироваться на сути, сейчас на форме.
https://youtu.be/Qt1IxhoQ2dw?si=jO-QA3NCVWM9nGB1
👍533👏3🤔1
Откуда можно черпать знания по архитектуре?

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

Классификация

1. Базовые знания (или "база") - Теория программирования, Информатика, Языки программирования, устройство ОС, системы хранения данных и т.д.
2. Технические навыки (или "опыт") - это углубление знаний и реальный опыт работы, автоматизация своих навыков, развитие "ощущения" языка программирования, когда вы понимаете где "хорошо", "где плохо" и т.д.
3. Специализированные знания (или "специализация") - это когда вы находите конкретную область, которая вам интересна и получаете знания, которые релевантны только в этой области, они могут быть как технические, так и бизнесовые
4. Архитектурная карьера - карьерный переход из разработчика в Архитекторы, приоритет на проектирование и построение системы в целом, а не на детали.

Абстрактные советы

1. База
Базовые знания проще всего получать по готовым программам (ВУЗы, Курсы), имея на руках программу для изучения, можно подобрать книги для самостоятельного обучения, а можно пойти на курсы или в ВУЗ. Мой совет - ВУЗ с хорошими отзывами.

ВУЗ не отменяет дополнительно самообразование через литературу.

Самая большая проблема - как найти годные ВУЗы, Курсы и книги. Тут нет простых решений, наверное, проще всего искать единомышленников, вступать в сообщества, читать тематические группы, чтобы получить разные отзывы. Есть готовые подборки книг, которые можно искать поиском.

Построение базы занимает от 3-5 лет.

2. Опыт

Теория без практики мертва. Поэтому важно продумать свой карьерный план - найти перспективные компании, которые интересны, понять как требования для трудоустройства, с учетом этого расставить приоритеты изучения по "Базе". Соответственно иметь примерный план развития, на 1-2 года, в процессе которых пытаться искать работу.

Опыт нужен для закрепления навыков разработчика, развития аналитического и абстрактного мышления и т.д. Желательно менять специфику работы, углубляя знания и умения, которые есть.

Стандартная карьерная лестница джун - мидл - сеньер, где каждый уровень 1-2 года, т.е. при хорошей Базе, и нормальной работе можно за 5 лет дорасти до сеньера.

3. Специализация

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

Поняв специфику, определить ключевые моменты: какие теоретические знания надо иметь, какие инструменты надо знать, где и как научиться работать с этими инструментами.

4. Архитектура

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

Конкретика

- Для базовой подготовки хороши курсы CS50, SICP, книги Таненбаума, Маконнела, Роберта Мартина.
- Для развития опыта - МЯСО (МейлРу, Яндекс, Сбер, Озон), системные интеграторы (ИБС, Фактор-ТС и другие, где есть неплохой карьерный рост), государственный сектор (например, ГОСУСЛУГИ), либо компании с историей 5-10 лет и прозрачной карьерной составляющей
- Для быстрого старта, можно рассмотреть всякие буткемпы аля Школа 21
- Для изучения архитектуры см список книг ниже.

Архитектура ПО (первые шаги)
Clean Architecture (Robert C. Martin)
Domain Driven Design (Vaughn Vernon)
Architecting for Scale (Lee Atchison)
Software system architecture (Nick Rozanski, Eoin Woods)
Применение UML 2.0 и шаблонов проектирования (Крэг Ларман)
Monolith to Microservices. Evolutionary Patterns to Transform Your Monolith (Sam Newman)
Software Architecture in practice (Len Bass, Paul Clements, Rick Kazman)
Software Architect's Handbook: Become a successful software architect by implementing effective architecture concepts (Joseph Ingeno)
🔥95👍207😁3
Субботний стрим 04.11 10:00

Начинаю сбор вопросов на завтрашний стрим, напоминаю, что у нас будет четыре секции:

- Зачем это надо? (ЗЭН)
- Годное чтиво (разбираем книгу корпоративных паттернов)
- Сплетни нашего ютуба
- Донаты решают

В комментарии к этому посту скиньте вопросы на ЗЭН, они должны касаться АйТи.

Так же можно скинуть ссылки на свои репо, которые я могу посмотреть в прямом эфире и сказать мнение о коде и архитектуре, так же можно скинуть новость или ссылку на ютуб ролик, который можно обсудить в Сплетнях.
👍12
Чистая архитектура на frontend. Что это такое? Особенности, преимущества и недостатки

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

1. Основная идея чистой архитектуры - это управление зависимостями таким образом, чтобы изолировать бизнеслогику от всего кроме непосредственно бизнес-фич
2. Изоляция выполняется через создание интерфейсов, которые формируют границы модулей и позволяют выстраивать логику внутри модуля
3. Роберт Мартин считает, что уровень абстракции тем выше, чем дальше от ввода/вывода данных он находится, таким образом в чистой архитектуре бизнес логика должна быть слабо зацеплена на ввод/вывод
4. Поток управления может не совпадать с зависимостями, а по факту не будет совпадать, так как вызов функций всегда идет между вводом и выводом, посредством слоя бизнес-логики
5. Ядром архитектуры являются - варианты использования и сущности, которые окружены инфраструктурными и управленчискими конструкциями

Таким образом, чтобы фронтенд соотвествовал чистой архитектуре необходимо выполнить следующие шаги:
1. выделить бизнес-логику в виде сущностей и вариантов использования
2. изолировать бизнес логику от низкого уровня (а именно ввод/вывод, проверка и очистка данных)
3. выделить интерфейсы для взаимодействия низкого и высокого уровня абстракции (интерфейсы нужно выделять со стороны бизнес-логики)
4. Для преодоления границы через интерфейсы разработать DTO, которые необходимы только для переноса данных (короткий срок жизни)
5. Сформировать инфраструктурные и управленческие функции отдельно от БЛ

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

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

Но в целом чистая архитектура бэкнеда не сильно отличается от чистой архитектуры фронтенда, обычно границы хорошо видны по файловой структуре проекта, различия есть в источниках данных (БД или  HTTP-API) и нюансах инфраструктуры.
🔥49👍102
Нужно ли версионировать API, если разработка веб-приложения идет в монорепозитории?
Anonymous Poll
48%
Да, изменения API должны отражаться в его версии
12%
Нет, есть актуальный API без версии который все используют
39%
Зависит от ситуации
🤔5
Суббота 11.11.2023 12:00 Мск
Архитектурный стрим

Для всех кто купил подписку уровня STREAM (и выше) на soer.pro, в субботу пройдет закрытый стрим.

Тема стрима: "Что такое хорошая архитектура, что такое плохая архитектура"
🔥19👌4👎3🤔3🤩1
Туц, туц, туц, а тем временем сервисы Яндекса устали и пошли отдыхать
🙈43😁11👍9🤔3🦄2
Поднялись сервисы, у меня не работала Яндекс музыка и Яндекс.360, минут 30 где-то
😁23🎉8😱3🔥2🤣1👨‍💻1
Субботний стрим 11.11 10:00

Начинаю сбор вопросов на завтрашний стрим, напоминаю, что у нас будет четыре секции:

- Зачем это надо? (ЗЭН)
- Годное чтиво (разбираем книгу корпоративных паттернов)
- Сплетни нашего ютуба
- Донаты решают

В комментарии к этому посту скиньте вопросы на ЗЭН, они должны касаться АйТи.

Так же можно скинуть ссылки на свои репо, которые я могу посмотреть в прямом эфире и сказать мнение о коде и архитектуре, так же можно скинуть новость или ссылку на ютуб ролик, который можно обсудить в Сплетнях.
👍8
Чем занимаются программисты на рабочих местах

В 1994 году была опубликована интересная статья "people organizations and process improvement", в которой авторы рассказывали о результатах исследования по анализу рабочего времени программиста.

Не буду приводить детали исследования, статью легко нагуглить по названию.

Но самое интересное, что написание кода составляло в среднем 40% от рабочего дня программиста. А в оставшееся время программисты тратили огромное количество времени на коммуникации с другими программистами. Причем, основные вопросы - "как работает этот код?", "почему мы приняли такое решение?" т.е. получение информации из коллективного разума проекта, которая редко документируется.

Что-то мне подсказывает, что за более чем 25 лет, прошедших с того времени, особых изменений в процентном соотношении не произошло.

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

И по-прежнему документирование - это не самая сильная сторона большинства проектов.

А сколько времени в вашем рабочем дне занимает общение с другими программистами?
👍56💯10
Через 10 минут начинаю стрим для подписчиков уровня Stream и выше.

Подключиться онлайн можно используя ссылку "Активный архитектурный стрим" https://platform.soer.pro/#!/pages/overview/info

Так же завтра стрим появится в записи в разделе "Материалы" на платформе
👍6🤡4😁1
Сегодня на стриме поговорили про игру для обучения программированию Cyber Cat, вот группа в телеге для тех кто хочет принять участие в разработке игры - https://t.iss.one/+WriN-NDOL_5jYjZi
👍7🤡1
Взял книгу Влада Хононова, по рекомендациям подписчиков. Что радует, книга по DDD не очень объёмная, есть шанс, что без воды.
🔥59👍10