Анонс бесплатного курса "Командная строка для разработчиков"

По нашему опыту, современному backend-разработчику неплохо бы понимать Linux на каком-то уровне. Свои мысли насчёт того, зачем разработчику Linux, мы недавно оформили в виде статьи, вызвавшей особо бурные обсуждения.

Кто-то считает, что без линукса действительно никуда. Кто-то считает, что разработчику и в винде комфортно. Кому-то наши примеры показались выдуманными. Кто-то нашёл примеры очень жизненными.

На наш вкус, линукс полезен, но существует непростая проблема высокого порога входа. Есть либо огромные книги вроде Advanced Bash-Scripting Guide, либо фрагментарные статьи совершенно разного уровня качества, либо различные курсы. Курсов много разных, но у нас своё видение. Как в классическом комиксе про стандарты:

Анонс бесплатного курса "Командная строка для разработчиков" IT, Linux, Обучение, Ubuntu, Курсы, Онлайн-курсы, Python, Программирование, Разработка, Длиннопост

Сообщество любит отправлять новичков читать мануалы, что мега-полезно, но довольно непросто. Кстати, на курсе мы разберём, как читать man-ы.

Наша мотивация по созданию курса

Мы довольно давно готовим молодых python-разработчиков, и начинаем именно с базовых знаний в Linux, прививая желание и умение работать в терминале. Вдохновляясь курсом "Поколения Python" на степике, мы решили сделать свой бесплатный курс "Командная строка для разработчиков", посвящённый терминалу Linux, языку bash и базовому администрированию. Начинающим разработчикам поможем преодолеть неловкость перед текстовым терминалом, опытным разработчикам покажем неочевидные и полезные в работе фишки для увеличения продуктивности.

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

Подробнее о курсе

Курс сильно завязан на практику, поэтому обязателен компьютер с линуксом в каком-то виде. Мы предлагаем три варианта:

  1. Ubuntu в качестве гостевой операционной системы. Для этого в системе виртуализации (virtualbox, VMWare или любой другой) поставить Ubuntu.

  2. Ubuntu в качестве основной операционной системы. Годится любой Linux-дистрибутив или даже macOS.

  3. Ubuntu в WSL2, он же Windows Subsystem for Linux.

Начало курса неспешное и подходит совсем для начинающих. При этом мы обращаем внимание на важные детали, на которые часто никто не обращает внимание. Например, когда выбирать короткие, а когда выбирать длинные флаги команды? Есть ли разница между ls -al, ls -la и ls --all?

Примерная структура курса

Модуль 1. Пользуемся Ubuntu. Осваиваем терминал

  1. Введение в курс.

  2. Перемещаемся по файловой системе.

  3. Работаем с файловой системой.

  4. Редактор текста, работаем с файлами. Создаём и запускаем скрипты.

  5. Процессы, знакомимся с PID, ps | grep и конвейером.

  6. Используем ctrl-r и работаем с историей команд. Алиасы.

  7. Настраиваем терминал.

Модуль 2. Программируем в Ubuntu. Основы Bash

  1. Bash для разработчика, несколько занятий. Полезные однострочники на примере изменения формата файлов, сортировки в разных вариациях.

  2. Всё про поиск - конкретных файлов, поиск внутри файлов .

  3. Виртуальная файловая система proc. Используем proc, PID, PPID, дескрипторы стандартных потоков, файловые дескрипторы, аргументы командной строки, подменяем PATH. Переменные окружения (как они работают, область и время действия), в том числе PATH и HOME. Спецсимволы < > >> 2> 2>> &>.

  4. Работаем с учётными записями в Ubuntu. Разграничиваем права доступа.

  5. Применяем sudo и root. Немного про безопасность, проблемы копирования из терминала, про пакеты, которые ставятся курлом.

Добро пожаловать на курс "Командная строка для разработчиков"! Введение и первое занятие уже доступно.

Интереса ради, мы спросили ChatGPT, нужен ли линукс для питонистов.

ChatGPT о важности Linux для python-разработчика

Python-разработчикам может быть полезно использовать операционную систему Linux в своей работе по ряду причин.

Во-первых, Linux обычно является основной платформой для серверных приложений и веб-серверов, которые часто используются для хостинга Python-приложений. Разработчики, работающие с серверными приложениями, должны быть знакомы с Linux, чтобы установить, настроить и поддерживать серверное окружение.

