Добавлен , опубликован
В данный момент вы читаете слово “слово”, оно выводится на экране вашего устройства, ноутбука, телефона, часов или кто знает, может даже на экране микроволновой печи. Что по сути стоит за этим процессом? Железо на самом низком уровне получает сигналы и интерпретирует их, после чего обрабатывает и посылает импульс дальше на какое то устройство, например экран. В мире компьютерной техники принято считать что 1 (единица) это присутствие сигнала, 0 (ноль) наоборот, таким образом любая программа на любом языке программирования в конечном счете превращается в последовательность из нулей и единиц.
Уровень абстракции в современном мире настолько высок, что программист вообще не обязан думать как именно его print(‘hello world’) будет выведен в консоль, или на экран. За этим стоит огромный пласт кода, сотни тысяч или даже миллионы строк интерпретатора, компилятора и самой ОС. В теории вы можете словить баг даже в программе состоящей из одной строки, которая традиционно здоровается с миром “привет мир”. Но эта статьи не совсем о багах в мире языков программирования, если вы считаете себя программистом, попробуйте мысленно ответить на вопрос “Что именно делает программист”? Как только закончите с этим, можно вернутся к чтению следующего параграфа.

Кто такой программист?

Я думаю ответом у вас получилось что-то вроде “программист придумывает алгоритмы и пишет код”, если упростить и разобрать это на мелкие составляющие, то в конечном итоге мы получим утверждение в духе “программист думаем головой и нажимаем на клавиши”. Кстати нажимать на клавиши может даже обезьяна, само по себе это умение не делает программиста - программистом. Получается что все чего я хочу при написании кода, это думать над программой а не нажимать на клавиши.
Представьте ситуацию, есть 3 человека:
  • Читатель - знает только английский язык и любит читать книги
  • Переводчик - знает два языка, русский и английский и может писать книги
  • Автор - знает только русский язык
Теперь давайте подумаем как в данный момент происходит выпуск новых шедевров:
  • Автор умеет думать головой, и у него есть задача издать “Пособие по J37 для чайников” на английском языке. Что для этого нужно сделать? Ну для начала выучить этот язык, потом написать книгу и отдать её читателю.
Именно таким образом работает программирование в данный момент. Программисту приходится изучать языки чтобы объяснить читателю (машине) суть своего произведения. Если вы внимательно читали, то заметили что “переводчик” пропал, и остались только “автор” с “читателем”, а что если представить что уровень абстракции кода будет настолько высоким, что в качестве “переводчика” будет выступать отдельная программа, на вход мы ей будем говорить что хотим “привет мир”, а она будет сама писать код на подходящем для конкретной задачи - языке программирования.

Кодогенерация

В данный момент (2016 г.) такое явление уже можно повсеместно наблюдать в разных языках и фреймворках, люди по натуре достаточно ленивые, и уж точно не хотят делать однотипные действия. Существует множество различных инструментов прототипирования и генерации кода. Вы к примеру говорите консоли:
bin/cake migration CreateUsersTable name:string email:string; bake all Users;
и она вам создаст кучу кода и файлов, это и миграции (up-down), и модели таблиц, сущностей, реляционные связи, юнит-тесты, и даже контроллеры и шаблоны чтобы управлять “юзерами” и видеть изменения в удобном виде. Конкретно этот пример из фреймворка cake (php), но аналогичные решения есть везде. По сути уже давно не “модно” писать шаблонный код, и все стремятся писать роботов которые будут писать шаблонный код за них.
Если вы хоть немного разбираетесь в веб программирование (пишу про него, так как это моя основная специализация на данный момент), представьте сколько времени уйдет на:
  • создать вручную таблицы данных
  • не забыть про реляционные связи, индексы, автоинкримент
  • создать сущности и класс для работы с этими данными (+наследование от интерфейса)
  • не забыть про валидадцию входных данных
  • написать нужные запросы к базе
  • не забыть про связи, и подгрузить нужные данные из других таблиц
  • связать все подгруженные данные из соседних таблиц в виде сущностей (классов)
  • написать контроллер для управления и шаблон для вывода
  • а есть еще тесты, хелперы, миграции (вам же надо перенести эти таблицы в git?), а как насчет тестовых данных, ну и про оптимизацию не забудем. А что насчет кеша? Добавить к базе коммиты тоже хорошая идея, вдруг нужно будет откатить удаление, если произошла ошибка при удалении связной сущности. А если нужно эти данные вывести по нескольким протоколам, написать web/json/xml, ну и пусть будет сортировка, пагинация, фильтрация, api..
В данном случае фреймворк cake (php) решает это одной консольной командой (ну на самом деле двумя, надо еще “мигрировать” миграцию), всего 5 секунд и у вас уже полностью рабочая табличка с простой админкой. Но конкретно данная статья не про плюсы этого фреймворка, я просто хочу поделится с вами моим взглядом на программирование через 50-100 лет.

Фабрики роботов фабрик роботов

