15 типов айтишников, которые есть в каждой компании

Содержание

8 видов российских программистов

Какие кодеры наиболее востребованы в нашей стране?

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

  • «Мне надо переустановить Windows. Я всю жизнь ждал того, кто сделает это для меня. А потом пойдем чинить тостер.»;
  • «О! Ты можешь помочь мне с лабораторной работой на VBA!»;
  • «За сколько сможешь сделать сайт для магазина моей мамы?»;
  • «Да ну! Скучная и дурацкая профессия. Я вот как-то пробовал разобраться с 1C…».

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

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

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

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

1. Front-end веб-разработчик

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

Где работает?

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

Что делает?

Разрабатывает динамику пользовательского интерфейса. Если в компании нет верстальщика, то еще и переводит PSD-шаблоны в HTML-код.

Технологии

  • HTML и UI фреймворки (Bootstrap, Foundation, Pure);
  • CSS и препроцессоры (SASS/LESS);
  • JavaScript + фреймворки/библиотеки на этом языке (Jquery, ReactJS, AngularJS, BackboneJS);
  • Утилиты для сборки проектов (Grunt, Gulp, Bower).

2. Back-end разработчик

Человек на плечи которого ложиться основное бремя по разработке веб-проекта. Он как бы строит фундамент, на который front-end разработчик прицепляет «декоративные элементы».

Где работает?

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

Что делает?

Разрабатывает “ядро” сайта или веб-приложения: код исполняемый на сервере и архитектуру базы данных.

Технологии

Один из нижеперечисленных языков и фреймворки/библиотеки для него:

  • Базы данных MySQl/PostgreSQL/NoSQL.

3. Full-stack веб-разработчик

Человек, который может сделать сайт любой сложности «от и до».

Где работает?

Чаще всего в стартапах и небольших студиях веб-дизайна. В крупных компаниях содержится в команде наряду с front-end и back-end разработчиками, чтобы контролировать и координировать их работу.

Что делает?

Сайты и веб-приложения. Выполняет работу front-end и back-end разработчика одновременно.

Какие технологии ему желательно знать?

См. списки двух предыдущих типов.

4. Разработчик игр

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

Где работает?

В игровых студиях.

Что делает?

Какие технологии ему желательно знать?

  • С#/C++/Java;
  • Open GL или DirectX;
  • Один из игровых движков (Unity, Unreal Engine, Torque и другие).

5. Разработчик приложений под Android

Где работает?

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

Что делает?

Разрабатывает приложения под операционную систему Android.

Какие технологии ему желательно знать?

6. Разработчик приложений под iOS

Где работает?

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

Что делает?

Разрабатывает приложения под операционную систему iOS.

Технологии

7. Программист 1C

Многие разработчики не считают язык, встроенный в 1C, языком программирования, а людей, которые пишут на нем, программистами. У них есть на это свои основания. Тем не менее, людей которые называют себя программистами 1C и вакансий для них очень много.

Где работает?

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

Что делает?

Пишет программы для автоматизации документооборота в компании.

Технологии

  • «1С:Управление торговлей»;
  • «1С:Бухгалтерия»;
  • «1С:Зарплата и кадры»;
  • T-SQL.

8. Инженер-программист

Если одним из 7 предыдущих типов можно стать отучившись на курсах или путем самообразования, то инженеров-программистов выпускают только технические ВУЗы. Часто на этих должностях работают люди старше сорока лет, получившие образование в советское время.

Где работает?

На производстве или в научном учреждении.

Что делает?

Разрабатывает программы для управления самыми разными устройствами: от печи на хлебозаводе до робота-пылесоса.

Технологии

Один из нижеперечисленных языков:

+ огромный багаж технических знаний, соответствующий отрасли в которой человек работает.

Если посмотреть объявления о найме программистов на российских сайтах, то 90% из них будут подходить под эти семь типов. На Западе рынок вакансии несколько разнообразнее. Кто интересуется, может зайти на Odesk и посмотреть, какая работа там предлагается.

С грустью замечаю, что 14-летние пакистанцы требуют там за html-верстку от 500 рублей в час.

А судить о том, какие языки сейчас наиболее популярны в мире можно по данным Tiobe Index. Этот рейтинг строится по числу запросов в поисковых системах с упоминанием разных языков программирования.

P.S. Напоследок, жизненный анекдот в тему.

Если бы водителей нанимали на работу так же как программистов:
Вакансия: водитель.
Требования: профессиональные навыки в управлении легковыми и грузовыми автомобилями, троллейбусами, трамваями, поездами метрополитена и фуникулёра, экскаваторами и бульдозерами, спецмашинами на гусеничном ходу, боевыми машинами пехоты и современными легкими/средними танками, находящимися на вооружении стран СНГ и НАТО. Навыки раллийного и экстремального вождения обязательны. Опыт управления болидами “Формулы 1″ — приветствуется. Знания и опыт ремонта поршневых и роторных двигателей, автоматических и ручных трансмиссий, систем зажигания, бортовых компьютеров, антиблокировочных систем, навигационных систем и автомобильных аудиосистем ведущих производителей. Опыт проведения кузовных и окрасочных работ — приветствуется. Претенденты должны иметь сертификаты Mercedes, BMW, General Motors, а также справки об участии в крупных международных соревнованиях не более, чем двухлетней давности.
Зарплата: определяется по результатам собеседования.

(4.69 из 5, оценили: 13)

123 задачи с IT-собеседований с разбором решений

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

В нашей рубрике c заданиями уже больше 100 вопросов с подробным разбором решений. Мы решили собрать воедино все самые интересные и популярные задачи для программистов, которые могут встретиться вам на собеседовании.

Есть однонаправленный список из структур. В нём random указывает на какой-то еще элемент этого же списка. Требуется написать функцию, которая копирует этот список с сохранением структуры (т.е. если в старом списке random первой ноды указывал на 4-ю, в новом списке должно быть то же самое – рандом первой ноды указывает на 4-ю ноду нового списка). O(n), константная дополнительная память + память под элементы нового списка. Нельзя сразу выделить память под все данные одник куском т.е. список должен быть честным, разбросанным по частям, а не единым блоком, как массив.

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

Допустим, вы летите из Москвы во Владивосток, а затем обратно, при полном безветрии. Затем вы совершаете точно такой же перелёт, но на этот раз на протяжении всего перелёта дует постоянный западный ветер: в одну сторону попутный, в обратную — лобовой.

Что не так в этом отрывке кода на С++?

Задача, которая была популярна в своё время на собеседованиях в Amazon. Мы русифицировали её, но смысл остался тот же. Вам нужно продолжить последовательность.

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

«Вас уменьшили до размеров 5-центовой монеты и бросили в блендер. Ваш вес уменьшился так, что плотность вашего тела осталась прежней. Лезвия начнут вращаться через 60 секунд. Ваши действия?»

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

Вопрос по С++. Что за ошибка «pure virtual function call»? В какой ситуации она может быть сгенерирована? Предоставьте минимальный код, приводящий к ней.

В вашем распоряжении 10 тысяч серверов в дата-центре с возможностью удалённого управления и один день, чтобы получить миллион долларов. Что вы для этого сделаете?

У вас есть аналоговые часы с секундной стрелкой. Сколько раз в день все три стрелки часов накладываются друг на друга?

В чём разница между string и String в C#?

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

Cколько мячей для гольфа войдет в школьный автобус?

21 ноября в 19:00, Москва, беcплатно

Для справки: в Национальных стандартах транспотрных средств для школ в США на 1995 год указаны максимальные размеры школьного автобуса и равны 40 футам в длину и 8.5 футам в ширину. Стандартный диаметр мяча для гольфа — 1.69 дюйма с допуском 0.005 дюймов.

Представьте себе вращающийся диск, например DVD. У вас есть в распоряжении черная (Ч) и белая (Б) краски. На краю диска установлен небольшой датчик, который определяет цвет под ним и выдает результат в виде сигнала. Как бы вы раскрасили диск, чтобы было возможно определить направление вращения по показаниям датчика?

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

Датчик фиксирует цвет точки в непосредственном месте установки в последовательные моменты времени. Показания представляются в виде «ЧЧЧББ…». Задача сводится к такой раскраске диска, где последовательность показаний отличается при вращении в прямую и в противоположную стороны.

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

Найдите ошибки в следующем коде.

Объясните, что делает этот код.

Дано 100-этажное здание. Если яйцо сбросить с высоты N-го этажа (или с большей высоты), оно разобьется. Если его бросить с любого меньшего этажа, оно не разобьется. У вас есть два яйца. Найдите N за минимальное количество бросков.

Продолжаем задачки по С/С++. Что означает ключевое слово volatile и в каких ситуация оно может быть применено? Если даже помните формальное значение, попробуйте привести пример ситуации, где volatile на самом деле будет полезно.

У вас есть отсортированная матрица размера MxN. Предложите алгоритм поиска в ней произвольного элемента. Под отсортированной матрицей будем понимать такую матрицу, строки и столбцы которой отсортированы (см. пример).

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

На пустынном шоссе вероятность появления автомобиля за 30-минутный период составляет 0.95. Какова вероятность его появления за 10 минут?

