8
Вакансия: программист под ОС Linux Источник: Журнал «Системный администратор» (Москва) Автор: Подготовил Игорь Штомпель Дата: 8 мая 2015 Операционная система Linux становится все популярнее среди компаний, которые занимаются разработкой ПО в России. Но вот подготовка таких специалистов для рынка информационных технологий пока оставляет желать лучшего. Чтобы выяснить, какие знания и навыки программистов под ОС Linux востребованы, мы обратились к представителям компаний 1. Какими знаниями и навыками должен обладать программист под ОС Linux? 2. Каков инструментарий программиста под ОС Linux? 3. Каковы требования компании к уровню образования потенциальных сотрудников? 4. Какие требования предъявляются к опыту работы? 5. Есть ли особые требования, которые обусловлены спецификой деятельности компании? В некоторых случаях, когда не предполагается тесная интеграция онлайн и оффлайн -торговли, достаточно синхронизировать между учетной системой и сайтом только список товаров и их количество в наличии. Более того, если магазин работает со своими поставщиками под заказ, то и указание количества не является обязательным: действие происходит под лозунгом "Заказывайте, что нужно, а мы привезем!". Станислав Фомин, директор по технологиям компании "НТЦ ИТ РОСА" 1. Сразу отмечу, что понятие "Linux -разработчик" очень расплывчато. С одной стороны, как нередко считается, Linux - это в первую очередь ядро - крупный, ключевой, но далеко не единственный компонент в любом Linuxдистрибутиве, и формально Linux -разработчик - это kernel developer. Но обычно под Linux-разработчиком все- таки подразумевается прикладной программист, разрабатывающий хоть что-то, программу ли с графическим интерфейсом или прикладной сервис для работы под каким- либо Linuxдистрибутивом или библиотеку, обеспечивающую работу этих решений. Часто туда попадает и классическая вебразработка, если она некоторым образом связана с системной частью, например, написание веб - интерфейсов конфигурирования. В любом случае, даже разработка прикладных решений требует "классической профессиональной грамотности" настоящего программиста, и от него требуется бегло владеть современными системами управления версиями, скорее распределенными, такими как Git и Mercurial. Ибо классические централизованные системы, такие как Subversion и TFS, которые еще часто применяются в корпоративной разработке информационных систем, уже практически вымерли в Linux- мире. Кроме того, Linuxразработка характерна максимальным использованием Open Source - библиотек и фреймворков, которые в подавляющем большинстве живут в Git - репозиториях. При разработке многих Linux-систем используются языки программирования C и C++, так что нужно, кроме этих языков, знать классический стек компилирования и сборки - опции компилятора и линковщика, различные средства сборки: make, autotools/cmake/scons и т.п.

Что должен уметь Linux программист

Embed Size (px)

Citation preview

Вакансия: программист под ОС Linux

Источник: Журнал «Системный администратор» (Москва)

Автор: Подготовил Игорь Штомпель

Дата: 8 мая 2015

Операционная система Linux становится все популярнее среди компаний, которые занимаются

разработкой ПО в России. Но вот подготовка таких специалистов для рынка информационных

технологий пока оставляет желать лучшего.

Чтобы выяснить, какие знания и навыки программистов под ОС Linux востребованы, мы обратились

к представителям компаний

1. Какими знаниями и навыками должен обладать программист под ОС Linux?

2. Каков инструментарий программиста под ОС Linux?

3. Каковы требования компании к уровню образования потенциальных сотрудников?

4. Какие требования предъявляются к опыту работы?

5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?

В некоторых случаях, когда не предполагается тесная интеграция онлайн и оффлайн-торговли,

достаточно синхронизировать между учетной системой и сайтом только список товаров и их

количество в наличии. Более того, если магазин работает со своими поставщиками под заказ, то и

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

что нужно, а мы привезем!".

Станислав Фомин, директор по технологиям компании "НТЦ ИТ РОСА"

1. Сразу отмечу, что понятие "Linux-разработчик" очень расплывчато. С одной стороны, как нередко

считается, Linux - это в первую очередь ядро - крупный, ключевой, но далеко не единственный

