Python ужасен для большинства вещей, которые можно сделать из командной строки. Это просто факт. Тем не менее, как новички, так и опытные программисты продолжают выбирать этот неправильный инструмент для работы. Если вам не требуется обработка сложных чисел, библиотеки обработки данных, удаленная синхронизация задач, быстрые объекты и структуры данных или встроенная база данных SQL, вы, вероятно, используете неправильный инструмент для работы, если вы выбираете Python. (См. пламя фанатов.) Вместо этого используйте саму оболочку или современный скомпилированный язык.

Когда дело доходит до служебного кода из командной строки и для вещей из командной строки, ничто не сравнится со следующим — в порядке масштаба и области действия:

  1. POSIX-оболочка
  2. Перл
  3. Go
  4. питон

✨ Обратите внимание, что это выбор языкаслужебных, а не разработка визуальных приложений. Если в приложении есть визуальный компонент, то он, вероятно, сделан в HTML, CSS и JavaScript в наши дни с прогрессивными веб-приложениями, Electron, Vue и React. Если у него нет более высокой производительности или 3D-требований, в этом случае он находится на C ++ или Rust. Java, Swift и Kotlin держатся, но у них мало шансов выжить благодаря инновациям и развитию веб-технологий.

POSIX-оболочка

Интерпретатор оболочки уже запущен каждый раз, когда вы используете командную строку, поэтому функции и псевдонимы в вашем .bashrc будут записываться и выполняться на порядки быстрее. Вы действительно не заботитесь о переменной области, строгой типизации и объектах для такого рода вещей. Вы хотите писать и выполнять вещи очень быстро, не задумываясь. Ожидание этих дополнительных миллисекунд для запуска Python или другого интерпретатора со временем действительно раздражает и еще хуже, когда вы объединяете функции вместе. Если бы каждая из этих функций была коротким скриптом Python, Perl или Ruby, вам пришлось бы ждать, пока интерпретатор запустится и скомпилирует для каждой. Это смехотворно неэффективно по сравнению с простыми функциями оболочки или скомпилированным кодом.

Перл

Иногда вам действительно нужно сделать что-то быстрое из командной строки, что выходит за рамки возможностей оболочки — особенно все, что требует большого количества изменений и синтаксического анализа файлов. Часто для инструментов у вас нет ничего, кроме vi (не vim) и терминала для его кодирования, и у вас, конечно, нет времени на установку интерпретатора (если боги управления изменениями вообще позволили это). Вот где Perl сияет. Он был создан для этого.

Многие программисты не понимают, когда вы выполняете sed, awk, find, grep даже tr, что вы запускаете отдельный процесс для каждого. Что еще хуже, все они имеют разные способы написания регулярных выражений. Этого было достаточно, чтобы убедить Ларри Уолла в первую очередь создать perl, чтобы заменить их всех одним лучшим в своем классе инструментом. Ларри может гордиться тем, что его творение по-прежнему превосходно подходит для этой конкретной потребности.

💢 Должен признаться, я пришел к тому, чтобы немедленно осудить любого, кто использует длинный конвейер этих небольших команд, когда одна perl обратная кавычка сделала бы всю работу. Определенно признак посредственного сисадмина. Я не токсичен. Я веду себя научно. Для таких вещейобъективнолучше использовать perl (независимо от того, что говорят нубы на StackExchange).

Perl уже используется во всем, то есть в любой системе UNIX/Linux, созданной за последние 25 лет. Питон нет. Perl определил стандарт для регулярных выражений, а Python даже включает оригинальную библиотеку C, созданную для Perl. Perl — король регулярных выражений, и точка.

Perl имеет дополнительное преимущество, заключающееся в очень простом однострочном выполнении, что делает его идеальным для этих $( perl -e ... ) (ранее обратных тиков, да, я такой старый) в вашем профиле оболочки и rc-скриптах. Фактически, Perl-код очень часто встраивается в такие скрипты так же, как sed или awk.

⚠️ Молодые, незрелые программисты часто приравнивают Perl к старым-туманкам и шутят, что он «только для чтения». Хотя это правда, что Perl был доминирующим языком Интернета более десяти лет, это никогда не было его первоначальным использованием. Perlпродолжаетдоминировать в своем первоначальном основном использовании, заменяя и унифицируя все другие небольшие языки оболочки. Любой, кто действительно сравнивает использование регулярных выражений во всех языках, должен просто признать, что Perl объективно является самым ясным и чистым из всех. У Perl плохая репутация, потому что программистам он так понравился, что они выдвинули его за пределы его первоначальной области применения, пытаясь превратить его в инструмент системного программирования, каким с самого начала задумывались Python и Go.

Go

Все остальное, что вы можете запустить из командной строки и требует большего размера и структуры, должно быть скомпилировано и написано на строго типизированном языке. Это еще более важно, если вам необходимо распространять свой инструмент среди других пользователей и систем. Вы никогда не хотите заставлять пользователя или системного администратора устанавливать интерпретатор языка только для того, чтобы использовать ваш инструмент.

Роб Пайк и другие шутят, что Go был задуман, когда в Google несколько часов ждали завершения компиляции C++. Это первый современный скомпилированный язык, пользующийся лучшей репутацией и самым широким распространением. В нем были созданы Docker, Kubernetes и многие другие базовые системы. Есть ряд других языков для такой работы (Rust, Julia, Crystal), ни один из них не является столь же доминирующим и прагматичным, как Go, и вряд ли когда-либо догонит его по темпам и удивительности.

питон

Из питона получается отличный клей, некоторые называют его скотчем. Когда дело доходит до запуска скриптов, резервного копирования, проверки пера, отчетов и других задач на нескольких машинах одновременно, или создания скриптов для соединения с несколькими переходами к удаленной системе, Python действительно доминирует. Celery (и Fabric) перед упрощением асинхронного соединения и выполнения задач и ожиданием создания выходных данных, которые можно отслеживать. Такого рода множественные системные сценарии действительно требуют Python. Вы даже можете использовать Python для доставки скомпилированных утилит Go для запуска на целевых системах. Некоторое время существовал Ruby с Chef и Puppet, но Python зарекомендовал себя на этом фронте — особенно потому, что в сам язык встроена база данных SQL, позволяющая временно хранить все собранные данные очень элегантным способом для передачи. к другим системам.

🤔 Нет ничего плохого в том, что Python также является ведущим языком обработки данных, но служебные задачи находятся в совершенно другой категории, чем эта работа (и требуют многого другого обучения для освоения).

Не забывайте об управлении изменениями

Начинающие системные разработчики часто попадают в ловушку, думая, что все, что необходимо в системе для запуска их маленького инструмента, может быть просто установлено пользователем или администратором, когда это необходимо. Это до смешного наивное представление. Хотя верно то, что некоторые организации переходят к непрерывной интеграции, чтобы ускорить процесс развертывания инструментов и приложений, в большинстве из них по-прежнему действует строгое управление изменениями, требующее отправки запроса на изменение, его утверждения и последующего планирования окна для его развертывания. . Немногие будут утруждать себя установкой или обновлением интерпретатора только для того, чтобы запускать ваш код — тем более, что сейчас просто нет необходимости, поскольку Go и другие компилируемые языки существуют именно для этой цели.

Удачного кодирования!

Первоначально опубликовано на skilstak.io.