Техстек что это
Перейти к содержимому

Техстек что это

  • автор:

Применяемый стек технологий

Стек (англ. stack – стопка) технологий — это набор инструментов, применяющийся при работе в проектах и включающий языки программирования, фрэймворки, системы управления базами данных, компиляторы и т. д.

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

Инструменты разработчика

При разработке ПО наша компания использует такие языки программирования как Go (Golang), PHP, PowerScript, C/C++, JavaScript, Python. В новых проектах PHP, PowerScript, C/C++ не используются, основным языком программирования является Go. Go — компилируемый многопоточный язык программирования, разработанный компанией Google. Go имеет обширную стандартную библиотеку и большое количество пакетов разработанных golang-сообществом. Он отлично подходит для создания высоконагруженных backend приложений. Мы используем GO с MVC фреймворком revel. На стороне frontend мы используем кроссбраузерный js-фреймворк Webix, который позволяет быстро создавать мобильные и настольные веб-приложения. Также во frontend используется JQuery, нативные html и js. Наши приложения используют такие СУБД как PostgreSQL, Oracle, MySQL и SQLite. Внутренние процессы автоматизируются скриптами на Python и Perl. Для создания инсталляторов под Windows используем InnoSetup. Приложения, разработанные нашей компанией создаются с поддержкой Windows и Linux.

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

Проектные группы работают с системой контроля версий Git в связке с Gerrit. Для учета задач используется система учета задач и проектов RedMine. Разработка ПО ведется в соответствии с методологией SCRUM.

Инструменты разработчика

А теперь давайте подробнее рассмотрим что именно, как и почему мы используем.

Эрнесту Резерфорду, «отцу» ядерной физики, приписывается высказывание — «Если учёный не может объяснить уборщице, которая убирается у него в лаборатории, смысл своей работы, то он сам не понимает, что он делает.». Следуя этому утверждению, мы постараемся рассказать, чем занимается отдел разработки в RBS таким образом, чтобы рассказ был достаточно точным технически, но в то же время понятен даже далеким от разработки программного обеспечения людям. Надеемся, что после прочтения статьи ни у кого, а особенно у кандидатов на должность инженера-разработчика, не останется вопросов «чем вы занимаетесь», «какие инструменты применяете» и «почему именно их».

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

Эти программы представляют собой информационные системы с удобным для пользователя графическим интерфейсом, базами данных для хранения информации, и серверами, которые обрабатывают, вычисляют, сохраняют и анализируют данные. В общем-то, они делают то же самое, что и рядовые сотрудники различных компаний, ГИБДД, МРЭО, Гостехнадзора и Автошкол, только автоматически, быстро и точно.

Инструменты разработчика

Каждой задаче требуется свой инструмент, и когда перед нами встала задача автоматизации бизнес-процессов вышеупомянутых организаций, мы выбрали инструментарий, обычно используемый при разработке web-приложений. Это клиент-серверные технологии, когда часть программы выполняется на централизованном сервере, а часть — на компьютере пользователя. Такая архитектура позволяет очень четко отделить пользовательский интерфейс от сложных вычислительных процессов над данными. Обычно данные обрабатываются и хранятся на сервере, это называется «backend», а выводятся у пользователя, на «клиенте», и это называется «frontend». Это очень похоже на работу типичного сайта — пользователь читает новости в своем браузере, не задумываясь, каким образом эти новости были получены, а получены они были от сервера, где хранились в базе данных, и были извлечены из нее серверным приложением («backend’ом»). Как и у сайта из примера, у нас применяются базы данных для хранения огромных массивов информации, и именно им будет посвящен следующий абзац.

Инструменты разработчика

Одна из задач, которую мы решаем, это обработка данных о нарушениях правил ПДД, поступающих с огромного количества камер фотовидеофиксации, со всего города. Это очень большой объем данных, и мало эти данные обработать, их необходимо где-то хранить. Для хранения мы применяем системы управления базами данных, такие как PostgreSQL, Oracle. Причем, все новые проекты, как правило, разрабатываются с использованием именно PostgreSQL, так как, во-первых, она достаточно функциональна для работы с большим объемом данных, а, во-вторых, не ограничивается коммерческими лицензиями, и это дает уверенность в свободе этой системы от политических или деловых решений владельцев СУБД. В ранних проектах компании RBS для работы с данными применялась СУБД Oracle, и это означает, что разработчик должен уметь работать с ней, чтобы мы могли поддерживать всех наших клиентов. О необходимости владения языком запросов SQL говорить молодому разработчику нет смысла, это должно быть очевидно.