Напишите функцию суммирования двух целых чисел без использования «+» и других арифметических операторов.

У вас есть парк из 50 грузовиков. Каждый из них полностью заправлен и может проехать 100 км. Как далеко с их помощью вы можете доставить определенный груз? Что будет, если в вашем распоряжении N грузовиков?

Не все понимают сразу о чем речь: территориально это место, где нет никаких заправочных станций. Единственное место, где можно здесь найти горючее – это топливные баки грузовиков. Пересесть из грузовика в гибридный легковой автомобиль Prius нельзя. Бросить грузовик без топлива, где бы это ни случилось, и без водителя – в порядке вещей. И единственное, что здесь важно, – доставить как можно дальше ценный груз.

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

Напишите метод, который будет подсчитывать количество цифр «2», используемых в десятичной записи целых чисел от 0 до n (включительно). Картинка дана в качестве подсказки к одному из возможных решений.

Где вы будете плыть быстрее — в воде или сиропе?

Это классическая задача с долгой историей, которую обсуждал в своё время еще Исаак Ньютон. Когда-то она использовалась и на IT-собеседованиях в Google (сейчас — нет). Тем не менее предлагаем вам порассуждать над решением.

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

Допустим, вы пишете конвейер, в котором 2 потока, используя общий буфер, обрабатывают данные. Поток-producer эти данные создает, а поток-consumer их обрабатывает (Producer–consumer problem). Следующий код представляет собой самую простую модель: с помощью std::thread мы порождаем поток-consumer, a создавать данные мы будем в главном потоке.

Опустим механизмы синхронизации двух потоков, и обратим внимание на функцию main(). Попробуйте догадаться, что с этим кодом не так, и как его исправить?

Дано 20 баночек с таблетками. В 19 из них лежат таблетки весом 1 г, а в одной – весом 1.1 г. Даны весы, показывающие точный вес. Как за одно взвешивание найти банку с тяжелыми таблетками?

Дана шахматная доска размером 8×8, из которой были вырезаны два противоположных по диагонали угла, и 31 кость домино; каждая кость домино может закрыть два квадратика на поле. Можно ли вымостить костями всю доску? Дайте обоснование своему ответу.

Дан входной файл, содержащий четыре миллиарда целых 32-битных чисел. Предложите алгоритм, генерирующий число, отсутствующее в файле. Имеется 1 Гбайт памяти для этой задачи. Дополнительно: а что если у вас всего 10 Мбайт? Количество проходов по файлу должно быть минимальным.

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

Вы поставили стакан воды на диск проигрывателя виниловых пластинок и медленно увеличиваете скорость вращения. Что произойдет раньше: стакан сползет в сторону, стакан опрокинется, вода расплескается?

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

Короткая задачка по С++ в виде вопроса для новичков. Почему деструктор полиморфного базового класса должен объявляться виртуальным? Полиморфным считаем класс, в котором есть хотя бы одна виртуальная функция.

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

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

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

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

В книге N страниц, пронумерованных как обычно от 1 до N. Если сложить количество цифр, содержащихся в каждом номере страницы, будет 1095. Сколько страниц в книге?

Задачка по С++, которая, тем не менее, будет полезна и для других языков. Сопоставьте хэш-таблицу и mар из стандартной библиотеки шаблонов (STL). Как организована хэш-таблица? Какая структура данных будет оптимальной для небольших объемов данных?

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

Дан кусок сыра в форме куба и нож. Какое минимальное количество разрезов потребуется сделать, чтобы разделить этот кусок на 27 одинаковых кубиков? А на 64 кубика? После каждого разреза части можно компоновать как угодно.

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

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

В тёмной комнате вам вручают колоду карт, в которой известное количество карт N лежат рубашкой вверх, а остальные — вниз. Вы не можете видеть карты, но можете их переворачивать. Как вы разделите колоду на две стопки, чтобы в каждой из них было одинаковое число карт, лежащих рубашкой вверх?

Эта головоломка в своё время была популярна в JP Morgan Chase. Понятное дело, оказавшись в темноте, вы просто достанете сотовый телефон и воспользуетесь экраном как фонариком. Однако эта задачка появилась до эпохи сотовых телефонов, и её можно решить, даже не видя карт.

Реализуйте вручную стек со стандартными функциями push/pop и дополнительной функцией min, возвращающей минимальный элемент стека. Все эти функции должны работать за O(1). Решение оптимизируйте по использованию памяти.

У скольких целых чисел, лежащих в диапазоне от 1 до 1000, есть цифра 3? Посчитать нужно без использования компьютера, приведя свои рассуждения в комментариях.

У вас есть много URL-адресов, порядка 10 миллиардов. Как бы вы организовали эффективный поиск дубликатов, учитывая, что все они, конечно же, не поместятся в памяти?

Вы должны выбрать одну из двух ставок. При первом варианте вы должны забросить баскетбольный мяч в корзину за один бросок. Если попадёте, то получите 50 тыс. рублей. Во втором варианте вам надо попасть два раза из трёх бросков, и тогда вы также получите те же 50 тыс. рублей. Какой из этих вариантов вы предпочтёте? Будет ли ваше умение забрасывать мячи влиять на выбор?

Представьте себе треугольник, составленный из чисел. Одно число расположено в вершине. Ниже размещено два числа, затем три, и так до нижней грани. Вы начинаете на вершине, и нужно спуститься к основанию треугольника. За каждый ход вы можете спуститься на один уровень и выбрать между двумя числами под текущей позицией. По ходу движения вы «собираете» и суммируете числа, которые проходите. Ваша цель — найти максимальную сумму, которую можно получить из различных маршрутов.

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

Даны два слова или фразы, и ваша задача — проверить, являются ли они анаграммами.

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

Предложите алгоритм, который обнуляет столбец N и строку M матрицы, если элемент в ячейке (N, M) нулевой. Конечно же, нужно минимизировать затраты памяти и время работы.

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

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

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

Допустим, у вас есть однонаправленный список с петлёй. Его «последний» элемент содержит указатель на один из элементов этого же списка, причём не обязательно на первый. Ваша задача — найти начальный узел петли.

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

На острове существует правило — голубоглазые люди не могут там находиться. Самолет улетает с острова каждый вечер в 20:00. Все жители собираются за круглым столом ежедневно, каждый человек может видеть цвет глаз других людей, но не знает цвет собственных. Никто не имеет права сказать человеку, какой у него цвет глаз. На острове находится не менее одного голубоглазого человека. Сколько дней потребуется, чтобы все голубоглазые уехали?

Цукерберг рекомендует:  Notebook - Ноутбук для программиста

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

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

Допустим, вам поручили задачу по разработке поискового робота — программы, которая, грубо говоря, посещает страницы в Интернете, индексирует, выделяет из них ссылки, переходит по ним и повторяет процесс. Вопрос: как избежать зацикливания?

У вас есть стеклянный кувшин, в котором лежат небольшие шарики, и вы в любое время можете определить их количество. Вы со своим другом играете в следующую игру: каждый из вас по очереди забирает из кувшина 1 или 2 шарика. Игрок, который забирает последний шарик, выигрывает. Какая самая лучшая стратегия в этой игре? Можете ли вы в самом начале предсказать, кто выиграет?

Имеется N компаний, и вы хотите, чтобы они слились и образовали одну крупную компанию. Сколько разных способов вы можете использовать для этого? Поглощение можно считать частным случаем слияния, когда А поглощает Б и Б полгощает А — два разных способа. Равнозначные слияния тоже возможны.

Какой минимальный комплект монет необходим для того, чтобы выдать любую сдачу от 1 до 99 центов? Доступные номиналы монет: 1, 5, 10, 25, 50 центов и 1 доллар.

У вас есть 25 лошадей. Сколько забегов вам нужно устроить, чтобы определить трех самых быстрых из них? Вы не можете пользоваться секундомером. В каждом заезде могут участвовать только пять лошадей.

Короткая задачка на сообразительность. По результатам исследования известно, что 70% людей любят кофе, в то же время 80% любят чай. Каковы верхние и нижние границы доли людей, которые одновременно любят кофе и чай?

Задачка, которую нужно решать без калькулятора и компьютера, имея под рукой только карандаш и бумагу. Сколько нулей в конце факториала 100?

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

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

Идет дождь, а вам надо добраться до вашей машины, которая стоит в самом дальнем конце парковки. Побежите ли вы к ней или нет, если ваша цель — как можно меньше промокнуть? Как вы будете себя вести, если у вас есть зонтик?

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

Разбор двух вариантов решения за O(N^4) и O(N^3). Можете ли вы найти другие варианты?

Предположим, в некоторый бар ходят только необщительные посетители. Вдоль барной стойки расположены 25 мест. Всякий раз, когда входит новый посетитель, он обязательно садится на самое дальнее, насколько это возможно, место от остальных гостей. Ни один не сядет рядом с кем-то другим: если посетитель входит и видит, что «свободных» мест нет, он тут же разворачивается и уходит из бара. Бармену, естественно, хочется, чтобы за стойкой сидело как можно больше клиентов. Если ему разрешено усадить первого посетителя на любое место, куда выгоднее его посадить с точки зрения бармена?

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

