it
January 7, 2023

Windows для разработчика

Хэй! Новый год, новая статья на спорную тему! Так вышло, что обретя новый ноут с видеокартой Nvidia при использовании Linux я получил больше страданий, чем удовольствия. То перегрев словлю, то тиринг выбесит. В общем, я решил дать винде шанс и перебраться на неё на постоянку (до этого у меня был дуалбут, потому что периодически мне нужен Windows-специфичный софт)

Сейчас я сижу на Windows 11, Beta Channel, мой стек технологий это .NET и React.js. Да, я из тех людей, что пишут на .NET на линуксе, и им норм. Хотя казалось бы, технология майков, бла-бла-бла... Но на самом деле, когда майки выпустили .NET официально на все платформы и открыли исходники, отпала необходимость в Mono и стало вообще хорошо.

IDE

Я человек простой. Обожаю всё, что выпускаетJetbrains, поэтому в этом плане переезд затруднений не вызвал. Rider и Webstorm как работали на линуксе, так и работают здесь.

Искренне презираю Visual Studio. По моему мнению, у нее перегруженный интерфейс, неинтуитивное управление вкладками, убогие комбинации клавиш и паршивый редактор.

К сожалению, Rider не всесилен и не имеет всех возможностей студии + не сразу получает поддержку новых версий платформы, так что иногда приходится-таки включать студию. Но разрабы молодцы и достаточно быстро вносят нужные изменения.

CLI

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

В винде всё не так. У тебя есть стопицот папок, где приложения оставляют свой мусор, а конфиги порой хранятся в бинарных файлах, которые и открыть-то нечем. А еще есть великий и ужасный реестр, в котором в каком-то только системе понятном формате хранятся килотонны значений. А как это чистить? А как бэкапить? Загадка...

А как вам синтаксис Powershell?

Например для того, чтобы в линуксе получить путь до бинарника (иногда бывает нужен в скриптах) используется программа which (или where, зависит от дистрибутива). В Powershell для этого нужен целый (get-command binary).Path

Или вот еще — достаточно частая встречаемая штука — поиск в текстовом файле. Типичный линуксовый cat + grep: cat textfile.txt | grep 'searchquery'. Что же нам нужно сделать для того же в Powershell? Select-String -Path "textfile.txt" -Pattern "searchquery". Очень удобно, и писать немного нужно...

Кто-то может сказать мол "Используй WSL". Если коротко, то я считаю, что это очен странная попытка майков залезть на территорию линя. По факту, это нативная виртуалка с по умолчанию подмонтированным системным диском. Я пользовался этим исключительно в связке с докером (м-м-м, супер, виртуалка в виртуалке) и думаю, что всё это достаточно ненадёжно. Так, например, у меня так и не вышло заставить вебшторм запускать npm'овские скрипты в WSL, хотя там такая фича есть. Точнее не просто npm'овские, а еще с системными командами в комплекте (mv, rm и вот это всё)

"Горе от ума"

Это моя старая шутка про то, что винда считает, что знает, что нужно пользователю, больше чем пользователь. Например, я закрыл студию и проект, который в ней был открыт, иду в проводник, пытаюсь удалить этот проект, а мне говорят, что папка используется каким-то процессом. Хм, странно. Смотрю в "Мониторе ресурсов" — и правда, папка проекта на кой-то чёрт занята процессом System. WTF?! Естественно, это не тот процесс, который можно просто взять и остановить. Спустя несколько выходов из спящего режима, система эту папку так и не отпустила. И зачем она ей нужна, вопрос...

Вместо вывода

В целом, винда вполне подходит для разработки, но не для любого стека и с кучей нюансов. Как дотнетщику, мне в принципе без разницы.

Но вот скоро мне нужно будет писать большой проект на джаве, там я вернусь обратно на линь. Нафиг мне это не сдалось страдать здесь.

Тот же докер лучше работает под линуксом (если это не так, тогда почему авторы докера не стали воротить своих костылей с виртуализацией винды и просто завернулись под WSL?). Поэтому для обучения DevOps я тоже буду использовать линь.