Никита Прокопов (tonsky) wrote,
Никита Прокопов
tonsky

Category:

Гости из будущего

Какое-то время назад в комменты на HN пришел Алан Кей и отвечал на вопросы. Одна из тем дискуссии, естественно, куда computer science двигаться дальше.

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

  1. Я это использую или могу использовать.
  2. Я знаю, как это сделать
  3. Никто не знает, как это сделать
  4. Никто не знает, что делать

Подавляющее большинство дискуссий происходят на уровне 1. Это уровень How-to и Experience reports. Здесь речь идет о готовых, уже существующих инструментах, которые можно взять с полки. Не подумайте, что тут не о чем говорить — применимость инструментов, эксплутационные качества, взаимные сравнения. Но здесь речь всегда о том, что уже есть, готово, состоялось, сделано кем-то другим, известно как факт, дано нам свыше.

Статьи, написанные на уровне 2, уже вызывают сложности с восприятием, когда их пытаются интерпретировать на уровне 1. Здесь речь идет о том, что предлагается сделать. Новая идея, новый подход, новая библиотека, новый язык — их еще не существует, но конкретика, как это должно выглядеть, уже есть. Естественно, возникает огромное сопротивление — просто потому, что доступ к уровню 1 гораздо проще, чем к уровню 2. Люди очень хорошо видят препятствия (они есть уже сейчас), но с плохо оценивают выигрыш (его никто пока не видел). Я говорю на собственном опыте в том числе — многие вещи я очень легко пропускаю в первый раз, но начинаю ценить, когда они уже состоялись и все вокруг с ними носятся.

Кое-как я, впрочем, научился с этим работать:

  • Я априори предполагаю, что любую новую идею я оценить не могу.
  • Когда я вижу какое-то предложение (новая библиотека, язык, подход — как правило, это более чем одна идея, часто они еще и зарыты в реализации), я пытаюсь прикинуть новизну каждой идеи отдельно.
  • Новые идеи, как мы говорили, оценить нельзя.
  • Неновые идеи, как правило, можно оценить по их успеху в других местах.
  • Иногда новой может быть комбинация неновых идей. См. выше.

Итого мы либо получаем оценку на основе предыдущего опыта (это уже было и выступило вот так, если вы думаете, что будет по-другому, нужно что-то делать по-другому), либо получаем, что оценку дать нельзя. Результат не очень практичный, но зато согласуется с наблюдениями. Как минимум это помогает не игнорировать идеи, результат которых может быть потенциально существенным. Т.е. мы избавились от ложноотрицательных оценок.

А дальше начинается совсем интересное. Третий уровень — никто не знает как это сделать. Но здесь хотя бы понятно, что именно сделать — т.е. понятны проблемы. Ситуация похожа на второй уровень, только конкретных предложений пока нет. Тут проходят интересные дискуссии о возможных решениях и их недостатках. Аналогично со вторым уровнем, где мы оценивали пользу, тут можно прикидывать реализуемость тех или иных подходов. Схема очень похожа, и ложноотрицательных результатов тоже надо бояться. Интересная особенность этого уровня — решения пока нет ни у кого — означает, что искать его нужно за пределами текущего комплекса знаний, out of the box. Совет:

Дискуссия на третьем уровне очень важна, потому что позволяет прогрессу двигаться инкрементально.

И наконец четвертый уровень — никто не знает, что делать. Ничего не понятно, ничего не известно. Кое-что, впрочем, и тут можно сказать:

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

Это совсем космический уровень и у меня не хватает эрудиции описать, что тут происходит. Именно этот уровень отвественен за качественные скачки в computer science, и он почти недостижим последовательным решением сегодняшних проблем из уровней 2–3. Один из предложенных Аланом способов, как можно работать на этом уровне:

Главное, на что я хочу обратить внимание — всегда важно понимать контекст, в котором идет обсуждение. Скажем, спор «почему C++ программистам не нужен Go» идет в контексте первого уровня — две вполне конкретные технологии, данные нам свыше. Заявление «Go был бы лучше, если бы в нем...» это уже второй уровень. Комментарии в духе «это уже есть в Хаскелле» — с первого уровня. Ответ «там не такое же потому-то и потому-то» — опять второй. Третий уровень — это что-то из серии «чисто декларативная система могла бы кардинально снизить сложность», никто такого не видел, но в принципе цель благородная. Ну или попроще — «нужна какая-то модель для программирования в распределенной конкурентной среде» :)

Еще пример: «вот что может JavaScript» — первый. «Вот так можно было бы сделать JavaScript производительнее» — второй. «Как приспособить JavaScript для написания больших программ» — третий. Этот вопрос перешел бы на второй уровень, если бы в любом другом языке эту проблему решили, кстати.

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

Tags: мир будующего, популярные заблуждения, хотите честно
Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 28 comments