Выбор языка ESR основан не только на парадигмах, но и на их использовании, каждый из которых представлен как:
- C / C ++: язык системного программирования (металл)
- Лисп: функциональная парадигма (просветление)
- Java: объектно-ориентированный (фреймворк)
- Perl: лучше язык оболочки (администратор)
- Python: Потому что это Python, дох. (рай - http://xkcd.com/353/)
А если серьезно, то Python является наиболее хорошо разработанным языком; все его функций просто очень хорошо вписываются в чистый, хорошо продуманный и простой в освоении язык, который не является игрушечным языком. Это универсальный, всесторонний язык общего назначения, который используется практически в любых ситуациях: настольные приложения, веб-приложения, встроенный язык сценариев, системное администрирование и т. Д., От самого маленького однострочного сценария до сотен тысяч линий. Его изюминкой является сам дизайн языка. AFAIK, в этом классе нет другого языка.
Perl представляет класс языка, используемого для сценариев оболочки или автоматизации заданий, где вам нужно вызывать серию программ, выполнять некоторые преобразования в ее выводе и передавать результат как при вводе другой программы. Другие языки в этом классе - bash, однако bash не хватает многих мощных манипуляций со строками, которые есть в perl (не говорите, что bash может вызывать perl, sed или awk).
Java представляет собой класс языка, который широко используется в промышленности и на него вкладывается большое количество времени и средств. Поскольку они повсеместно распространены, существует множество хороших библиотек и фреймворков для чего угодно; Если вы можете придумать проблему, скорее всего, проблема была решена кем-то другим, и они написали для нее библиотеку. Хакер должен знать эти языки, поскольку это увеличивает производительность, если вы можете избежать написания какого-либо кода (или избежать написания слишком большого количества кода). Другие языки / фреймворки в этом классе: .NET, Django, RoR.
Лисп представляет собой функциональную парадигму. Умение думать и писать в функциональной парадигме имеет много преимуществ, которые я не буду здесь повторять. Кроме того, в Лиспе есть очень мощные функции метапрограммирования, которые почти уникальны для Лисп. Другой язык в этом классе (функциональный, не метапрограммирующий) включает Haskell, Scheme, Clojure, F # и т. Д.
C / C ++ представляет языки низкого уровня, используемые для написания ядра ОС, драйверов устройств и критичных по скорости кодов. Этот класс языка имеет семантику, близкую к голому металлу (особенно C, в C ++ - тем более), и хакер должен знать, как работает металл, называемый CPU, иначе он не может назвать себя хакером. Другим языком в этом классе является Assembly, но я думаю, что даже ESR согласен с тем, что Assembly слишком низкоуровневая, чтобы делать что-либо продуктивное.
Хотя верно, что многие из упомянутых им языков имеют значительную долю перекрытий (например, Python, C ++, Perl поддерживает ООП, например); у каждого из классов языков есть выделение, уникальное для его собственного класса.
Лично, если бы мне дали возможность добавить еще один язык, я бы добавил в смесь PHP. Веб-приложение становится все более и более вездесущим. PHP представляет класс языка, используемого для веб-приложений, другие языки в этом классе включают JSP, ColdFusion и т. Д.
Короче говоря, хакер - это тот, кто:
- знает, как компьютер работает на низком уровне
- умеет мыслить абстрактно
- знает, как правильно использовать фреймворки
- знает, как управлять собственной системой
- знает дизайн, хороший язык