Инструменты разработчика

Для того, чтобы данные, задействованные в некотором бизнес-процессе, сохранить в базу данных после предварительной обработки и некоторых вычислений, необходимо серверное приложение, которое должно отвечать перечисленным далее требованиям. Во-первых, оно должно быть очень быстрым. Во-вторых, оно должно поддерживать параллельную обработку данных, ведь их так много. В-третьих, оно должно быть надежным. И, наконец, оно должно быть достаточно простым, чтобы множество разработчиков разного уровня компетенции и опыта, смогли работать над новым функционалом. В поисках языка программирования, соответствующего этим требованиям, мы нашли Golang. Это многопоточный (параллельность обработки данных), компилируемый (скорость и надежность) язык программирования общего назначения (подходит для разных задач), разработанный в недрах компании Google, и свободно распространяемый среди разработчиков, в том числе для коммерческого использования. У этого языка достаточно низкий порог вхождения, чтобы даже junior-программисты, после краткой практики, смогли полноценно работать над созданием серверных приложений.

Инструменты разработчика

Ранее в статье мы рассказали, что наши информационные системы — это клиент-серверные web-приложения, и раз мы уже разобрали базы данных и серверы, значит пришло время клиентской части приложения — frontend. Frontend, он же «клиентское приложение», это та часть программы, которая работает на стороне пользователя, и, как правило, отвечает за отрисовку графического интерфейса, ввод данных в формы, а также за взаимодействие с сервером (по протоколу HTTP, асинхронно, если кому-либо интересно). В этой области де-факто стандартом является связка JavaScript + HTML + CSS. Первый — это язык программирования, выполняемый прямо в браузере — он отвечает за всю логику клиентского приложения и отправку данных на сервер или обработку данных с сервера. Два последних — это типичные для сайтостроения средства верстки графического интерфейса. Стажеру, едва только устроившемуся в наш отдел разработки, следует особое внимание уделить именно этим технологиям — с них начнется его путь к должности старшего разработчика. И пусть он не обманывается низким порогом вхождения в JavaScript – он легок в самом начале, и значительно усложняется пропорционально увеличению опыта, когда стажер переходит от простеньких скриптов, и приступает к разработке клиентского приложения для большой информационной системы.

Каждый программист может подтвердить, что разработчики — «ленивые» люди. Они всеми силами стараются избежать выполнения одной и той же работы, автоматизируя ее и используя уже готовые решения, образно говоря, «не изобретая велосипед». Это в том числе означает, что, начиная разработку новой информационной системы, мы ищем библиотеки и фреймворки, которые решают типовые задачи, возникающие в процессе создания клиент-серверных программ. Например, для создания HTTP-сервера, и в качестве каркаса серверного приложения с RESTful интерфейсом, мы используем MVC фреймворк Revel, написанный на Golang, а для создания графического интерфейса — виджетный фреймворк Webix, написанный на JavaScript. Список можно продолжить библиотеками JQuery, JQueryUI, Angular, Bootstrap, Yii (это для поддержки ранних проектов на PHP), и многими другими.

А еще, отчасти из-за нежелания заниматься рутинными задачами, но главное, для создания надежных программ, мы применяем средства автоматизированного тестирования приложений, то есть юнит-тесты и функциональные тесты. Кроме того, каждая строчка кода, написанная разработчиками, проверяется более опытными товарищами с помощью системы контроля версий Git и системой review Gerrit.

Инструменты разработчика

