Что нужно знать новичкам в ИТ о разработке информационных систем?

— …Да и не только новичкам, кстати.Я готовлю обучающий курс для наших ребят и, для того, чтоб замотивировать себя на дальнейшую работу, я решил опубликовать вводную часть здесь, в виде статьи. В основном тут текст сумбурный - это мои заметки, не судите строго.Буду признателен за любые советы и обратную связь.

Пара слов о проблеме

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

Нет представления о том, как реализуется и как устроена типичная Корпоративная Информационная Система.

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

Понимаю, все эти «Корпоративные Информационные Системы» звучат задротно и канцелярно, но именно представление о типовом устройстве информационной системы является основным — а уже потом идут всякие "Клиент-серверы", "Монолиты", "Микросервисы", "Двух- и трёхзвенки" и эти ваши "Толстые клиенты".

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

Куда смещён фокус внимания?

Давайте взглянем на типичную картинку картинку-схему клиент-серверной архитектуры, которая просто и в хвост и в гриву эксплуатируется буквально везде в интернетах:

Типичная схема, представляющая клиент-сервеную архитектуру
Типичная схема, представляющая клиент-сервеную архитектуру

Думаю, такая картинка знакома всем.

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

Более того, для многих, «Клиент-сервер» — это когда «Есть клиент, сервер и база данных». При этом:

  • А что здесь тот самый “бэкэнд”, а что “фронтэнд”?
  • А как запросы с клиента уходят “в базу”?
  • А БД вообще обязательна на такой схеме? (Многие уверены, что да)

Да оно и понятно — в интернете тонна однообразной информации, зачастую от онлайн школ. При этом фокус внимание всегда смещён в подробности реализации «квадратиков» и «стрелочек», оставляя за скобками общий механизм взаимодействия.

Получается интересная тема: почти 99% собеседуемых джунов (и мидлов) уверенно и по заученным шаблонам рассказывают, что “фронт ходит в API”, тут же рассказывают, что “SOAP - это протокол, а REST - архитектурный принцип”, говорят, что умеют писать «простые SQL-запросы» (что это вообще такое?), но при этом не понимают для чего вообще нужна клиент-серверная архитектура, зачем нужно API, структуру HTTP запросов-ответов, виды связей между таблицами в реляционной БД, чем «БД отличается от СУБД». Как можно работать над решением проблемы заказчика, если не понимаешь то, что разрабатываешь?

Дальше больше.

Ещё пример: как-то один системный аналитик на собеседовании уверенно рассказывал мне про преимущества микросервиса перед монолитом, упоминал «балансировщики» по заученным лекалам, но не смог объяснить а какие вообще виды приложений бывают и чем, например, консольное приложение отличается от десктопного.

Ещё дальше: некоторые рассказывают про виды приложений, но не могут привести пример “из жизни” хотя бы одного десктопного приложения.

Снежный ком накапливается: профессии требуют, чтобы вы умели описывать интеграции через всякие Кафки, чтобы вы умели описывать микросервисы (или тестировать их, или реализовывать), учитывать всякие там “токены безопасности” и писать «простые SQL-запросы». Да, это ваши инструменты для повседневной работы. Если хотите, то, метафорически - эта ваша дрель. Но прежде чем изучать устройство дрелей, нужно сначала понять а зачем она нужна и в каких случаях её использовать.

Вы читаете, учите, заучиваете, что-то пишете, но чёрт. Это всё разрозненно и не собрано в единую картинку.

Ну ок, всё плохо. К чему ты клонишь?

Я искренне верю, что начинать надо с базы. С азов, которые сейчас почему-то активно игнорируются.

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

Когда вы их поймёте, прочувствуете и превратите в татуировку на своей груди тот самый типовой паттерн клиент-серверной архитектуры, все эти технологии станут просто дополнительным уровнем детализации — пояснением, как должна быть реализована “стрелочка между квадратиками” или “сам квадратик”. В этом случае осваивать новые технологии станет проще.

Чтобы понять эти квадратики-основы, надо усвоить:

  • Виды приложений
  • Как эти виды приложений применяются в Информационных Системах
  • Основные уровни реализации информационных систем: уровень представления (клиентские приложения), уровень бизнес-логики, уровень данных.
  • Типичные способы обмена данными между уровнями
  • Способы хранения данных (привет, реляционные СУБД!)

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

Надо сказать, что на мой взгляд нужно также иметь представление о:

  • Базовом устройстве компьютера. Прям вспоминаем школьную информатику за 5-7 классы. Все эти ОЗУ, ПЗУ, мышь, клавиатура, клик и дабл клик - это важно. Вы, чёрт подери, с этим работаете. И в том числе - что такое Операционная Система?
  • Базовые основы программирования. На уровне “что такое алгоритмы и какие они бывают?”, “что такое “Программа” - как она может запускаться?”

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

Закрепим нашу цель

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

Какой бы сложной система не представлялась, её, как того треклятого слона, можно съесть по кусочкам, рассматривая её как цепное взаимодействие “двух квадратиков” и передаваемых между ними сообщений:

Любая информационная система — это комбинация множества пар квадратиков, между которыми происходит "диалог"
Любая информационная система — это комбинация множества пар квадратиков, между которыми происходит "диалог"

Любая система может быть рассмотрена как комбинация пар её компонентов, общающихся между собой.

В итоге ИТ команде остаётся просто продумать “диалог”: какие квадратики взаимодействуют напрямую и каким способом они общаются? Как эти квадратики устроены?

Отвечая на эти вопросы, аналитик пишет технические задания, тестировщик планирует свои сценарии, а программист готовит код.

44
10 комментариев

Комментарий удалён модератором

Да что-то пока здесь больше соображений, чем прикладной информации. Побаиваюсь на хабр с этим идти :)

1

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

2

Спасибо за коммент. Это мои первые потуги, моя идея была в том, чтобы сместить фокус внимания в обучении на другие темы.
Благодаря такой обратной связи, я сейчас осознаю, что получилось крайне неточно донести то, что я хотел)
Буду перестраиваться

например, консольное приложение отличается от десктопного.Да и Вы подозреваю не сможете :)) есть консольные приложения, а есть gui ;)
Десктоп - несколько из другой оперы..

Спасибо, подкорректирую.
Мысль я раскрыл недостаточно — вы, например, спокойно мне возразили. И возразили корректно. И консоль, и гуй, и ещё, допустим, службу (или демон), которая вообще интерфейса не имеет — все можно отнести к десктопу.
Здесь я пытался как раз донести возможность рассуждать "во все стороны", эта аналогия была из области "чем БД от СУБД отличается"?

Сначала ничего не понял, а потом как понял)))