Во-вторых, многие инструменты и библиотеки для Python, такие как NumPy, SciPy и Pandas, часто предназначены для работы в Linux-подобных операционных системах. Разработчики, которые используют эти инструменты, будут иметь преимущество, если они работают на Linux.

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

Наконец, Linux является бесплатной и открытой операционной системой, которая имеет широкое сообщество разработчиков и пользователей. Это означает, что Python-разработчики могут получить доступ к большому количеству бесплатных инструментов, библиотек и ресурсов, которые могут помочь им в их работе.

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

Как считаете, правы ли нейросети?

Больше постов читайте по тегу «Курсы». А если сами хотите изучить новую профессию, посмотрите актуальные курсы от проверенных школ с реальными отзывами на сайте Пикабу Курсы.

GNU/Linux

1.1K постов15.5K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

3
Автор поста оценил этот комментарий

А вообще зачем среднему разработчику знание линукса? Винда довольно удобна

раскрыть ветку (1)
7
Автор поста оценил этот комментарий

Это прямо ядро холивара из комментариев на хабре :) https://habr.com/ru/articles/740966/


В среднем - работайте, где удобно. Плюсы линукса - на серверах только линукс. Поэтому в момент, когда будет желание запустить свой сайт, например, то вы внезапно окажетесь в непривычной для себя среде. Ещё плюсы линукса - там очень много разработчиков, по опросу stackoverflow developer survey 2023 их в районе половины


https://survey.stackoverflow.co/2023/#section-most-popular-t...


А это значит, что многие ответы на stackoverflow будут именно про решение для линукса

3
Автор поста оценил этот комментарий
супер быстро прошла курс (:
а как часто будут новые уроки?
раскрыть ветку (1)
4
Автор поста оценил этот комментарий

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

3
DELETED
Автор поста оценил этот комментарий

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

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

Так что тот уровень про который вы говорите это "обучающиеся программированию", но никак не "начинающие программисты".

Потому позиционирование "Консоль для программистов" для меня звучит как "Учимся ходить на четвереньках для сорокалетних" - несоответствие заявляемого уровня осваиваемой компетенции озвучиваемым навыкам.

Нормальный программист _знает_ что такое консоль и знает как ей научиться, что powershell, что sh, что bash, что zsh - это инструменты которые осваиваются при базовом понимании того что ты хочешь делать буквально за пару часов на достаточном для решения конкретных задач уровне буквально по встроенному ману или же в случае powershell по get-help.


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

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Если человек спец по powershell, то это ему никак не поможет в линуксе. Многие даже базовые принципы совсем другие


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

показать ответы
1
DELETED
Автор поста оценил этот комментарий

начинающие разработчики пытаются посмотреть в man, сдаются и идут на stackoverflow

Скажу грубо: НАХУЙ ТАКИХ РАЗРАБОТЧИКОВ.

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

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Вероятно, вы считаете, что правильный способ научиться плавать – это закинуть человека на центр озера. Можно ещё пираний добавить, как вариант


Цель нормального обучения – последовательно давать учебный материал с нарастанием сложности, чтобы как можно быстрее довести обучающегося до самостоятельного решения задач. Начинаем с простого и идём к более и более сложным задачам

показать ответы
2
Автор поста оценил этот комментарий

Зачем вообще нужен баш? Всё на python же можно сделать, ещё и удобнее и воспроизводимее.


Зачем группы и пользователи? Мы же не в компьютерном клубе, и не однокурсники Ритчи и Карнигана, у которых один комп на Unix на весь поток. Через контейнеры ведь давно уже всё.


Ну а в целом хорошее дело делаете - удачи там!

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

На bash ещё наши деды писали в 90-ых и с тех пор он мало изменился. А python не только пережил переход с 2 на 3 версию, сейчас за 3 версией хрен уследишь - вводятся новые концепции и операторы. За счёт своей стабильности bash стал сродни латыни среди разработчиков и админов


Стабильность bash это и его плюс (выучил и забыл) и его минус (многие вещи типа циклов или массивов очень устарели вы вызывают боль при использовании)


При этом большую автоматизацию (уровня скрипта на 100 строк кода), конечно, надо писать на python. Какая-нибудь обработка ошибок на bash довольно неприятно делается. Но! Если тебе нужен однострочник для решения задачи, или нужно решение "здесь и сейчас" на 10 строк, или нужно что-то накрутить в CI/CD - вот где bash вне конкуренции


Группы и пользователи нужны для локальной сети не на винде. Да и в контейнерах с пользователями и группами неплохо бы быть знакомым, чтобы трансляция контейнера на пользователя или работа с пользоватем/группой внутри контейнера не вызывала проблем


Спасибо :)