Кстати, раз уж пошла речь о надежности программ и проверке результатов, стоит упомянуть о том, как проектируется и разрабатывается приложение. Обычно некий старший разработчик, тимлид или архитектор, после постановки задачи от системного аналитика, описывает будущую программу на понятном специалистам техническом языке — в виде моделей и диаграмм. Мы применяем реляционные модели баз данных, диаграммы в нотации UML и модели процессов в нотации BPMN. После этого задача разработки программы дробится на небольшие подзадачи, которые назначаются исполнителям. Для каждой функциональной возможности сначала создается автоматизированный тест, а уже после программный код, который должен «пройти» этот тест. Это называется «разработка через тестирование», а в англоязычной литературе «TDD». Такой подход кажется странным, но его легко понять с помощью аналогии: представьте, что вы создаете новый автомобиль. У автомобиля есть определенные требования по безопасности, и зная их, вы с самого начала строите тестовую площадку для краш-тестов в соответствие с этими требованиями, и будете проводить на ней испытания для каждой новой версии автомобиля, пока не убедитесь, что он готов к массовой продаже. Так и мы, зная требования клиентов, строим полигоны для «краш-тестов» функционала, и пишем код до тех пор, пока он не будет соответствовать этим требованиям. И уже убедившись, что программа готова к выпуску «в свет», мы передаем ее в отдел тестирования, который проверяет программу «глазами пользователя».

Инструменты разработчика

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

  1. Работать с базами данных, владея SQL, и имея знания о специфике PostgreSQL и Oracle.
  2. Создавать высоконагруженные серверные MVC-приложения на языке Golang, используя в качестве каркаса фреймворк Revel.
  3. Создавать клиентские приложения, с помощью JavaScript. Здесь же верстка графического интерфейса на HTML и CSS, применяя фреймворк Webix и другие необходимые библиотеки.
  4. Проектировать программное обеспечение, описывая будущее приложение на UML и BPMN, применяя аналитику, системный подход и воображение.
  5. Создавать автоматические тесты.
  6. Работать в команде, обмениваясь кодом через систему контроля версий, и применяя коммуникативные навыки.
  7. Составлять техническую и пользовательскую документацию.
  8. Трудолюбиво и ответственно работать на благо общества.

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

Удачи вам, и спасибо за внимание.
Соответствует фразе: применяемые технологии разработки

  • 31098 просмотров

Стек используемых технологий

Стек не полный, если вам необходима другая технология или фреймворк — обращайтесь.

С примерами нашего кода и стандартами его написания можно ознакомиться на GitHub:

  • Symfony starter kit.
  • Laravel starter kit.

Используемые технологии и подходы