компонент в любом Linuxдистрибутиве, и формально Linux-разработчик - это kernel developer. Но

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

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

для работы под каким-либо Linuxдистрибутивом или библиотеку, обеспечивающую работу этих

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

системной частью, например, написание веб-интерфейсов конфигурирования.

В любом случае, даже разработка прикладных решений требует "классической профессиональной

грамотности" настоящего программиста, и от него требуется бегло владеть современными

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

классические централизованные системы, такие как Subversion и TFS, которые еще часто

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

Linux-мире. Кроме того, Linuxразработка характерна максимальным использованием Open Source-

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

При разработке многих Linux-систем используются языки программирования C и C++, так что

нужно, кроме этих языков, знать классический стек компилирования и сборки - опции компилятора

и линковщика, различные средства сборки: make, autotools/cmake/scons и т.п.

Представлять базовый процесс разработки хотя бы на уровне Code&Fix и основные средства

коммуникации и документирования - трекер задач и ошибок, вики-системы - таких систем полно, но

принципы работы у них схожие.

Уметь самостоятельно добывать информацию - гуглить, извлекать разрозненную и устаревшую

информацию из багтрекеров и форумов, общаться с разработчиками открытых библиотек и

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

правильные архитектурные шаблоны, библиотеки и фреймворки уже придуманы и есть

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

тут, в мире опенсорса, и библиотеки, и интерфейсы постоянно меняются, и надежной и стабильной

документации не хватает. Разумеется, необходим технический английский.

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

приложений, манипуляции файлами, браузер-почта-чаты, текстовые процессоры и таблицы), и все

это не c "общеизвестным Windows-интерфейсом", а на каком-либо графическом рабочем столе для

Linux. А вот дальше возможны варианты, перечислим их в порядке повышения "условного уровня"

программирования, причем чем выше уровень, тем меньше "хардкорности", проще разрабатывать и

отлаживать, требуется меньше специфических знаний.

Если речь идет о программировании ядра, то тут нужно хорошо знать низкоуровневое

программирование на С, а желательно и на ассемблере для соответствующих архитектур

процессора. Важно уметь разбираться во множестве интерфейсов ядра: системных структурах

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

процессами, работе с прерываниями и т.д. Нужно уметь работать и со средствами низкоуровнего

параллелизма: блокировками, отложенным выполнением задач, "атомарными операциями" и

многими другими. Большая часть изобретений, облегчающих жизнь программисту, - IDE со

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

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

процессах, глюки устройств) найти весьма непросто - в основном приходится полагаться на post-

mortem анализ отладочных логов. Могут помочь и специальные сборки с инструментами

дополнительных проверок в реальном времени, таких как Lockdep, KAsan, Kmemleak и др.

Очень близко к "kernel"-разработке находится программирование встроенных Linux-систем - как

правило, это тоже экономия каждого байта, С/C++-программирование, возможно с ассемблерной

оптимизацией, тонкости работы с ненадежными устройствами. Хотя с ростом мощности

программируемых устройств уровень программирования часто повышается, встречается и Java -

программирование, и даже программирование на медленных скриптовых языках, таких как Python.

Выше лежит уровень эффективных прикладных сервисов и системных библиотек - это, как правило,

С/C++-программирование с общением через файловую систему, разделяемую память и сетевые

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

либо обеспечивающие платформу для более высокоуровневых информационных систем, либо сами

являющиеся высокоэффективной прикладной системой (скоростные биржевые торги и т.п.). Тут уже

есть вполне эффективные С/C++ IDE, помогающие эффективной разработке, - например, Qt Creator

или Eclipse-CDT, и полезно "прокачивать костный мозг", изучая все их возможности - клавиaтурные

сочетания, intellisense... чтобы повысить личную и командную эффективность. Но и тут могут

потребоваться низкоуровневые знания - понимание устройства файловых систем и работы сетевого

стека протоколов.

Еще выше начинается прикладная разработка приложений с графическим интерфейсом,

специфичным для линукссистем. В Linux-мире есть два основных конкурирующих фреймворка для

написания максимально нативных десктопных приложений с GUI - это GTK и Qt. Соответственно в

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

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

