пол_грэм хакерство

1. Хакерство как созидание: между искусством и наукой

С точки зрения системного архитектора, «информатика» — это «Югославия от мира дисциплин»: мешанина из математиков, теоретиков сетей и собственно хакеров, склеенная ради получения грантов. Настоящее программирование — не наука, а творчество, родственное живописи или архитектуре.

  • Сравнение ролей:
    • Computer Science: Математика и естествознание, изучающее поведение алгоритмов. К созданию ПО имеет то же отношение, что кристаллография — к архитектуре.
    • Программная инженерия: Сбивающий с толку термин. Инженер вычисляет, как реализовать спецификацию; хакер (как архитектор) решает, что именно строить.
    • Хакерство: Созидание качественных вещей. Компьютер здесь — среда самовыражения, где хакер воплощает спецификацию, чтобы понять, какой она должна быть.
  • Метод «Эскизов»: Колледжи учат планировать программу на бумаге, но программу создаешь в процессе написания. Код — это эскиз. Отладка — это не исправление опечаток в конце, а итеративный способ мышления.
  • Жизненная архитектура: Пытаться следовать жесткому 20-летнему плану — это преждевременная оптимизация. Вместо этого нужно сохранять гибкость «эскиза» в своей карьере.
  • Циклы вдохновения: Хакерство нелинейно. Работайте 16-часовыми рывками над амбициозными задачами, но всегда придерживайте «утешительно обычные» баги на периоды, когда энтузиазм угасает, чтобы система не «заглохла».

2. Языки программирования и Парадокс Блаба

Язык для хакера — это не просто инструмент передачи инструкций, а карандаш, которым думают. Если ваш язык не дает вам менять решение на ходу, вы пользуетесь не карандашом, а пером.

  • Парадокс Блаба: Программист на языке среднего уровня («Блабе») видит недостатки «нижележащих» языков, но не способен осознать мощь языков «выше». С его точки зрения, более мощный инструмент кажется «странным» или «избыточно сложным».
  • Критерии хакерского языка:
    1. Абстрактность: Короткие программы легче переписывать.
    2. Динамическая типизация: Не заставляет подписываться под представлением данных слишком рано.
    3. Гибкость: Позволяет «карябать и стирать», а не вести вежливые беседы со строгим компилятором.
  • Таблица выбора стека:
Тип целиРекомендуемый стекАрхитектурная причина
Корпорация / WindowsBlub (Java, C#)Дизайн языка направлен на то, чтобы «минимизировать отклонения индивидуальной производительности».
Лаборатория / ИсследованияRuby / Python / LinuxБаланс между скоростью реализации и мощностью.
Стартап / ИнновацииLisp / Эзотерические мощные языкиПозволяет вести «войну разработок», создавая вещи, которые конкуренты на Блабе даже не способны осознать.

3. Принципы хорошего дизайна и эмпатия

Хороший дизайн — это не украшательство, а понимание человеческой природы.

  • Золотое правило: «It just works» (Это просто работает).
    • Анти-паттерн: Современная духовка с кнопками, выдающая Err.
    • Эталон: Старая духовка с двумя ручками или Macintosh 1985 года. Хороший дизайн не требует чтения инструкций.
  • Эмпатия как стратегический навык:
    1. К пользователю: Понимать, насколько мало он знает. ПО должно объяснять себя само.
    2. К читателю кода: Программы пишутся, чтобы люди их читали, и лишь иногда — чтобы машины их выполняли.
    3. К конкуренту: «Прикладное сопереживание». Выбирая фичу, всегда выбирайте то, что больше всего расстроит ваших конкурентов.
  • Убийство монополий: Не атакуйте монополию в лоб (как текстовый процессор против Word). Убивайте её через «переопределение проблемы» (например, софт, уходящий из ОС в веб).

4. Генерация идей и стратегия «Против ветра»

Идеи не приходят в виде озарений; они кристаллизуются из боли и сложности.

  • Поиск проблем: Рецепт идеальной идеи: Ищите неразрешимые проблемы, которые, как вам кажется, можно решить. Всегда стремитесь к «сложному ядру» задачи.
  • Держаться «Против ветра»: Метафора планера. Выбирайте пути, которые дают максимальную маневренность в будущем. Математика находится «против ветра» относительно экономики: из математики можно уйти в экономику, но почти никогда — наоборот.
  • Эффект натюрморта и Sunk Cost: Остерегайтесь ловушки вложенного времени. Тот факт, что вы потратили месяц на идею, не делает её лучше. Избавиться от плохой идеи — это не поражение. История смены названия Viaweb за три дня доказывает: вы влюбитесь в новую (лучшую) идею так же быстро.

5. Интеллект, любопытство и работа на результат

Интеллект — это лишь топливо, а не двигатель. В детстве интеллект — «единственная игра в городе», но для взрослого это лишь средство для создания новых идей.

  • Динамическая система успеха: Природные способности + Практика + Усилия. Великая работа требует всех трех компонентов. Даже гении уровня Месси или Гейтса работают на пределе сил.
  • Архитектура усилий: Труд — это система, требующая настройки.
    • Для тяжелых задач (код/текст) предел — 5 часов в день.
    • В стартапе режим «все время» допустим на короткой дистанции, но требует контроля качества.
  • Мышцы независимого ума:
    1. Щепетильность к правде: Осторожность в степени веры и избегание идеологий-сэндвичей.
    2. Сопротивление навязыванию: Активное восхищение идеями, которые опровергают мнение большинства.
    3. Глубокое любопытство: Единственное, что заставляет продолжать «есть», когда вы уже сыты.
  • Честность с собой: «Где грязь, там и бронза». Самые прибыльные задачи часто выглядят «грязными» и неприятными. Будьте честны в том, что вами движет: если вы работаете ради денег — делайте это эффективно, но не позволяйте жажде наживы искажать ваше восприятие интересности работы.

Итоговый вывод: Если вы неизменно честны и дальновидны, ваша работа и жизнь автоматически приобретут оптимальную архитектурную форму.