понедельник, 27 августа 2012 г.

Джон Кармак о науке и искусстве разработки ПО

Мы можем что-то измерить и воспроизвести, используя научные инструменты для измерения, воспроизведения, оценки и проверки. После этого мы можем выбрать определённые алгоритмы и, даже, каким-то образом их оптимизировать. Но всё остальное, что мы делаем дальше, не имеет никакого отношения к науке или инженерии. Всё остальное — это вопрос социальных взаимодействий между программистами. Или даже программиста с самим собой в разные моменты времени.
Тут можно, например, начать говорить о функциональном программировании, лямбда-счислении, монадах — это всё красиво и очень наукообразно. Но всё это не влияет на то, что конкретно и как конкретно вы разрабатываете. Да, эти «методики» и полезные штуки позволяют ликвидировать определённые классы ошибок, допускаемых абстрактными разработчиками. Но, знаете, всё то, что я могу сделать с использованием чистого функционального языка (а это, как известно, самый академичный, научный и строго формализованный способ решения задач) — всё это будет преобразовано точно в такой же ассемблерный код, в который будет преобразовано аналогичное решение, реализованное на каком-нибудь BASIC или на чём-нибудь другом на ваш выбор.
Касательно этого я бы хотел привести пример с моим старшим сыном — он как раз сейчас учится программированию. У меня, на самом деле, появлялись мысли — а не научить ли его в семь лет чему-то типа Haskell? Хорошо, что мне хватило здравого смысла не давать этим мыслям дальнейший ход. И не потому, что я знаю Haskell настолько плохо, что не смог бы обучить другого человека, изучающего программирование с нуля. Нет.

Комментариев нет:

Отправить комментарий

Спутник взлетает. Первая ступень отработала.

 И, кажется, неплохо: Посмотрим, что будет когда отработает вторая.