Pull to refresh
92.98
ISPsystem
IT infrastructure management platforms

Детки, не учитесь кодить. Вместо этого освойте моделирование

Level of difficultyEasy
Reading time16 min
Views53K
Original author: Philip Grabenhorst

«Я хочу творить, а не быть следствием чужого творчества. Я хочу принадлежать к тем, кто создает смыслы, а не быть плодом этого смысла».

Представьте себе ситуацию. Скоро истекут сроки подачи документов в колледж. Очередная партия новичков изберет профессию, адепты которой постоянно задаются вопросом: «А нужны ли будут программисты через год... через пять лет... или через десять лет?». И хотя горячие дебаты на этот счет уже улеглись, в воздухе висит немой вопрос: не настанет ли час, когда крупные языковые модели, такие как ChatGPT, заменят нас на поприще написания кода. Неважно, кто ты — абитуриент, зависший в нерешительности перед выбором ВУЗа, или матерый кодер, я предлагаю тебе остановиться и кое-что переосмыслить. А поможет нам в этом деле... кукла Барби.

credit: Apple
credit: Apple

В начале прошлого года в нашей индустрии наступил период эсхатологического переосмысления. На рынок хлынули инструменты, вызывающие озвученные мной выше опасения. Так, летом OpenAI опубликовала обновление, сделавшее генерацию кода еще более качественной. Система Vercel v0, как утверждается, позволяет создавать готовый к работе React-код по одному только описанию его функциональности.

Однако по какой-то причине люди до сих пор с энтузиазмом изучают программирование. В начале прошлого года Code.org обнародовала предложение включить информатику в число обязательных предметов для получения аттестата о среднем образовании. В нескольких штатах это уже сделали. В поддержку этой инициативы существует немало удобных для ребенка инструментов изучения программирования: как минимум, это Scratch, Tynker и Hopscotch. В октябре специалисты лаборатории MIT Media Lab, занимающиеся программой Lifelong Kindergarten, запустили проект OctoStudio. С его помощью Scratch, в основе которого лежат готовые блоки кода, вместо браузера можно будет запустить на мобильном телефоне. Огромный шаг навстречу будущему поколению программистов. Фактически, идея о том, что «детям стоит научиться работать с кодом», наконец находит свое воплощение. Но сейчас, когда машины все лучше и лучше справляются с написанием кода, остается ли этот подход актуальным?

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

Что такое модель?

Модель — это репрезентация отношений между двумя системами. А система — это набор элементов, которые связаны друг с другом. Имея на руках структуру модели, вы без труда найдете узлы и отношения в системе, которую она представляет. Модель как бы сообщает нам: «Вот эта штука происходит во-от отсюда». Или, как минимум, описывает ключевые компоненты систем.

В детстве мы вместе с отцом собирали модельки автомобилей. Маленькие пластмассовые машинки поддерживали символическую связь со своими полноразмерными собратьями путем сохранения общих черт. Как правило, это были цвета, базовые формы и относительные размеры внешних элементов. Глядя на модель, можно представить, понять и предсказать наличие тех же особенностей и в моделируемой системе. Если модель красного цвета, то и автомобиль, который она имитирует, тоже должен быть красным. Это определение справедливо для любого контекста, в котором мы используем слово «модель». Даже супермодели символически представляют, как должен выглядеть обычный или идеальный человек. (Существует ли моделируемая система в этом случае на самом деле — это уже другая проблема... но об этом мы поговорим чуть позже).

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

Наш мозг непрерывно строит модели

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

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

Усложним задачу

В один прекрасный день первобытный человек сделал кое-что очень странное. Он начал придумывать другие модели, описывающие сеть отношений между различными внешними системами. Доподлинно неизвестно, зачем ему это понадобилось. Возможно, в целях улучшения коммуникации с соплеменниками. Грубое изображение медведя или другого хищника, которое вызывает нечто вроде эффекта присутствия, напрямую способствует выживанию. К тому же это не требует особых усилий. Визуального сходства с объектом как правило достаточно, чтобы в сознании другого человека «всплыла» аналогичная модель — при условии, что у него было достаточно сенсорного опыта, чтобы построить модель, соответствующую этим стимулам. Если мы оба видели медведя, и я покажу вам его фотографию, то, скорее всего, у вас возникнет чувство узнавания, которое воскресит в памяти характерные особенности, присущие всем виденным вами медведям: покрытый шерстью, коричневый, милый, и так далее. Но иногда нейроны могут повести себя не совсем так, как ожидалось. Изучением этого специфического явления занимается семантика.

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