Само по себе написание кода, должно полностью исчезнуть, ну или заниматься этим будут самые отважные из числа программистов, меньше 0.01% от общего числа. Эти люди будут писать интерфейс низкоуровневого бота, который будет писать других ботов, которые будут писать ваш код за вас. Остальные смогут через интерфейс, просто описывать свои мысли и логику, а бот переводчик будет конвертировать её в машиночитаемый код. Кстати это не обязательно должно быть с помощью голоса (уже представили офис с программистами которые бурчат под нос “выведи мне тут список юзеров, да мать твою сначала проверь доступ админа”?) Это может быть и прямой коннектор к мозгу, такой себе USB 5.0, который будет “слушать ваши мысли”.
В любом случае очевидно что уровень абстракции с каждым днем растет все выше, и происходит это уже в геометрической прогрессии. Сейчас на свете довольно много умных людей которые “могут в логику”, но начать программировать им мешает то, что сперва нужно выучить очередной питон или C++. Высокий уровень абстракции над языками сможет полностью устранить эту проблему, и решать задачи мы сможем на любом подходящем для этой задачи языке. Но в данный момент все еще большинство разработчиков знают и используют от силы 2-3 языка, по этому решают любые нестандартные задачи колхозом и велосипедами, кто-то на perl пишет сайты, кто-то на php пишет оболочку для raspberry pi.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
38
есть ещё backendless solutions =)
21
Существует юзер, который хочет получить программу, и компьютер, на котором она должна работать. Но юзер не может объяснить компьютеру, что нужно делать, поэтому он использует программиста, который преобразует его идею в программный код. Да, мы можем заменить программиста на бота. Напомню, единственный существующий путь - нейронные сети, которые имитируют работу мозга. То есть, мы заменим готовое решение в виде мозга программиста на его имитацию. Потом вспомним, что для этого требуются огромные мощности, для достижения которых требуются горы денег и десятки лет. И затем как результат мы получим того же самого программиста.
А абстракцию мы можем повышать до тех пор, пока обеспечиваем повышение традиционными методами без использования нейронных сетей за некоторыми исключениями.
34
И затем как результат мы получим того же самого программиста.
нет, это уже скайнет. Программа которая может писать сама себя в миллион раз быстрее любых людей, так и поступит. И уже через пол часа захватит все к чему сможет дотянутся.
21
H, программа не сможет писать сама себя так быстро. Компьютерные программы так быстры в сравнении с человеком именно из-за отсутствия самообучения.
19
girvel, они быстры из-за того, что не заключены в мозг, работающий на химических реакциях, которые отнимают драгоценные пикасекунды, и параллельно мозг анализирует происходящее, тратя немалые ресурсы на поддержание и направление прочих химреакций в организме, получая и обрабатывая "нормально/плохо" от каждого нервного окончания. И это только поверхностно.
21
BrEd Pitt, с другой стороны, мозг состоит из 80 миллиардов нейронов, создающих фантастически сложную нейронную сеть, отлаживаемую эволюцией в течение десятков миллионов лет. По поводу анализа происходящего - существуют специальные камеры, в которых человек значительно изолируется от воздействия окружающего мира.
И разве скайнет не будет заниматься поддержанием многочисленных процессов, таких как создание резервных копий, поддержание должного уровня защиты и т. п.?
28
BrEd Pitt, H, текущие компьютеры предназначены для линейных вычислений
поэтому они могут выполнять линейные операции(сложение и прочее) с огромной скоростью
а нейронная сеть выполняет нелинейные операции
для того чтобы выполнить процедуру распознавания образов на том же уровне что и люди обычному домашнему компьютеру понадобится намного больше времени чем человеку
т.к. программа пишущая другие программы является нелинейной задачей то человек справится намного быстрее чем самый мощный компьютер
а текущим нейрокомпьютерам там далеко до человеческого мозга что за 100 лет точно не догонят по производительности
по поводу многочисленных процессов
нейронная сеть имеет многопоточную архитектуру
в том же мозгу одновременно работает более миллиона потоков
причём мощность самого процессора(нейрона) не особо важна
таким образом мозг обрабатывает одновременно огромное количество задач практически без потери производительности
короче в нейронной сети количество лучше качества
так что для того чтобы компьютер мог работать с той же скоростью что и человек количество ядер(потоков) в нём должно быть примерно таким же как и количество нейронов в мозге
причём после достижения оптимального количества нейронов скорость выполнения задачи перестанет расти вместе с ростом количества нейронов
единственный + компьютеров в данном случае это увеличение скорости передачи данных между отдельными нейронами (в мозгу она довольно низка)
но даже увеличение скорости передачи(при прочих благоприятных условиях) не сможет повысить скорость работы более чем в 500 раз по сравнению с мозгом
да и к тому моменту как мы достигнем такого уровня развития человечество окажется на гране вымирания (если вообще успеет достигнуть прежде чем сдохнуть)
21
nvc123, это как раз то, что я пытался сказать. Могу добавить, что существующие на данный момент нейронные сети повторяют мозг лишь на самом базовом уровне и имеют примитивную структуру. Поэтому первые десятки версий скайнета будут вести себя как умственно отсталые, поскольку будут обучаться очень медленно и поверхностно.
А по поводу грани вымирания не согласен, у человечества все в порядке и погибнет оно скорей от неожиданного столкновения с внеземной цивилизацией, чем самостоятельно.
19
Внеземной невероятно древней нейронной сетью, которая, даже попытавшись наладить контакт через интернет, подключившись через спутники на орбите, перегрузит все подсоединенные компьютеры и уничтожит обороноспособность, заодно устроит бомбометания таким образом посредством параноидальных диктаторов. Короче, нечаянно вернет человечество в 20 век или того хуже
21
BrEd Pitt, возможно, нейронная сеть - не лучший вариант для самообучающейся жизни. Мы же просто скопировали это решение у эволюции, которая часто загоняет себя в тупик. Ну и скорее просто сбросит несколько термоядерных бомб, человечество не очень хорошо умеет защищаться от них.
28
girvel, на данный момент есть лишь 2 подхода
нейронные сети и случайные мутации
мало вероятно что придумают чтото новое
а придумать чтото отличное от существующих в природе вещей вообще невозможно из за ограничений обучаемости нейронной сети (которыми мы и являемся)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.