У вас есть неограниченное количество монет достоинством 25, 10, 5 и 1 цент. Напишите код, определяющий количество способов представления n центов.

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

Достаточно ли будет линейного времени?
Сколько памяти понадобится для решения?

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

Иными словами, как получить случайное число в диапазоне от 1 до 7, используя генератор случайных целых чисел от 1 до 5?

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

Напишите метод, генерирующий случайную последовательность m целых чисел из массива размером n. Все элементы выбираются с одинаковой вероятностью.

Первое, что приходит в голову, — выбрать случайные элементы из массива и поместить их в новый массив. Но что если мы выберем один и тот же элемент дважды?

Представьте себе робота, находящегося в левом верхнем углу сетки с координатами (X, Y). Робот может перемещаться в двух направлениях: вправо и вниз. Сколько существует маршрутов, проходящих от точки (0, 0) до точки (X, Y)?

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

Реализуйте метод сжатия строки на основе счетчика повторяющихся символов. Например, строка aabcccccaaa должна превратиться в а2b1с5аЗ. Если «сжатая» строка оказывается длиннее исходной, метод должен вернуть исходную строку.

Вы находитесь в автомобиле, где к полу веревочкой привязан шар, наполненный гелием. Окна закрыты. Вы нажимаете на педаль газа. Что произойдет с шаром: переместится он вперед, назад или останется в прежнем положении?

Задачка, на примере который можно кратко ознакомиться с основами RSA-криптографии.

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

Даже не зная ничего про RSA можно попробовать придумать ответ.

Задача на знание конкретных языков. Объясните разницу между шаблонами в C++ и дженериками в Java.

Многие программисты полагают, что шаблоны C++ и дженерики (например в Java) — это одно и то же, ведь их синтаксис похож: в обоих случаях можно написать что-то вроде List . Но различия на самом деле есть.

Реализуйте вручную «умный» указатель с автоматическим управлением памятью на C++.

Умный (интеллектуальный) указатель — это тот же обычный указатель, обеспечивающий безопасность благодаря автоматическому управлению памятью. Такой указатель помогает избежать множества проблем: «висячие» указатели, «утечки» памяти и отказы в выделении памяти. Интеллектуальный указатель должен подсчитывать количество ссылок на указанный объект.

На первый взгляд эта задача кажется довольно сложной, особенно если вы не эксперт в C++.

Эта головоломка, в которой вас пытаются запутать, предложив поменять свое решение, известна также под именем «Парадокс Монти Холла». Монти Холл был первым ведущим телевизионной игры-шоу «Давайте заключим сделку»

Перед вами три коробки, в одной из которых находится ценный приз, в двух других ничего нет. Вы можете выбрать любую коробку, но вам по-прежнему неизвестно, в какой именно приз. Одну из двух не выбранных вами коробок открывают и показывают, что она пустая. Теперь вы можете или оставить коробку, которую вы первоначально выбрали (оставить), или поменять ее на другую, неоткрытую (заменить). Что вы предпочтете сделать (оставить или заменить)?

У вас есть пустое помещение и группа людей снаружи. За один ход вы можете либо позволить одному человеку войти в помещение, либо выпустить из него одного человека. Можете ли вы предложить серию ходов, при которой каждая возможная комбинация людей находится в помещении только один раз?

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

  • В помещении никого нет.
  • В помещении только Ларри.
  • В помещении только Сергей.
  • В помещении Ларри и Сергей.

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

Иными словами, как сгенерировать неповторяющиеся комбинации, меняя только один элемент за раз?

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

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

По условию требуется разработать алгоритм, позволяющий найти k-e число из упорядоченного числового ряда, в разложении элементов которого на простые множители присутствуют только 3, 5 и 7.

Решение с примерами кода на Java есть у нас на сайте.

Дан список из миллиона слов. Разработайте алгоритм, создающий максимально возможный прямоугольник из букв так, чтобы каждая строка и каждый столбец образовывали слово (при чтении слева направо и сверху вниз). Слова могут выбираться в любом порядке, строки должны быть одинаковой длины, а столбцы — одинаковой высоты.

Дан массив с числами типа Integer. Вам нужно написать функцию, которая на входе получит исходный массив, а на выходе вернет массив, в котором каждое значение получено путем произведения всех значений исходного массива с отличным от текущего индексом.

Для ясности приведем пример. Допустим, исходный массив имеет вид:

Тогда функция должна вернуть:

Расчет значений происходит следующим образом:

  • Нельзя использовать деление.
  • Функция должна быть с наименьшими затратами памяти и времени выполнения.

Задача на умение рассуждать. Конкретный ответ не важен, важно показать как вы мыслите. Представьте, что вам необходимо добраться из точки A в точку B, но вы не знаете, как. Как вы будете действовать?

Представьте, что вам дали задание разработать план эвакуации большого города (в классическом варианте — Сан-Франциско). С чего вы начнете?

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

Например: у вас есть массив list_of_ints, содержащий числа -10, -10, 1, 3, 2. Функция, которая обрабатывает этот массив, должна вернуть 300, так как -10 * -10 * 3 = 300. Задание нужно выполнить максимально эффективно, не забывая учесть отрицательные числа.

Представьте страну, где все родители хотят иметь мальчика. Каждая семья продолжает рожать детей до тех пор, пока у них не появляется мальчик, а затем останавливается. Каково соотношение мальчиков и девочек в этой стране?

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

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

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

Сколько флаконов шампуня производится в мире за год? Ответ

Сколько насечек на ребре четвертака — монеты в 25 центов? Ответ

Сколько будет 2 в 64 степени? Ответ

Сколько туалетной бумаги потребуется, чтобы покрыть ею весь штат? Ответ

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

Cколько денег понадобится на мытье всех окон в Сиэтле? Ответ

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

Задача, которую давали на собеседованиях в Apple. От вас требуется написать функцию, которая возвращает максимальную прибыль от одной сделки с одной акцией (сначала покупка, потом продажа). Исходные данные — массив вчерашних котировок stock_prices_yesterday с ценами акций Apple.
Информация о массиве:

  • Индекс равен количеству минут с начала торговой сессии (9:30 утра).
  • Значение в массиве равно стоимости акции в это время.

Например: если акция в 10:00 утра стоила 20 долларов, то
stock_prices_yesterday[30] = 20.

Допустим, имеем некоторые условия:

Массив может быть любым, хоть за весь день. Нужно написать функцию get_max_profit как можно эффективнее — с наименьшими затратами времени выполнения и памяти.

Задача про слияние промежутков в календаре.

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

Те периоды, когда команда занята, на календаре отмечены как диапазоны времени, например, с 10:00 до 12:30 или с 12:30 до 13:00. В разрабатываемой программе промежуток времени представлен в виде кортежей из двух целых чисел. Число означает номер 30-минутного блока, который идет после 9:00 утра. Например, кортеж (2, 4) означает диапазон с 10:00 до 11:00, а (0, 1) — это промежуток 9:00-9:30.

Вам нужно написать функцию, которая должна упростить вывод информации таким образом, что если команда занята в промежутках с 10:00 до 12:30 и с 12:30 до 13:00, то это отображалось как 10:00‒13:00. Например: на входе вашей функции неупорядоченный массив из кортежей [(0, 1), (3, 5), (4, 8), (10, 12), (9, 10)], а на выходе вы должны получить упорядоченный массив [(0, 1), (3, 8), (9, 12)].

В будущем планируется внести изменения в программу, где вместо 30-минутных блоков будут минутные, как это реализовано в представлении Unix-времени. С учетом этого изменения нужно, чтобы ваша функция уже сейчас могла работать с большими числами. Еще не забудьте, что кортеж — это такой тип данных, в котором содержимое переменной невозможно изменять после ее создания.

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

  1. Указанная сумма денег.
  2. Массив со всеми доступными номиналами монет.

Нужно написать функцию, которая на выходе выдаст количество всех возможных способов получить указанную сумму денег при помощи различных доступных номиналов монет. Например, если вам нужно получить 4 цента из монет номиналами 1, 2 и 3 цента, то функция вернет 4 — именно столько есть возможных комбинаций из чисел 1, 2 и 3, чтобы получить в сумме 4:

Эту задачу когда-то давали в Google.

Вам нужно подняться по лестнице. За один раз можно подняться на одну или две ступеньки. Сколько существует способов добраться до N-й ступеньки?

Эту задачу задавали на собеседовании в Twitter.
Рассмотрим следующую картинку:

На этой картинке изображены стены различной высоты в некотором плоском мире. Картинка представлена массивом целых чисел, где индекс — это точка на оси X, а значение каждого индекса — это высота стены (значение по оси Y). Картинке выше соответствует массив [2, 5, 1, 2, 3, 4, 7, 7, 6] .

Теперь представьте, что начался дождь, который не прекращается и поливает стены сверху равномерным потоком. Сколько воды соберется в «лужах» между стенами?

задача про стены и дождь, собеседование в Twitter

Единицей объема воды считаем квадратный блок 1×1. На картинке выше всё, что расположено слева от точки 1, выплескивается. Вода справа от точки 7 также прольется. У нас остается лужа между 1 и 6 — таким образом, получившийся объем воды равен 10.

Задача про бесконечный поезд.

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

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

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