системную часть, требующую низкоуровневой работы с устройствами или файловой системой.

Еще легче разработка с использованием мультиплатформенных Java- или Python-стеков, даже если

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

Опять-таки, несмотря на кажущуюся легкость Pythonпрограммирования, на самом деле основная

сложность может быть связана с выполняемой системной задачей. Так, например, инсталляторы к

Linux-дистрибутивам пишут на Python или Perl, но нельзя просто взять и пустить туда простого

питон-программиста - там сложность будет в многоуровневом процессе загрузки

(UEFI/Secureboot/...), задачах разбиения диска со всеми тысячами возможных опций (LVM-

контейнеры - шифрование и т.п.).

Где-то тут я бы расположил задачи классического системного администрирования - написание

небольших скриптов на bash, Perl или Python, конфигурационных файлов, что требует совсем

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

различных компонентов операционной системы. Да, из-за этого часто удивляются, что "системный

Windows-программист пишет драйверы устройств на ассемблере, а системный Linux-программист

пишет shell-скрипты".

Ну и современный тренд для приложений, требующих простого интерфейса, - использовать веб-

интерфейс, что приводит к классическим навыкам обычной веб-разработки

(HTML/CSS/JavaScript/Java/Python/Ruby/Perl/Node.js/...), безграничный мир которой выходит за

рамки этого краткого опроса.

2. В нашей компании общие инструменты программистов - это:

" система управления версиями GIT;

" наша собственная система сборки и совместной работы ABF (Automatic Build Farm, abf.io);

" доработанная MediaWiki из проекта MediaWiki4Intranet для документирования и базы знаний;

" Bugzilla как трекер багов;

" Redmine для внутренней системы задач;

" Etherpad/Ethercalc/Etherdraw - сервис онлайн-блокнотов, таблиц и рисунков, для коллаборативных

постановок при удаленных совещаниях.

Дальше, как я уже объяснял, все зависит от "уровня" и технологического стека.

Для команды разработчиков ядра достаточно классического GNU-стека сборки, GIT и простейшего

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

конфигураций, нужно серьезное тестирование, на оборудовании и без. Наши "ядерщики"

разрабатывают и используют специализированный фреймворк KEDR и другие инструменты для

тестирования компонентов ядра. Также используются и инструменты, входящие в состав ядра:

Lockdep, Kmemleak, средства на основе Kprobes и пр. И, разумеется, тестирование и исследование

поведения "реального железа" - десятков ноутбуков с различной внутренней начинкой, стендов для

тестирования различных плат - Wi-Fi, видео... (главный ядерщик даже унес один такой стенд себе

домой), и тестирование, включая нагрузочные тесты Phoronix и ряд наших автоматических тестов,

идут круглосуточно.

Есть программисты-"мейнтейнеры", обеспечивающие сборку десятков тысяч пакетов на нашей ABF.

По минимуму им хватает веб-интерфейса ABF, где можно мониторить сборку и вносить изменения в

спецификации компиляции и код, пользуясь только браузером. Конечно, для большей

эффективности у нас есть специальный command-line клиент к ABF. Но, если возникает проблема,

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

ориентируясь налоги.

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

используется Qt-фреймворк, соответственно используется Qt Creator для С++-приложений, а для

Python-Qt-приложений IDE все выбирают по вкусу - например, что-то на основе Eclipse+pydev

(Aptana) или Komodo IDE. Впрочем, при доработках GNOME Shell приходится вместо продвинутого

Qt-стека мучиться с GTK, а расширения под GNOME Shell вовсе пишутся на JavaScript.

Для серверных приложений с веб-интерфейсом требуется и знание соответствующих веб-

технологий (в случае ROSA Directory Server - PHP, в случае ABF - Ruby on Rails), и собственно

системного уровня (например, тонкости конфигурирования LDAP, DNS, DHCP и т.п.).

3, 4. Только совсем странные люди указывают при рекрутинге какие-то страшные и непроверяемые

цифры стажа или загадочные уровни "middle/ senior". Все зависит от вакансии и кандидата - можно

взять и недоучившигося студента: на удивление, неленивый студент из нестыдного технического

вуза скорее всего уже самостоятельно обучился базовым инструментам. Кстати, у нас есть

программа летней стажировки студентов ВШЭ, и этот опыт позитивен.

К тому же Linux-разработка, будь то программирование ядра или программирование "рабочих

столов", оконных менеджеров, настроек системных сервисов, практически не оставляет шансов

найти специалиста со стажем, ведь в России, да даже и в мире, этим занимаются не так много людей.

В любом случае, придется много изучать, но ведь это и интересно!

5. Наша специфика - разработка полноценных Linux-дистрибутивов - подразумевает, что приходится

брать ответственность за необъятное - и за надежную работу системы с огромным зоопарком

железа, и за работоспособность десятков тысяч собранных нами Open Source-приложений и

библиотек. Так что в случае низкоуровнего программирования приходится буквально

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

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

несколько десятков видеокарт, сотни Wi-Fi-карт, коллекции подключаемых гаджетов.

Соответственно тут придется растить свою компетенцию в hardware.

Есть задачи по поддержке десятков тысяч пакетов - собранных из открытого кода приложений и

библиотек. Тут требуются и глубокие знания межпакетных зависимостей и процессов сборки, а

также умение разбираться в чужом многошерстном коде, чтобы быстро внести правку,

необходимую хотя бы для корректной сборки и запуска. Но иногда требуется и глубокая доработка,

с добавлением в приложение или библиотеку нового функционала. По сути, это работа с чудовищно

огромной чужой кодовой базой, исправление чужих ошибок, внесение нужных функций со слабыми

возможностями глобального изменения общей архитектуры. Приходится чинить устаревший legacy-

код, а это то, что обычно разработчики не любят, - классические продуктовые и заказные команды,

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

переписать".

Еще особенность, хотя уже не очень удивительная на нашем рынке, - это распределенность

команды. У нас есть "обычный" центральный офис и распределенная команда разработчиков.

Удаленная работа имеет и множество плюсов, но также требует дисциплины и самостоятельности,

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

Андрей Вагин, Linux-разработчик в Parallels

1 Мой любимый вопрос на собеседовании - назвать наиболее сложные задачи, которые приходилось

решать.

Причем для меня не важно, относятся они к Linux или нет. Тут можно даже не быть в курсе деталей.

Этот вопрос просто дает возможность кандидату раскрыться.

Таким же образом проверяем базовые знания. Если человек говорит, что программировал в ядре

Linux, то он просто обязан знать, чем отличается мьютекс от спинлока. А если он там писал не

только драйверы, то наверняка и о RCU должен был что-то слышать.

Остальные требования к знаниям и навыкам можно посмотреть в нашей текущей вакансии Linux

Developer - глубокое знание хотя бы одной подсистемы ядра и С, Assembler, умение пользоваться

make, patch, rpmbuild, понимание архитектуры x86 и взаимодействия процессов, опыт системного

программирования. Знание TCP/IP и сетевой архитектуры Linux, файловых систем, безопасности в

Linux, некоторых языков программирования (bash, Python, Perl). Наконец, будет необходим

технический английский (письменный).

2 Основным инструментом программиста под ОC Linux был и остается текстовый редактор.

Большая часть разработчиков Parallels пользуется одним из двух редакторов - Vim или Emacs.

Используем также системы контроля версий (GIT, CVS, SVN), а также трекеры Bugzilla и Jira.

3 Требований жестких нет, хотя в описании вакансий присутствует "высшее образование". Скорее

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

серверной виртуализации (которая как раз и занимается Linux-разработками) из МФТИ. Они

пришли в компанию еще студентами и выросли здесь как профессионалы.

К слову, у компании Parallels есть базовая кафедра при МФТИ, где студенты могут выбрать себе

тему и работать над ней в свободное время за стипендию. Это своего рода кузница кадров.

Проделанная на кафедре работа может лечь в основу диплома или кандидатской диссертации.

4 Опять-таки жестких требований нет. Наличие патчей в открытых продуктах будет большим

плюсом. Когда человек приходит с резюме, в котором написано, что у него есть опыт