1
Автор поста оценил этот комментарий
Я системный администратор, и мне бы хотелось уметь автоматизировать процессы, чтобы не тратить личное время на регулярные проблемы
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

С точки зрения знакомства с Linux рекомендую мой курс :) Про автоматизацию в линуксе будет немало практики уровня "как слепить из известных команд полезную штуку"


Вторым полезным инструментом для автоматизации является python. Когда нужна более сложная логика, то писать её на bash становится очень уныло. По python рекомендую посмотреть подборку выше. Есть классический Лутц, но он очень многословный и, на мой взгляд, не годится для знакомства с языком. Тут рекомендую на том же степике посмотреть самые популярные бесплатные курсы с положительными отзывами

Автор поста оценил этот комментарий
Что значит "флаги"? Эти штуки же ключами обычно именуют? Или я что-то не так понимаю?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Есть такая терминология:

1. флаг (flag) - так пишут в книгах, например, ProGit, у Колисниченко Д.Н. "Linux. От новичка к профессионалу" и у классического Таненбаума, "Современные операционные системы". Такой же термин можно найти в книге "Язык программирования Си" от Кернигана и Ритчи относительно параметров функции. Его я и придерживаюсь

2. опция (option) - сейчас распространено в man

3. ключ (кажется, это изобретение не имеет английского аналога) - например, тут https://younglinux.info/bash/commands


Кто-то считает, что flag это с одним тире, а option с двумя, но это не очень распространённая точка зрения https://www.linkedin.com/advice/0/how-do-you-use-a-all-flag-...


А есть ещё термины "аргумент", "параметр" и т.д.


Терминологию в этом месте гнут, как хотят, единого мнения нет. Тут так и написано: There are no consistent definitions of the terms "option", "argument", and "flag" https://unix.stackexchange.com/a/285588


При этом вас поймут независимо от термина флаг, опция, ключ, аргумент, параметр, ... Есть небольшие детали (например, параметр - это конкретное значение флага, то есть ls --block-size=5 число 5 будет параметром), но это прямо не сильно важно


Я придерживаюсь термина флаг из книг, как более распространённого. Тот факт, что в справке по bash везде option меня совершенно не смущает

показать ответы
1
Автор поста оценил этот комментарий

Имхо, а если добавить в курс факультативные топики с элементарным практическим минимумом про ssh, git и docker, то это, суммарно, может стать удобным курсом по тому, что нужно от стажера/джуна в терминале в целом :) Такой вот одно ссылкой, которой можно кинуть в человека. Вместо набора разных ресурсов.
Хотя может это "проклятие знания" говорит. Т.к., скорее всего, не прокатит ибо совсем с нуля людям в таком формате будет просто непонятно.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Думаю над этим. SSH и докер точно в тему курса, но есть некоторые сложности с организацией практики. С гитом ситуация неоднозначная, вроде он не к месту, но без него нынче никуда.


И по всем трём инструментам непонятен объём, как много давать. Посмотрим, как пойдёт по текущему объёму курса

3
DELETED
Автор поста оценил этот комментарий

Если человек спец по powershell, то

У него не будет проблемы после получения совета "читай man'ы" с прочтением их и пониманием.


У него будет проблема с непониманием принципов работы и особенностей таргетной системы.

А то, что отличается структура ФС и вызовы утилит (кстати, совсем не всех, тонна всего кросплотформена, а powershell сильно ближе к линуксовым терминалам, чем cmd - вот с неё и вправду более-менее разница чувствуется в базе) - так вот это он уже разберётся по аналогии и без курсов. Иначе: смотрите тейк моего первого комментария "это хреновый программист.

Но я считаю умение работать в терминале базовым

И правильно делаете - база и есть. А вот умение ориентироваться в среде ОС на которой работаете, так то и между дистрибутивами будет отличаться, работа с арчем, с debian-based и генту совсем неодинакова и требует понимания работы таргетной системы, но это совсем никак не связано собственно с принципами работы консоли.


хочу поделиться своим опытом по этой части

