Добавлен , опубликован
В данный момент вы читаете слово “слово”, оно выводится на экране вашего устройства, ноутбука, телефона, часов или кто знает, может даже на экране микроволновой печи. Что по сути стоит за этим процессом? Железо на самом низком уровне получает сигналы и интерпретирует их, после чего обрабатывает и посылает импульс дальше на какое то устройство, например экран. В мире компьютерной техники принято считать что 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.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
15
фабрики фабрик
Давайте, предположим, я решил изготовить шкафчик для специй.
Я занимался столярными работами прежде, так что неплохо представляю, в чем я
нуждаюсь - древесина и несколько основных инструментов: рулетка, пила,
уровень и молоток.
И если бы я вздумал построить целый дом, вместо шкафчика для специй, я все
еще нуждался бы в рулетке, пиле, уровене и молотоке (среди всего прочего).
Так что я отправился в скобяной магазин за инструментом, и спросил у
продавца, где я могу найти молоток.
  • Молоток? - спросил он. Никто больше не торгует молотками. Они устарели.
Довольно неожиданно. Я спросил его - почему?
  • Видите ли, проблема с молотками заключается в том, что их слишком много
типов. Кузнечные молотки, бытовые молотки, сферические молотки. Что если вы
купите определенный молоток и позднее обнаружите, что нуждаетесь в совершенно
другом? Вам придется купить другой молоток для следующей задачи. С тех пор,
как это стало ясно, большинство людей действительно хотят универсальный
молоток, который сможет обслужить все различные сорта молоточных задач,
которые могут встретиться в вашей жизни.
  • Гм... Хорошо, я полагаю, это звучит правильно. Можете показать мне, где
найти Универсальный Молоток?
  • Нет, никто не покупает их больше. Они устарели.
  • В самом деле? Я думал, вы сказали, что Универсальный Молоток был
направлением будущего?
  • Видите ли, если вы производите только один вид молотков, могущих выполнять
все виды работ, как все эти различные виды молотков, то это не лучший
вариант. Забивание гвоздей кувалдой не слишком эффективно. И, если вы хотите
прибить вашу бывшую подружку, тогда сферический молоток действительно
незаменим.
  • Это правда. Так, если никто не покупает больше Универсальных Молотков и
если вы не продаете больше все эти устаревшие типы молотков, то чем же вы
торгуете?
  • На самом деле, мы вообще не продаем молотков.
  • Так...
  • Согласно нашим исследованиям, в действительности, люди вовсе не нуждаются в
Универсальном Молотке. Гораздо лучше иметь молоток, соответствуюший данной
работе. Так что мы начали продавать фабрики молотков, которые могут
производить любые типы молотков, которые могут вам потребоваться. Все что вам
необходимо сделать, это укомплектовать фабрику молотков работниками,
активировать машины, закупить материалы, уплатить налоги и PRESTO... вы
немедленно имеете в точности тот тип молотка, что вам нужен.
  • Но у меня нет никакого желания покупать фабрику молотков...
  • И это правильно. Потому что мы не торгуем ими больше.
  • Но, вы только что сказали...
  • Мы выяснили, что большинство людей на самом деле не нуждается в комплектной
фабрике молотков. Некоторые люди, например, никогда не нуждаются в
сферических молотках. (Возможно, у них нет бывших подружек. Или вместо
сферических молотков, они убили их альпенштоками.) Так что маловероятно, что
кто-то захочет купить фабрику молотков, способную производить все виды
молотков, возможные под солнцем.
  • Согласен, очень здравая мысль.
  • Так что вместо этого, мы начали продавать схематические диаграммы для
фабрик молотков, позволяющих нашим клиентам построить их собственную фабрику
молотков, специализированную для производства только тех видов молотков,
которые им действительно необходимы.
  • Позвольте предположить. Вы не торгуете ими больше?
  • Нет. Разумеется, нет. Как выяснилось, люди не хотят строить целую фабрику
только для того, чтобы произвести несколько молотков. Оставьте строительство
фабрик экспертам по строительству фабрик - вот что я всегда говорил!!
  • Я полностью согласен с вами.
  • Угу. Так что мы прекратили продавать эти схемы и начали продавать фабрики,
производящие фабрики молотков. Каждая фабрика фабрик молотков произведена для
вас ведущими экспертами в бизнесе фабрик фабрик молотков, так что вам нет
нужды беспокоиться обо всех деталях производства фабрики. И при этом вы все
еще получаете все преимущества от владения вашей собственной
специализированной фабрикой молотков, вырабатывающей ваши собственные
специализированные молотки в соответствии с вашими собственными
спецификациями дизайна молотков.
  • Однако, это не совсем...
  • Я знаю, что вы хотите сказать!! ... и мы не продаем их больше. По некоторым
причинам, немногие люди покупали фабрику фабрик молотков, так что мы нашли
новое решение для этой проблемы.
  • Уф.
  • Когда мы отступили назад и вгляделись в глобальную инфраструктуру
инструментов, мы определили, что людям не нравилось управлять и заниматься
фабриками фабрик молотков - также как и фабриками молотков, которые они
производили. Этот вид забот может быть довольно обременителен, когда вам
приходится действовать по подобному сценарию также и с фабриками фабрик
рулеток, с фабриками фабрик пил и с фабриками фабрик уровней, не говоря уже о
холдинговой компании - конгломерате мануфактур лесоматериалов. Когда мы
выяснили эту ситуацию, мы поняли, что она слишком сложна для тех, кто просто
намеревался изготовить шкафчик для специй.
  • Разумеется, без сомнений.
  • Так что на этой неделе, мы представляем многоцелевую фабрику фабрики фабрик
инструмента, так что все ваши различные фабрики фабрик инструмента могут быть
созданы одной унифицированной фабрикой. Эта фабрика фабрики фабрик будет
производить только те фабрики фабрик инструмента, в которых вы действительно
нуждаетесь, и каждая из этих фабрик фабрик будет производить уникальную
фабрику, основанную на выших собственных спецификациях инструмента.
Окончательный набор инструмента, который будет произведен в результате этого
процесса, станет идеальным инструментом для вашего частного проекта. Вы
будете иметь в точности тот молоток, что вам нужен, именно ту рулетку, что
нужна для вашей задачи и все виды клавиш (также, вы можете распостранять
несколько конфигурационных файлов, так чтобы вся работа выглядела в
соответствии с вашими ожиданиями.)
  • То есть у вас нет молотков? Совсем ни одного?
  • Нет. Если вы хотите высококачественный, изготовленный в соответствии с
индустриальными стандартами шкафчик для специй, вы отчаянно нуждаетесь в
чем-то более прогрессивном, чем простой молоток из заштатной скобяной лавки.
  • И это путь, которым должен идти каждый? Каждый должен использовать
многоцелевую фабрику фабрики фабрик инструмента всякий раз, когда он
нуждается в молотке?
  • Да.
  • Хорошо. Ладно. Видимо, мне придется так и поступить. Если сейчас вещи
создаются таким образом, я думаю будет лучше выучить, как делать это.
  • Успеха !
  • И они приходят с документацией, да?
Benji Smith Friday, September 30, 2005
19
Отличная статья, когда задумывался над сущностью праязыков программирования, примерно так и представлял.
28
Остальные смогут через интерфейс, просто описывать свои мысли и логику, а бот переводчик будет конвертировать её в машиночитаемый код.
для этого нужно чтобы мысли и логика были описаны особым образом с особым синтаксисом и семантикой, то есть на яп(просто уровень абстракции растёт)
либо нужен бот способный понимать человеческие мысли
но для этого интеллект бота должен быть как минимум на уровне человека
но тогда возникает вопрос
нафиг во всём этом человек
ибо такой бот и сам может мыслить
в результате в лучшем случае человечество деградирует до уровня обезьян(в худшем появится скайнет и всех перебьёт)
это всё моё имхо
19
бот, понимающий человека
Пока обратный тест Тьюринга с капчей не пройден, рано говорить. Боты, пишущие ПО для ботов - за этим будущее.
Ну и да, технологическая сингулярность раньше или позже, обезьяны и матрица.
Есть же алгоритм хакера девяностых, он же Dark Avenger, позволивший вирусам принимать 4 млрд+ вариаций. Что мешает другому талантливому самоучке написать алгоритм, позволяющий боту рекомбинировать код в ветвящиеся комбинации команд на все случаи жизни? Сетевой разум, начинающий с маленького батника и постепенно незаметно встраивающийся в антивирусы без видимой деятельности, чтобы при подключении к сети подключать мощности для написания и обработки новых версий себя с посыланием в остальные инф. компы? Тот же ботнет, но самосовершенствующийся и вовремя нажимающий необходимые кнопки на бирже, представляясь брокером и регулируя реальность под свою угоду? Вплоть до нажимания красных кнопок.
Пошел записывать идею %>
28
BrEd Pitt, ты сейчас по сути описал стратегическую нейронную сеть совмещённую с вирусом
только на данный момент не существует достаточно эффективных функций активации и алгоритмов обучения(можно использовать обучающие нн и интегралы но тогда всех компов мира не хватит чтобы такая сеть заработала)
34
для этого нужно чтобы мысли и логика были описаны особым образом с особым синтаксисом и семантикой, то есть на яп(просто уровень абстракции растёт)
ну я думаю через 50 лет мы к этому придем, я выбрал именно этот промежуток времени. А в целом на данный момент я говорю про утилиты которые могут генерировать вариативный шаблонный код. Никто не мешает прикрутить к этому скрипту хоть голосовое управления через сири например.
либо нужен бот способный понимать человеческие мысли
Не, понимать не нужно, все что нужно это их разбирать и составлять вменяемые предложения которые потом можно будет конвертировать в код. Например я говорю
"Сделай мне большую табличку Users, да такую чтобы там были поля name, lastname, password, phone и address". Сделай все поля типом String, кроме phone. Phone сделай типом integer."
Тут "Сделай мне" это ключевое слово приводящее к началу захвата произвольного потока данных из интерфейса (голоса, мозга, etc..), Человеческая часть речи которая не несет никакой логики отбрасывается, например "да такую", "большую", остальное воспринимается и парсится. Кстати описанного предложение более чем достаточно для полной генерации кучи кода связанного с управлением, отображением, редактированием пользователей на сайте.
35
Игрался тут недавно с RoR — понял, что современные разработчики в основном как бы это сказать «роутингом чтоли» занимаются. Алгоритмы писать нет смысла — всё уже есть на гитхабе, тестирование и документация автоматищированы. Настрой среду и сиди себе потоки данных между готовыми модулями роути, попутно их подпиливая под свои задачи.
И да, это неимоверно скучно
38
Это вам для этих ваших вебсайтиков шаблонизаторы генерируют код. Стоит углубиться в чуть более сложную архитектуру, приходится включать мозг и забыть про кодогенераторы.
34
ScorpioT1000, на данный момент да, даже в сайтиках кодогенераторы пишут только основную грязную часть.
ZlaYa1000, в веб разработке так и есть. Можно еще велосипеды свои писать, чтобы не скучно было.
29
Заменим программирование кода на программирование кодогенераторов. В чем разница? Еще один уровень абстракции. Все это в итоге все равно потребует соответсвующего мышления.
И да я считаю, что если человек весь из себя такой идейный и "может в логику", но не может в питон, то нихера он не может и идеи его ничего не стоят.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.