программирования в ядре Linux N лет, а патчей в мейнстриме нет, то это выглядит очень странно.

5 Кандидат должен показать (и доказать), что он достоин должности, на которую претендует. Дело в

том, что сейчас на рынке спрос на Linux-программистов превышает предложение, это можно точно

сказать. Но компания Parallels - пожалуй, одно из самых привлекательных мест в России для таких

разработчиков. Здесь много интересных задач в различных подсистемах и высокий средний уровень

команды. Мы действительно часть сообщества (в том числе компания несколько раз попадала в Топ-

20 ведущих контрибуторов ядра - то есть тех, кто внес наибольший вклад в его развитие). Кроме

того, сама компания понимает важность работы над основной открытой веткой ядра Linux.

Кирилл Коротаев, вице-президент Acronis по разработке

1 Хороший программист под Linux должен уметь писать код на языке С и/или С++ и свободно

пользоваться стандартным C library API и syscalls.

Нужно уметь писать многопоточные программы и пользоваться примитивами синхронизации.

Важно хорошо понимать какие-то общие вещи: например, как устроен сервер, который

одновременно взаимодействует с тысячами клиентов по сети; пользоваться алгоритмами и

контейнерами стандартной библиотеки и понимать их алгоритмическую сложность.

2 Это вполне обычный набор инструментов: GCC, Makeеles, Git/SVN, GDB, Valgrind. Сюда же

входят разнообразные утилиты для измерения перформанса и отладки - Perf, strace, ltrace, iostat,

blktrace.

3 В идеале мы, конечно, возьмем кого-нибудь из MIT!

Если серьезно, в России много хороших технических вузов, но самое важное - это не корочка, а то,

что человек умеет. Вы можете быть самоучкой, главное, чтобы вы владели своим предметом. На

собеседовании мы задаем достаточно вопросов и задачек кандидату, чтобы это понять.

4 Все сильно зависит от проекта и человека. Обычно это два-три года. Мы с удовольствием примем

опытных специалистов, однако у нас есть стажировки для студентов, у которых, как правило, опыта

нет совсем. Если человек быстро соображает и действительно хочет работать в конкретном

направлении, это зачастую важнее, чем длинный послужной список.

5 Поскольку облачные технологии - одно из флагманских направлений в работе Acronis, большим

плюсом для кандидата будет понимание принципов работы распределенных систем, особенно

систем хранения данных. Хорошего специалиста со знанием Linux или Windows kernel мы оторвем с

руками и ногами.

Сергей Козлов, заместитель начальника отдела разработки компании NetUP

1 Уверенное знание языка, на котором в компании ведется разработка. Знание классических

алгоритмов и структур данных. Представление о механизмах межпроцессного и сетевого

взаимодействия, принятых в POSIX-системах. Знание основных утилит командной строки и

оболочки UNIX. Умение совершать базовую настройку системы (конфигурация сети, сервисы).

Опыт использования систем контроля версий (Subversion, Git). Технический английский. 2

Компиллятор: gcc/g++/clang. Отладка и профилирование: GDB, Valgrind, gprof. СУБД MySQL,

PostgreSQL.

3 Диплом не должен иметь решающего значения при подборе кадров, однако наличие профильного

высшего образования даст соискателю преимущество. Основным критерием являются фактические

навыки и опыт претендента.

4 Программист-стажер может быть принят в компанию без опыта. Как показывает практика, для

уверенной работы в компании на должности программиста соискатель должен иметь опыт работы

на должности со схожей спецификой не менее двух лет.

5 При рассмотрении резюме плюсами являются опыт работы с рядом специфичных библиотек

(OpenSSL, ffmpeg), опыт разработки многопоточных приложений, знание сетевых протоколов,

применяемых в сфере IPTV.

Метлицкий Юрий Викторович, директор центра разработки ОПО, ОАО "ВНИИНС"

1 Cистемным мышлением; знанием технических спецификаций и архитектуры современных

вычислительных систем; владением низкоуровневыми языками программирования asm, C, C++ и

наиболее распространенными языками написания сценариев sh, Python, Perl; знанием архитектуры

ОС Linux и ее системного программного обеспечения.