Похвальное начинание и я его поддерживаю - консоль и вправду знают незаслуженно плохо и её боятся даже многие сисадмины! Просто тем, кому такой курс нужен, ИМХО, рано зваться программистами, как раз по причине "это базовые навыки", в точности как Вы и сами пишите.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо, что поддерживаете)

Сейчас в образовании весьма грустным бардак. Система высшего образования не очень хорошая, в нише курсов очень много инфоцыган, книжек слишком много и непонятно, куда коней запрягать. При этом, действительно, в индустрию пришла тонна джунов. И даже среди не-джунов очень много специалистов уровня "я умею CRUD для сайта сделать", и таким тоже есть работа


У меня очень давно было желание нести добро в массы путём знакомства людей с linux. Оно вылилось в начале в оффлайн-курс, теперь вот я пытаюсь перенести его в онлайн. Чтобы я всегда мог начинающего тыкнуть "вот, пройти вот это, потом поговорим". Это, кстати, ещё и позволяет легко проверить усидчивость человека - случайный ли он залётчик в ИТ или действительно готов копать


Тот факт, что я объясняю ман-ы, ни в коей мере не говорит о том, что курс простой. Приходите проходить полную версию после релиза, думаю, вам понравится. Или зовите посмотреть на неё джунов вокруг)

8
Автор поста оценил этот комментарий

У Хекслета есть отличный бесплатный курс по командной строке, рекомендую! Что удобно - практиковаться можно у них же на платформе. https://ru.hexlet.io/courses/cli-basics
Возможно, ваш вариант будет в чём-то подробней или покроет другие темы. В любом случае респект за труд 🤘 Больше курсов хороших и разных :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо! С интересом посмотрю. Особенно ценно уметь выходить из vim, у нас тоже про это есть)

показать ответы
1
Автор поста оценил этот комментарий

Ну то, что Линукс нужен разработчикам - это факт. Есть друзья в вузах, где обучение ориентировано на разработку, но знание bash не дают(

Для таких случаев курс пригодится, чтобы подтолкнуть людей к самостоятельному изучению возможностей линукса

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо, этот пробел мы и пытаемся закрыть своим курсом. Не линукс ради линукса, а прикладное применение, снабжённое интересными и полезными вещами про кишочки операционной системы

3
DELETED
Автор поста оценил этот комментарий

Сообщество любит отправлять новичков читать мануалы, что мега-полезно, но довольно непросто.

Обычному юзверю - возможно.

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

А самообучение и умение по конкретной потребности выуживать конкретную практику её решения - ключевой навык программиста на любом языке.

Дальше даже не читал, уж простите - бредь.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Полностью согласен, что без ман'ов никуда. Но я очень много вижу, как начинающие разработчики пытаются посмотреть в man, сдаются и идут на stackoverflow. Поэтому я учу, как не бояться манов. Объясняю базовые штуки. Разбираю на примере. Учу искать в man. Подталкиваю им пользоваться, чтобы преодолеть начальное неудобство


А на выходе оффлайн-курса ребята в первую очередь лезут в man, а только потом гуглить, если в мане быстро не нашлось

показать ответы
1
Автор поста оценил этот комментарий

Какая на хуй винда ? 10-15 лет и ее в РФ не будет а бизнесе

раскрыть ветку (1)
Автор поста оценил этот комментарий

Потому что нет больше никакой винды *смеющийся фермер про сыр*

1
Автор поста оценил этот комментарий
Тем, что слишком мало тем раскрыто, в практике уж слишком много задач на подобии "hello world", которые не несут никакой практической ценности. Ну и также курс не обновляется с выходом новых версий языка.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Спасибо, при обновлении подборки включу в неё предложенный вами курс

DELETED
Автор поста оценил этот комментарий

ага

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, книга хорошая. Но к ней у меня с самого начала куча вопросов. Первые две команды date и cal ещё куда ни шло. А потом сразу df, free и exit, от которых будет больше вопросов, чем ответов. И знаете, когда снова автор вернётся к df? Спустя 180 страниц, треть книги.


Некоторые, с моей точки зрения мега-важные темы опущены. Например, зачем нам короткие и длинные флаги вообще? Почему бы не оставить что-то одно?


Операции с файлами в 4 главе начинаются с wildcard - считаю уместным это давать позже. Аналогично с жёсткими и символическими ссылками. При этом help и man вводятся только в 5 главе, что считаю неверным порядком изложения материала.


На мой вкус, автор иногда избыточно лезет вглубь там, где это с практической точки зрения не очень имеет смысл и очень мало оставляет места для реальной практики. Например, совсем не разбирается, чем полезны alias и как они могут ускорить работу. У меня своё видение, как следует излагать материал, чтобы покрыть нужные темы и не потерять мотивацию обучающегося в процессе. "Командная строка Linux" Ш. Уильяма в целом крутая. Надеюсь, мой курс станет достойной альтернативой

Автор поста оценил этот комментарий
С чего вообще начать изучать программирование человеку, который знает только что это про буквы на черном фоне?
раскрыть ветку (1)
Автор поста оценил этот комментарий

Сильно зависит от вашей цели. Зачем вам изучать программирование?


Программирование - это весьма непросто. Недавно был интересный пост 10 причин не идти в IT


Я подбивал материалы для начинающих разработчиков на python Ответ на пост «Без рейтинга. Самообучение PHP или курсы»


Тут вот товарищ советует курс вместо Поколений Python из моей подборки #comment_278074818


Если говорить о студенте (когда есть много свободного времени плюс сильное желание), то начинать я бы рекомендовал с книги "Язык программирования Си" от создателей языка Си Кернигана и Ритчи. Книга покрывает всю базу программирования (без ООП, функциональщины и прочего) и является максимально крутым введением. Она мелкая (200 страниц А5) и в каждом разделе задания (разного уровня сложности). Но надо быть сильным духом, чтобы по этой книжке пройти и не потерять мотивацию. Зато потом проще, так как многие языки вдохновлялись Си. И после этой книжки можно спокойно идти по моей подборке выше

показать ответы
1
DELETED
Автор поста оценил этот комментарий

Просто почитайте книгу "Командная строка Linux"

раскрыть ветку (1)
Автор поста оценил этот комментарий

Которая Шоттса Уильяма?

показать ответы
1
Автор поста оценил этот комментарий

Так ls -al и ls --all совсем про разное, или в чём подвох?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Совершенно разное)