Расположение переключателей случайное, порядок подключения заранее неизвестен. Зайдя в комнату, можно делать с лампочками всё, что угодно, но уже нельзя вернуться к переключателям. Изначально все лампы выключены.

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

Или смотрите сразу ответ

Классическая задача. Найдите в данной вам строке максимальную по длине подстроку, которая является палиндромом (то есть читается слева направо и справа налево одинаково). Предложите как можно более эффективный алгоритм.

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

В этой задаче вам необходимо реализовать функцию, которая бы проверяла число на четность, используя только битовые операции AND, OR, NOT.

На прямой даны N отрезков (в реальной жизни это могут быть промежутки времени, например), которые заданы координатами их левого и правого конца. Для каждого данного отрезка необходимо узнать, сколько из данных отрезков полностью находятся в нем. Один отрезок полностью содержится во втором, если левый конец первого отрезка находится правее левого конца второго отрезка, а правый конец первого находится левее правого конца второго. Предложите как можно более эффективный способ решения этой задачи. Гарантируется, что все концы данных отрезков различны.

Если вы придумали решение, то написать и проверить его вы можете здесь, на codeforces.

Сможете ли вы решить эффективно данную задачу в случае, если концы отрезков могут совпадать?

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

В массиве случайных чисел A[0…n-1] задан один «волшебный» индекс: такой, что A[i] = i . Значения элементов в массиве повторяться не могут. Учитывая, что массив отсортирован по значениям в порядке возрастания, напишите метод, который определит этот «волшебный» индекс, если он существует в массиве A . Если элемента в массиве нет, верните любое отрицательное число.

Как изменится решение, если известно, что таких индексов в массиве несколько?

Как можно узнать количество дней в месяце, зная его номер? Другими словами, опишите, как получить функцию f(x), которая бы давала следующий список значений:

В качестве аргумента мы получаем только номер месяца, т.е. мы не учитываем високосные года, и f(2) = 28.

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

Решение достаточно очевидное, но возникает вопрос:

Если бы мы программировали, например, на Java, то мы могли бы воспользоваться механизмом меток:

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

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

Классическая задача: посчитать N-е число последовательности, в которой каждый элемент равен сумме двух предыдущих. Такая последовательность называется последовательностью Фибоначчи: 1, 1, 2, 3, 5, 8…

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

Придумайте, как найти N’е число Фибоначчи за приемлемое время.

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

Одна из самых известных задач Интернета, будоражащая многие светлые умы человечества.

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

Задача на перегрузку функций в C++, которая может оказаться сложнее, чем выглядит.

Предположим, у нас есть два класса:

Что выведут два следующих куска кода и почему?

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

Пусть у нас есть массив положительных чисел, в котором все числа, кроме трех, встречаются по 2 раза, а эти три числа отличны от всех остальных и встречается каждое ровно по одному разу. Нужно найти эти три числа. Числа помещаются в 32-битный целочисленный тип.

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

Ограничения: мы можем использовать O(1) дополнительной памяти и не можем создавать новый итератор. Можно пользоваться функцией генерации случайного числа от [0;1) .

Известная задача с IT-собеседований с несколькими вариантами решения: как правильно реализовать обмен значений переменных?

Если вы попытаетесь выполнить обмен значений этим способом, то увидите, что теперь в обеих переменных хранится значение переменной b . Происходит это ввиду построчного выполнения кода. Первая операция присваивания сохраняет значение переменной b в переменную a . Затем вторая — новое значение a в b , иными словами значение b в b . Таким образом, мы полностью теряем содержание контейнера a .

На одной стороне реки находятся три человека и три льва. Все они должны оказаться на другом берегу реки. Есть лишь одна лодка, в которой могут поместиться лишь два живых существа одновременно (человека или льва). Вы не можете оставлять на том или другом берегу реки больше львов, чем людей, так как в этом случае животные съедят людей, оставшихся в меньшинстве. Как вы переправите всех через реку?

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

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

6 типов айтишников, на которых можно пойти учиться

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

Цукерберг рекомендует:  Вакансии chatme.ai

Реальность знакомит нас с новой формой айтишника — перспективный, образованный человек, который воплощает свои разработки с нуля, как Тони Старк, а презентует и продаёт их, как Стив Джобс.

Если ваш подросток решил связать свою жизнь с миром информационных технологий, то ему необходимо ответить на главный вопрос: «А какой ты айтишник?». Дайте почитать ему эту статью, которая поможет ему разобраться со своими интересами и определиться с точным выбором специализации.

Специалист по информационной безопасности

Твой пароль от электронной почты состоит из 25 символов математической последовательности? Он умеет хранить секреты? Кажется, твои кумиры — прародитель первого компьютера Тьюринг и инженер кибербезопасности Эллиот Алдерсон из сериала «Mr. Robot» («Мистер Робот»)…

Если ты мечтаешь создать портативное хранилище для секретных сообщений вроде криптекса и давно изучил всю информацию о шифровальной машине «Энигма», для тебя открыт путь на образовательную программу «Информационная безопасность».

Веб-разработчик

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

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

Пользователи сайта Quora составили свои списки языков программирования, которые желательно знать каждому программисту.

Тед Ньювард, директор и ответственный за взаимодействие с разработчиками в компании Smartsheet

Мой список включает следующие языки:

  1. C++. Именно на этом языке написаны многие из ниже указанных платформ (JVM, CLR, Node и другие). Кроме того, с его помощью вам будет проще понять, как вручную выполнять оптимизацию памяти.
  2. C# или Java. Нет, вам не нужно знать сразу оба. Изучение одного из этих объектно-ориентированных языков очень похоже на изучение другого.
  3. HTML. Я не считаю его одним из языков программирования, но другие придерживаются именно этого мнения, поэтому…
  4. CSS. Крайне необходим для любых видов веб-разработки.
  5. JavaScript. Его более современный и приятный вариант, а не та дрянь, которой мы пользовались 20 лет назад. Заметьте: сам язык не сильно изменился с того времени и вплоть до нынешнего момента. Мы, а именно, программисты, которые его используют, вот кто действительно поменялся.
  6. SQL. Понадобится для работы с реляционными базами данных.
  7. Lisp. Да, Lisp. Или, если быть более точным, “одно из воплощений этого языка”. Подойдет Clojure, Lisp, Scheme, Nu или что-то наподобие того. Вы должны знать, что представляет собой гомоиконный язык, а также понимать, как при использовании правильных инструментов исчезают границы между кодом и данными.
  8. Smalltalk. Ага. В любой основе графического интерфейса, построенного на базе собственных аппаратных средств (Windows, macOS, OS/2, X/Windows, Android, iOS и прочие), используются те же самые базовые принципы, что были сформулированы и воплощены в Smalltalk еще в 60-ые годы.
  9. Ruby или Python. Вам необходимо знать хотя бы один динамический язык программирования. Сюда же подходит Javascript, но только если вы сначала изучите сам язык, безо всяких DOM-моделей, которые могут значительно исказить начальную картинку (React, Angular, VueJS – во всех них содержатся эти самые “DOM-модели”, о которых и ведется речь.) Кстати, как только вы разберетесь с Lisp, вам станет намного проще понимать JavaScript.
  10. AspectJ. Знакомство с аспектно-ориентированным программированием полностью изменит ваш взгляд на объекты, и это прекрасно.
  11. Haskell, ML, Ocaml или Miranda. Потратьте некоторое время на функциональные языки, в которых отсутствуют объекты.
  12. Bash, или zsh, или другой сценарий командной оболочки. Потому что далеко не каждая проблема или задача в программировании должна решаться с помощью полноценного приложения.
  13. F#, Scala, Clojure или любой другой объектный/функциональный гибридный язык программирования. Потому что как только вы разберетесь с азами и усвоите базовый набор, к которому относятся первые 11 языков программирования из этого списка, вы будете готовы к чему-то, что будет совсем непросто изучить.
  14. Swift и/или Kotlin. Оба относятся к разновидностям объектно-ориентированных языков и обладают некоторыми встроенными функциональными особенностями. Изучив их, вы будете готовы к работе над мобильными приложениями.
  15. x86 или ARM-ассемблер. Умение читать на языке ассемблера позволит вам отлаживать код без использования исходного кода.

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

И нет, вам не нужно знать их все, чтобы стать достаточно компетентным программистом. Если вы хотите стать просто хорошим разработчиком, вам нужно знать один из основных языков (HTML/CSS/Javascript) + язык для бэкенд-программирования (чаще всего, это C#, Java, Python, Ruby или NodeJS-Javascript) + SQL, если вы используете систему управления реляционными базами данных (RDBMS). Этого будет вполне достаточно.

Однако изучение всех остальных языков – это именно то, что позволит вам перейти от «рядового» к «ведущему» программисту, а после достигнуть максимального уровня знаний и умений.

Нишан Панта, специалист по компьютерной инженерии, разработчик на языке Python

Я придерживаюсь так называемого языкового агностицизма, поэтому если бы кто-то под страхом смертной казни заставил меня составить подобный список, то он бы выглядел следующим образом:

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

2. C. Потому что с его помощью можно четко понять, как все работает. Отлично подходит для выполнения несложных задач.

3. C++. Также для выполнения несложных задач. Подходит для использования объектно-ориентированных парадигм. Кроме того, может использоваться для ряда других задач.

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

5. Scala. Используется в качестве гибрида функционального и императивного языка программирования. С его помощью можно сотворить удивительные вещи.

6. Javascript. Самый мощный язык для веб-разработки. Лично мне нравится «чистый» JS (стоит учитывать, что веб-разработка – это точно не мое).

7. Java. Для выполнения задач в объектно-ориентированном программировании. И для использования Spring framework.

8. Haskell. Каждый программист должен знать парадигмы функционального программирования.

9. PHP. Если вам нужно выполнить что-то, связанное с веб-разработкой. На мой взгляд, этот язык точно не является символом удобства и простоты.

10. R. Для статистического анализа. Лично я даже не пробовал с ним работать, так как мне более чем неплохо с самим Python.

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

12. Markdown. Один из наиболее часто используемых языков разметки. Как правило, я его использую для каких-то пометок, написания файла README и многого другого.

13. VimL / vimscript. Раньше с помощью VimL я писал скрипты для создания пользовательских плагинов и конфигураций для vim. Это один из тех скриптовых языков, работать с которыми осмеливаются далеко не многие.

14. CSS. Использование CSS время от времени совсем не повредит вашему HTML.

15. Matlab/Octave. С его помощью я раньше выполнял сложные вычисления. Однако теперь я все это делаю на Python благодаря NumPy.

«Для работы в IT нет входных барьеров». Как стать айтишником с нуля

По прогнозу Фонда развития интернет-инициатив, к 2027 году для экономического роста России понадобится вдвое больше программистов, чем есть сейчас, и вряд ли вузы и техникумы справятся с «поставкой» на рынок такого объема кадров. Чтобы избежать кадрового голода, крупные российские IT-компании занялись обучением программистов и готовы принимать на стажировки новичков — так на первый план в становлении IT-специалиста вышли быстрая обучаемость и самостоятельность вместо университетского диплома и опыта работы.

Высокие зарплаты, востребованность и возможность стать специалистом без высшего образования привлекают все больше желающих работать в сфере IT. Евгений Лебедев, CMO «Яндекс.Практикума», рассказал, почему состояться в IT может каждый, как выбрать новую профессию, научиться основам программирования и найти первую работу.

Почему в IT не важны пол, возраст и образование специалиста

Для работы в IT нет входных барьеров — состояться может каждый, были бы желание и свободное время для обучения.

  • Возраст не имеет никакого значения, даже наоборот — дает свои преимущества. Семнадцатилетние способны много учиться и быстро «примерять» разные профессии, а те, кто меняет сферу деятельности после 25, делают это более осознанно и поэтому максимально замотивированы на учебу.
  • Уже имеющееся образование только поможет в освоении нового дела: банковские сотрудники могут найти себя в финтехе, биологи — в биоинформатике, архитекторы — в разработке ПО для умных домов.
  • Пол IT-специалиста вообще не важен — нельзя сказать, что у мужчин есть преимущество перед женщинами, и наоборот.

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

  • например, видеокурс CS50 Гарвардского университета доступен на русском языке — это 23 лекции по основам программирования, которые заменят вам первый курс университета.
  • во всех программах Яндекс.Практикума можно пройти бесплатный вводный курс — за 20 часов можно определиться, подходит ли вам профессия, и продолжить обучение с наставником.

Что самое важное для начинающего разработчика

  1. Будьте последовательным — сначала «набейте руку» на простых задачах (делайте их каждый день, чтобы довести до автоматизма), а затем переходите к более сложным.
  2. Ответы на все ваши вопросы есть в профессиональных сообществах, на специализированных сайтах — научитесь задавать запросы поисковым системам, чтобы быстро находить желаемое.
  3. Не бойтесь спрашивать, если что-то непонятно, — но перед тем как задать вопрос, убедитесь, что ответа на него в открытых источниках нет.
  4. Учитесь задавать вопросы — коллегам, единомышленникам, наставнику. Действительно полезный совет можно получить только в ответ на четко сформулированный вопрос.
  5. Пожалуй, самое важное — выбрать IT-специализацию. Критерии выбора могут быть разными: востребованность профессии, уровень заработной платы, перспективы на ближайшие несколько лет, но самое главное — ваш интерес к выбранной сфере.

Как подойти к выбору специализации и направления?

Веб-разработка — пожалуй, самое популярная и понятная новичкам специализация в IT. Если вам пока кажутся сложными профессии DevOps-инженера, data scientist, Python-разработчика, выбирайте именно веб-разработку.

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

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

По данным исследования HeadHunter и «Яндекс.Практикума», фронтенд-разработчики — самые желанные среди работодателей, и спрос на них продолжает расти: за 2020-2020 годы количество вакансий выросло на 20%. Средняя медианная зарплата новичков в этом направлении — 45 тысяч рублей. Фулстек-разработчики менее популярны, но доля вакансий для них выросла за это же время в два раза, а средняя медианная зарплата на стартовой позиции составила 63 200 рублей.

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

С чего стоит начать погружение в сферу и свое обучение?

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

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

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

Что нужно знать и уметь, чтобы получить должность джуниора

Джуниор-разработчик — начальный уровень IT-специалиста. Это отличная возможность стартовать в профессии: новичков не бросят в беде старшие коллеги, поэтому опыт можно получить очень быстро, но важно продолжать развиваться, осваивая новые навыки и технологии.

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

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

Как искать первую работу в IT

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

Вливайтесь в сообщество: ходите на митапы, лекции, хакатоны. Знакомьтесь с людьми из индустрии. Возможно, свою первую работу вы найдете именно так.

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

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

Фото в материале и на обложке: Unsplash

Нашли опечатку? Выделите текст и нажмите Ctrl + Enter

17 выражений, которые понимают только айтишники

Забукать, дропнуть, задеплоить. Мы разобрались, какие английские слова надо знать, чтобы понимать сленг айтишников, — вместе с онлайн-школой Skyeng. В конце статьи ищите бонус.

1. Заасайнить таск

Означает всего лишь «поручить задание». Фраза произошла от английских слов to assign — назначать, поручать и task — задача. В ИТ‑сфере речь обычно идёт о распределении рабочих дел между сотрудниками в специальной программе‑менеджере.

  • Пример употребления:Коллеги, на меня ничего не асайнить, уже вагон тасков в работе.

2. Дебажить код

Дебажить — это антоним к слову «бодяжить». Шутка! «Дебажить» значит проверять программный код на ошибки. Разработчик запускает режим отладки и ищет «баги», от английского bug — технический дефект. Кстати, ещё bug означает «жук» и «жучок» (для прослушивания). Соответственно, глагол to debug — избавиться от дефектов.

  • Пример употребления:Если в том таске надо ещё и дебажить — на меня точно не асайнить!

3. Зарелизить/задеплоить

Термины происходят от английских слов to release — выпускать и to deploy — приводить в действие, разворачивать. В ИТ‑сфере эти слова часто употребляются как синонимы и означают выпуск новой версии программы. Но некоторые специалисты их различают: «зарелизить» применяется, когда программа начинает быть доступна пользователям, а «задеплоить» — когда она переходит в любую другую среду, например переносится в тестовую систему или на другой сервер.

  • Пример употребления:
    — Уже зарелизили новую программу?
    — Ещё нет, пока только задеплоили в тест и ждём ответа.

4. Зааджастить прогу

«Прога» говорят не только айтишники, но на всякий случай уточним, что это сокращение от слова «программа». «Зааджастить» возникло от глагола to adjust — приводить в порядок, регулировать. Айтишники говорят так, когда нужно немного поменять логику программы, слегка что‑то донастроить.

  • Пример употребления:Клиент прислал новые требования, нужно зааджастить прогу.

5. Зафейлить/зафакапить

Fail и fuck up — это что‑то типа русского слова «косяк» разной степени интенсивности. Зафейлить — не справиться с чем‑то, совершить ошибку. Зафакапить — полностью провалить что‑то, например вообще не прислать выполненную задачу к сроку.

  • Пример употребления:Мы уже профакапили все сроки, а в проге ещё куча багов!

6. Черрипикнуть хотфикс

Хотфикс — это прямая транслитерация слова hotfix. Hot — горячий или горящий по срокам, fix — исправление, починка. Например, когда в программе обнаружился баг, который сильно всё ломает, — нужно его молниеносно починить, то есть сделать хотфикс. Чтобы применить только новые изменения, не трогая остальных частей программы, есть операция cherry pick — что‑то типа выборочного переноса.

  • Пример употребления:Черрипикните уже этот хотфикс, иначе нас всех уволят!

7. Тэдэшка

Это милое слово происходит от аббревиатуры TD, которая расшифровывается как technical documentation. Это документ, где описаны логика и функциональность программы. Неудивительно, что айтишники сократили название: было бы жутко неудобно каждый раз говорить «техническая документация».

  • Пример употребления:Мы не виноваты, что клиенту не нравится. Этих требований не было в тэдэшке.

8. Отревьюить доку/код

Глагол to review значит «оставлять рецензию», а загадочная «дока» — это всего лишь документ. «Отревьюить доку» может значить оставить комментарии в общем документе или просто дать своё мнение по поводу него. Ещё айтишники часто говорят «отревьюить код». Это когда опытные программеры смотрят разработки новичков.

  • Пример употребления:Я жутко нервничаю, завтра мой код будет ревьюить вся команда.

9. Дрова полетели

Речь идёт не о летающих досках, а о сломавшихся программах. «Дрова» — это drivers, или драйверы. В корне слова английский глагол to drive, что, помимо известного всем «водить», означает ещё и «управлять». Так называют программное обеспечение, которое управляет другими устройствами. Например, чтобы ваш компьютер мог работать с принтером, нужно установить специальные драйверы. Но если вдруг они «полетят» — всё перестанет работать.

  • Пример употребления:У меня весь экран в битых пикселях, похоже, дрова видеокарты полетели.

10. Апликуха

После метаморфоз в русских офисах это слово точно не узнают британцы, хотя изначально оно английское. Application — это приложение. Ещё приложения называют эппами, тоже от английского сокращения app.

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

11. Забэкапить

Жизнь этому слову дал английский глагол to back up — делать резервную копию. Кстати, это не только удел айтишников, вы и сами наверняка много раз бэкапили информацию. Например, когда записывали важные фотографии на внешний жёсткий диск, боясь, что они пропадут, если компьютер сломается.

  • Пример употребления:Вноси изменения в прогу, только не забудь забэкапить прошлую версию.

12. Кракозябры

Нечитаемый набор символов. Например, когда при запуске программы на экран выводится какая‑то бессмыслица из математических знаков и случайных букв. Есть мнение, что на это слово повлияло английское crack — разлом, трещина. Другие говорят, что это смесь «крокодила» и «зебры».

  • Пример употребления:Открываю твою программу, а там кракозябры. Проверь кодировку.

13. Имплементить

Произошло от английского to implement — внедрять, осуществлять. Так программисты говорят о реализации какого‑то функционала. По сути, это всего лишь синоним глагола «делать».

  • Пример употребления:Сегодня не успею всё заимплементить, доделаю завтра.

14. Пушить

И снова английский глагол. To push означает не только «толкать», но и «заставлять, принуждать». Так говорят, когда на кого‑то давят, чтобы, например, ускорить работу.

  • Пример употребления:
    — Программа уже готова? Время идёт!
    — Вот только не надо меня пушить!

15. Дропнуть базу

To drop — уронить или прекратить что‑то делать. Но в ИТ‑сленге речь обычно идёт об удалении. Если слышите выражение «дропнуть базу», знайте, что эти люди собираются удалить базу данных.

  • Пример употребления:Давайте дропнем старую базу, что она зря место занимает.

16. Забукать

Никак не связано с запоем. Слово происходит от to book — бронировать. Айтишники букают комнаты для переговоров или авиабилеты. Кстати, программисты из немецких компаний говорят «забухать» (с ударением на «у»). Это от немецкого глагола buchen (бухен), который тоже значит «бронировать».

  • Пример употребления:Забукайте переговорку на час, надо обсудить новую тэдэшку.

17. Батон/батончик

Спросите обычного человечка, какие бывают батоны, и он скажет: столичный, нарезной, к завтраку. Спросите айтишника, и, скорее всего, в первую очередь он подумает про радиобатоны и пуш‑батоны. Дело в том, что на ИТ‑сленге батонами называют кнопки. Разумеется, от английского button — кнопка. Некоторые говорят ближе к оригиналу — «б а ттон», а другие попросту называют кнопки батончиками.

  • Пример употребления:Надо передвинуть этот батончик, юзеры жалуются, что кнопку не видно.

Мы тут зашифровали ещё парочку фраз из сленга программистов на обложке��. Угадывайте и пишите в комментариях. Знаете другие айтишные словечки? Добавляйте их тоже!

Топ-15 «плюшек», которые особо ценят айтишники

Согласно исследованию рынка труда в США от сайта Glassdoor, 79 процентов сотрудников предпочтут новые бонусы от работодателя повышению заработной платы, сообщает компания в своём блоге.

Женщины в большей степени интересуются подобным способом мотивации труда, чем мужчины (82 процента против 76, соответственно). Справедливо и то, что более молодые сотрудники в большей степени предрасположены к мотивации бонусами, чем их опытные коллеги. По мере увеличения возраста процент предпочитающих бонусы снижается: если в возрастной группе от 18 до 34 лет таких 89 процентов, то среди работников старше 55 лет уже 66 процентов.

Cозданная Wagepoint инфографика рассказывает о наиболее популярных «плюшках» в американских компаниях, многие из которых представляют именно ИТ-индустрию.

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

Среди самых необычных способов поощрения выделены коучинг (так, работники Asana имеют возможность проконсультироваться по поводу профессиональной и личной жизни со специалистом), бонус за рождение ребёнка (Facebook заплатит вам $4 тысячи за это радостной событие), деньги на путешествия (сотрудники Airbnb имеют возможность потратить $2 тысячи на проживание, заказанное с помощью сервиса)

Цукерберг рекомендует:  Material.io - Как подключить Material.io к Angular 6

Adobe предоставляет сотрудникам дополнительную неделю отпуска каждое лето и зиму — офисы компании просто закрываются на это время. Наконец, Salesforce оплачивает 6 дней волонтёрства и даёт дополнительный благотворительный бонус в $1 тысячу за использование всех таких дней.

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

Есть ли в вашей компании необычные способы мотивации, которые вам нравятся (или наоборот — приводят в бешенство)? Расскажите о них в комментариях!

10 английских слов из типичного сленга айтишников. Гуманитарии поймут не сразу!

В обычной жизни разработчики, вопреки стереотипам, неплохие собеседники. Они увлекаются вполне понятными вещами: бегом, настолками, футболом и песнями под гитару. Но стоит послушать их профессиональные разговоры, как сразу чувствуешь себя иностранцем. SM попросил компанию Positive Technologies собрать топ-10 слов, которыми их программисты пользуются каждый день.

1. Workaround

Это обходное, временное решение в коде. На техническом жаргоне — «костыль» ( crutch). Напоминает запаску, которую используют в большом внедорожнике, чтобы доехать до шиномонтажа, причем сделанную из ашановской тележки. Такие решения иногда приживаются надолго и потом мешают развивать продукт. В тяжелых случаях говорят о целом «шалаше из костылей». У нас в компании такие шалаши не любят.

2. Commit

Похожую операцию делает игрок в Doom (и многие другие компьютерные игры) перед встречей с опасным монстром. Термин «закоммитить» означает сохранить, зафиксировать изменения в программном коде. Человек, который выполняет это сохранение, называется коммитер.

3. Wiki

Тут все просто — это корпоративная «Википедия». Типичная фраза между коллегами: «Посмотри на вики». Общаться и делиться знаниями здесь могут все сотрудники, но на практике гуманитарии заглядывают сюда редко. Это царство программистов и тестировщиков компании. Они используют вики, чтобы контролировать и обсуждать процесс разработки продуктов.

4. GitHub

Это известный проект для размещения исходных текстов программ. Он нужен, чтобы контролировать версии и разрабатывать продукт всем вместе. Хранилище внешнее, оно доступно для всех, а коммерческий код там хранится платно. Поэтому в Positive Technologies используется внутреннее хранилище кода GitLab, закрытое от посторонних глаз. Здесь лежат схемы, документация, код программ.

5. PoC

Одно из любимых словечек у программистов и исследователей. Означает доказательство концепции, proof of concept. Если концепция говорит о падении бутерброда маслом вниз, ее можно доказать логически, математически или провести живой эксперимент. Успешный результат назовут PoC.

Еще одно популярное у разрабов выражение из трех слов — low hanging fruit («низко висящий фрукт»). Оно употребляется, когда кто-то не утруждает себя новыми концепциями, а идет проторенной дорожкой.

6. DevOps

Слияние слов development («развитие») и operations («операции»). Так неформально называют отдел автоматизации в компании. Цель этого отдела — донести полезные изменения в продуктах до заказчика за кратчайшее время и с наименьшими затратами.

DevOps — это еще и общее название лучших методологий для разработки. Пять лет назад они позволили компании Amazon осуществлять тысячи развертываний в день. Возможно, именно это помогло интернет-магазину добиться капитализации в один триллион долларов.

7. Build

Разработчики так и произносят — «билд». И речь в данном случае идет не о немецком таблоиде Bild.de, а о конечном результате компиляции программы. Правильный перевод — «сборка». После нее из исходного кода чаще всего получается скомпилированный и скомпонованный файл, который готов к использованию.

8. Staging

Инсценировка реальных условий, чтобы проверить работу программы и найти возможные ошибки. Похоже на генеральную репетицию в театре, когда в зал уже пытаются посадить зрителей (программу подключают к базам данных). Если стейджинг прошел успешно, следующий этап — продакшн ( production), то есть развертывание у заказчика.

9. Deploy

Представим автозавод: сначала автомобиль билдят, собирая на заводе из различных деталей. Потом машину доставляют покупателю. Деплой — это процесс доставки кода приложения на конечный сервер (тестовый или боевой).

10. Bottleneck

Узкое место в системе или программе, по-русски — «бутылочное горлышко». Согласно теории ограничений Элияху Голдратта, если постоянно искать такие места в приложении или в системе организации труда, это поможет совершенствовать продукты и быстрее их выпускать.

Еще больше интересных слов из сленга программистов можно узнать на онлайн-занятиях в Skyeng. Школа подбирает преподавателей под ваши цели — например, можете учить лексику из сферы IT и разбирать вместе сериал «Кремниевая долина» (Silicon Valley). Записаться на бесплатный урок можно в два клика по этой ссылке. Удачного саморазвития!

Какие бывают виды программистов? Виды деятельности программиста

Представьте себе постапокалиптическую картину мира без программистов. Драконы из «Игры престолов» превратятся в черно-белых Годзилл. Исчезнут чаты, мессенджеры и даже тетриса не будет. Мы нуждаемся в программистах. Они пишут коды для смартфонов, компьютеров и стиральных машин, заставляя технику работать. Но это далеко не все. У профессии много направлений и специализаций, каждая из которых имеет свои особенности и сложности, зарплата также зависит от того, чем занимается программист.

Web-разработчик

Самым востребованным на 2020 год видом профессии «программист» является веб-разработчик. К этой категории относятся специалисты по созданию сайтов.

Условно веб-мастера делятся на три группы:

  • разработчик Frontend;
  • Backend-программист;
  • Fullstack-девелопер.

Далеко не все знают, что такое клиентская и серверная часть. Поэтому работодатели зачастую путают специализации в веб-разработке. На биржах фриланса встречаются объявления, в которых наниматели от фронтенд-мастера требуют знания фулстак, при этом платят как за обыкновенную верстку.

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

Кто такой фронтенд-разработчик?

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

Фронтенд разработчики – это вид программистов, отвечающих за создание виджетов, кнопок, выпадающего меню, слайд-шоу. Все интерактивные элементы появляются на страницах благодаря им. Они пишут скрипты на JS, включают их через HTML-теги и следят за тем, чтобы каждая часть кода работала правильно.

Инструменты фронтенд-разработчика

Писать код на HTML, CSS и JavaScript не достаточно. Чтобы оставаться конкурентоспособным на рынке труда, Frontend-разработчик должен знать следующее:

  1. jQuery. Библиотека JavaScript с коллекцией плагинов и расширений. Вместо того чтобы писать код с нуля, jQuery позволяет добавлять и настраивать готовые элементы. Например, автозаполнение форм, слайд-панель, таймер, связанная анимация.
  2. Фреймворки Bootstrap, Foundation, Backbone, AngularJS и EmberJS. Это программные оболочки повышающие производительность ресурса. Предоставляют готовый дизайн и существенно облегчают жизнь разработчика.
  3. Препроцессоры SASS и LESS. Добавляют CSS функциональности, обрабатывает код, превращая его в отформатированный и кросс-браузерный CSS.
  4. Популярные CMS — адаптивная верстка и кросс-платформенность.

Обязанности и виды деятельности программиста включают отладку и тестирование клиентской части. Веб-инженер проверяет отдельные блоки исходного кода на ошибки. Тестирует интерфейс, узнает, насколько пользователям будет удобно взаимодействовать с приложением. Также фронтенд-специалист должен разбираться в азах серверного программирования, технологиях Node.js, помимо JS писать на PHP и SQL.

Зарплата и перспективы

Средний оклад мастера составляет 66 тысяч 410 рублей в месяц. В США эта сумма вырастает до 102 тысяч долларов в год. Высокие зарплаты, легкость языка разметки и написания скриптов привлекает начинающих кодеров к фронтенд-разработке. Освоив JS, большинство из них переходит к серверным языкам. Самые талантливые учат высокоуровневые C и Java, постепенно осваивают геймдев, создание приложений и другие виды информационной деятельности программиста.

Программист серверной части

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

Программист серверной части – это следующая эволюционная ступень после фронтенд-разработчика. Его задача заставить сервер, приложение и БД взаимодействовать. Пишет на серверных языках PHP, Ruby, Python, Java и .Net. В качестве инструментов для работы с данными использует MySQL, Oracle и SQL Server. В описаниях вакансии работодатели часто указывают дополнительные требования:

  • знание фреймворков PHP: Zend, Symfony и CakePHP;
  • опыт работы с программным обеспечением контроля версий SVN, CVS или Git;
  • навыки работы с операционными системами Linux, Unix, MacOS X и Windows Server.

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

Разработчик Fullstack

Это вид работы программиста, включающий в себя все этапы создания веб-приложения. Fullstack developer –мастер на все руки, пишущий одновременно клиентскую и серверную часть. Первые упоминания о профессии появились в 2010 году после статьи сотрудника Facebook Карлоса Буэно. С этого момента компания нанимает работников исключительно уровня Fullstack.

Обязанности универсального веб-программиста:

  1. Серверное администрирование. Подключение через терминал к удаленным серверам без GUI. Управление пользовательскими группами, брандмауэрами, программами Apache и Nginx. Фулстак-программист должен все знать об облачном хостинге на платформах Heroku, Google Cloud, Azure, AWS и любых других.
  2. Создание бэкенда и базы данных. Специалист должен разбираться в базах данных MySQL, PostgreSQL, а также БД noSQL: MongoDB, Redis или Cassandra. Иметь представление о графовых СУБД, таких как Neo4j.
  3. Фронтенд-разработка и дизайн. Помимо стандартных обязанностей, верстки и подключения JS, Fullstack-мастер проектирует макет в редакторах Photoshop или Illustrator.

Фулстак-разработчики – это специалисты уровня Senior Developer. За ними охотятся хедхантеры и у них самые высокие оклады. В США зарплата Fullstack Developer начинается от 70-80 тысяч долларов и от 25-30 тысяч долларов в странах Восточной Европы. На иностранных биржах фриланса, например Upwork, один час работы Fullstack-разработчика оценивается в 30$ и выше.

Специалист по созданию и разработке компьютерных игр

Разработка компьютерных игр – одна из самых быстроразвивающихся сфер ИТ-технологий. По данным аналитического агентства NewZoo объем рынка видеоигр с каждым годом увеличивается на 9%. Если в 2020 году он составил почти 100 миллиардов долларов, то к 2020 году эта сумма увеличится до 112.5 миллиардов. Поэтому «инженер видеоигр» – это перспективная и высокооплачиваемая должность.

Инженер, или Game-разработчик – общее название категории специалистов, задействованных в процессе создания игры. Главная задача – превратить идею в программный код и заставить все элементы взаимодействовать. 90% рабочего времени программисты пишут и отлаживают алгоритмы на языке C++, Visual Basic, Java и MEL.

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

Какие бывают виды программистов игр?

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

  • Ведущий программист по звуку: пишет утилиты, чтобы аудио и видео эффекты сочетались.
  • Разработчик игрового движка.
  • Специалист UI или создатель графического интерфейса.
  • Инженер искусственного интеллекта для имитации логики и принятия персонажами решений, особенно в играх, где от игрока зависят действия противника.
  • Программист геймплея: стратегия игры, реализация механики и логики.
  • Инженер устройств ввода. Пишет код для джойстиков, клавиатуры, мышки и устройств, с помощью которых пользователь будет взаимодействовать с видеоигрой.
  • Программист коммуникационных сетей для многопользовательских игр.

За свой труд на благо игровой индустрии данный вид программистов получает зарплату от 60 тысяч рублей. Доход инди-разработчиков точно просчитать сложно. Есть случаи, когда успешные проекты приносили миллионы буквально за неделю. Например, игра-хит Punch Club, Angry Birds и всем известная «Майнкрафт». Существуют, конечно, провальные задумки наподобие Scroll Ninja, не оправдавших ожидания создателей.

Системный программист

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

Разрабатывается программное обеспечение под различные операционные системы, включая серверные Unix и Windows Server, а также мобильные платформы. Код пишется на языках «Си», за редким исключением Assembler. Основная задача системного инженера заключается в установке, настройке, тестировании ОС и всех ее компонентов

Различные виды профессии «программист» требуют от специалиста определенных навыков, опыта работы и уровня владения компьютерными языками. Но труд именно системных инженеров является самым сложным. Для создания ПО нужны углубленные знания информатики, алгебры, математики и построения алгоритмов.

Системный программист необходим в любой сфере ИТ, включая автоматизацию процессов производства и мониторинг безопасности. В США за труд специалиста готовы платить от 87 до 104 тысяч долларов. В Англии 57 тысяч фунтов стерлингов, в России 90 тысяч рублей.

Инженер прикладного программного обеспечения

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

Работа прикладного инженера заключается в написании кода, его последующей компиляции, отладке и тестировании. Иногда специалист обновляет или вносит изменения в уже существующее ПО. Для программирования использует высокоуровневые языки Java, C#, C++, Python, PHP. Прикладные программисты редко трудятся в одиночку. В основном, они являются участниками стартапов, или входят в штат сотрудников компании, занимающейся разработкой компьютерного софта.

«Программист» – интересная и разнообразная профессия с множеством направлений и специализаций. Одни делают виджеты для сайтов и проектируют API, другие пишут код для серверов или корпят над графикой Disciples III. Каждый, кто любит программировать, может реализовать себя в веб-разработке, стать именитым создателем игр или писать программы для спутников НАСА.

Сервисы для соискателей

Продвижение резюме

Доверьте составление резюме профессионалам!

Узнайте какой вы специалист и добейтесь большего

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

Отправьте свое резюме в ведущие кадровые агентства

Отправьте свое резюме в компанию мечты

Образование и консультации

Как набрать команду айтишников: нестандартные способы

В стремлении найти нужного ИТ-специалиста рекрутеры часто вынуждены прибегать к нестандартным методам — иногда удачным, иногда не очень. Расскажем про находки и провалы.

Не надо так: когда креатив не привлечет, а оттолкнет

  1. Использование сайтов и приложений для знакомств. Периодически HR-конференции раскрывают кейсы успешного найма с помощью Tinder. Однако сами кандидаты относятся к такого рода вторжениям скорее негативно. Рассказывает Алена Никонова, HR-директор компании Mamba: «Если посмотреть статистику по пользователям нашего сервиса — у нас очень много одиноких людей. А если посмотреть еще и статистику платежей, то станет понятно, что эти люди готовы платить довольно много, чтобы найти своего человека. Лично мне не хотелось бы, чтобы мне писали не потому, что мои глаза запали в душу, а потому, что хотят предложить работу. Ни для кого не секрет, что ИТ-специалисту ничего не стоит найти работу, если такое желание у него возникнет. Регистрируясь на сервисе для знакомств, он преследует другие цели. А для нас, как для платформы, любые предложения от сетевых продаж до работы являются спамом. Каждый день мы блокируем огромное количество анкет за спам, наверняка в их числе есть и рекрутеры».
  2. Спам-рассылка. «Я уже привык к тому, что мой ящик сообщений забит однотипными предложениями рассмотреть «работу в офигенной команде». Рекрутеров не смущает то, что их предложения я перерос 3–5 лет назад», — делится Филипп, старший фронтенд-разработчик. Массовая рассылка сообщений, написанных как под копирку, скорее оттолкнет потенциального кандидата, чем привлечет его внимание.
  3. Манипуляция родными. Недавно в закрытом HR-чате менеджер по персоналу интересовался группами в социальных сетях, где общаются жены разработчиков. Он хотел анонсировать там вакансию с переездом на Кипр. Итогами этой попытки менеджер не поделился, однако, по мнению самих опрошенных ИТ-специалистов, это неэтичное поведение.

Нестандартные способы, которые действительно работают

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

  1. Бесплатные тесты на знание технологий. Мало кто любит тестовые задания при отборе на работу. Совсем другое дело — возможность проверить себя между делом, просто ради интереса. Зная эту особенность, продвинутые работодатели создают интересные тесты для программистов. По итогам тестирования можно позвать на интервью тех, кто набрал нужное количество баллов. Такой способ использует, например, компания Mamba для поиска программистов PHP. Рассказывает Алена Никонова: «Мы придумали тест больше 10 лет назад и с тех пор адаптируем его под каждую новую версию языка. Любой пользователь может пройти тест, чтобы определить, насколько он крутой программист PHP. По ответам на 37 вопросов приложение выдает результат в баллах и присваивает статус, начиная от «Вы не программист» и до «Вы суперкрутой программист». Сначала это был онлайн-тест на нашей корпоративной странице, но постепенно он стал одним из наиболее популярных инструментов Рунета для дистанционной оценки разработчиков. Мы приглашаем только тех кандидатов, которые набрали по итогам теста свыше 280 баллов. Таких, к сожалению, мало».
    Если позволяет бюджет, можно организовать креативное мероприятие — одновременно азартное и развлекательное. Например, компания «МТС» в 2020 году провела соревнование по программированию фонтанов — МТС Fountain Challenge. Участники конкурса должны были написать код, который заставил бы главный фонтан Краснодара «танцевать» под выбранную конкурсантами музыку. Мероприятие завершилось шоу, на котором жителям города продемонстрировали результаты работы финалистов и объявили победителей. О соревновании узнали более 3 млн человек, более 2 тысяч человек приняли участие в шоу, компания получила больше 150 целевых контактов потенциальных стажеров и ИТ-специалистов. Этот проект стал одним из победителей Премии HR-бренд-2020.
  2. Карьерное консультирование. Работа с ИТ-специалистами — это игра вдолгую. Кандидат, который не прошел ваш отбор год назад, может за год очень заметно вырасти в компетенциях и навыках. Не теряйте с ним связь. Это полезно и по еще одной причине: сохранив хорошую связь с соискателем, можно попросить его порекомендовать кого-то из коллег и знакомых из ИТ-мира.
    Как установить такие полезные отношения с кандидатами? Находите время давать им развернутую обратную связь и полезные рекомендации:
    «Чтобы привлечь внимание ИТ-специалиста, вместо того чтобы преследовать его баннерами, контекстной рекламой, ходить за ним на митапы и конференции, встречать у выхода из офиса и «мэтчить» в «Тиндере», можно просто поговорить с ним о его ожиданиях от карьеры, выяснить, что ему интересно и постараться ему это дать, — рассказывает Кира Кузьменко, основатель рекрутинговой компании New.HR — Что получает ИТ-специалист, когда мы начинаем с ним работать? Прежде всего мы обсуждаем его личную мотивацию и проговариваем, ради чего он готов менять текущее место работы. Зная это, мы стараемся подобрать максимально релевантную вакансию либо честно говорим, что сейчас ничего подобного нет. Кроме того, мы охотно делимся своей экспертизой и рассказываем, какая сейчас ситуация на рынке, делимся инсайдами о работе в разных компаниях, обсуждаем, сколько сейчас платят специалистам и что конкретно можно сделать, чтобы платили больше».
  3. Привлечение джуниоров. Некоторые компании сознательно не рассматривают кандидатов без внушительного опыта. Их мотивация понятна — некогда учить, сроки спринтов короткие, время на адаптацию минимальное.
    Но не секрет, что готовых опытных ИТ-специалистов на рынке мало и конкурировать за их «благосклонность» очень тяжело. Поэтому многие ИТ-компании стараются растить ценные кадры самостоятельно.
    «Примерно 40% нашей команды мы «вырастили» со студенческой скамьи, когда ребята учились на математическом факультете и факультете информатики и вычислительной техники в Ярославском государственном университете имени П. Г. Демидова, — рассказывает Александр Юров, заместитель генерального директора компании «Фогсофт». — За талантливых студентов можно и побороться. Поэтому наряду с другими крупными ИТ-компаниями региона (головной офис «Фогсофт» базируется в Ярославле) мы проводим для студентов конкурсы, участвуем в совместных мероприятиях, приглашаем на стажировку — довольно активно участвуем в их жизни».
    Еще один пример — от ИТ-компании «ЦРТ». Для привлечения в R&D-центр специалистов по машинному обучению компания организовала двухнедельную серию лекций российских и зарубежных экспертов и 10-дневный практический интенсив для студентов. Заявки на участие подали 1011 человек из России и Республики Беларусь, по итогам тестового задания отобрали 36 лучших студентов, после обучения 14 из них получили приглашение в команду «ЦРТ» — на работу либо на более длительную стажировку. Этот кейс тоже получил одну из наград Премии HR-бренд-2020.
  4. Работа с лидерами мнений.Ежегодное исследование американской консалтинговой компании Edelman показывает, что обычному рядовому работнику по вопросу об атмосфере внутри компании доверяют в два раза больше, чем генеральному директору этой компании. Как использовать этот факт? Организовывайте у себя в офисе небольшие митапы или хакатоны на темы, актуальные для ИТ-специалистов, помогите тимлидам и экспертам подготовиться к выступлениям. При должной организации вы соберете людей из ИТ-индустрии. Это может стать первым шагом к формированию общества лояльных вашей компании ИТ-экспертов.

Как описать вакансию для ИТ-специалистов

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

Например, наивно пытаться привлечь кандидата пятидневной рабочей неделей, «плюшками и кофе», «дружным коллективом». Основные блоки, на которые важно обратить внимание, — это хорошее описание продукта, над которым работает команда, основные технологии, используемые методологии, особенности команды, возможности для обучения, конкретные условия работы. Попросите сотрудников вашей ИТ-команды дать оценку вакансии — всё ли понятно, какие моменты требуют уточнения? Используйте этот подход даже при повторном размещении вакансии.

«Опишите в вакансии текущий проект: какие проблемы в нем сейчас есть, какие планируется решить, как построен процесс работы, как устроена команда — кто ставит задачи, есть ли CustDev, — советует Егор Яценко, сооснователь кадрового агентства Wanted Profi. — У человека должно сложиться правильное понимание, какие у команды сейчас челенджи и планы, как устроен процесс. Небольшой компании с типовым описанием вакансии сложно выделиться, а соискателям из ИТ трудно понять, какой им интерес туда идти».

Давать ли кандидатам тестовое задание? Решать, конечно, вам. Понятно, что хочется убедиться в навыках соискателя перед тем, как приглашать его в команду. Но, по словам Егора Яценко, реальность сейчас такова, что ИТ-специалисты выбирают, заниматься ли им тестовым заданием или принять один из трех офферов, которые получил без всяких тестовых заданий.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих