QR code

Programmers, Don't Use Windows!

  • Translated by to

В 2020 году в книге Junior Objects я написал следующее: “Windows не подходит для программистов. Если вы когда-либо встретите кого-то, кто скажет вам обратное, знайте, что вы имеете дело с плохим программистом или плохим, что одно и то же. Ваш компьютер должен быть MacBook.” Теперь, спустя пять лет, я все еще придерживаюсь того же мнения. Этот пост в блоге предполагается менее субъективным и, из-за этого, более убедительным. Суть остается прежней: вы либо используете Windows, либо являетесь профессиональным программистом.

Прежде всего. Вот что думает ChatGPT о macOS против Windows (я немного смягчил и упорядочил по важности, оставляя самое важное вверху): ссылка

  • Инструменты, такие как grep, awk, sed, ssh и make, работают нативно.

  • Правильный набор инструментов компилятора: Clang, LLVM, make, git

  • Установите все с помощью HomeBrew, всего в одной команде.

  • Узел, Python, Ruby, Go, Java—просто работают без ада пути.

  • iTerm2 не выглядит так, будто был создан в 1998 году

  • Docker работает быстрее и чище, чем на Windows

  • Ключи SSH легко интегрируются с системным ключевым хранилищем.

  • Git ведет себя предсказуемо; нет кошмаров CRLF vs LF

Я слышу, как вы говорите: зачем мне нужно, чтобы это было совместимо с POSIX, и что такое POSIX? Зачем мне нужны grep, sed и awk? Я же не администратор Unix в 60 лет? Зачем мне git и make в командной строке? Я вообще не пользуюсь командной строкой. Я работаю в VS Code, который работает отлично и помогает мне зарабатывать на жизнь.

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

Программисты - это мастера компьютеров. Они говорят машинам, что им делать. Чтобы упростить задачу управления сложным оборудованием, программисты придумали несколько уровней абстракции. Первый уровень - это операционная система. Вместо того чтобы иметь дело непосредственно с жестким диском и пикселями на экране, программисты придумали файлы и stdout.

Они сделали это в Bell Labs в конце 1960-х - начале 1970-х годов. Ранние операционные системы, такие как CTSS и OS/360, дали им хороший старт. Unix была первой ОС, которая сказала, что все - это файл, включая устройства, каталоги, сокеты и процессы. Они также придумали конвейеры и философию: “Пишите программы, которые хорошо делают одну вещь, и работают вместе”. Они также придумали процессы и их механизм разветвления.

Их звали Кен Томпсон и Деннис Ритчи.

Через пять лет была создана другая операционная система с другими абстракциями. Не всё было файлом, процессы не были параллельными, и трубопроводов не было. Название системы было CP/M, а имя изобретателя - Гари Килдалл. Затем, через пять лет, 24-летний Тим Патерсон сделал копию CP/M и назвал её 86-DOS. Microsoft приобрела неисключительную лицензию, переименовала её в MS-DOS и продала IBM. Так родилась Windows.

Почему не было настоящих файлов, процессов и трубопроводов? Потому что они не пытались создать “настоящую” операционную систему. CP/M и MS-DOS были разработаны для крошечных однопользовательских микрокомпьютеров, а не для многопользовательских миникомпьютеров или главных компьютеров. Unix вышел из Bell Labs - исследователей, а не энтузиастов. CP/M и MS-DOS были созданы для персональных компьютеров: офисов и домашних пользователей. Другими словами, MS-DOS никогда не был задуман как настоящая ОС. Это было что-то, что может загрузить маленькую машину и запустить одну программу.

Затем, в 1985 году, была создана Windows 1.0. Это был красивый GUI поверх MS-DOS, а не новая ОС. Позже, в 1995 году, Microsoft представила 32-битные API (Win32) и преемптивное многозадачность. Однако под этим всё еще таился подкапотный DOS. Windows 95 выглядела современно, но была всё еще полу-DOS-зомби.

В то же время, в 1993 году, команда Дейва Катлера создала Windows NT, которая вообще не была основана на DOS. Последние версии Windows являются потомками NT, а не MS-DOS. Под капотом она концептуально ближе к Unix, чем к CP/M. Есть функции, такие как защищенная память, разделение ядра и пользователя, и файловые дескрипторы. Однако это все же не Unix.