Бэкенд

  • Руководствуемся различными принципами разработки: KISS, DRY, SOLID, GRASP, YAGNI и другие.
  • PHP с применением паттернов проектирования.
  • Symfony для разработки, поддержки и дальнейшего масштабирования сложных проектов.
  • Laravel для разработки и быстрого старта небольших и средних проектов.
  • MySQL, PostgreSQL:
    • применяется нормализация, денормализация данных в зависимости от требований;
    • репликации;
    • применение индексов;
    • транзакции с указанием уровня изоляции, блокировки;
    • построение сложных запросов.
    • Git с различными моделями ветвления в зависимости от сложности проекта и требований по «time to market»;
    • GitLab, GitHub, Bitbucket.
    • PHPUnit для модульных, функциональных тестов;
    • Gitlab с полноценным CI/CD;
    • PHPStan — статический анализ кода;
    • PHP CS Fixer — соблюдение стандартов оформления кода;
    • Rector — автоматизация рефакторинга;
    • Deptrac — контроль зависимостей слоев и модулей;
    • Redis, RabbitMQ — кеширование и сервер очередей;
    • Docker — разработка, развертывание на серверах;
    • и многое другое.

    Фронтенд

    Разрабатываем как клиентские, так и серверные приложения, используя библиотеки React (Next.js), Vue (Nuxt.js):

    • Модульная архитектура.
    • SPA / SPA + SSR.
    • Nuxt.js — развиваем и разрабатываем проекты на второй и третьей версиях.
    • Composition API.
    • Строгое описание типов с помощью Typescript.
    • Интеграция сторонних сервисов.
    • Взаимодействуем с сервером через классический REST API или GraphQL.
    • WebSocket.
    • Автоматическая проверка стиля кода инструментами Stylelint и ESLint.
    • Компонентные / Unit / E2E тесты.

    Оптимизируем производительность проектов:

    • сокращение количества запросов к серверу путем правильной сборки зависимостей;
    • постепенная загрузка не критичных компонентов страницы;
    • управление отображением содержимого в процессе загрузки страницы;
    • правильное использование различных форматов графики и ее оптимизация.

    Стандартизируем процессы frontend разработки:

    • написание методологий разработки;
    • разработка библиотеки используемых компонентов Storybook / Bit;
    • разработка стайлгайда для проекта;
    • рефакторинг и обновление проектов.

    Верстаем макеты с использованием технологий HTML, CSS, JS, TS:

    • принципы БЭМ и разделение интерфейса на компоненты;
    • CSS-анимации и JS-интерактив;
    • адаптивность;
    • кроссбраузерность;
    • семантика и валидность html разметки;
    • доступность для людей с ограниченными возможностями;
    • использование микро-разметки opengraph и schema.org;
    • UI Kits для быстрой разработки прототипов.

    Дизайн

    • Узкоспециализированные специалисты: графический дизайн, иллюстрация, видео, моушн-дизайн, анимация, иконографика, типографика, 3D.
    • Документирование дизайна.
    • Системы масштабирования проектов, руководство правил по использованию UI элементов.

    Аналитика и проектирование

    • Интервьюирование клиента, погружение в предметную область и бизнес-процессы.
    • Формирование модульной системы и схем бизнес-процессов посредством Event Storming. Метод позволяет синхронизировать бизнес и разработку. В качестве инструмента реализации методологии применяем Miro.
    • Концептуальное видение проекта.
    • Анализ конкурентного поля и другая аналитика.
    • Построение информационной архитектуры проекта, детализация функциональных модулей, отслеживание взаимосвязей.
    • Проработка интерфейсных решений и их обоснование.
    • Разработка прототипов с адаптивом в виде схем-макетов, либо интерактивных страниц.
    • Подготовка технической документации к прототипам.
    • Результатом становится:
      • Документация: описание проекта (техническая спецификация), схемы в виде графической структуры набора модулей и взаимосвязей, сценарии поведения (схемы процессов).
      • Адаптивные интерактивные прототипы, документация к ним.

      Коммуникации внутри команды

      • Redmine и Slack, их тесная интеграция, кастомизированная под наши нужды.
      • Сервисы Google.
      • Разработка сайтов
      • Развитие сайтов
      • Фронтенд-разработка

      Что такое стек технологий. Объясняем простыми словами

      Стек технологий (от англ. stack — «стопка») — это набор технологий, на основе которых разрабатывается сайт или приложение.

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

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

      Например, для веб-разработки стек технологий может выглядеть так:

      • операционная система Ubuntu Server;
      • веб-сервер Apache;
      • система управления базами данных Oracle или MySQL;
      • язык программирования PHP;
      • фреймворк Yii.

      Примеры употребления на «Секрете»

      «ИТ-специалисты должны чётко представлять, что ключевое в EdTech — открытость API, возможность интегрироваться с другими платформами, а также использование современного стека технологий».

      (Основательница Smart School Pro Елена Игнатьева — о типичных ошибках образовательных стартапов.)

      «Если применить подход в лоб и ориентироваться только на цену, то вы рискуете получить команду, которая не даст вам искомых показателей эффективности. К примеру, при выборе рекламного агентства следует обратить внимание на размер и опыт команды, стек используемых технологий, клиентский портфель и отзывы».

      (CEO Realweb Partners Эмин Аветисян — об ошибках офлайновых компаний при выходе в онлайн.)

      Нюансы

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

      Важнейшие элементы технологического стека в клиентской части:

      • язык разметки веб-страниц HTML, который отвечает за отображение содержимого в браузере;
      • язык описания внешнего вида документа CSS, который стилизует контент;
      • язык для доступа к объектам приложений Javascript — отвечает за интерактивную часть веб-приложения.

      Серверная часть приложения готовит данные для клиентской части. Здесь придётся выбрать:

      • язык бэкенд-программирования (отвечает за функционирование внутренней части сервиса), такой как PHP, Java или C++;
      • фреймворки, например, Spring или .NET;
      • система управления базами данных — PostgreSQL или MongoDB;
      • веб-сервер, к примеру, Apache или Nginx.

      Факт

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

      Если клиент планирует продавать одежду через небольшой онлайн-магазин, ему не понадобятся параллельная обработка больших объёмов данных (noSQL) и механизм распределения нагрузки (load balancing), заточенный на одновременную поддержку 1 млн пользователей. В то же время клиенту, который планирует продавать тысячи товаров в день, не подойдёт решение на базе бесплатного движка сайта (CMS) с дешёвым хостингом.

      Технологические стеки компании: разновидности и тренды использования

      Цифровая трансформация постепенно внедряется во все сферы нашей жизни. Академический директор программы CDTO Школы управления СКОЛКОВО Николай Верховский и генеральный директор BSSG Юрий Клочко поговорили о технологическом стеке компании, его разновидностях и трендах в текущих реалиях.

      Источник: unsplash.com

      Что такое ИТ-стек компании

      Стек в переводе означает «стопка». Стек, в общем виде – это «слоеная» модель, позволяющая разделить компоненты технологии или процесса на отдельные компоненты. Такую «стопку» можно сравнить с бургером, который состоит из нескольких понятных комплектующих, например: булка, котлета, наполнитель и вторая булка. Существует множество различных стеков: программный стек, сетевой стек, технологический стек и т.д.

      Для понимания работы стека учитываются три важных фактора:

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

      Теперь давайте поговорим про IT-стек и его формирование.

      Уровни IT-стека и его разновидности

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

      Вот эти уровни (от нижнего к верхнему):

      • Инфраструктура/железо. Hardware компоненты: серверное оборудование, СХД, сетевое оборудование.
      • ОС/Гипервизор. Операционная система и подсистемы виртуалищации.
      • СУБД: системы управления базами данных.
      • Сервер приложений. Транзакционные серверы OLTP и серверы веб-приложений .
      • Интеграция данных. Компоненты интеграции приложений между собой.
      • Бизнес-приложения.
      • Хранилище данных. Аналитические хранилища и озера данных.
      • Управление данными. Инструменты Data Governance
      • Аналитика. Инструменты аналитического обеспечения бизнеса

      Первый стек — enterprise stack. Это классический корпоративный стек. Практически весь Топ-100 российских компаний уже создал инфраструктуру, заняв все уровни этого стека. Его выбирают, потому что вендоры на всех уровнях контролируют происходящее и несут ответственность. Даже при небольших ограничениях высокая страховка рисков — основное преимущество Enterprise-стека.

      Из минусов — отсутствие отлаженного механизма масштабирования и достаточной гибкости, по сравнению со следующим стеком — cloud stack. Его главное преимущество — это способность к масштабированию. Пользователи могут платить меньше за каждого пользователя при увеличении их общего количества. Многие компании используют данный стек даже не как основной, а как дополнительный — из-за удобства.

      Третий стек — supertech stack. Этот стек, как правило, состояящий из inhouse-компонентов обычно разрабатывают супертехи, такие как Amazon, Microsoft и Yandex. Задача для супертехов построить оптимальную инфраструктуру для работы собственных сервисов, а так же отойти от некоторых лицензионных ограничений, которые несет в себе свободно распространяемое ПО.

      После описания трех основных стеков стоит посмотреть на стек, который часто используют в других странах. Коллеги из Азии используют oriential stack, который похож на наш enterprise stack. Основное отличие — на уровне бизнес приложения этого стека обычно представлены компоненты собственной разработки, которые распространяется одновременно на несколько поколений технологий.

      OpenSource: особенности лицензирования софта

      OpenSource — это четыре различных вида лицензирования софта. У стеков существует 4 типа OpenSource.

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

      Тренды стеков

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

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

      Также уже сейчас очевидно, что в течение этого года компаниям нужно стабилизировать enterprise stack и найти способ наладить собственное обслуживание. Далее стоит переходить на суверенный стек. Если этого не сделать до 2024 года, прежние технологии уже устареют, стек будет отставать.

      К 2025 году появятся новые supertech stack. Часть из них сделают свои облачные технологии, доступные стартап и малому бизнесу.

      К 2030 году уже с учетом обозначенных ориентиров на законодательном уровне можно будет построить blockchain stack. Уже практически готов цифровой рубль, есть закон о цифровых активах. Осталось наладить инфраструктуру, а затем постепенно переходить к токенизации экономики.

      Если вы хотите сформировать мышление для управления цифровой трансформацией и найти единомышленников, приходите на обновленную программу CDTO — для директоров и CEO.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *