Здравствуйте, Буравчик, Вы писали:
Б>Когда уже такое будет?
Давайте сразу предположим, что такое есть.
Все программы "вырастают" из простейшей int main() {return 0;} путём последовательности трансформаций.
В чём будет подвох?
Принципиальный — в том, что каждый шаг трансформации обязан сохранять валидность программы. Сразу видим, что подобным способом можно породить только те программы, которые входят в "область связности" исходной программы.
Совершенно неочевидно, что эта область связности покрывает абсолютно все нужные нам программы.
Простейший аналог: если задать начальное слово, и разрешить менять по 1й букве на каждом шаге, требуя, чтобы результат оставался в пределах словаря, то из МОРЕ сделать ГОРА получится, а вот ПИВО — уже нет.
Напомню, что в обычном программировании объём правок между последовательными сборками может быть любым; мы не обязаны соблюдать никакую непрерывность.
Менее принципиальный, но ещё более действенный подвох — неудобство.
Сейчас программист думает в терминах структуры программы — что ему нужно написать, чтобы программа сделала то, что нужно.
В вашем подходе программист будет вынужден думать не только об этом, но и о том, в каком порядке вносить изменения.
Как ему сделать из программы, которая рисует круг, робота для торговли на бирже.
Опять же, на пальцах: понять, где должна стоять каждая фитюлинка в кубике Рубика, можно без подготовки. А вот придумать последовательность шагов, которые собирают кубик — это уже challenge.
Вы предлагаете заменить упраждение по наклеиванию квадратиков на стороны упражнением по сборке кубика.
Отличный способ просадить продуктивность на порядки.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, MamutArGud, Вы писали:
MAG>Но эти противоречия ты почему-то не видишь.
Я короче понял. Вот сейчас фото-приложения в смартфонах быстро обучаются делать фото "лучше".
В чём-то эта задача схожа в плане неразрешимости с задачей "сваргань мне программу".
То есть я просто навожу смартфон в нужную сторону и нажимаю на кнопку. Нейронка внутри пытается угадать, чего я хотел. Профессиональные фотографы учатся крутить настроечки лайтрума так, чтобы получить норм баланс белого и динамический диапазон. Беспринципная нейронка теперь делает то же самое, не отходя от кассы.
И там много всяких других "угадательных" штук — типа что если я делаю селфи в тёмной комнате около окна, то я не хочу на фотке своё отражение в стекле — я хочу себя на переднем плане, и ночной город на заднем.
Вплоть до вклейки стоковой фотки луны в мои селфи, на которых обнаружена луна.
Возможно, это нам так кажется, что писать программы — это какой-то сложный творческий процесс.
Возможно, на практике 90% потребностей клиентов можно закрыть "нейронкой", которой нужно только "показать" предмет автоматизации, а она сама родит более-менее то, что нужно.
Плюс два-три крутибельных параметра, типа "нет, главный объект тут — деньги, а не лицевой счёт", плюс десятки платных "фильтров", которые добавляют бесплатно сгенерированному 1С (или, скажем, FarCry) офигительности.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Пора уже переходить к "программированию наоборот".
Компьютер формирует всегда абсолютно правильную программу сам, а программист подсказывает что изменить.
Не формирует программу по частичкам (как сейчас), не говорит компу сделай все сам (как видится в фантастических рассказах), а направляет комп по чуть-чуть в нужную сторону.
— Программист: Рисуй фигуру. Компьютер: Рисует круг
— П: с углами. К: рисует треугольник
— П: углов четыре. К: рисует квадрат
— П: белого цвета. К: закрашивает квадрат
Итого, образовалась программа рисования квадрат белого цвета. Безошибочная.
Задача может быть и сложнее:
— П: Делаем новый API. К: Ок
— П: На java. К: Ок
— П: RPC-JSON, а не REST. К: Ок
и т.п.
Б>Итого, образовалась программа рисования квадрат белого цвета. Безошибочная.
... и никому ненужная
Б>Задача может быть и сложнее: Б>- П: Делаем новый API. К: Ок Б>- П: На java. К: Ок Б>- П: RPC-JSON, а не REST. К: Ок Б>и т.п.
а дальше?
Б>Когда уже такое будет?
уже есть :
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Буравчик, Вы писали:
Б>>Когда уже такое будет?
S>В чём будет подвох? S>Принципиальный — в том, что каждый шаг трансформации обязан сохранять валидность программы.
С чего бы это? Насколько я понял, последовательность не обязательна.
Ты просто можешь сразу перечислить все ограничения, итеративный подход может быть просто удобнее для человека:
"Рисовать фигуру, с четырмя равными углами, белого цвета"
Типа как в прологе, но без безумия пролога.
Или, у тебя есть нейронная сеть, и ты ее тиипа обучаешь — говоришь что хочешь получить.
Здравствуйте, Буравчик, Вы писали:
Б>Пора уже переходить к "программированию наоборот".
Б>Компьютер формирует всегда абсолютно правильную программу сам, а программист подсказывает что изменить. Б>Не формирует программу по частичкам (как сейчас), не говорит компу сделай все сам (как видится в фантастических рассказах), а направляет комп по чуть-чуть в нужную сторону.
Б>- Программист: Рисуй фигуру. Компьютер: Рисует круг Б>- П: с углами. К: рисует треугольник Б>- П: углов четыре. К: рисует квадрат Б>- П: белого цвета. К: закрашивает квадрат
Б>Итого, образовалась программа рисования квадрат белого цвета. Безошибочная.
Б>Задача может быть и сложнее: Б>- П: Делаем новый API. К: Ок Б>- П: На java. К: Ок Б>- П: RPC-JSON, а не REST. К: Ок Б>и т.п.
Б>Когда уже такое будет?
MAG>>Не будем говорить за всех людей. Мне, например, очень редко нужно именно это, и именно в таком порядке.
Б>Мне тоже очень-очень редко приходилось рисовать круги. Б>Смотри на проблему шире.
Я на нее и посмотрел. Задал вопросы. Внезапно (при том, что даже тебе редко приходилось рисовать круги) твоя абсолютно правильная программа рисует круги потому что «человек обычно хочет именно это.»
MAG>>Ну то есть нет никакой "абсолютно правильной программы", а внезапно она становится «относительно правильной программой» потому что одинаковые инструкции двух разных людей приведут к созданию двух разных программ. Потому что для одного программа угадала, что надо начинать с круга, а для другого — с теста Роршаха.
Б>Правильная программа — это та, в которой нет ошибок (ну ок, ок, минимум ошибок).
Правильная программа — эта та, что без ошибок выполняет поставленную задачу.
Б>Т.е. если круг нарисован, то он идеально ровный. И в квадрате все стороны равны и параллельны осям. Б>Потому что математика.
Да, только при этом эта программа будет на 100% ошибочной, потому что мне не нужен круг. И остается самый первый вопрос: почему на запрос «нарисуй фигуру» программа должна рисавать идеальный круг? Или квадрат? В математике есть множество фигур. Steinmetz 2-solid или там Archimedean solids — это тоже математика. Не говоря уже о Бэтмане.
Б>Если слон — то с хоботом, с четырьмя ногами и розовый (потому что программист на кывт зарегистрирован)
Какой слон? Африканский или индийский? Какой оттенок розового (у Pantone их 30 штук)? Возраст слона? Пол слона?
Здравствуйте, Sinclair, Вы писали:
S>Принципиальный — в том, что каждый шаг трансформации обязан сохранять валидность программы. Сразу видим, что подобным способом можно породить только те программы, которые входят в "область связности" исходной программы. S>Совершенно неочевидно, что эта область связности покрывает абсолютно все нужные нам программы.
Очевидно, что исходную пустую программу можно доразвить до машину Тьюринга, а дальше выразимы все алгоритмы.
Так что в "область связности" входит всё вычислимое...
S>Отличный способ просадить продуктивность на порядки.
+100500
Но это зависит от того, кто программирует. Некоторым людям такой подход будет органичен, а обычный вообще недоступен. И таких людей больше, чем таких, кому нынешнее программирование хорошо даётся
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Никогда.
Потому что получим ситуацию из анекдота про магазин с уточняющими вопросами, когда мужик и унитаз притащил, и жопу показывал, а ему туалетную бумагу так и не продали.
Недавняя ситуация: Делал трекинг выделяемой и освобождаемой памяти в ядре. Чтобы знать, кто и когда блок трогал, и подробности операций иметь, раскрутив стек. Трекаю область размером 4гб. Сделал трехуровневую sparsed струтуру а-ля page tables у процессоров. Чтобы и данные плотно упаковались, и индексация за константное время несколькими битовыми операциями.
Как ты это объяснять будешь и сколько это времени займёт ?
Здравствуйте, IID, Вы писали:
IID>Здравствуйте, Буравчик,
Б>>Когда уже такое будет?
IID>Никогда. IID>Потому что получим ситуацию из анекдота про магазин с уточняющими вопросами, когда мужик и унитаз притащил, и ........ показывал, а ему туалетную бумагу так и не продали.
IID>Недавняя ситуация: Делал трекинг выделяемой и освобождаемой памяти в ядре. Чтобы знать, кто и когда блок трогал, и подробности операций иметь, раскрутив стек. Трекаю область размером 4гб. Сделал трехуровневую sparsed струтуру а-ля page tables у процессоров. Чтобы и данные плотно упаковались, и индексация за константное время несколькими битовыми операциями. IID>Как ты это объяснять будешь и сколько это времени займёт ?
Когда ТС погрузится в такие же дебри разработки софта, о которых ты пишешь, а не будет сидеть где-то наверху, лабая простейшие свистелки на куче API, тогда у него подобных мыслей просто не возникнет, а если возникнет, то он только посмеётся над ними.
Здравствуйте, MamutArGud, Вы писали:
MAG>Почему круг? Почему не овал? Не Шар? Не Додекаэдр? Не линию? Ну и т.п. MAG>Почему треугольник? Почему не четырех-, пяти-, 128-, n-угольник? Почему не додекаэдр? MAG>Хорошо, треугольник. Прямой? Равносторонний? Равнобедренный? С одним тупым углом? MAG>Почему квадрат? Почему не трапецию? Ромб? Прямоугольник? Почему обязательно прямые линии?
Потому что человек обычно хочет именно это.
В этом и есть сложность такой системы — угадывать (предсказывать) хотелки из существующих условий.
И да, может система даже должна подстраиваться под человека.
Для одного нарисовать круг, а для другого — овал.
Здравствуйте, Буравчик, Вы писали:
Б>Пора уже переходить к "программированию наоборот".
Б>Компьютер формирует всегда абсолютно правильную программу сам, а программист подсказывает что изменить. Б>Не формирует программу по частичкам (как сейчас), не говорит компу сделай все сам (как видится в фантастических рассказах), а направляет комп по чуть-чуть в нужную сторону.
Б>- Программист: Рисуй фигуру. Компьютер: Рисует круг Б>- П: с углами. К: рисует треугольник Б>- П: углов четыре. К: рисует квадрат Б>- П: белого цвета. К: закрашивает квадрат
Б>Итого, образовалась программа рисования квадрат белого цвета. Безошибочная.
Б>Задача может быть и сложнее: Б>- П: Делаем новый API. К: Ок Б>- П: На java. К: Ок Б>- П: RPC-JSON, а не REST. К: Ок Б>и т.п.
Б>Когда уже такое будет?
Уже есть. Комнда разработчиков. Но ошибки бывают Даже если тестеров добавить. Но воркфлоу ооочень похож.
Здравствуйте, Ромашка, Вы писали:
Р>Здравствуйте, Буравчик, Вы писали: Б>>Когда уже такое будет?
Р>Да уже есть — функциональное программирование называется. Осталось только голосовые команды прикрутить.
В контексте топика функциональная парадигма не слишком отличается от императивной.
К подвидам декларативного программирования также зачастую относят функциональное и логическое программирование — несмотря на то, что программы на таких языках нередко содержат алгоритмические составляющие
Лично я склоняюсь к мысли, что функциональная парадигама программирования не выполняет заявленные идеи декларативного и смотреть нужно в сторону логического. Один из языков логического программирования — Prolog.
Б>Когда уже такое будет?
Если это не какой-нибудь генератор кода, то вряд ли скоро. В связи с этим хотелось бы ещё отметить парадигму метапрограммирования. Теоретически на нём можно сделать обвязку для всех языков и библиотек, но практически это очень ресурсоёмкая задача.
Здравствуйте, Буравчик, Вы писали:
Б>Пора уже переходить к "программированию наоборот".
Б>Компьютер формирует всегда абсолютно правильную программу сам, а программист подсказывает что изменить. Б>Не формирует программу по частичкам (как сейчас), не говорит компу сделай все сам (как видится в фантастических рассказах), а направляет комп по чуть-чуть в нужную сторону.
Б>- Программист: Рисуй фигуру. Компьютер: Рисует круг Б>- П: с углами. К: рисует треугольник Б>- П: углов четыре. К: рисует квадрат Б>- П: белого цвета. К: закрашивает квадрат
Б>Итого, образовалась программа рисования квадрат белого цвета. Безошибочная.
Б>Задача может быть и сложнее: Б>- П: Делаем новый API. К: Ок Б>- П: На java. К: Ок Б>- П: RPC-JSON, а не REST. К: Ок Б>и т.п.
Б>Когда уже такое будет?
Это не "наоборот", а обычное программирование. Нужно нарисовать фигуру — берёшь библиотеку рисования фигур и она "безошибочно" это делает. Сложность указывания, что именно программа должна делать и возможность ошибок в инструкция от добавления распознавания речи никуда не денутся.
Здравствуйте, Буравчик, Вы писали:
Б>Пора уже переходить к "программированию наоборот".
Б>Компьютер формирует всегда абсолютно правильную программу сам, а программист подсказывает что изменить.
Б>Когда уже такое будет?
Программист тут не будет нужен, подсказывать сможет любой эндюзер.
Наконец то сбудется то что предсказывали с 80-x.
Это конец профессии.
НУ и осталось всего лишь сделать программу которая будет подстказывать той что ихменить.
Никогда. Потому что даже твоя «абсолютно правильная» простейшая программа вызывает множество неразрешимых вопросов. Собственно:
Б>Компьютер формирует всегда абсолютно правильную программу сам, а программист подсказывает что изменить.
Что такое «абсолютно правильная программа»? Этот термин идентичен сферовакуумному коню. Итак:
Б>- Программист: Рисуй фигуру. Компьютер: Рисует круг
Почему круг? Почему не овал? Не Шар? Не Додекаэдр? Не линию? Ну и т.п.
Б>- П: с углами. К: рисует треугольник
Почему треугольник? Почему не четырех-, пяти-, 128-, n-угольник? Почему не додекаэдр?
Хорошо, треугольник. Прямой? Равносторонний? Равнобедренный? С одним тупым углом?
Б>- П: углов четыре. К: рисует квадрат
Почему квадрат? Почему не трапецию? Ромб? Прямоугольник? Почему обязательно прямые линии?
Б>- П: белого цвета. К: закрашивает квадрат
Закрашивает, включая грани, или исключая?
Б>Итого, образовалась программа рисования квадрат белого цвета. Безошибочная.
Образовалась программа рисования неизвестно чего. С указанными инструкциями вот это тоже безошибочный результат:
MAG>>Почему круг? Почему не овал? Не Шар? Не Додекаэдр? Не линию? Ну и т.п. MAG>>Почему треугольник? Почему не четырех-, пяти-, 128-, n-угольник? Почему не додекаэдр? MAG>>Хорошо, треугольник. Прямой? Равносторонний? Равнобедренный? С одним тупым углом? MAG>>Почему квадрат? Почему не трапецию? Ромб? Прямоугольник? Почему обязательно прямые линии?
Б>Потому что человек обычно хочет именно это.
Не будем говорить за всех людей. Мне, например, очень редко нужно именно это, и именно в таком порядке.
Б>В этом и есть сложность такой системы — угадывать (предсказывать) хотелки из существующих условий. Б>И да, может система даже должна подстраиваться под человека. Б>Для одного нарисовать круг, а для другого — овал.
Ну то есть нет никакой "абсолютно правильной программы", а внезапно она становится «относительно правильной программой» потому что одинаковые инструкции двух разных людей приведут к созданию двух разных программ. Потому что для одного программа угадала, что надо начинать с круга, а для другого — с теста Роршаха.
Здравствуйте, MamutArGud, Вы писали:
MAG>Не будем говорить за всех людей. Мне, например, очень редко нужно именно это, и именно в таком порядке.
Мне тоже очень-очень редко приходилось рисовать круги.
Смотри на проблему шире.
MAG>Ну то есть нет никакой "абсолютно правильной программы", а внезапно она становится «относительно правильной программой» потому что одинаковые инструкции двух разных людей приведут к созданию двух разных программ. Потому что для одного программа угадала, что надо начинать с круга, а для другого — с теста Роршаха.
Правильная программа — это та, в которой нет ошибок (ну ок, ок, минимум ошибок).
Т.е. если круг нарисован, то он идеально ровный. И в квадрате все стороны равны и параллельны осям.
Потому что математика.
Если слон — то с хоботом, с четырьмя ногами и розовый (потому что программист на кывт зарегистрирован)
Best regards, Буравчик
Re: Программирование наоборот -- это реверсинженеринг, а тебе надо обучение...
Здравствуйте, Буравчик, Вы писали:
Б>Когда уже такое будет?
Такое уже давно есть. Только это не применяют для задач, вроде "разработать рисовалку зелёных квадратов", а применяют для задач вроде "разработать автопилот для автомобиля" или "разработать детектор раковых заболеваний по рентгеновским снимкам".
ML называется
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Буравчик, Вы писали:
Б>Когда уже такое будет?
кое-где давно уже есть (вы настолько привыкли что не замечаете), зависит от предметной области.
Здравствуйте, Erop, Вы писали:
E>Но это зависит от того, кто программирует. Некоторым людям такой подход будет органичен, а обычный вообще недоступен. И таких людей больше, чем таких, кому нынешнее программирование хорошо даётся
Нет. Для такого программирования надо владеть предметной областью, чтобы объяснить компьютеру, что ты хочешь создать.
Поэтому:
будут обычные люди, которые "запрограммируют простые вещи" (то, что сейчас современная команда программистов делает за год)
будут программисты, которые "запрограммируют сложные вещи" (то, о чем сейчас команды программистов могут только мечтать), которые позволят сделать еще больше простых вещей
Здравствуйте, MamutArGud, Вы писали:
MAG>>>Ну то есть нет никакой "абсолютно правильной программы", а внезапно она становится «относительно правильной программой» потому что одинаковые инструкции двух разных людей приведут к созданию двух разных программ. Потому что для одного программа угадала, что надо начинать с круга, а для другого — с теста Роршаха.
Значит один мыслил "кругами", а другой "тестами Роршаха". Оба в конечном итоге придут к одному и тому же результату. Потому что у них цель такая. Но внутри "программа" будет сильно отличаться для этих двух людей. Как сейчас внутри отличается программа для разных программистов.
MAG>Какой слон? Африканский или индийский? Какой оттенок розового (у Pantone их 30 штук)? Возраст слона? Пол слона?
Ты когда в IDE создаешь проект, она у тебя много спрашивает?
Пару вопросов, но в остальном действует по-умолчанию. И тебя это вполне устраивает.
Когда ты работаешь с проектом, ты даешь команду "переименовать класс" и весь проект подстраивается под твою хотелку, все переименовывается, автоматически, без ошибок.
Просто компьютер лучше станет определять какие классы нужно переименовать, а какие нет. Просто уровень сложности команд вырастет.
Чтобы дать устраивающий результат просто надо учитывать кто сидит перед компьютером. Ребенок, взрослый, экономист, программист и т.п.
Здравствуйте, Erop, Вы писали: E>Очевидно, что исходную пустую программу можно доразвить до машину Тьюринга, а дальше выразимы все алгоритмы. E>Так что в "область связности" входит всё вычислимое...
Отличный заход. Но нет, неочевидно. И "дальше" — тоже неочевидно. Или вы предполагаете, что вы сначала уговорите компьютер создать МТ, а программу для этой МТ будете ему просто диктовать?
Тогда можно миновать этап создания МТ, и просто диктовать код C#.
А если нет — то даже после получения МТ нам придётся точно так же получать программу для неё последовательными трансформациями из "ничего".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
MAG>>Какой слон? Африканский или индийский? Какой оттенок розового (у Pantone их 30 штук)? Возраст слона? Пол слона?
Б>Ты когда в IDE создаешь проект, она у тебя много спрашивает?
IDE не претендует на создание «абсолютно правильной программы». И так же не претендует на «я рисую круг патамушта математика».
Б>Пару вопросов, но в остальном действует по-умолчанию. И тебя это вполне устраивает.
Б>Когда ты работаешь с проектом, ты даешь команду "переименовать класс" и весь проект подстраивается под твою хотелку, все переименовывается, автоматически, без ошибок.
Потому что когда я переименовываю «Круг» в «Слона» IDE не пытается угадать, что еще надо изменить, а просто переименовывает «Круг» в «Слона».
Б>Просто компьютер лучше станет определять какие классы нужно переименовать, а какие нет. Просто уровень сложности команд вырастет.
Пока что твое «Просто» упирается в неразрешимые противоречия.
Б>Чтобы дать устраивающий результат просто надо учитывать кто сидит перед компьютером. Ребенок, взрослый, экономист, программист и т.п.
То есть:
— нет никакой «абсолютно правильной программы». Потому что даже самое начало, «нарисуй фигуру» будет или абсолютно неправильным (я не хотел круг) или правильным только для какого-то конкретного человека (напримре, угадала, что ребенку нужен не круг, а глокая куздра).
— для создания конечного результата каждому отдельному человеку придется прилагать усилия от нулевых (цвет, рост, вес, пол слона был угадан сразу) до бесконечных (программа будет угадывать какие угодно фигуры только не те, которые нужны).
Здравствуйте, MamutArGud, Вы писали:
MAG>IDE не претендует на создание «абсолютно правильной программы». И так же не претендует на «я рисую круг патамушта математика».
Претендует. На абсолютно правильное переименование всех классов в проекте.
Т.е. был запускаемый проект до переименования (в данном контексте — это "программа без ошибок")
И после переименования имеем запускаемый проект (опять же "программу без ошибок")
Т.е. переход из одного состояние в другое не вносит дополнительных ошибок.
А так как ошибок не было с самого начала, то ошибок нет вообще.
Вот, что я называю «абсолютно правильной программой» в контексте данного топика.
MAG>Потому что когда я переименовываю «Круг» в «Слона» IDE не пытается угадать, что еще надо изменить, а просто переименовывает «Круг» в «Слона».
Моя умная IDE мне помогает и пытается угадать не только очевидные вещи.
Например, переименовывает названия классов в комментариях.
Также изменяет составные названия классов: Круг, ВиртуальныйКруг, СпециальныйКруг превратятся в Слон, ВиртуальныйСлон, СпециальныйСлон.
Я ей об этом не говорил. Видишь, она сама "догадалась" какого цвета должен быть круг и какого вида слон.
MAG>Пока что твое «Просто» упирается в неразрешимые противоречия.
MAG>>IDE не претендует на создание «абсолютно правильной программы». И так же не претендует на «я рисую круг патамушта математика».
Б>Претендует. На абсолютно правильное переименование всех классов в проекте.
Нет. Не претендует. Нет никакого «нарисуй фигуру» — «программа догадалась, что надо нарисовать круг в зависимости от фазы луны».
Б>Т.е. был запускаемый проект до переименования (в данном контексте — это "программа без ошибок") Б>И после переименования имеем запускаемый проект (опять же "программу без ошибок")
То, что программа запускается, не значит, что она без ошибок.
Б>Т.е. переход из одного состояние в другое не вносит дополнительных ошибок.
Не факт.
Б>А так как ошибок не было с самого начала, то ошибок нет вообще.
Кто сказал, что ошибок не было с самого начала?
Б>Вот, что я называю «абсолютно правильной программой» в контексте данного топика.
Для тебя абсолютно правильная программа — та, что запускается и делает что-то наугад, даже если это не то, что от нее требуется?
MAG>>Потому что когда я переименовываю «Круг» в «Слона» IDE не пытается угадать, что еще надо изменить, а просто переименовывает «Круг» в «Слона». Б>Моя умная IDE мне помогает и пытается угадать не только очевидные вещи. Б>Например, переименовывает названия классов в комментариях. Б>Также изменяет составные названия классов: Круг, ВиртуальныйКруг, СпециальныйКруг превратятся в Слон, ВиртуальныйСлон, СпециальныйСлон.
Изменятся только при определенных и весьма ограниченных условиях.
Б>Я ей об этом не говорил. Видишь, она сама "догадалась" какого цвета должен быть круг и какого вида слон.
MAG>>Пока что твое «Просто» упирается в неразрешимые противоречия. Б>Не вижу противоречий
Потому что ты упорно даже не пытаешься читать, что тебе пишут. Можем начать сначала.
Б>- Программист: Рисуй фигуру. Компьютер: Рисует круг
Почему круг? Почему не овал? Не Шар? Не Додекаэдр? Не линию?
Здравствуйте, MamutArGud, Вы писали:
MAG>То, что программа запускается, не значит, что она без ошибок.
В данном контексте, это значит, что IDE выполнила свою работу верно.
Б>>Т.е. переход из одного состояние в другое не вносит дополнительных ошибок. MAG>Не факт.
В этом одна из целей и особенность такой системы. Система не должна вносить ошибок, связанных с переходом.
MAG>Кто сказал, что ошибок не было с самого начала?
В начальном (нулевом) состоянии ошибок нет.
MAG>Для тебя абсолютно правильная программа — та, что запускается и делает что-то наугад, даже если это не то, что от нее требуется?
Запускается и с вероятностью 80% делает то, что от нее требуется.
Если ты попал в 20%, ну что ж, тебе придется еще пообщаться с компьютером, объяснить ему.
Не надо требовать автоматически создать программу, которая делает все что-нужно.
Т.е. создавать "абсолютно правильную программу" как это ты понимаешь.
Я об этом писал еще в начальном топике — речь не идет про волшебную кнопку.
Основной посыл:
Система итеративная. Делает максимально возможное и максимально хорошо, на текущий момент.
Человек направляет систему, чтобы она "подумала" в определенном направлении.
Как человек общается с человеком. Когда ты говоришь человеку: "дай карандаш",
он не задает тебе вопросов какого цвета, какой длины, новый-старый и т.п.
А дает тот, которым можно писать.
Если тебе он нужен был для другого, ты просто выскажешь новые требования. И тебе дадут другой карандаш.
MAG>Потому что ты упорно даже не пытаешься читать, что тебе пишут. Можем начать сначала.
Не надо. Похоже, мы оба не можем донести до собеседника свои мысли.
MAG>>То, что программа запускается, не значит, что она без ошибок. Б>В данном контексте, это значит, что IDE выполнила свою работу верно.
Рамки твоего контекста очень гибкие.
Б>>>Т.е. переход из одного состояние в другое не вносит дополнительных ошибок. MAG>>Не факт.
Б>В этом одна из целей и особенность такой системы. Система не должна вносить ошибок, связанных с переходом.
Система должна создавать абсолютно верную программу, согласно твоему изначальному контексту.
MAG>>Кто сказал, что ошибок не было с самого начала? Б>В начальном (нулевом) состоянии ошибок нет.
Что такое «нулевое состояние»?
MAG>>Для тебя абсолютно правильная программа — та, что запускается и делает что-то наугад, даже если это не то, что от нее требуется?
Б>Запускается и с вероятностью 80% делает то, что от нее требуется.
В «абсолютно правильной проограмме» внезапно «вероятность 80%»
Б>Основной посыл: Б>Система итеративная. Делает максимально возможное и максимально хорошо, на текущий момент. Б>Человек направляет систему, чтобы она "подумала" в определенном направлении.
Define: максимально возможное. Define: максимально хорошо
Б>Как человек общается с человеком. Когда ты говоришь человеку: "дай карандаш", Б>он не задает тебе вопросов какого цвета, какой длины, новый-старый и т.п. Б>А дает тот, которым можно писать.
Если несколько карандашей, может задать, а может и не задать.
MAG>>Потому что ты упорно даже не пытаешься читать, что тебе пишут. Можем начать сначала. Б>Не надо. Похоже, мы оба не можем донести до собеседника свои мысли.
Твои мысли ты прекрасно доносишь. Есть какая-то магическая система. Которая на слово «фигура» обязательно рисует идеальный круг, потому что математика. А может и не рисует, потому что она «догадывается» исходя из того, кто сидит за компьютером. Если ей дать уточнение, то она или сдеалет гарантированное действие, например, нарисует квадрат, потому что математика. Или не сделает, потому что «догадывается», «максимально возможное и максимально хорошо, на текущий момент» и прочее «вероятность 80%». И так далее и тому подобное.
Здравствуйте, Буравчик, Вы писали:
Б>Нет. Для такого программирования надо владеть предметной областью, чтобы объяснить компьютеру, что ты хочешь создать.
Вовсе не обязательно. Можно же и ощупью, на чувстве, двигаться. Скажем, представь, что ты так делаешь комп. игру...
Мало того, разные аспекты этой программы, могут развивать разные люди. Один, например, может развивать интересность игры, а другой следить за её сбалансированностью...
Б>Поэтому: Б>будут обычные люди, которые "запрограммируют простые вещи" (то, что сейчас современная команда программистов делает за год)
Примерно это уже есть во всяких скрамах с аджайлами, просто там процесс внесения правок не автоматизирован. Но с методологической т. з, это просто повышает цену ошибочных попыток.
Б>будут программисты, которые "запрограммируют сложные вещи" (то, о чем сейчас команды программистов могут только мечтать), которые позволят сделать еще больше простых вещей
Эти, всегда были и есть и будут, и они вряд ли сабжевым "программированием наоброт" будут пользоваться
Но я ещё раз говорю. Реальность нынче иная. Такого рода задачи нынче модно и получается решать в рамках подходов, базирующихся на ML
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Sinclair, Вы писали:
S>Отличный заход. Но нет, неочевидно. И "дальше" — тоже неочевидно. Или вы предполагаете, что вы сначала уговорите компьютер создать МТ, а программу для этой МТ будете ему просто диктовать?
Ну программа МТ -- это просто таблица же. Её можно легко диктовать инкрементально. Типа "так же, но в таком-то случае, делай то"...
Понятно, что это не самый эффективный способ писать программы, но это позволяет показать, что всё вычислимое достижимо, во-первых.
И наводит на мысль, что в рамках этого подхода можно тоже пользоваться чем-то вроде библиотек или "зародышей" программ, во-вторых. Ну там, берём уже кем-то как-то развитые обобщённый редактор чего-то или текстовый редактор или и развиваем до того, что нам надо.
S>Тогда можно миновать этап создания МТ, и просто диктовать код C#.
На мой взгляд показать, что можно из пустой программы развить интерпретатор C# довольно нетривиально. Через МТ проще.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Буравчик, Вы писали:
Б>Пора уже переходить к "программированию наоборот".
... Б>Когда уже такое будет?
Попробуй смоделировать диалог создания какой-нибудь реальной программы.
Ну, хотя бы квиксорт так запрограммировать или, например, notepad.
Здравствуйте, IID, Вы писали:
IID>Здравствуйте, Буравчик,
Б>>Когда уже такое будет?
IID>Никогда. IID>Потому что получим ситуацию из анекдота про магазин с уточняющими вопросами, когда мужик и унитаз притащил, и жопу показывал, а ему туалетную бумагу так и не продали.
IID>Недавняя ситуация: Делал трекинг выделяемой и освобождаемой памяти в ядре. Чтобы знать, кто и когда блок трогал, и подробности операций иметь, раскрутив стек. Трекаю область размером 4гб. Сделал трехуровневую sparsed струтуру а-ля page tables у процессоров. Чтобы и данные плотно упаковались, и индексация за константное время несколькими битовыми операциями. IID>Как ты это объяснять будешь и сколько это времени займёт ?