В 1984 году Apple выпустила свой первый Macintosh с операционной системой “System 1”. Он не был лучше MS-DOS: нет мультизадачности, нет защиты памяти и примитивной файловой системы. Неудивительно, что он не взлетел.

В 1997 году Apple купила NeXT и приняла операционную систему NeXTSTEP. Они сделали ее основой для новой Mac OS — под кодовым названием Rhapsody, позже “Mac OS X”.

В 2001 году они выпустили Mac OS X 10.0 (“Cheetah”). Через пять лет я выбросил свой ThinkPad с Windows и купил свой первый MacBook с Mac OS X Leopard.

Современная macOS (Catalina, Ventura, Sequoia и т. д.) все еще основана на этом фундаменте NeXT. Он совместим с POSIX и, конечно же, имеет процессы и конвейеры. Другими словами, это Unix с красивым графическим интерфейсом.

Обе операционные системы Windows и macOS в их текущих версиях являются надежными. Разница заключается в абстракциях внутри них: файлы, сокеты, процессы, блоки памяти, пользователи, разрешения и т. д. В Unix (macOS) все является файлом, в то время как в Windows все является объектом. Файлы в Unix - это унифицированная абстракция, поэтому их можно объединять с помощью каналов. В Windows объекты на практике не унифицированы, у них разные интерфейсы.

Вот почему Unix shells и небольшие компонуемые инструменты стали настолько мощными. Единообразие “все является файлом” сделало композицию естественной. Вы можете создавать сложные рабочие процессы из простых программ.

Windows, с другой стороны, развивался вокруг GUI-приложений и циклов сообщений, а не конвейеров оболочки.

Unix был построен вокруг конвейеров. В Unix все является маленьким инструментом, читающим stdin, записывающим stdout. В то же время все является файлом, включая сокеты, устройства и процессы. Программисты в Unix видят каждый процесс как композицию более мелких процессов, склеенных вместе через конвейеры. Эта ментальность, начиная с 1970-х годов, доказала свою эффективность среди нескольких поколений элиты программной инженерии.

Скажем, вы хотите узнать, какие части вашего кодовой базы изменяются больше всего—может быть для рефакторинга, фокусировки на тестировании или анализа “горячих точек” ошибок. Вот как вы это делаете в стиле Unix:

Имеет ли этот синтаксис для вас смысл? Если да, то я держу пари, что вы используете WSL. Большинство серьезных разработчиков Windows в конечном итоге делают именно это.

Командная строка - это интерфейс к Unix низкого уровня. Сердце командной строки - это конвейеры. Благодаря конвейерам, инструменты командной строки по своей сути являются композиционными. Вы можете объединять их и автоматизировать задачи за секунды, которые займут часы ручной работы. Ни один плагин IDE не может заменить эту мощь.

Теперь ты знаешь, в чем разница между Windows и macOS. В обоих из них ты можешь писать код, просматривать интернет и смотреть фильмы. Однако в macOS ты взаимодействуешь с компьютером через абстракции Unix в shell. Ты не просто используешь macOS—ты наследуешь пятьдесят лет дисциплинированных абстракций.

В Windows ты взаимодействуешь с компьютером через перетаскиваемые элементы GUI. GUI делает тебя потребителем; CLI делает тебя создателем. GUI скрывает логику за жестами и иконками; CLI выставляет ее в виде текста, над которым можно размышлять, автоматизировать и комбинировать. Ты не можешь направить клик кнопки в другую программу, ты не можешь выполнить поиск в индикаторе выполнения и не можешь контролировать версии движения мыши. Каждый клик, который ты делаешь, умирает в момент его выполнения; каждая команда, которую ты пишешь, может жить вечно.

О, подожди. В macOS ты действительно не можешь поиграть в игры. Неприятно… Может быть, тебе и не стоит, ведь ты программист?

Translated by ChatGPT gpt-3.5-turbo/42 on 2025-10-26 at 14:23

sixnines availability badge  GitHub stars