Быстрая рыжая лиса перепрыгивает через ленивую собаку.

Текст
Текст

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

Модель ситуации
Модель ситуации

Не знаю, что приходит вам на ум, когда вы читаете этот текст, но он должен был задействовать ряд моделей — то есть соответствующих нейронных связей, — относящихся к свойствам этих существ. Мы знаем, что существует определенная система. В ней есть два существа: собака и лиса. Лиса характеризуется следующими свойствами: она рыжая и быстрая, а собака, по-видимому, отличается ленью. Может показаться, что понятие «лень» выходит за рамки нашей модели, но на самом деле это не так. «Лень» — это символ, который мы присвоили опыту, изначально являющемуся сенсорным стимулом. Сюда входят ощущение раздражения, когда товарищ по команде проявляет недостаточно активности, представления о ленивых людях — обычно это синонимы слов «неряшливый» или «неопрятный», — и чувства, вызванные социальным гнетом и установкой, что «лень — это плохо».

То, что мы только что построили, Дэниел Уиллингем называет контекстной моделью, и это один из самых мощных навыков, выработанных человечеством. Мы взяли модель (комбинация нейронов, образовавшая описанную текстом систему), преобразовали ее в другую модель (символы в тексте выше) и использовали ее для создания еще одной модели (комбинации нейронов, представляющей ситуацию, которая существует в вашем сознании). Фух!

Испорченный телефон

Сказать, что все это невероятно сложный процесс, — не сказать ничего. А чем запутаннее система, тем выше вероятность, что с ней возникнут какие-либо проблемы. Например, у вас может быть совершенно другая модель, отражающая ваш опыт взаимодействия с пушистыми зверями. И если я покажу вам фотографию медведя, она может не содержать часть атрибутов медведей, которые присутствуют в моей модели. Если в ваших моделях по какой-то причине отсутствуют атрибуты, подразумевающие потенциальную опасность, у нас возникнут неприятности. С этой проблемой относительно легко справиться, если в основе наших моделей лежат сенсорные стимулы, полученные из непосредственного опыта. Все, что мне нужно будет сделать, это показать вам (надеюсь, с помощью видео на YouTube) примеры того, что случается с людьми, которые слишком близко подходят к медведям. В конце концов, семантика не так уж и сложна.

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

Мы только что сыграли в эту игру. Вы прочли предложение «быстрая рыжая лиса перепрыгивает через ленивую собаку». Однако у вас нет сенсорных стимулов для этой конкретной ситуации. Все, что у вас есть, — это коллекция моделей, связанных с каждым элементом сцены, так что объекты (собака и лиса), их свойства (лень, быстрота, рыжесть) и их взаимоотношения (прыжок, скорость, один «перепрыгивает» другого). Все это в комплексе строит в вашем сознании определенную модель существующей в тексте системы.

Но вот, в чем подвох: ни собаки, ни лисы никогда не существовало. Точно так же как нет корневых сенсорных стимулов, какой-то реальной, находящейся где-то во вселенной системы, которую описывает приведенная модель. Системы нет, а модель есть — и в вашем сознании, и в моем собственном. Видите, каков наш «испорченный телефон»? Мы способны смоделировать вещи, которых нет и не было никогда!

Строим более совершенные модели

Такие «фейковые» модели очень легко построить в среде, наполненной разнообразными словами и абстракциями. То есть, увы, в любой социальной среде. Люди уникальны, они уделяют огромное количество времени построению моделей несуществующих систем. В отличие от конкретной фотографии медведя, модели, которые мы только что описали, ничем не подкреплены. И, тем не менее, они вездесущи. Их можно встретить в сельском клубе, в религиозных или политических речах и даже в статьях на Medium (😉).

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

Например, любая система существует в реальном времени. То есть некоторые свойства объектов исходной системы будут меняться в зависимости от того, в какой момент времени мы их исследуем. Классический пример из физики — объект в свободном падении, где расстояние объекта от земли непрерывно меняется. Мы видим эти изменения наглядно, когда наблюдаем систему воочию. Однако при математическом описании взаимосвязи между землей и камнем созданные нами модели (пусть даже строгие) не способны отразить изменения, происходящие со временем, в интуитивно понятной форме.

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

