Путешествие в мир Zig
Примечание переводчика
В этой статье поднимаются пара важных вопросов, о которых многим стоит задуматься. Я часто встречаю фронтов, которые не умеют писать код на ванильном JS, как и бэков, которые не умеют писать код на чистом PHP без использования фреймворков. Т.е. в теории могут, но на практике не понимают, как работают многие механизмы внутри используемого фреймворка.
Оригинал статьи доступен по ссылке: https://kristoff.it/blog/the-zig-journey/.
Пару недель назад я посетил Zigtoberfest, однодневную конференцию, организованную в Мюнхене.
Мне предложили выступить с вступительным словом в начале дня, и я решил поделиться с аудиторией некоторыми соображениями о том, как относиться к Zig и как к проекту, и как к сообществу, разделенному на три уровня, ориентированных соответственно на новичков, пользователей среднего уровня и продвинутых пользователей Zig.
Я не буду пересказывать все в этом посте, но хочу подчеркнуть основную мысль моего выступления: путь Zig.
Так совпало, что этот пост может помочь ответить на некоторые вопросы людей, которые не совсем понимают, в чем смысл Zig в свете {Go, Rust, Modula-2, Mojo, больших языковых моделей и т. д.}.
1. Ориентируйтесь на компьютеры, а не на фреймворки
Мой главный совет новичкам: научитесь воспринимать проблему как последовательность операций, предлагаемых целевой системой, а не как совокупность зависимостей, которые предлагают API более высокого уровня, но с ограниченным функционалом и потенциально даже неэффективные. Это чрезвычайно полезный навык, который пригодится в любой экосистеме, включая веб-разработку.
Системное программирование — это способ моделирования разработки программного обеспечения. Дело не в том, над чем вы работаете, а в том, как вы смотрите на проблему. Отличный системный программист полностью понимает задействованные системы.
Это не значит, что вам не следует использовать зависимости или фреймворки, но проблема в том, что это единственное, что вы умеете делать.
Множество тривиальных задач лучше всего решать, комбинируя зависимости, но если вы когда-нибудь захотите попробовать свои силы в создании чего-то инновационного, вам понадобится полный контроль над основной функциональностью вашей программы, чтобы предоставить пользователям по-настоящему новый и продуманный опыт.
2. Тщательно продумывайте поведение кода
Если предыдущий совет заключался в том, чтобы тщательно изучить функциональные требования ваших приложений, то теперь мой совет пользователям Zig среднего уровня — взять на себя ответственность за проектирование всего остального.
Если ваше приложение зависит от каких-то важных библиотек на C/C++, то есть большая разница в том, чтобы пользователи устанавливали их самостоятельно, или чтобы вы указывали их напрямую в скрипте сборки Zig.
В первом случае ваше приложение де-факто зависит от менеджеров пакетов (apt, brew, winget и т. д.) и будет работать некорректно всякий раз, когда разработчик пакета что-то меняет в способе упаковки зависимости (например, версию или переключатель функций).
По этой же причине в некоторых экосистемах наблюдается чрезмерное использование контейнеров, в то время как Zig позволяет достичь золотого стандарта, когда ваше приложение собирается для всех систем, из всех систем, просто путем запуска zig build.
Чтобы помочь в этом, я создал All Your Codebase (GH, CB) — организацию, которая собирает и коллективно поддерживает скрипты сборки для проектов на C/C++.
Это лишь один пример детальной проработки поведения кода. Другие примеры включают повышение эффективности, устранение ненужного выделения памяти в куче и правильный фаззинг.
3. Сделайте идеальное программное обеспечение реальностью
Совет продвинутым пользователям Zig: просто найдите проект, который вам по-настоящему нравится, и доведите его до конца.
Совершенство в данном контексте означает, что вы полностью изучили область, которую решили охватить своим приложением, что вы полностью отвечаете за основную функциональность, предлагаемую вашим пользователям, и что вам больше не нужно вносить существенные нефункциональные улучшения.
В зависимости от масштаба проекта на достижение этой цели может уйти несколько лет работы, но в конечном итоге именно так вы придадите смысл всем усилиям, которые приложили на своем пути.
В заключение
То, что я только что описал, характерно не только для Zig.
Вы можете (и должны!) следовать тому же пути в других экосистемах, но Zig — это не только набор инструментов, но и сообщество, которое целенаправленно помогает вам продвигаться по этому пути. Несмотря на то, что ни набор инструментов, ни экосистема еще не достигли полной зрелости, в зависимости от ваших личных предпочтений и готовности стать одним из первых пользователей, Zig может стать для вас лучшим способом стать более востребованным инженером-программистом.
В статье «Hello Systems» я рассказываю о том, насколько сложнее написать полноценный генератор статических сайтов на Python по сравнению с низкоуровневым языком, таким как Zig. Это связано с тем, что после самого поверхностного уровня функциональности (преобразования Markdown в HTML) из-за абстракции, присущей Python, становится невероятно сложно точно настроить параллелизм и многое другое.
Мнение о том, что высокоуровневые языки программирования — это всегда самый простой способ создания программного обеспечения, — это заблуждение, которое, в свою очередь, приводит к чрезмерной зависимости от сторонних ресурсов и в конечном итоге отдаляет вас от понимания того, на что способна машина.
Если вы научитесь глубоко понимать системы, то сможете не только эффективнее использовать зависимости, но и управлять большими языковыми моделями. На первый взгляд это может показаться нелогичным, но это очевидная истина: как можно оценить качество того, что вы получаете от зависимости или агента, если вы даже не представляете, что вообще возможно?
В конце своего выступления на Зигтоберфесте я попросил аудиторию поднять руку, если они чувствуют, что успешно продвигаются по пути Зига. Почти все в зале (около 100 человек) уверенно подняли руки.
Для меня это был приятный момент, потому что он показывает, что наши коллективные усилия (Эндрю, основная команда, организаторы мероприятий и т. д.) действительно приближают реализацию миссии Zig Software Foundation.
Если вы хотите пообщаться с людьми, которым небезразлично развитие программной инженерии, присоединяйтесь к ближайшему Zig Day или любому другому мероприятию Zig.