Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Какую ОС использую
Это практичный вопрос, который показывает мой workflow и инструменты, которые я использую ежедневно. Вопрос может показаться простым, но правильный выбор ОС критичен для productivity.
Основная ОС: macOS
Я использую MacBook Pro (14", M3 Pro) как основное устройство для разработки.
Почему macOS?
✅ Unix-based (как Linux)
✅ Родная поддержка Docker
✅ Отличная интеграция с Apple инструментами
✅ Отличная производительность
✅ Стабильна — редко падает
✅ Экосистема для разработчиков (Homebrew, iTerm, etc)
✅ Много других разработчиков → лучше помощь в интернете
✅ Хорошие IDE (VS Code, JetBrains, Xcode)
✅ Большая батарея (важно для удалёнки)
❌ Недостатки
❌ Дорогое оборудование
❌ Не Linux (хотя похожа)
❌ Closed ecosystem (меньше контроля)
Мой macOS setup:
# Package manager
brew install node@20
brew install python
brew install postgresql
brew install redis
brew install docker
# Shell
# Использую Zsh (по умолчанию в современном macOS)
# Конфиг: ~/.zshrc с oh-my-zsh
# IDE
VS Code (основная для быстрой разработки)
JetBrains IntelliJ (для больших проектов)
Vim (для быстрых edits в терминале)
# Терминал
iTerm2 (лучше, чем стандартный Terminal)
# Developer tools
# Homebrew, git, nvm (Node Version Manager)
Linux на сервере
В production используется Linux (обычно Ubuntu 20.04 или 22.04).
# Типичный production server
Ubuntu 22.04 LTS (Long Term Support)
# Почему Ubuntu?
✅ Стабилен
✅ Большое сообщество
✅ Хорошая поддержка пакетов
✅ Есть Canonical (компания за Ubuntu) — коммерческая поддержка
✅ Совместимо с большинством инструментов
# На сервере
Node.js (LTS версия)
PostgreSQL
Nginx (reverse proxy)
Let's Encrypt (SSL сертификаты)
Windows — редко
Иногда нужна Windows для специфических задач, но это редко.
// Когда используется Windows
1. Тестирование Windows-specific фичей
2. Работа с Microsoft 365 API
3. Некоторые корпоративные инструменты требуют Windows
// Мой подход
// Использую WSL2 (Windows Subsystem for Linux)
// Это позволяет работать в Linux среде на Windows
Моя стратегия: Consistency across environments
Мое главное правило:
# Local development environment
Windows/Mac with WSL2
↓
# Staging environment
Linux (Ubuntu)
↓
# Production environment
Linux (Ubuntu)
# Все три должны быть максимально похожи
# Чтобы "работает на моем компьютере" не был проблемой
Как я это достигаю:
# Dockerfile для разработки
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
# docker-compose.yml для локального окружения
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
- DATABASE_URL=postgresql://...
postgres:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD: password
POSTGRES_DB: myapp
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
Так я разрабатываю локально в Docker контейнер, что идентичен production.
Terminal setup
# Shell: Zsh (современная версия Bash)
zsh --version
# zsh 5.9
# Package manager: Homebrew (только на macOS)
brew --version
# Homebrew 3.6.15
# Node version manager: nvm
nvm list
# v20.10.0 (LTS)
# v18.19.0
# Terminal multiplexer: tmux (или iTerm2 на Mac)
tmux list-sessions
# Использую для длительных операций
# Git configuration
git --version
# git version 2.42.0
git config --list | grep -E "user.name|user.email"
# user.name=Ivan Petrov
# user.email=ivan@example.com
# SSH keys для GitHub
ls -la ~/.ssh
# id_ed25519 (moderna, более безопасна)
Development tools и утилиты
# Обязательные
✅ Git — версионный контроль
✅ Docker — контейнеризация
✅ npm/yarn — package manager для Node.js
✅ PostgreSQL client (psql) — работа с БД
✅ curl / wget — HTTP requests
✅ jq — JSON парсинг
✅ grep / awk — обработка текста
# Очень помогают
✅ make — автоматизация команд
✅ entr — перезапуск на изменение файлов
✅ httpie — красивый альтернатив curl
✅ tree — визуализация структуры папок
✅ bat — улучшенный cat с подсветкой
✅ fd — улучшенный find
# Мой скрипт для быстрого старта
#!/bin/bash
# ~/.local/bin/dev-setup
nvm use 20
docker-compose up -d
npm install
npm run migrate
npm run seed
npm run dev
Keyboard и productivity
// Я оптимизирую для быстроты работы
✅ Vim keybindings везде (VS Code, IDE, браузер)
✅ Alfred (macOS) — быстрый поиск и запуск
✅ Keyboard Maestro (macOS) — автоматизация
✅ Karabiner (macOS) — переконфигурация клавиатуры
// Типичные shortcuts
Cmd+Space — быстрый поиск файла
Ctrl+P — VS Code file search
Ctrl+Shift+P — VS Code command palette
Cmd+K Cmd+X — VS Code format document
Когда я переходу на Linux
Есть несколько причин, по которым я могу полностью перейти на Linux:
1. Когда работаю с Kubernetes cluster
→ Linux native опыт более полезен
2. Когда компания требует Linux
→ Некоторые финсекторные компании требуют Linux
3. Когда нужна максимальная контроль
→ Linux дает полный контроль над системой
# Для Linux переходу я выбрал бы
Ubuntu 22.04 (стандарт для разработки)
или
Fedora (если нужны новые фичи)
Версионирование инструментов
# Я всегда фиксирую версии для reproducibility
Node.js: 20.x.x (LTS)
PostgreSQL: 15 (последний stable)
Redis: 7.x
Nginx: latest stable
Docker: latest
# В коде
package.json
"engines": {
"node": ">=20.0.0 <21.0.0",
"npm": ">=10.0.0"
}
.nvmrc
20.10.0
Dockerfile
FROM node:20-alpine
Проверка environment перед началом разработки
#!/bin/bash
# health-check.sh
echo "OS: $(uname -s)"
echo "Node: $(node --version)"
echo "npm: $(npm --version)"
echo "Docker: $(docker --version)"
echo "Git: $(git --version)"
echo "PostgreSQL: $(psql --version)"
echo "Redis: $(redis-cli --version 2>/dev/null || echo 'not installed')"
# Правильно, если всё выдаёт версии
# ошибка, если что-то не установлено
Вывод
Мой выбор ОС основан на:
- Productivity — macOS позволяет мне работать быстро
- Consistency — Docker обеспечивает одинаковый окружение везде
- Linux как production — я знаю обе системы
- Team compatibility — большинство разработчиков используют macOS или Linux
ОС — это просто инструмент. Главное — знать Linux (потому что production на Linux) и использовать инструменты, которые делают тебя продуктивнее. Не привязываюсь к конкретной OS, могу переехать на другую за неделю, если нужно.