ls -al – это два коротких флага вместе, -a и -l

ls --all – это один длинный флаг, он же -a короткий


Занятный вопрос на внимательность. А ещё есть вопрос на понимание. Зачем нам короткие и длинные флаги вообще? Почему недостаточно просто коротких? Или только длинных?

показать ответы
1
Автор поста оценил этот комментарий
Не понимаю почему так форсится курс Поколение пайтон, на мой взгляд курс недостаточно полный. Когда есть гораздо более хороший курс: https://stepik.org/course/Инди-курс-программирования-на-Pyth...
раскрыть ветку (1)
Автор поста оценил этот комментарий

А в чем неполность курса Поколения Пайтон? Его очень много людей проходят и рейтинги высокие. Что именно вам показалось плохим?

показать ответы
1
Автор поста оценил этот комментарий

Пользуюсь терминалом для базовых вещей, поэтому курс пройду
а что за проблемы копирования из терминала? Тема не раскрыта)

раскрыть ветку (1)
Автор поста оценил этот комментарий

О, наглые сайты умеют подменять буфер копирования. Этим особо часто грешат юридические сайты, вставляя "Скопировано с сайта ХХ". Никто не мешает дописать вам в команду что угодно. То есть копируете вы одно, а вставляете совсем другое


Подробнее писал тут Не копируйте примеры кода сразу в терминал

2
Автор поста оценил этот комментарий
А что сложного в том, чтобы просто читать маны?
раскрыть ветку (1)
Автор поста оценил этот комментарий

Смотрим gcc --help, там есть строка
-o <file>

Вы не представляете, как часто люди пытаются так и писать
gcc -o <myfile.txt>
сохраняя треугольные скобки

При этом в man gcc написано
-o file
без всяких скобочек. И кому верить?

А в каких-то командах скобочки квадратные. Где-то треугольные. Где-то их нет. Где-то они значат чуток по разному. А где-то флаги без дефисов, привет разнице

ps -a

и

ps a


При этом базовые идеи довольно просты, но их мало кто объясняет. У всех позиция "ну, с опытом поймёте". Хочется в курсе эти базовые знания компактно и эффективно передать, при этом не нарушив умение работать самостоятельно. То есть будет и разжёванный материал, и разные штуки, до которых надо доходить с умственным усилием, как и в реальной деятельности разработчика