Конференция, с которой я завтра (точнее, уже сегодня) уезжаю была посвящена различным аспектам разработки языков программирования. Вдаваться в технические подробности не буду, суть не в этом. Суть в том, чему была посвящена немалая часть этой конфы. Первый слайд, который был показан после открытия, содержал вопрос: "А какое будущее ждёт современные компьютеры"? Да, да... Совсем недавно этот же вопрос был задан героем сериала HCF студентам-выпускникам 83-го года Только вот ответы получились немного разные. Что вообще хотели от компов в тех далёких 80-ых (ну, если не рассматривать рынок персоналок)? Чтобы они считали быстрее и точнее человека. Да даже раньше - Бэбидж, Тьюринг, "Энигма", "Эниак", БЭСМы, ЕСки, и языки типа "Фортрана" и "Кобола", предназначенные для реализации точных мат. рассчётов и построения моделей.
Это было давно. Сейчас, судя по всему, задача сделать что-то "вдвое дешевле и быстрее" действительно упёрлось в железо. И не столько в железо, сколько в то, сколько энергии потребуют высокоточные вычисления. Мобильные роботы, смартфоны, роботизированные автомобили и проч. проч. проч. - всё это питается от аккумуляторов, а не от розетки с почти нелемитированной мощностью и ампер-часами. А вот задачки решаются очень сложные.
И что в итоге? А в итоге программисты и железячники говорят: "не, ребята, тут буквально физическая проблема - мы посадим аккумулятор быстрее, чем закончатся расчёты". И что они говорят дальше? А говорят они примерно следующее: а нам вообще шашечки или ехать? Мы можем потратить кучу энергии на получение очень точного результата, который, на самом деле, нафиг никому не нужен. И начинают на конференциях обсуждать вопросы вероятностного и "приблизительного" программирования. Это когда путём некоторых ухищрений значительно упрощается алгоритм и намеренно понижается точность его работы, но... Она остаётся в заданных рамках. Почти всегда.
На самом деле, началось всё ещё в 90-ых, когда "внезапно" возникла проблема того, что большие изображения (и видео/аудио-потоки) очень сложно сжимаются. Думали ребята, думали, и обратили внимание вот на что: если результат кодирования/декодирования адресуется человеку, то точного соответствия перекодированного результата оригиналу не требуется. Мозг - такая штука, которая очень лихо "сглаживает" шумы, неточности, ошибки... И в итоге придумали формат JPEG, который сжимает изображения хоть и с потерями, но почти незаметными глазом. А потом - формат MPEG и брата его - MP3. Который делают тоже самое со звуком и видеопотоком. Потом ещё, и ещё... Да, при больших степенях сжатия артефакты становятся видны/слышны. Иногда даже очень. Но в целом... А нам вообще шашечки или ехать? Почему бы нам не писать такие программы, которые работают достаточно хорошо в большинстве случаев, но при этом значительно быстрее и с меньшим уровнем потребления энергии? Зачем платить больше, если разницы всё равно никто не заметит? И сами себе отвечают: да, мы будем так делать! Конечно же, там, где это допустимо (по крайней мере, пока).
Забавно то, что примерно таким же образом работает наш мозг. Есть быстрый контур принятия решений - эмоциональный (даётся почти мгновенная эмоциональная оценки ситуации и формируется реакция, которая чаще всего будет адекватной), а есть медленный - через сознательную оценку. Он может быть точнее, но значительно, значительно медленнее.
Так что, в скором будущем нас, вероятно, будут окружать машины, чаще всего считающие достаточно хорошо... Не, высокоточные вычисления останутся. Но только в тех областях, где они действительно нужны. А вот во всех остальных...
Одного я пока не знаю - хорошо это, или плохо...