Смотрю вакансии на Rust — в 95% случаев там требуется знание Linux. Да и в С++ таких вакансий больше половины. Вопрос — что под этим подразумевается?
Я под разные платформы писал на С/С++: и OS/2, и HP UX, и FreeBSD. Ну и линукс/винда/мак конечно. И не скажу, чтобы столкнулся с большой разницей! В последнее время все равно многоплатформенные фреймворки использовались, типа Boost.
Но ведь эта разница есть?! Знаю, что сокеты слегка разные; и примитивы многопоточности. Плюс я подозреваю, что сейчас под знанием Unix подразумеваются Docker и Kubernetes (c ними пока не сталкивался). Поэтому вопрос:
Что обычно ходят от программиста, когда в вакансии заявляют Unix?
И где это лучше изучить (хотя бы на базовом уровне).
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
B>Что обычно ходят от программиста, когда в вакансии заявляют Unix?
Как я полагаю, это значит быть уверенным пользователем, уметь что-то там администрировать и настраивать,
знать более-менее bash, уметь писать простые конфиги на баше. Если съумели настроить рабочее окружение для
себя и скомпилировать какие-нибудь свои программы или OS какой, то вполне знаете Unix.
Также, я бы добавил знание docker'а -- создание и управление образами и т.п.
Здравствуйте, Basil2, Вы писали:
B>Что обычно ходят от программиста, когда в вакансии заявляют Unix?
Как минимум posix api, его примитивы и особенности. Пайпы, доменные сокеты, разделяемая память и прочее.
Сверху типичное устройство и окружение линуксовой (как правило) ОС. Файловые системы, старт, стоп и интеграция сервисодемонов. Зависит от требуемой специфики.
Здравствуйте, Basil2, Вы писали:
B>Что обычно ходят от программиста, когда в вакансии заявляют Unix?
Я сам не знаю линукс и в свете последних событий вынужден его изучать, для минимального знания надо уметь отвечать на такие вопросы:
1) ориентироваться в файловой системе, понимать где лежат файлы приложений, библиотек, настроек
2) как управлять учетками
3) как раздать доступы к файлам разным учеткам
4) как удаленно подключиться к системе и управлять ей
5) как автоматизировать массовые операции, утилиты и язык командной строки
6) как устанавливать приложения на линукс
7) как управлять фоновыми слубами линукса и создавать, как запускать задачи по расписанию
8) как взаимодействуют процессы между собой (форк, пайп, сигнал итд) и с ОС
9) какие службы в сетях на базе линукс используются: Управление учетными записями в сети, почта, сетевые папки, миниторинг и управление
10) какие есть графические оболочки и как создавать gui
11) какие есть библиотеки\компоненты ОС для решения задач
B>И где это лучше изучить (хотя бы на базовом уровне).
Гугл, ютуб пока не закрыли
Все это пишут, но у всех разное понимание и разные требования.
Обычно, это спартанский минимум: открыть консоль, склонировать гит репозиторий, запустить cmake, запустить gcc. Для Rust — склонировать гит репозиторий, установить rustup, запустить cargo. Плюс apt install нужных зависимостей.
Возможно, зайти по ssh на другой хост и задеплоить проект туда. Очень редко — запустить lldb (gdb — в сад престарелых), редко — потому что линуксоиды не любят отладчики (потому что их у них нет хороших) и чаще полагаются на printf и логи. Но, по-хорошему, нужно уметь дебажить в линуксе. Или тоже полагаться на логи.
Всякие тонкости администрирования, что здесь перечисляют в соседних ответах — это либо закидоны линукс маньяков, либо конторы экономят на девопсах — типичного разработчика это не касается.
В общем, если умеешь клонировать гит репозиторий и собирать проект не только с помощью Проводника и TortoiseGit, то можешь смело забить на этот пункт в вакансиях, так как мелочи подучишь на ходу. А если им нужен девопс или админ — они скажут сами ещё на собеседовании.
Здравствуйте, gandjustas, Вы писали:
G>Я сам не знаю линукс и в свете последних событий вынужден его изучать, для минимального знания надо уметь отвечать на такие вопросы:
Ты говоришь как наниматель или как работник? Если первое — дело твоё, если второе — ты слишком заморочился.
G>1) ориентироваться в файловой системе, понимать где лежат файлы приложений, библиотек, настроек
Да
G>2) как управлять учетками
Нет
G>3) как раздать доступы к файлам разным учеткам
Нет
G>4) как удаленно подключиться к системе и управлять ей
Да
G>5) как автоматизировать массовые операции, утилиты и язык командной строки
Иногда, но гуглится
G>6) как устанавливать приложения на линукс
Да, гуглится
G>7) как управлять фоновыми слубами линукса и создавать, как запускать задачи по расписани
Редко, гуглится
G>8) как взаимодействуют процессы между собой (форк, пайп, сигнал итд) и с ОС
Да, но это и обычный виндузятник знает/слышал про линукс
G>9) какие службы в сетях на базе линукс используются: Управление учетными записями в сети, почта, сетевые папки, миниторинг и управление
Не распарсил
G>10) какие есть графические оболочки и как создавать gui
Не нужно, потому что разработка под линукс — не про гуи, в Rust — тем более.
G>11) какие есть библиотеки\компоненты ОС для решения задач
Да, но обычно это кросс-платформенное
В моём понимании это быть консольным пользователем линукса. Т.е. уметь по ssh зайти на сервер, посмотреть логи, залезть в докер-контейнер, там чего-нибудь посмотреть, погрепать, поискать, простой скрипт на баше написать, хотя бы и с гуглом.
Здравствуйте, Basil2, Вы писали:
B>Что обычно ходят от программиста, когда в вакансии заявляют Unix?
Умение запустить компилятор из командной строки, посмотреть логи, заскриптовать что-нибудь примитвно-однопроходное. Ну и основные концепции: пайпы, все есть файл, слэши не в ту сторону развернуты, как пакеты ставить, как маны читать, как права настроить, как демона изгнать. Короче, ничего запредельно сложного.
В идеале да, хочется чтобы и про интерфейсы ядра знал, и в сигналах разбирался, и лимиты понимал. Но где-ж такого найдешь?
B>И где это лучше изучить (хотя бы на базовом уровне).
Можно почитать что-то типа Linux Bible или Linux Complete Reference. Они толстые, но там свободно пропускать все, что касается настроек конкретного софта.
Здравствуйте, Basil2, Вы писали:
B>Баш же это командный интерпретатор, как я понимаю. Как на нем можно писать конфиги?
Наверняка имелось в виду "скрипты".
Здравствуйте, gandjustas, Вы писали:
G>Я сам не знаю линукс и в свете последних событий вынужден его изучать, для минимального знания надо уметь отвечать на такие вопросы: G>1) ориентироваться в файловой системе, понимать где лежат файлы приложений, библиотек, настроек
Спасибо. Откуда этот список? Опыт хождения по собеседованиям или что-то еще?
B>>И где это лучше изучить (хотя бы на базовом уровне). G>Гугл, ютуб пока не закрыли
Ну, этим программиста не напугать.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
B>Здравствуйте, gandjustas, Вы писали:
G>>Я сам не знаю линукс и в свете последних событий вынужден его изучать, для минимального знания надо уметь отвечать на такие вопросы: G>>1) ориентироваться в файловой системе, понимать где лежат файлы приложений, библиотек, настроек
B>Спасибо. Откуда этот список? Опыт хождения по собеседованиям или что-то еще?
Я нанимаю. Это из тех задач, которые возникали за последний месяц, я только обобщил некоторые вещи.
Здравствуйте, flаt, Вы писали:
F>В общем, если умеешь клонировать гит репозиторий и собирать проект не только с помощью Проводника и TortoiseGit, то можешь смело забить на этот пункт в вакансиях, так как мелочи подучишь на ходу.
Да я так и говорил: что умею в ssh, gcc и gdb. Но было видно, как собеседователи сразу разочаровывались. Возможно, это специфика вакансий на Расте — там высоконагруженность, а это не про gcc/gdb...
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
B>Здравствуйте, flаt, Вы писали:
F>>В общем, если умеешь клонировать гит репозиторий и собирать проект не только с помощью Проводника и TortoiseGit, то можешь смело забить на этот пункт в вакансиях, так как мелочи подучишь на ходу.
B>Да я так и говорил: что умею в ssh, gcc и gdb. Но было видно, как собеседователи сразу разочаровывались. Возможно, это специфика вакансий на Расте — там высоконагруженность, а это не про gcc/gdb...
Зависит от области и вакансий. Ты бы и спросил, а что именно им хочется? От этого и плясать — либо они хотят девопса на дурняка взять (особенно русскоязычные замечены в экономии), либо действительно область требует. С другой стороны, если озвучат свои хотелки, может, ты вполне подходишь. А нет — вакансий много, выбор большой.
Здравствуйте, Basil2, Вы писали:
B> Возможно, это специфика вакансий на Расте — там высоконагруженность, а это не про gcc/gdb...
"Высоконагруженность" — это специфика всего *nix (от языка не зависит). Т.е. умение собрать бинарник, который запустится в нужном окружении нужным образом и будет хоть как-то выполнять бизнес-логику, это обязательное минимальное условие (как раз те самые условные "ssh, gcc и gdb, почитать логи").
Дальше начинаются тонкости предметной области без знания/понимания которых ты просто не сможешь писать программы удовлетворяющие требованиям бизнеса. И вот как раз про эти предметные тонкости (для каждой предметной области свои) собеседующие и хотят поговорить. Условно, если это сетевые приложения, то про обеспечение отказоустойчивости, защиту от сбоев, контролируемую деградацию, согласованность и т.д. вплоть до банального "записать сетевую сессию через tcpdump и/или воспроизвести запрос через telnet/netcat/tcpreplay".
Здравствуйте, уважаемый gandjustas, Вы писали:
G>Я сам не знаю линукс и в свете последних событий вынужден его изучать, для минимального знания надо уметь отвечать на такие вопросы: G>1) ориентироваться в файловой системе, понимать где лежат файлы приложений, библиотек, настроек G>2) как управлять учетками G>3) как раздать доступы к файлам разным учеткам G>4) как удаленно подключиться к системе и управлять ей G>5) как автоматизировать массовые операции, утилиты и язык командной строки G>6) как устанавливать приложения на линукс G>7) как управлять фоновыми слубами линукса и создавать, как запускать задачи по расписанию G>8) как взаимодействуют процессы между собой (форк, пайп, сигнал итд) и с ОС G>9) какие службы в сетях на базе линукс используются: Управление учетными записями в сети, почта, сетевые папки, миниторинг и управление G>10) какие есть графические оболочки и как создавать gui G>11) какие есть библиотеки\компоненты ОС для решения задач
Я бы добавил ещё:
— как просмотреть зависимости Linux приложения — от каких библиотек оно зависит
Hint: применение утилиты ldd
Здравствуйте, Miroff, Вы писали:
M>Здравствуйте, Basil2, Вы писали:
B>Что обычно ходят от программиста, когда в вакансии заявляют Unix?
M>Умение запустить компилятор из командной строки, посмотреть логи, заскриптовать что-нибудь примитвно-однопроходное. Ну и основные концепции: пайпы, все есть файл, слэши не в ту сторону развернуты, как пакеты ставить, как маны читать, как права настроить, как демона изгнать. Короче, ничего запредельно сложного.
И как своего демона — создать и запустить. И сделать перманентно запускаемым при старте OS.
M>В идеале да, хочется чтобы и про интерфейсы ядра знал, и в сигналах разбирался, и лимиты понимал. Но где-ж такого найдешь?
M>Можно почитать что-то типа Linux Bible или Linux Complete Reference. Они толстые, но там свободно пропускать все, что касается настроек конкретного софта.
Для программиста, понимающего простой Си, есть хорошая литература:
1) Linux API. Исчерпывающее руководство | Керриск Майкл.
2) UNIX. Профессиональное программирование | Раго Стивен А., Стивенс У. Ричард.
Здравствуйте, Anton Batenev, Вы писали:
AB>"Высоконагруженность" — это специфика всего *nix (от языка не зависит). Т.е. умение собрать бинарник, который запустится в нужном окружении нужным образом и будет хоть как-то выполнять бизнес-логику, это обязательное минимальное условие (как раз те самые условные "ssh, gcc и gdb, почитать логи").
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, Anton Batenev, Вы писали:
AB>>"Высоконагруженность" — это специфика всего *nix (от языка не зависит). Т.е. умение собрать бинарник, который запустится в нужном окружении нужным образом и будет хоть как-то выполнять бизнес-логику, это обязательное минимальное условие (как раз те самые условные "ssh, gcc и gdb, почитать логи").
S>А чем логи читают -- cat, grep или что-еще?