Важнейшие навыки для экономиста, который намерен кодить по-настоящему
Многие из нас - заложники больших, красивых графических программ (Excel, PyCharm), а работа с командной строкой кажется чем-то вроде наказания. Но именно в командной строке происходит все самое интересное в программировании. Чем раньше вы освоите командную строку (а заодно и linux) - тем больше вы программист (и дороже стоите на рынке труда).
Еще аргументы за изучение командной строки:
pip install pandas- это уже командная строка- больше никаких "нажми такое-то меню, потом выбери, потом кликни..."
- с помощью питоновских пакетов click, rich, textual появляется больше программ с текстовым интерфейсом
- думаем об облаках: управление удаленной машиной или сервером - это всегда командная строка
- Общие представления
- считаем командную строку не злом, а благом
- понимаем, что команды для винды или для линукса будут отличаться
- Начать работу:
- найти и открыть консоль (терминал) на своем компьютере
- запустить
python.exeи выйти из него (для этого он должен быть установлен) - аргументы команд, короткие (
-с) и длинные флаги (--verbose) - получить справку по команде или утилите через
man <команда>
- Директории (каталоги):
- знать типовую структуру каталогов в линуксе и на винде
- ориентироваться в структуре директорий (каталогов): где я сейчас нахожусь, как перейти на уровень выше, есть ли подкаталоги
- уметь передвигаться (
cd) по каталогам - знать, что означают
.,..,/в путях каталогов - знать и использовать команды:
pwd,ls,cd(навигация по каталогам)mkdir,rmdir(создать и удалить каталог)
- Работа с файлами:
Общие представления:
- отличать текстовые и бинарные файлы
- название файла, расширение, что обычно значат расширения
Базовые навыки:
echo,cat(печатать в консоль)cp,mv,rm(копирование, перемещение и удаление файлов и каталогов)touch(создать пустой файл)
Чуть более продвинутые навыки:
find,grep,diff(поиск по файлам и их сравнение)head,tail(начальные и конечные строки текстового файла)wc(посчитать количество слов или строк в файле)
- Запросы в Интернет:
wget,curl
- Далее проникнуться, что такое:
- переменная
PATHи зачем она нужна (скучно, но рано или поздно вы с ней столкнетесь) - потоки stdin / stdout / stderr (полезная абстракция)
- пайп
|и перенаправление>,>>(очень полезно) - скрипты bash на линукс (пример)
- скрипты batch на винде
Устанавливать новые программы через менеджеры пакетов:
sudo apt-getна линуксе (Ubuntu)chocolatleyилиscoopна винде (не очень часто используется)
Крайне полезные навыки:
- just (выполнять повторяющиеся команды или блоки команд, аналог
make) npm(устанавливать и запускать много полезных пакетов на JavaScript)
Скучные, но нужные время от времени вещи:
sudoи пользователи- типы файлов, права доступа,
chmod - доступ к удаленной машине через
ssh - использовать
gitв командной строке - редактор типа
nanoилиvi xargs- powershell (на винде)
Как улучшить себе жизнь на винде?
- установить красивую консоль, такую как cmder
- установить WSL, чтобы получить доступ к линуксу
- получить доступ к бесплатной удаленной машине под линуксом (Github Codespaces, repl.it, Google Colab, gitpod и т.д.)
Еще идеи для обучения:
- установить клон линуксовых команд для винды (это нестандартный, обходной путь, но еще один способ выучить команды), смотрим в сторону GoW и аналогов
- установить эмулятор консоли Termux на телефон Андроид, чтобы потренировать команды
- почитать про философию утилит Unix и современные альтернативы классическим утилитам (https://github.com/ibraheemdev/modern-unix)
Идеи проектов:
- любая простая программа на питоне с интерфейсом командной строки с помощью sys.argv, docopt или click
- использовать программу в составе пайпа с линуксовой утилитой
- написать свой вариант утилиты
ls,catили любой другой - разобрать примеры пакетов или программ, где придуман хороший командный интерфейс, а где ужасный
Темная сторона вопроса (сделайте PR, если знаете):
- какие команды линукс являются встроенными, а какие - отдельными программами
- как некоторые пакеты питона устанавливает свои исполняемые скрипты, что для этого нужно
Тихо молчим о:
- портах, сети
- разных сборках линукса
- работе с датой и временем
Основная:
- The Art of Command Line - книжка большая и ценный справочник, но и есть много лишнего, информации не для новичков.
Дополнительная:
- Data Science at the Command Line - идея хорошая, но книга немного скучная. Можно сразу переходить к csvkit.
- GUI / CLI / TUI
- консоль, терминал, оболочка (shell) - чем отличаются
- WSL
Вопросы, комментарии, "все пропало, ничего не понимаю" - пишите в ишью
Просто выучите git. В git'е вам надо знать:
clone,pull,commit,push.gitignore- ветки
- pull request на Github
- далее все остальное.
В повседневной работе вам нужно уметь:
- склонировать репо (или git pull чтобы получить новые изменения с сервера)
- выбрать нужную ветку
- разбить свою работу на небольшие логические части
- сделать коммит(ы) с хорошим названием, что сделали
- git push
Личное мнение - упираться делать все это в командной строке - трата времени, можно без ущерба воспользоваться графически интерфейсом - Github Desktop, встроенные средства VS Code, а командную строку приберечь для сложных случаев.
При довольно красивой логике программы (диффы изменений), git - это довольно запутанная система. Будьте готовы к тому, что иногда вам захочется проект удалить или перезагрузить всю папку, а не морочиться с контролем версий, это все проходили.
Какой еще маркдаун? Если надо - пишу код, остальное в Ворде или Google Docs.