2 Cреда аutomake/autoconf с произвольными средствами подготовки исходных тексов; интерфейсы

ядра ОС Linux и стандарты POSIX/LSB; средства визуальной разработки с использованием

фреймворков QT и KDE; интерфейсы наиболее распространенных системных библиотек,

применяемых при создании системных и пользовательских приложений и служб.

3 Высшее инженерское образование в области разработки программно-аппаратных систем, с

уклоном в область разработки программного обеспечения.

4 Опыт работы приветствуется, однако более важными являются: гибкость ума; обучаемость;

возможность переключения между разнотипными задачами.

5 К специфическим знаниям можно отнести: современные тенденции, архитектура и реализация

программных и аппаратных средств защиты информации; разработка изделий строго в соответствии

с ЕСПД и ЕСКД.

Александр Горный, директор по информационным технологиям Mail.Ru Group

1 Он должен знать сам Linux: функции ядра, организацию процессов и потоков, сетевой стек.

Помнить наизусть все параметры каждого системного вызова, разумеется, необязательно - для этого

есть документация. Но знать, что можно, а что нельзя, совершенно необходимо.

2 Язык C или, возможно, C++. Средства отладки - GDB и Valgrind. Но главные инструменты,

конечно, - собственная голова и руки.

3 Мы не предъявляем каких-то формальных требований к дипломам кандидатов. Для нас гораздо

важнее реальные навыки, так что в первую очередь мы смотрим на проекты, в которых они

участвовали. Опыт показывает, что хороший разработчик может прийти из непрофильного вуза или

вообще не иметь законченного высшего образования. У Mail.Ru Group есть два крупных

образовательных проекта: Технопарк на базе МГТУ имени Баумана и Техносфера на базе ВМК

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

4 Не так уж много компаний в России (да и в мире) активно разрабатывают что-либо под Linux на

системном уровне. И далеко не каждому удается поработать в большой компании, например,

Mail.Ru Group, где есть много Linuxпроектов, или в компании, специально заточенной под

Linuxпродукты, например, Nginx. Но зато существует множество Open Source-проектов, где тоже

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

программиста под ОС Linux.

5 Главное требование - Надежность (именно так: с большой буквы). Ведь cервисы, написанные под

Linux, - основа нашей технической архитектуры.

Стас Рудаков, веб-разработчик и Наталья Жук, рекрутер в СООО "Гейм Стрим" в минском

центре разработки Wargaming

1 "Программист под ОС Linux" - широкое понятие. Сюда можно включить специалистов по

embedded, разработчиков ядра и всевозможных системных сервисов, GUI, WEB... Тяжело провести

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

Тем не менее если выделять один главный навык, то это умение постоянно учиться. Ведь часто

информацию приходится буквально по крупицам выискивать в списках рассылок, каналах IRC,

багтрекерах. Помимо этого, важно уметь читать чужой код. Linux-разработчикам постоянно

приходится иметь дело с Open Source.

2 ОС Linux в наследство от UNIX получила принцип "ОС как IDE". Мы часто используем GCC,

GDB, Strace, Netstat, tcpdump, Vi и top. Многие из них доступны как на машине разработчика, так и

на production-серверах. Если говорить об IDE в узком смысле, то в этом вопросе нет единства. У нас

в компании используются Emacs, PyCharm, Sublime, Vim.

3 Разработке под Linux мало где учат. Мы опираемся прежде всего на опыт, а не на диплом. Хотя

базовые знания тоже важны. Каждый программист, вне зависимости от целевой ОС, должен уметь

проектировать сложные системы, писать и оптимизировать алгоритмы.

4 Cтаж работы и профильное образование тут будут скорее плюсами, чем определяющими

критериями отбора. Для нас важны достижения и опыт предыдущих проектов, примеры

реализованных задач, умение объяснить, в чем сложность и как ее преодолеть. Также мы

предпочитаем нанимать специалистов, ранее решавших задачи, схожие с теми, с которыми

предстоит столкнуться у нас.

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

Поэтому очень важно иметь навыки построения высокодоступных и масштабируемых систем.

Подготовил Игорь Штомпель