Компьютерное ПО является средством моделирования par excellence. Оно поддерживает строгие, проверяемые взаимосвязи, присущие языку математики, и в то же время допускает, что компоненты могут развиваться, изменяться со временем и даже влиять на окружающую среду. Более того, благодаря своей детерминированной природе, каждая из этих моделей (гипотетически) воспроизводима, что позволяет преодолеть проблему «испорченного телефона!

Модели, молотки и гвозди

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

В своей книге The Model Thinker Скотт Э. Пейдж перечисляет целый ряд причин, по которым мы создаем модели. Как правило, тип создаваемой модели определяется результатом, которого мы стремимся достичь. Некоторые модели «хороши» только в узком диапазоне контекстов. В своей книге об алгоритмах Стив Скиенна приводит забавный, хотя и анекдотичный пример с теорией плоской Земли. Это не лучшая модель, если нужно предсказать движение звезд, ракет или спутников. Однако если речь идет о строительстве дома и анализе его будущей надежности... модель плоской Земли сработает просто на ура.

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

Цель ученого в области информатики — хорошо разбираться в методах моделирования и выбирать те, что подходят для решения конкретной задачи. Джордж Полиа в своей книге «Как решить проблему» называет этот процесс «проведением аналогии». Это не уникальная практика для компьютерных специалистов — Полиа был математиком. Говоря о теоретической физике, Ричард Фейнман однажды сказал, что «каждый хороший физик-теоретик знает шесть или семь различных теоретических представлений для одного и того же физического явления». Не знаю, как вы, но когда я услышал Фейнмана, говорящего о «теоретических представлениях», я понял, что фактически речь идет о «моделях».

Это выходит далеко за рамки технических дисциплин. На выборах кандидаты и партийные объединения применяют различные модели, описывающие население, его потенциальное поведение и поведение противников. Успех или неудача будут определяться, в частности, способностью кандидата оценить текущее состояние моделируемого процесса. А также навыком манипулирования смоделированной социальной системой. Социальные системы, кстати, моделировать чрезвычайно сложно — именно этот тезис Дэн Рокмор приводит в своем эссе для The New Yorker, подчеркивая предполагаемую несостоятельность средств моделирования в нетехнических дисциплинах.

Всё по полочкам

«Сложно» не значит «невозможно». И уж тем более, что не стоит даже попытаться. Моделирование возможно и неизбежно, с разной степенью строгости, в любой дисциплине. Разница между превозносимой надежностью моделей в естественных науках и высмеиваемой неадекватностью математических моделей в политологии заключается, если воспользоваться фразой Скиенны, в «масштабе». Я не имею в виду масштаб моделируемой вещи, я имею в виду масштаб самой модели. Чем ближе наша модель к реальной вещи, тем достовернее мы сможем взаимодействовать с ней, предсказывать ее поведение или манипулировать ею.

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

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

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

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

Это справедливо для всего разнообразия моделей, особенно тех, что порождает наш собственный разум. Мы постоянно ошибаемся. Однако порой придуманные нами модели оказываются и впрямь полезны. В своей книге о моделировании Скотт Э. Пейдж предлагает придерживаться в жизни концепции «множества моделей». Поскольку всякая модель может оказаться неточной, нельзя использовать для всех возможных жизненных ситуаций одну и ту же модель. Необходимо сформировать собственную «библиотеку» проверенных, хорошо проработанных моделей на все случаи жизни. И применять ту или иную модель следует, опираясь на проблему и предполагаемый подход к ее разрешению.

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

Книжный магазин

Целью образования де-факто является расширение глубины и широты наших навыков моделирования (впрочем, это не касается систем образования, заранее расположенных к какой-то конкретной идеологии). Проблемы, с которыми мы сталкиваемся как отдельные личности и как целые сообщества, становятся все более сложными. Это приводит к росту спроса на системы образования, которые позволяют обзавестись более глубокими и разносторонними моделями. Пандемия COVID-19 и повсеместное внедрение генеративных ИИ прекрасно демонстрируют, что традиционные системы образования не справляются с поставленной задачей.

Когда я работал в Phenomena Learning, мы пытались решить эту проблему, создав систему моделирования, пригодную для применения в сфере образования. Основная цель Phenomena — помочь студентам «пополнить свой арсенал», создавая модели по различным темам STEM (комплекс отдельных, но при этом связанных друг с другом технических дисциплин в контексте описания образовательной политики учреждения либо учебной программы) и взаимодействуя с ними разными способами. Очень важно, что в число этих «способов» входит и код. Мы создали язык программирования на основе блоков, чтобы можно было разрабатывать строгие, императивные модели с минимальными ограничениями.

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

