User Tools

Site Tools


This is an old revision of the document!


За пределами мира 1С

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

  1. объектно-ориентированный подход и моделирование сверху вниз, от потребностей ведения дела + понимая ограничения-особенности типовых решений и фреймворков
  2. использование асинхронных/многониточных приложений/алгоритмов
  3. распределенные клиент-серверные вычисления
  4. удаленное выполнение процедур (RPC, remote procedure call)
  5. понимание стоимости и времени разработки
  6. использование репозитариев кода с версионированием (git/svn)
  7. использование фиче-баг-трекеров, иногда проектной морды.
  8. английский для кода и комментариев к коду (включая индусов, исключая 1/2 японцев и китайцев, им тяжело даются языки индоевропейской семьи).

99% software пишется вне России. Всего в мире около 20 млн разработчиков, из них 1/4 в USA, 1/5 живет и работает в Индии. В или числятся гражданами России всего 1.5% разработчиков, из них более 50% работают на мир (потому что больше выбор направлений/ways, выше ставки труда и более человечное отношение).

Типовой-минимальный дизайн приложений.

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

Frontend

Web applications

  • В качестве мордо фреймворков
    1. React
    2. Angular
    3. Vue

Первые два по факту индустриальный стандарт. Языки Typescript, Javascript, HTML, CSS, SASS. Приложения исполняются в Javascript VM (виртуальной машины) браузера.

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

Разработка веб-приложений, при всех особенностях, концептуально не отличается от разработки нативных приложений.

Native applications

  • В качестве мордо фреймворка Qt4/Qt5, … ?
  1. Сетевое взаимодействие
    1. протокол SOAP/XML RPC - gsoap,
    2. протокол REST/JSON RPC - curl, …
    3. протокол *SQL - соотв клиентские библиотеки для DBMS

Написание нативных приложения, как правило на С/С++ но не только,

  • более трудоемко, раза в 2 по времени, по сравнению с написанием на Angular/React
  • оправдано и пожалуй без вариантов
    • при достаточно большом количестве вычислений на клиенте,
    • и/или сложной визуализации c использование DirectX/OpenGL.
    • сложность логики выходит за пределы ее описания средствами для веб-приложений.
    • необходимость обмена с периферийным оборудованием
    • требования реал-тайм и устойчивости для систем управления автоматами

Backend

Фоновый процесс на Unix подобной системе, слушающий сетевой сокет и представляющий некий сервис по запросу клиента.

  • Итоговое хранение структурированных данных
    • SQL database manager like MySQL/MariaDB, PostgreSQL, Informix, MSSQL, …
    • NO-SQL like MongoDB, тоже вариант.

Неструктурированные данные/BLOBs как правило хранятся в виде файлов в файловой системе, с хранением метаданных в SQL/NoSQL DB.

  • Сам бэкэнд пишется с использование фреймворков, пишу наиболее востребованные по языкам
    • Ruby: Ruby on Rails, Sinatra, …
    • PHP: Laravel, YII, … много их
    • Javascript: Express, Koa, …
    • Perl: Mojolicious, …
    • C++: CppCMS, RESTbed, Boost, …
    • Java: Tomkat? ,не знаком, не имел дела
    • Go lang: много, не использовал.

Song about

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

Как правило, грамотно структурированная модель деловых процессов относительно легко переписывается на другом языке.

Все языки имеют хорошо реализованные модули к базам данных и вообще тысячи различных модулей под различные цели.

Как правило запросы к базам данных пишутся на SQL и встраиваются в код.

Минимально компетентная разработка, по рейтингам агенств и бирж, стоит от 20-30 euro в час и более. Для России и Индии -30%, дальше по цене как правило качество разработки резко падает вплоть до мусорного (время-деньги затрачены, продукт неработоспособен и/или не может быть доработан, за примерами далеко ходить не надо).

В день в среднем по проектам, с учетом отладки, изучения-изысков разработчик пишет 100-250 строк (2-4 страницы) своего кода.

Любое отклонение от имеющихся подходов, готовых библиотек и эксклюзивная разработка увеличивает время и затраты в 2 и более раз. То есть волюнтаризм типа “вот мне хочется” увеличивает стоимость разработки от 2 до 10 раз и более, и часто делает проект непродуктивным.

В норме, степень эксклюзивности по проектам в райне 1-5% от базового кода используемых библиотек и приложений, в зависимости от объема и времени жизни продукта.

Объемы кода. К примеру, исходный код браузера Firefox суммарно, со всеми библиотеками, включает в себя 1Gb исходного текста, что составляет примерно 250 тысяч страниц С/С++ кода.

Пример малого проекта: Скромный текстовой редактор leafpad сам по себе, без библиотек, включает в себя 60 страниц С-кода, чистое время разработки составляет примерно 3 недели компетентного разработчика при итоговой стоимости 2-3 тысячи евро.

Как правило проект переживает несколько итераций разработки, от самого первого наброска и до первой рабочей реализации, в ходе которых код переписывается до 70-100%.

Для снижения стоимости предпочтение отдается коду и решениям, которые можно использовать повторно (см стоимость эксклюзивного кода).

Хорошая статья-интервью по теме https://habr.com/ru/company/jugru/blog/443594/

Borodin Oleg 2019-03-21 19:26