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

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

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

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

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

Компьютерный язык предназначен для людей.

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

Это не последняя версия машинного кода, это статическое однократное присвоение (SSA) для amd64, но очень близко.

Это происходит из этой простой программы го:

Если я дам вам первый блок кода, не могли бы вы рассказать, что он делает?

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

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

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

В своей статье Программное обеспечение 2.0 Андрей Карпатый предполагает, что есть новый способ разработки программного обеспечения. он называет это Программное обеспечение 2.0, где нейронные сети являются основными строительными блоками для программного обеспечения.

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

Итак, это другой подход к тому, чтобы дать машине указание делать то, что мы хотим от нее. Это не ново, и не везде применяется, по крайней мере, пока [1].

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

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

Почему эта архитектура интеллектуальна? Потому что это добавляет обучаемости игре по разработке программного обеспечения.

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

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

Еще не убедили? Подумайте, вы когда-нибудь попытаетесь решить любую классификацию изображений с нуля? Используете только язык программирования? Как вы думаете, ваш код будет лучше, чем код, написанный на машине? Или представьте, что вы пишете код, который может играть в видеоигры?

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

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

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

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

Живи долго и процветай «».