Особое внимание мы уделили наличию или отсутствию опыта у начинающих моделистов. Мы предпочли использовать блочный язык программирования вместо JavaScript, чтобы помочь неискушенным пользователям избежать синтаксических ошибок. Язык математического моделирования мы придумали для того, чтобы студенты могли брать формулы прямо со странички и в один клик приводить их в движение. Главное — сосредоточиться на модели, а не на средствах ее создания. Вовсе не обязательно владеть кодом в принципе. Наш софт поддерживает и более простые, статичные модели. Значительная часть нашей работы была связана с расширением библиотеки «компонентов», которые можно комбинировать как готовые строительные блоки.

Несмотря на то, что я уже ушел из Phenomena, моя работа на поприще создания моделей и не думает прекращаться. На своем нынешнем посту в Coursemojo я работаю над созданием системы, которая улучшает контекстную модель, описанную мной выше. Программа принимает текстовые модели, наподобие тех, что можно встретить в классах языковых школ, и помогает студентам строить более обширные и глубокие ментальные модели, используя разговорный интерфейс. Помимо образовательных контекстов, я много писал о The Brain Attic — гипотетической системе, которая позволяет связать друг с другом внешние модели из какой-то конкретной области с тем, чтобы подтвердить или опровергнуть их состоятельность.

Люди, которые создают смыслы

Собирать такую библиотеку, применять представления, входящие в нее, и совершенствовать их в процессе итеративного использования — это приятное и полезное занятие. Я не могу придумать лучшего обрамления для этого вывода, чем фраза Марго Робби (несправедливо обделенной Оскаром) из фильма «Барби». Помните цитату из начала статьи? Если вчитаться в нее как следует, мы увидим, как Барби, модель, порожденная разумом дизайнера, выражает желание оказаться среди людей, которые создают вещи, а не быть самой вещью (моделью).


Что же все это значит для будущих кодеров? Откровенно говоря, голое уметь писать код — это еще далеко не все. Код — это всего лишь инструмент, с помощью которого можно создавать мощные, динамичные модели. Поэтому совершенно неважно, что наше ремесло будет автоматизировано через какие-то 3-5 лет. Люди всегда будут нужны для создания обоснованных, строгих моделей, независимо от используемых инструментов и средств. Именно в этом контексте я часто рекомендую студентам, вчерашним выпускникам или людям, собирающимся войти в эту сферу, что им жизненно важно получить опыт за пределами сферы написания кода. Иными словами, неправильно хотеть быть только кодером — человеком, умеющим оперировать в специфической знаковой системе. Необходимо стремиться к тому, чтобы стать, например, «преподавателем, который умеет работать с кодом», или «специалистом по снабжению, который ориентируется в коде» — надеюсь, идею вы уловили. Фраза Барби о том, что она хочет «быть среди тех, кто создает смыслы» означает, что человеку, ступившему на путь технического образования, следует иметь намерение понимать моделируемые им системы.

Именно об этом я говорю, когда призываю «не учиться кодить» — код не должен быть самоцелью. Учитесь моделировать. Накапливайте опыт в построении четких границ между системой, которую вы пытаетесь отобразить, и ее окружением. Осознайте, какой тип среды вы используете для создания такого представления. Постарайтесь как можно яснее определить свои цели в процессе моделирования, будь то предсказание, передача информации или проведение эксперимента. Самое главное — научитесь строить проверяемые модели, различая обоснованные и измеримые и не обоснованные. Всего этого вы можете добиться, используя мощь императивных языков программирования. А может, этот путь не для вас, и вам подойдет что-то еще. Но какой бы способ моделирования вы ни выбрали, создавайте как можно больше моделей. Если каждый из нас будет пополнять свои библиотеки моделей, все наше общество научится решать проблем гораздо быстрее и лучше. А если повезет, вы даже встанете рядом с людьми, которые «создают смыслы, а не являются их плодом».

Tags:
Hubs:
Total votes 32: ↑25 and ↓7+26
Comments50

Articles

Information

Website
www.ispsystem.com
Registered
Founded
Employees
101–200 employees
Location
Россия