Елена Булыгина предлагает Вам запомнить сайт «Ленусик»
Вы хотите запомнить сайт «Ленусик»?
Да Нет
×
Прогноз погоды

Основная статья: Java

Приключения бравого джависта в поисках пропитания

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

Предыстория

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

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

Учиться программированию предстояло с нуля, при этом надо было на что-то жить. Я устроился в транспортную компанию системным администратором и записался на курсы Java-разработки в GeekBrains. Почему Java? Потому что этот курс стартовал раньше других! Мне хотелось скорее начать программировать, а на чём — без разницы. Я даже не знал, что Java и JS — разные языки. 

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

Чтобы прийти в Java, надо сначала отвергнуть Java

Работу я начал искать сразу по окончании второй четверти в GeekBrains: открыл HeadHunter, ввёл запрос «Java» и выбрал город Волгоград. Сайт выдал всего 16 вакансий, половина из которых… про JavaScript. «Это фиаско, братан!» — отозвался внутренний голос. Ах да, все вакансии были уровня Middle и Senior, кроме одной — «разработчик ABAP» с зарплатой 15 000 рублей. Мол, переучим с любого языка на суперперспективный, бла-бла-бла.

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

Про английский и людей

На моё резюме откликнулась компания-аутсорсер, которая тестирует игры. Это крупная контора с головным офисом в Праге и филиалами в Москве и Питере. Мне предложили посмотреть вакансию QA-инженера. В требованиях был английский, и я сразу предупредил — не владею. HR ответил, что это не критично и не обязательно. Затем мне прислали тестовое задание, которое я выполнил и показал своему преподавателю Александру Фисунову. Он посоветовал, как упростить и структурировать код — получилось шикарно. В компании посмотрели, сказали: «О, класс! Приходи на интервью». Пришёл, поговорил с тимлидом QA-инженеров и ещё с двумя людьми, ответил на вопросы по Java. «Неплохо! — говорят они. — А что у вас с английским?» — «Частично понимаю, но не говорю». — «Ну ладно».

Дальше было Skype-интервью с руководителем питерского филиала: «В принципе, меня всё устраивает! А как у вас с английским?». Я повторил свой ответ. «Ладно, мы вам позвоним». Затем — ещё одно телефонное интервью с двумя руководителями и тот же финал. Так продолжалось месяц. В итоге HR сообщил, что меня не взяли. «Почему?» — «У тебя плохой английский». Я спокойный человек, но тогда высказал всё, что думал. Ведь я с самого начала предупреждал о своём английском! А в итоге потратил несколько дней жизни на пустые разговоры.

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

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

В регионах не выбирают

Считаю, что в регионах надо браться за любую работу: через полгода-год у тебя будет совсем другое резюме, и ты сможешь найти лучшие варианты. Конечно, если ты в Москве, Питере, Екатеринбурге, Воронеже или Краснодаре, можно привередничать. Но когда у тебя на весь город несколько вакансий — не до жиру. Зато с опытом ты сможешь устроиться в приличную компанию удалённо или переехать в Москву.

Замахнуться на два языка (нет)

Теоретических знаний после курсов мне хватало, чтобы проходить собеседования: интервьюеры сами не всегда представляли, о чём спрашивать, а тестовые задания помогли набить руку. Я понял, что за неделю активных раскопок на StackOverflow можно написать что угодно. Сложнее решать задачи на самих собеседованиях, но и к этому можно подготовиться. А вот когда речь заходит о деньгах и опыте, новичку приходится трудно.

В компаниях, где я проходил собеседования на позиции уровня Middle, мне часто отвечали: «Приходите через годик». Не все говорят так открыто — некоторые начинают срезать тебя издевательскими вопросами: «Как называется такой-то метод в Spring? А сякой-то?». Причём интервьюеры тушуются, когда отвечаешь: «Ребята, вас в гугле забанили? Дайте мне компьютер, и я скажу, как называется метод, а заодно покажу, как его использовать». Ещё могут спросить, как относишься к переработкам. Я честно говорю, что время для меня — самый дорогой ресурс, и дарить его я не собираюсь.

За полгода я прошёл с десяток интервью и получил один оффер от компании, которая предлагала всё те же 15 000 рублей в месяц с возможной прибавкой — не раньше, чем через год. Я, конечно, был готов к скромному заработку в первое время, но на такие деньги мне не прожить физически! 

Потом знакомый, который в Европе работает архитектором C#, протолкнул меня на собеседование в хорошую контору. У них собирался увольняться инженер автоматизированного тестирования, и я вышел на стажировку. Работал по часу в день. Стажировка закончилась, и-и-и… инженер не уволился :)

Затем в той же компании мне предложили заняться разработкой на C#. Для начала выдали сложное тестовое задание по SQL, и я от скуки делал его две недели, пока ждал увольнения инженера. В итоге я сам отказался от позиции: решил не браться за новый язык, пока не освою Java, ибо за обучение «уплочено». Параллельно осваивать два языка — это слишком, особенно для новичка. Сейчас-то я понимаю, что надо было не выделываться и согласиться на позицию разработчика С#. Но это лишь начало истории.

Пришёл февраль 2019 года. Директор конторы, куда меня приглашали автотестировщиком, решил мне помочь: обзвонил несколько IT-компаний и сказал, что годный парень ищет работу по Java. На следующий день я пошёл на собеседование в EAE-Consult. Там я ответил на общие вопросы и решил простенькую задачку по SQL. Мне сказали, что подхожу, но есть нюанс... У них не Java, а C# :) Засада! Однако я тогда ещё недостаточно отчаялся и отказал им. До мая собеседований не было вообще. Я продолжал откликаться на всё подряд. Переделал резюме, как советовала специалист GeekBrains по трудоустройству, и стучался в разные IT-конторы.

Тестовое с подвохом

Ещё был очень поучительный опыт с элементарным, на первый взгляд, тестовым заданием, которое оказалось с подвохом. Как-то раз я написал в LinkedIn тимлиду команды, где набирали Java-разработчиков. Он ответил, что джунов они уже набрали, остались вакансии мидлов, но я могу попробовать. Надо было на чистом Java написать консольное приложение, которое предлагало бы пользователю ввести любые числа, а на выходе показывало MIN, MAX и среднее значение. Была ещё хитрая приписка: «Неопытный программист должен понять, как работает твоё приложение, а злой программист не должен его сломать».

Я написал программку за десять минут, покрыл её подробными комментариями и обернул защитным кодом, где проверял типы входных значений и ловил исключения. Казалось, я предусмотрел абсолютно всё. В итоге тимлид «уронил» мою программу одной командой. Как? Он ввёл два максимальных для типа значения, так что произошло переполнение и расчёт выдал «–1». Это было очень поучительно! Кстати, нас на занятиях предупреждали о переполнении типа, но я тогда не придал этому значения. Что тут скажешь? Оставалось только улыбнуться, поблагодарить за опыт и пойти читать «Effective Java».

И вот однажды в выдаче hh.ru я нашёл вакансию «стажёр C#» со вкусной зарплатой и примечанием, что вместо «шарпа» кандидат может знать схожий строго типизированный язык. Я откликнулся с ленцой, даже без сопроводительного письма, и забыл об этом варианте. Но через пару недель прилетело тестовое задание со словами «Cделай, как сможешь, а не сможешь — напиши, где затык». Там было простенькое приложение: API на .NET и мобильная реализация на Xamarin.

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

«Что ж, похоже, С# — это моя судьба», — подумал я и написал эйчару вышеупомянутой EAE-Consult. Меня опять пригласили на интервью и уже почти взяли на работу, но... Вдруг раздался звонок с незнакомого номера и человек, который представился моим новым начальником, сказал, что отбил меня у «шарпистов», потому что у него появилась вакансия джависта!

Если бы не Java :) 

Вы можете сказать, что мне следовало изучить местный рынок и выбрать другой язык программирования. Но дело не совсем в этом. У нас экономически слабый регион с низким уровнем жизни, поэтому, какой язык ни учи, перспективы придётся искать в местах с крупным IT-кластером. Даже если ты освоишь повсеместно востребованный JavaScript, в Волгограде тебе предложат делать сайтики за 20 000 рублей в месяц. К тому же у всех разные склонности и интересы: у меня, например, нет дизайнерских задатков и чувства стиля, с которыми можно расти во фронтенде. Мне больше нравится заниматься серверной частью. 

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

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

Первая работа и перспективы

Итак, я устроился в EAE-Consult и стал единственным Java-разработчиком компании в Волгограде — коллеги по команде общаются со мной из Москвы. Я сразу оценил хорошо оборудованный офис, приятный коллектив, неплохую для нашего города зарплату.

Рабочий хаос :)

Я начал работать над расширением функций IBM MDM и использовал технологию, которая даже на StackOverflow не представлена. Поначалу пришлось очень тяжело. Во-первых, за повседневными задачами я не видел общей картины. Во-вторых, мне не хватало обратной связи по коду. А мне важно, чтобы мой код внимательно разбирали, критиковали и отправляли на доработку с указанием, что улучшить. Во время учёбы в GeekBrains я часто советовался с преподавателем Александром Фисуновым, и он умел объяснить, что хорошо, а что плохо. Теперь же надо было развиваться без наставника. Кстати, сейчас мне в этом помогает книга «Effective Java» — чтиво очень сложное, но и интересное!

Сейчас я уже полностью адаптировался в компании. С 2020 года перехожу на новый проект с очень современным стеком (микроcервисы, GraphQL). Кстати, мы ищем .NET-разработчиков. Если чувствуете в себе силы, присылайте резюме на почту svetlana.medova@eaeconsult.ru.

Важно ли иметь портфолио?

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

Считаю, портфолио нужно самому программисту, а рекрутерам достаточно знать, что оно есть. Я слежу за статистикой своего репозитория на GitHub и вижу, что работодатели туда не заглядывают, — за исключением случаев, когда я отправлял тимлидам прямые ссылки на конкретные проекты. Если учесть, что я прошёл десятки собеседований, можно сделать вывод: при трудоустройстве на портфолио не смотрят — разве что у вас в запасе будет решение, близкое к тому, что нужно заказчику.

Итоги и советы

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

Во фронтенде, может быть, чем больше технологий ты освоил — тем ты круче. А в Java, если ты настроен на суровый Enterprise (работу в банках и крупных консалтинговых агентствах), поможет только погружение в коммерческие проекты. У меня поиск работы затянулся, но могу сказать, что всё основное на курсах я изучил в первые две четверти. Хотя дальше тоже были полезные вещи, было важно вместе с их изучением повторять старый материал.

Коммерческая разработка в любом случае отличается от учебных проектов. Пока нет «боевого» опыта, многие вещи можно понять, но не запомнить. С 1990-х годов Java оброс множеством фреймворков и библиотек, поэтому осваивать этот язык надо так: изучаешь Java Core, базовые принципы, алгоритмы, SQL — и идёшь работать.

Ещё очень важно умение читать код. Когда берёшься за новый проект, 50 % времени уходит на то, чтобы разобраться в сделанном до тебя, ещё 40 % — на документирование своего кода и всего 10 % — на программирование. Это только в фильмах про хакеров от быстрого ввода команд происходят чудеса. 

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

Перед собеседованием полезно загуглить примеры частых вопросов и заданий на собеседованиях по вашему направлению. Многие работодатели сами берут эти вопросы из интернета. Например, меня в трёх разных местах спрашивали, чем интерфейс в Java отличается от абстрактного класса. Тут не обязательно вдаваться в философию — от вас ждут такого ответа: «После Java 8 — ничем не отличается». Технический интервьюер просто хочет убедиться, что вы любознательны и читаете правильные актуальные источники.

Хотите узнать больше о выпускниках Java-факультета GeekBrains? Вот их истории:

Пройти обучение

9 дек 19, 15:32
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Быстрый старт с Java: пишем «крестики-нолики»

Перед прочтением данной статьи рекомендую ознакомиться с предыдущей, «Быстрый старт с Java: начало», поскольку ожидается, что читатель владеет материалом, изложенным в ней — знает о переменных, условиях, циклах и импорте классов. Сегодня мы углублим знания о Java, создавая игру «Крестики-нолики», которая работает в командной строке (консоли). В процессе будет рассмотрена работа с массивами, а также некоторые аспекты объектно-ориентированного программирования (нестатические методы, нестатические поля, конструктор).

Массивы

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

В Java массивы являются объектами, их создают с помощью директивы new. При создании указываем количество элементов массива или инициализируем его набором значений. Приведенный код иллюстрирует оба варианта:

class Arrays {
    public static void main(String[] args) {
        int[] arr = new int[5];
        int[] arrInit = {1, 2, 3, 4, 5};
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i * 2 + arrInit[i];
        }
        for (int a : arr) {
            System.out.println(a);
        }
    }
}

С элементами массива можно работать как с обычными переменными, присваивая им результат выражения и читая хранимые значения. При этом в квадратных скобках указывается индекс элемента массива. Индексация в Java идёт с 0 (с нуля). Первый цикл инициализирует элементы массива arr при помощи значений из массива arrInit. Каждый массив имеет поле length, содержащее количество его элементов. Второй цикл выводит элементы массива в консоль, используя второй вариант for  без счётчика цикла.

Методы

Кроме main() класс может содержать и другие методы. Рассмотрим в качестве примера класс с методом add(), который вычисляет и возвращает сумму двух значений, переданных как параметры. Обратите внимание на тип int, который стоит перед именем метода — это тип возвращаемого значения. Две переменные в скобках — параметры. Совокупность имени и параметров называют сигнатурой метода. Вызов метода происходит по имени, в скобках указывают передаваемые значения. В методе они попадают в параметры-переменные. Команда return возвращает результат сложения этих двух переменных и обеспечивает выход из метода.

class MethodStatic {
    public static void main(String[] args) {
        int c = add(5, 6);
        System.out.println("5 + 6 = " + c);
    }
 
    static int add(int a, int b) {
        return a + b;
    }
}

Слово static означает, что метод статический. Если мы обращается к какому-либо методу из статического метода, то вызываемый тоже должен быть статическим. Вот почему add() статический — он вызывается из статического main(). Использование статических методов — скорее исключение, чем правило, поэтому давайте посмотрим как сделать add() нестатическим.

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

class MethodNotStatic {
    public static void main(String[] args) {
        MethodNotStatic method = new MethodNotStatic();
        int c = method.add(5, 6);
        System.out.println("5 + 6 = " + c);
    }
 
    int add(int a, int b) {
        return a + b;
    }
}

Поля класса

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

class FieldExample {
    int a;
 
    public static void main(String[] args) {
        FieldExample field = new FieldExample();
        field.a = 12;
        System.out.println("a = " + field.a);
        System.out.println(field.getA());
        field.printA();
    }
 
    int getA() {
        return a;
    }
 
    void printA() {
        System.out.println(a);
    }
}

Приведённый выше код иллюстрирует работу с нестатическим полем int a. Описание полей принято размещать первыми в коде класса, затем идут описания методов. Возможность обращаться к полю (запись, чтение) мы получаем только после создания объекта. Также видно, что это поле доступно во всех нестатических методах объекта, а в статическом main() — через точку после имени объекта.

Крестики-нолики. Шаблон класса

Приступим к написанию кода игры. Начнём с шаблона класса и определения нужных полей. Именно это содержит приведённый ниже код. Первые две строки — импорт классов. Первыми в теле класса идут описания полей, затем методов. Метод main() используется для создания объекта (так как поля и методы нестатические) и вызова метода game() с игровой логикой.

import java.util.Random;
import java.util.Scanner;
 
class TicTacToe {
    final char SIGN_X = 'x';
    final char SIGN_O = 'o';
    final char SIGN_EMPTY = '.';
    char[][] table;
    Random random;
    Scanner scanner;
 
    public static void main(String[] args) {
        new TicTacToe().game();
    }
 
    TicTacToe() {
        // конструктор: инициализация полей
    }
 
    void game() {
        // игровая логика
    }
 
    // дополнительные методы
}

В качестве полей используем три символьные константы: SIGN_X, SIGN_O и SIGN_EMPTY. Их значения нельзя изменять, об этом говорит модификатор final. Двумерный символьный массив table будет нашим игровым полем. Потребуется также объект random для генерации ходов компьютера и scanner для ввода данных от пользователя.

Имена методов принято писать с маленькой буквы. Однако в коде мы видим метод TicTacToe() — есть ли тут нарушение? Нет, поскольку этот метод особенный и в объектно-ориентированном программировании называется конструктор. Конструктор вызывается сразу после того, как объект создан. Его имя, как видим, должно совпадать с именем класса. Мы используем конструктор для инициализации полей.

TicTacToe() {
    random = new Random();
    scanner = new Scanner(System.in);
    table = new char[3][3];
}

Игровая логика

Игровая логика располагается в методе game() и базируется на бесконечном цикле while. Ниже в фрагменте кода последовательность действий описана через комментарии:

// инициализация таблицы
while (true) {
    // ход человека
    // проверка: если победа человека или ничья:
    //    сообщить и выйти из цикла
    // ход компьютера
    // проверка: если победа компьютера или ничья:
    //    сообщить и выйти из цикла
}

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

void game() {
    initTable();
    while (true) {
        turnHuman();
        if (checkWin(SIGN_X)) {
            System.out.println("YOU WIN!");
            break;
        }
        if (isTableFull()) {
            System.out.println("Sorry, DRAW!");
            break;
        }
        turnAI();
        printTable();
        if (checkWin(SIGN_O)) {
            System.out.println("AI WIN!");
            break;
        }
        if (isTableFull()) {
            System.out.println("Sorry, DRAW!");
            break;
        }
    }
    System.out.println("GAME OVER.");
    printTable();
}

Реализация вспомогательных методов

Пришло время написать код методов, вызываемых в game(). Самый первый, initTable(), обеспечивает начальную инициализацию игровой таблицы, заполняя её ячейки «пустыми» символами. Внешний цикл, со счетчиком int row, выбирает строки, а внутренний, со счётчиком int col, перебирает ячейки в каждой строке.

 
void initTable() {
    for (int row = 0; row < 3; row++)
        for (int col = 0; col < 3; col++)
            table[row][col] = SIGN_EMPTY;
}

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

void printTable() {
    for (int row = 0; row < 3; row++) {
        for (int col = 0; col < 3; col++)
            System.out.print(table[row][col] + " ");
        System.out.println();
    }
}

В методе turnHuman(), который позволяет пользователю сделать ход, мы используем метод nextInt() объекта scanner, чтобы прочитать два целых числа (координаты ячейки) с консоли. Обратите внимание как используется цикл do-while: запрос координат повторяется в случае, если пользователь укажет координаты невалидной ячейки (ячейка таблицы занята или не существует). Если с ячейкой всё в порядке, туда заносится символ SIGN_X — «крестик».

void turnHuman() {
    int x, y;
    do {
        System.out.println("Enter X and Y (1..3):");
        x = scanner.nextInt() - 1;
        y = scanner.nextInt() - 1;
    } while (!isCellValid(x, y));
    table[y][x] = SIGN_X;
}

Валидность ячейки определяет метод isCellValid(). Он возвращает логическое значение: true — если ячейка свободна и существует, false — если ячейка занята или указаны ошибочные координаты.

boolean isCellValid(int x, int y) {
    if (x < 0 || y < 0 || x >= 3|| y >= 3)
        return false;
    return table[y][x] == SIGN_EMPTY;
}

Метод turnAI() похож на метод turnHuman() использованием цикла do-while. Только координат ячейки не считываются с консоли, а генерируются случайно, при помощи метода nextInt(3) объекта random. Число 3, передающееся как параметр, является ограничителем. Таким образом, генерируются случайные целые числа от 0 до 2 (в рамках индексов массива игровой таблицы). И метод isCellValid() снова позволяет нам выбрать только свободные ячейки для занесения в них знака SIGN_O — «нолика».

void turnAI() {
    int x, y;
    do {
        x = random.nextInt(3);
        y = random.nextInt(3);
    } while (!isCellValid(x, y));
    table[y][x] = SIGN_O;
}

Осталось дописать два последних метода — проверка победы и проверка на ничью. Метод checkWin() проверяет игровую таблицу на «победную тройку» — три одинаковых знака подряд, по вертикали или горизонтали (в цикле), а также по двум диагоналям. Проверяемый знак указан как параметр char dot, за счёт чего метод универсален - можно проверять победу и по «крестикам» и по «ноликам». В случае победы возвращается булевское значение true, в противном случае — false.

boolean checkWin(char dot) {
    for (int i = 0; i < 3; i++)
        if ((table[i][0] == dot && table[i][1] == dot &&
                         table[i][2] == dot) ||
                (table[0][i] == dot && table[1][i] == dot &&
                                  table[2][i] == dot))
            return true;
        if ((table[0][0] == dot && table[1][1] == dot &&
                  table[2][2] == dot) ||
                    (table[2][0] == dot && table[1][1] == dot &&
                      table[0][2] == dot))
            return true;
    return false;
}

Метод isTableFull() во вложенном двойном цикле проходит по всем ячейкам игровой таблицы и, если они все заняты, возвращает true. Если хотя бы одна ячейка ещё свободна, возвращается false.

boolean isTableFull() {
    for (int row = 0; row < 3; row++)
        for (int col = 0; col < 3; col++)
            if (table[row][col] == SIGN_EMPTY)
                return false;
    return true;
}

Теперь осталось собрать все эти методы внутри TicTacToe. Последовательность их расположения в теле класса не важна. А после этого можно попробовать сыграть с компьютером в крестики-нолики.

Заключение

На всякий случай прилагаю мой telegram — @biblelamp. Если вас заинтересовала тема, рекомендую почитать «Java-программирование для начинающих» Майка МакГрата и «Изучаем Java» Кэти Сьерра и Берт Бейтс. Также напоминаю ссылку на мою предыдущую статью, где мы начали знакомство с Java.

Если язык Java вас заинтересовал — приглашаем на факультет Java-разработки. Если ещё не совсем уверены — посмотрите истории успеха наших Java-выпускников:

Пройти обучение

28 ноя 19, 11:13
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Быстрый старт с Java: от знакомства до вашей первой игры 

Эта статья рассчитана на новичков в программировании. Её цель — объяснить азы языка Java (классы, методы, компиляция, байт-код, JVM, переменные, условия, циклы, импорт). Этот материал поможет:

  • научиться писать код, компилировать и запускать байт-код;
  • познакомиться с переменными;
  • узнать об условных операторах и циклах;
  • освоить использование классов из стандартных пакетов;
  • написать простую консольную игру «Угадай число».

Java Development Kit (JDK)

Для работы с Java необходимо скачать, установить и настроить Java Development Kit (JDK) — пакет программ и утилит для разработчика. Он бесплатно предоставляется компанией Oracle.
В строку поиска Google вводим запрос “jdk 8 download” и в первой же строке поисковой выдачи видим ссылку на страницу загрузки на oracle.com. Листаем вниз, щёлкаем Accept License Agreement — соглашаемся с лицензией. Выбираем пакет в колонке Download, который соответствует вашей операционной системе и её разрядности (32 или 64 бита). Для скачивания нужно будет зарегистрироваться на сайте. Скачиваем и устанавливаем JDK. При выборе пакетов и папки JDK рекомендую отказаться от Public JRE и сократить имя папки до jdk1.8.

Счастливым обладателям Windows потребуется также настройка системных переменных. Как их найти: Панель управления → Система → Дополнительные параметры системы → Вкладка «Дополнительно» → кнопка «Переменные среды», второе окошко сверху. В нем надо создать переменную JAVA_HOME и изменить (дополнить) Path (для этого используются кнопки «Создать» и «Изменить». Значение для переменной JAVA_HOME содержит путь к папке JDK. Переменную Path дополняем значением %JAVA_HOME%\bin. Обратите внимание, что список путей разделяется точкой с запятой (;). Инструкция есть также на сайте Oracle.

JDK содержит много утилит, но нам потребуется только компилятор (javac) и виртуальная машина Java — JVM (java).

Проверить правильность установки и настройки можно в командной строке (на Windows: Win + R → cmd) или в терминале (Linux, Mac), набрав следующие команды:

javac -version
java -version

В качестве альтернативы можно использовать онлайн-JDK вместе с редактором, например на сайте Repl.it.

Написание кода

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

Для Windows хорошим выбором будет Notepad++ с плагином NppExec. Подробно о его настройке можно прочитать в статье Виктора Темпалова  «Компилируем и запускаем Java-файлы из Notepad++». Для Linux и Мас есть другие текстовые редакторы, например Atom или Sublime Text.

Hello, world!

При изучении нового языка писать программу, выводящую «Hello, world!», — это традиция. Она возникла в 1978 году, с выходом в свет книги «Язык программирования С» Брайана Кернигана и Денниса Ричи.

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

Код начинается с ключевого слова class. Java-программы состоят из классов — это «кирпичики» приложения. В реальных приложениях их могут быть десятки, сотни и тысячи. Затем пишется имя класса — HelloWorld. Имена классов принято писать в стиле CamelCase (все слова слитно, каждое с заглавной буквы). Классам, как и другим сущностям — методам, полям и переменным — рекомендуется давать мнемонические, «говорящие» имена.

После имени в фигурных скобках записывается тело класса. Оно может содержать поля, методы и другие классы. Поля хранят данные. Они подобны переменным, однако в Java это несколько иная сущность. Методы содержат набор команд или код. Имена методов (как и полей, переменных) принято писать в стиле camelCase, со строчной буквы.

В нашем классе только один метод — main(). Он особенный, его часто называют стартовым. Когда виртуальная машина Java получает класс для исполнения, она ищет в нём метод main. Если находит — выполняет код, который содержит метод. Если нет — выдаёт сообщение об ошибке. Важно, чтобы метод main() имел строго определённую сигнатуру: был публичным (public), статическим (static), не возвращающим никакого значения (void), с параметром в виде массива строк (String[] args). В противном случае виртуальная машина его просто не найдёт.

Наш метод main() содержит лишь одну строку, которая выводит в консоль текст "Hello, world!".

Перед компиляцией сохраняем написанный код в файл. Имя файла должно соответствовать имени класса с точностью до регистра символов (Java — регистрозависимый язык). Затем открываем командную строку (или терминал) и вызываем сначала компилятор (javac), а потом виртуальную машину JVM (java).

C:\Users\User>javac HelloWorld.java
C:\Users\User>java HelloWorld
Hello, world!

После компиляции возникнет бинарный файл HelloWorld.class, содержащий байт-код. Имя этого файла (без расширения) передаётся как параметр при вызове виртуальной машины. В результате видим строку «Hello, world!» — это результат выполнения программы.

Переменные

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

  • запись значения в переменную (или присвоение значения);
  • чтение значения из переменной. 

В Java перед использованием переменную нужно обязательно объявить, указав тип и имя, поскольку Java — язык со строгой и статической типизацией. Попытка использовать переменную без объявления приведёт к ошибке компиляции. По типу переменные могут быть простыми (числа, символы, логические значения) или ссылочными (массивы, строки, любые другие объекты). В Java есть восемь простых типов (byte, int, short, long, float, double, boolean, char) и бесконечное количество ссылочных.

В примере ниже мы видим объявление двух переменных целого типа (int). Причём переменная second инициируется при объявлении. Затем переменной first присваивается результат выражения, в котором присутствует переменная second. В результате выполнения программы в консоль будут выведены значения обеих переменных: 35 и 10.

class Variables {
    public static void main(String[] args) {
        int first;
        int second = 10;
        first = second * 3 + 5;
        System.out.println(first);
        System.out.println(second);
    }
}

Имя переменной может содержать буквы и цифры, знак подчёркивания и $. Имя не должно начинаться с цифры. В профессиональной разработке в именах переменных используют только буквы. Имя должно явно указывать на назначение переменной. Например: countString — счётчик строк, errorSign — признак ошибки. Рекомендуется избегать однобуквенных имён — за исключением временных переменных (существующих в рамках цикла или небольшого кодового блока).

Проверка условий

Любой язык программирования высокого уровня позволяет изменять порядок выполнения программы в зависимости от заданного условия. В Java для этого используется конструкция if. После этого ключевого слова в скобках записывается логическое выражение, затем в фигурных скобках — группа команд. Если результат логического выражения — true (истина), то эта группа команд выполняется, если false (ложь) — нет.

class ComparisonShort {
    public static void main(String[] args) {
        int i = 10;
        if (i == 10) {
            System.out.println("i = 10");
        }
    }
}

Результат этого примера — строка “i = 10” в консоли, так как результат логического выражения (проверка на равенство) будет true.

В качестве знаков сравнения допустимы: <, <=, >, >=, ==, !=. Добавив ключевое слово else, получаем полную форму оператора сравнения.

class ComparisonFull {
    public static void main(String[] args) {
        int i = 10 + 2;
        if (i == 10) {
            System.out.println("i = 10");
        } else {
            System.out.println("i != 10");
        }
    }
}

Выполнив эту программу, мы увидим в консоли сообщение “i != 10”, так как результат сравнения значения переменной i и цифры 10 будет false. Поэтому выполнится набор команд в фигурных скобках после слова else.

Циклы

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

  • с определённым количеством итераций: for;
  • без определенного количества итераций: while и do-while.
class CycleFor {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
        }
    }
}

Запустив этот пример, мы увидим в консоли колонку чисел от 0 до 4. Это результат работы классического цикла for со счётчиком. В круглых скобках три параметра цикла, разделённые точкой с запятой: объявление и инициализация счётчика, проверка условия продолжения цикла, действие после каждой итерации. В фигурных скобках — тело цикла. В нашем случае это команда, выводящая значение счётчика i в консоль.

Когда будем писать игру, используем циклы while и do-while — там и увидим их работу на практике. Пока достаточно сказать, что их синтаксис проще for, а тело цикла повторяется до тех пор, пока логическое выражение в круглых скобках после while возвращает true.

Пример ниже иллюстрирует вторую форму цикла for — без счётчика. Такой вариант удобен при переборе элементов массива или списка.

class CycleForeach {
    public static void main(String[] args) {
        int[] arr = {5, 4, 3, 2, 1};
        for (int a : arr) {
            System.out.println(a);
        }
    }
}

Импорт и использование классов

Один из важных принципов программирования — DRY: Don’t Repeat Youself (не повторяйся). Разработчик должен уметь использовать то, уже создано, отлажено и работает.

Java поставляется с набором packages (пакетов). Они содержат скомпилированные классы, сгруппированные по тематике. На неё указывает имя пакета: java.io, java.util, java.net и так далее.

В игре нам потребуется случайное число от 0 до 9. Писать генератор случайных чисел незачем, так как в пакете java.util есть готовый класс Random. Чтобы использовать класс из пакета, его нужно импортировать. Строки с директивами импорта располагаются в самом начале файла класса.

import java.util.Random;

Создадим объект на основании класса, чтобы можно было вызвать нужный метод. Слева от знака присваивания (=) объявляем ссылочную переменную (объект) random типа Random. Справа создаём объект с помощью директивы new.

Random random = new Random();

Вызываем метод через точку после имени объекта: random.nextInt(10). Цифра 10 ограничивает диапазон генерируемых чисел (от 0 до 9). В результате получим строку из 30 случайных чисел. Запустите программу несколько раз и обратите внимание, что последовательность чисел не повторяется.

import java.util.Random;
 
class RandomInt {
    public static void main(String[] args) {
        Random random = new Random();
        for (int i = 0; i < 30; i++) {
            System.out.print(random.nextInt(10) + " ");
        }
    }
}

Игра «Угадай число»

Мы узнали достаточно, чтобы написать игру «Угадай число». В ней компьютер «загадывает» целое число от 0 до 9, а человек должен угадать его — есть три попытки.

Создадим класс GuessTheNumber с методом main(), импортируем нужные нам классы и добавим соответствующие объекты. Класс Scanner обеспечит чтение чисел с консоли (System.in — консоль).

import java.util.Scanner;
import java.util.Random;
 
class GuessTheNumber {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
    }
}

Объявим и инициируем три переменные: счётчик попыток count, для чтения числа с консоли — guess, для хранения загаданного числа — number.

int count = 0;
int guess = -1; 
int number = random.nextInt(10);

Опишем основной игровой цикл, используя while. В цикле запрашиваем число с консоли, сравниваем с загаданным. В случае несовпадения выводим подсказку и увеличиваем счётчик попыток на 1.

while (count < 3 && guess != number) {
    System.out.print("Guess the number (0..9): ");
    guess = sc.nextInt();
    if (number != guess) {
        System.out.println("Your number is " +
            ((guess > number)? "greater" : "less"));
        count++;
    }
}

Тело цикла while повторяется, пока логическое значение в скобках возвращает true. Таким образом наш цикл будет повторяться, пока значение счётчика попыток меньше 3 и число не отгадано. Обратите внимание на конструкцию, которая позволяет выбрать одно из двух значений согласно условию в скобках. Это тернарный оператор. Если условие в скобках true, то возвращается значение слева от двоеточия, если false — справа.

(guess > number)? "greater" : "less"

Остаётся добавить строку с выводом результата игры (победа или проигрыш) после цикла — тут снова используется тернарный оператор. Текст работающей программы выглядит так:

import java.util.Scanner;
import java.util.Random;
 
class GuessTheNumber {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
        int count = 0;
        int guess = -1;
        int number = random.nextInt(10);
        while (count < 3 && guess != number) {
            System.out.print("Guess the number (0..9): ");
            guess = sc.nextInt();
            if (number != guess) {
                System.out.println("Your number is " +
                    ((guess > number)? "greater" : "less"));
                count++;
            }
        }
        System.out.println("You " +
            ((guess == number)? "WIN!" : "Lose: " + number));
    }
}

Сохраняем программу в файл GuessTheNumber.java, компилируем (javac), вызываем JVM (java) — и пробуем выиграть у компьютера.

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

import java.util.Random;
import java.util.Scanner;
 
class GuessTheNumber {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
        do {
            //
            // Вставьте фрагмент, который должен повторяться
            //
            System.out.println("Repeat game? Yes - 1, No - 0");
        } while (sc.nextInt() == 1);
    }
}

Обратите внимание, что тело цикла do-while повторяется на тех же условиях, что и тело цикла while: логическое выражение в скобках должно быть true.

Заключение

На всякий случай прилагаю мой telegram — @biblelamp. Если вас заинтересовала тема, рекомендую почитать «Java-программирование для начинающих» Майка МакГрата и «Изучаем Java» Кэти Сьерра и Берт Бейтс. В следующих статьях мы продолжим начальное изучение Java на примере создания других игр. Следите за блогом!

Если язык Java вас заинтересовал — приглашаем на факультет Java-разработки. Если ещё не совсем уверены — посмотрите истории успеха наших Java-выпускников:

Пройти обучение

15 ноя 19, 16:33
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Тренды среди языков программирования в 2019 году

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

Популярные языки программирования

Начнём с традиционно популярных языков, Как известно, любой распространенный язык имеет в запасе минимум 10 лет, чтобы специалисты в нём оставались востребованными на рынке.
Согласно рейтингам авторитетного портала PYPL, основывающихся на популярности поисковых запросах Google в разных странах, самым востребованным языком сегодня является Python. Он обошёл Java ещё летом прошлого года, и количество запросов с тех пор увеличилось на 4,5%.

По версии портала TIOBE, учитывающего не только Google, а все поисковые системы, первое место давно и уверенно удерживает как раз Java. При этом статистика этого портала подтверждает, что языки живут в противофазе: Java за год потерял 0,9%, в то время как Python набрал 1,93 пункта.

Известная софтверная компания JetBrains на своём официальном сайте опросила 7 тысяч разработчиков. Результаты следующие: JavaScript первый, на втором месте Java (оставим HTML/CSS и SQL за скобками), на третьем Python. При этом у Python вновь лучший прирост аудитории за год — 9 %.

Вот что о феномене Python говорит преподаватель факультета искусственного интеллекта GeekUniversity Сергей Ширкин:

«Python очень прост в освоении – можно быть новичком в программировании и уже писать на нём рабочие программы. В своё время это подошло Data Science, потому что большую часть контингента в этой сфере составляли математики и физики, но не профессиональные программисты. В итоге самые популярные библиотеки для работы с большими данными – на Python.

Единственное, что ограничивает язык – низкая скорость работы программ, особенно если мы сравниваем с C/C++. При этом в Python есть такие библиотеки, как numpy, которая, благодаря тому, что часть кода написана на C и Fortran, почти не уступают в производительности.

Сейчас Python проникает в область квантовых вычислений и квантового машинного обучения. Сейчас уже для этого есть библиотеки Qiskit, Cirq, PennyLane, дальше – больше. Здесь уже скорость исполнения программ на Python не важна, ведь все операции проходят на квантовом компьютере, быстродействие которого на порядки выше».

Языки программирования «второго эшелона»

При взгляде на рейтинг PYPL также бросается в глаза взлёт Kotlin: четыре позиции за год и итоговое 12 место.  Пользователи на сайте JetBrains отдали языку 9 место. Причин взлёта две.

Первая — это обновление языка в конце лета. Тогда были устранены многие проблемы и расширена функциональность, с сопутствующим введением всех новых фичей в IntelliJ IDEA – популярнейшую среду программирования. Вторая причина — в прошлом году язык Kotlin получил статус предпочтительного для разработки Android-приложений.

Вот что думает об этом декан факультета Android-разработки GeekUniversity Александр Аникин:

«Если в прошлом году Kotlin стал предпочтительным для Android, то в этом, по сути, главным. Теперь весь новый код, библиотеки, обновления и примеры будут писаться разработчиками платформы на Kotlin. Для этого есть 3 основные причины:

  • Юридический уход от Java. Не секрет, что Oracle в последние годы всё больше ограничивает бесплатное использование Java, что больше всего, пожалуй, затрагивает Android.
  • Полная взаимозаменяемость языков. Можно легко перейти с одного языка на другой не изменив ни строчки кода.
  • Kotlin = Java 2.0. Это современный язык, имеющий те же возможности, что и родитель, но улучшенный с учётом текущих тенденций.

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

Другой заметный язык – Rust, который также выделяется в рейтинге PYPL. Год назад мы узнали о том, что это один из самых любимых языков у посетителей портала Stack Overflow. Rust очень медленными шагами идёт к замещению C/C++ в клиентских и серверных веб-приложениях. Этим он обязан популярному формату инструкций для виртуальной машины WebAssembly, поддерживающему все три вышеназванных языка.

Кроме того, он поддерживает и Go — язык к которому также стоит присмотреться. Согласно JetBrains, у Go ожидается самый большой прирост популярности в ближайшие 12 месяцев.

Менее распространенные языки программирования

У языков программирования, не входящих в топы рейтингов, очень сложно оценить потенциал. Количество поисковых запросов, как правило, плохо отражает реальность – из-за низких цифр в статистику вмешивается специфика региона и местных компаний. Из тех, на которые стоит обратить внимание гикам (а больше это, пожалуй, никому и не надо): Elixir, Dart и Ballerina.

Если о первых двух вы наверняка что-то слышали и читали, — а Dart даже многие успели похоронить — то о последнем стоит сказать чуть подробнее. Ballerina – это молодой и крайне интересный язык. Его синтаксис — комбинация из Java, Python, JavaScript и Go, со статической типизацией. Основные операции имеют привычный вид, поэтому на обучение не уйдёт много времени. Но куда интересней в Ballerina другое — направленность на интеграцию. В современном вебе, где постоянно взаимодействуют сотни серверов и сервисов, ценность языков с модулями, легко обеспечивающими это, крайне высока. Как альтернативу Ballerina можно взять на заметку Pulumi и Dark – будущее веба без языков инфраструктуры невозможно.

Однако, несмотря на все прелести и перспективы этих языков, браться за их изучение новичкам не следует – лишь представителей первого и отчасти второго разделов стоит рассматривать как фундамент современного программиста. Знание Elixir, Dart, Ballerina или Pulumi поможет понять, что у любой задачи есть множество решений.

Подробней об изучении разных языков программирования можно почитать на страницах факультетов Geekbrains — Python, Go, Java, а также веб-, iOS-, Android-разработки. Удачного выбора!

Пройти обучение

13 ноя 19, 12:36
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

«Иногда за сутки я спал один час в метро перед работой»

Решиться на перемены

Мой папа был военным, и мы много ездили по бывшему СССР. Он служил в звании подполковника, в должности заместителя начальника штаба мотострелковой дивизии в Забайкальском военном округе. Когда папа вышел в отставку, нам предложили поселиться в Пинске, в Беларуси, — там мы и остались.

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

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

В маленьком городе мне не хватало возможностей для самореализации. Я учился в академии на инженера, работал в типографии дизайнером, параллельно преподавал компьютерную графику у отца на курсах — но всегда знал, что способен на большее. В 2009 году мне позвонила переехавшая в Москву сестра и сказала, что у нее на работе открылась вакансия инженера. На вопрос, когда я смогу приехать на собеседование, я без раздумий ответил: «Завтра!». В 8 утра пришел на работу, уволился, и уже в час дня с двумя тысячами рублей в кармане сел на поезд в Москву.

Сделать первый шаг в разработке

Так я устроился в компанию «Секундочка» — это большая сеть мастерских по изготовлению ключей и ремонту обуви. Я занимался кассовым оборудованием, ездил по всей Москве. Работа шла отлично, начальство было довольно — но я стал осознавать, что застрял.

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

Я перевелся в Минский университет на специальность инженера-программиста и перешел в компанию «Интегратор ИТ», где работал специалистом по внедрению CRM-системы. Нужно было писать документацию, внедрять ПО, помогать в его настройке и обучении персонала.

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

В компании во мне видели управленца, но я сказал, что буду расти в веб-разработке. И вскоре нашел место в «Региональном банке развития». К этому времени я уже защитил диплом в Минске. В банке я стал работать php-разработчиком и делать сайты на платформе «Битрикс». Я многого не знал, но не боялся трудностей, и руководитель в меня поверил. Углубленно изучал язык и сопутствующие технологии: каскадные таблицы стилей, JavaScript, гипертекстовую разметку, конфигурацию веб-окружения и многое другое — работы был непочатый край. Иногда за целые сутки я спал один час в метро перед работой

В интернете в начале 2010-х информации по программированию было мало. Очень помог форум hashcode.ru, где специалисты разбирали практические задачи. Сначала меня минусовали, когда я просто вываливал на людей свою проблему, но со временем пришло понимание, как грамотно задавать вопросы, чтобы получить ценные советы и подсказки.

Я пробивался наверх прямо как в фильме «Москва слезам не верит». Семьи тогда не было, поэтому я не заморачивался, работал днями и ночами. Иногда за целые сутки мог час поспать в метро перед работой. Я понимал, что мне надо догонять, что я опоздал. В Москве и тогда было много программистов, которые владели передовыми технологиями. Нужно было бежать вперед, не щадя себя.

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

Начать управлять командой

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

Сначала доходило до смешного. В первый день мне сказали: «Вот компьютер — подключайся, клонируй исходный код, сейчас мы тебе задач накидаем». Какой код, куда и кого клонировать? Я понял, что вообще ничего не знаю.

Я снова начал учиться: среды разработки, новые веб-серверы. Поработал около года, и мне предложили должность руководителя интернет-магазина бытовой техники DomProm.ru. Это было очень круто — заниматься одним из самых высоконагруженных интернет-магазинов техники в Рунете. 

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

Но потом обстоятельства для компании сложились неудачно и она обанкротилась. Я перешел в ПЭК, где нужно было собрать команду и разработать сайт. Через некоторое время меня с аналогичным запросом откровенно «схантили» в «АльфаСтрахование» — я давно хотел попасть в крупную компанию. Когда все задачи по созданию портала и других проектов были решены и все заработало, мне стало скучно. 

И тогда я пошел на курсы GeekBrains изучать язык Java и систематизировать знания (пару лет до этого я уже учился здесь на системного администратора).

Мое стремление к новым вызовам удалось вполне удовлетворить, когда меня пригласили ведущим разработчиком в Объединение независимых учебных заведений Universal University. На позиции тимлида удалось применить знание и PHP, и Java.

Сейчас с командой мы занимаемся разработкой и поддержкой бизнес-процессов интернет- и интранет-проектов UU на платформе 1С-Bitrix (сайты, CRM и порталы), тестированием новых сервисов.

Наш стек технологий отчасти типичен для веб-разработки, но многое зависит от языка: для PHP один, для Java другой. Технологии для создания инфраструктуры выбираю в зависимости от принципов архитектуры будущего приложения, основываясь на best practices.

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

Выбирать языки и технологии

Почему Java? Чтобы ответить на этот вопрос, можно просто перечислить, какие известные и популярные приложения разработаны на этом языке. Просто загляните в Google Play, и все станет понятно. Java внедряется повсеместно и решает любые задачи.

Вообще, чтобы изучить новый язык, нужно время и большой труд. Людям, далеким от программирования, возможно, представляется, что разработчик может сегодня на PHP покодить, завтра — на Java, а послезавтра на Python. Увы, это не так. Ты должен стать очень узким специалистом и, кроме собственно языка, изучить огромный стек сопутствующих технологий. 

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

В интернете информации по алгоритмам не найти. Можно, конечно, взяться за фундаментальное «Искусство программирования» Дональда Кнута, но эта задача под силу единицам: три тома по тысяче страниц. Реальная возможность изучить такую сложную тему — образовательные курсы, если их организуют профессионалы и ведут практикующие специалисты.

Учиться нон-стоп 

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

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

Организуйте время так, чтобы участвовать в занятиях и отводить два-три часа в выходные на разбор и закрепление материала. Делайте это рано утром, и тогда останется еще целый день на отдых и общение с семьей. Учитесь и в дороге: общественный транспорт — отличный карман времени. В среднем москвич добирается до работы минимум час, а это как раз одна лекция на онлайн-курсах.

Как договориться с семьей и объяснить, зачем нужна вся эта учеба нон-стоп? Обычно у меня занят весь будний день — сначала работой, потом обучением. Я нашел такой выход: даю и жене возможность развиваться. Сейчас она учится на курсах дизайна, мы растем вместе и лучше понимаем друг друга.

Кайфовать

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

По правде говоря, я никогда не любил мотоциклы — считал их опасными. Пока однажды у коллеги не увидел чоппер Yamaha Drag Star 400 Custom: сначала оценил внешний вид, а потом сел на этот байк и понял, что влюбился. Записался в мотошколу и два года назад купил свой свой первый мотоцикл Yamaha Drag Star 400 Classic. Затем сменил его на более мощный, но того же класса — Yamaha Royal Star 1300 AT, который в сообществе называют «рояль». А весной этого года купил более комфортный круизер — тоже «рояль», но модификации Venture. У него есть круиз-контроль, встроенная стереосистема, множество кофров, анатомические сиденья — одним словом, шик!

Когда мне говорят, что водить мотоцикл опасно, я привожу цитату из фильма «Самый быстрый Indian»:

— Скажи, а ты не боишься разбиться насмерть?

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

Пройти обучение

8 ноя 19, 15:44
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Путь аналитика: из агентства — в мир big data и big zarplata

О неоконченном высшем образовании

Моя история начинается в Красноярске, где в разное время я учился на трех факультетах Сибирского федерального университета. Сначала — на математическом. Там было тяжело, преподаватели строгие, но я здорово продвинулся в интеллектуальном плане и получил первый опыт программирования на С++. Теперь ценю это. К сожалению, из-за высокой нагрузки пришлось перевестись на философский факультет. Я проучился там до ухода в армию, а после возвращения отчислился — нужно было работать. 

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

Рекламная аналитика

Затем я стал аналитиком в рекламном агентстве. Нужно было составлять отчеты по рекламе и попутно решать административные задачи. Работа оказалась нервной и слишком «клиентоориентированной»: деньги ставились выше здравого смысла. Где-то через год я понял, что не привыкну.

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

Учеба и первые результаты 

В 2017 году один товарищ порекомендовал мне бесплатные экспресс-курсы GeekBrains. Я записался и прошел интенсив по Java, но с покупкой платного курса не спешил — изучал отзывы в сети. Они были противоречивыми, но хороших оказалось больше. И еще я заметил, что авторы самых негативных отзывов не были знакомы с моделью обучения на платных курсах.

Я записался на факультет Java, потому что читал об этом языке как об инструменте «боевого» дата-инжиниринга. Дальше стал изучать Scala, и эта связка помогла мне разобраться в анализе больших данных на уровне начинающего специалиста. Я уже примерно понимал, что мне по силам, а за что пока лучше не браться.

К слову, изучать Java я начал еще во время работы в рекламном агентстве. Тут же стал применять новые знания на практике: автоматизировал свои рабочие процессы, снизил повседневную нагрузку. Результаты порадовали и еще больше убедили развиваться в выбранном направлении. 

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

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

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

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

В Питер — за перспективами

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

В Питере я практически сразу нашел компанию, где я могу стать аналитиком с базовыми навыками программирования. Это было бутиковое рекламное агентство закрытого типа. На собеседовании они смотрели на мои рабочие навыки и на то, как я усваиваю новую информацию и взаимодействую с коллективом. Программирование их интересовало скорее на перспективу. Ведь даже рекламная аналитика — это не только Google Analytics, Яндекс.Метрика и Excel, но и автоматизация. Ожидание оффера затянулось на месяц, но цель была достигнута.

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

Знаний Python, SQL и Power BI хватило, чтобы справился с тестовым заданием. Еще были вопросы на рабочую логику — тут пригодился опыт аналитика.

 Рабочее место Алексея: ничего лишнего

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

Еще понравилось, что со мной не торговались по зарплате. На рынке аналитики, особенно в рекламе, не всегда адекватно оценивают твой труд. Многие пытаются сбивать цену фразами типа «Вы же готовы к даунгрейду в первое время?». Как человек с опытом, я сразу понимаю, что «первое время» затянется. А здесь мне позволили самому доказать, сколько я могу сделать и заработать.

Как я работаю

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

Я работаю над сайтами экосистемы компании: использую SQL и Python, R (на нем написан legacy-код), PowerBI, MS Azure, Google Analytics. Это единственное, что могу рассказать о своих задачах, так как в компании я подписал NDA. Добавлю только, что опыт в рекламной аналитике пригодился.

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

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

Что касается программирования, я самостоятельно практикуюсь в Java, планирую ближе знакомиться с Clojure и Scala, продолжаю изучать Python и SQL в GeekBrains.

Что я понял на своем опыте

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

Как проходить собеседования

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

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

Как адаптироваться на новом месте

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

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

Как не потерять интерес

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

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

Пройти обучение

24 окт 19, 12:41
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Первая работа в IT с переездом в Москву: как это бывает

Никите Ермакову 26 лет, раньше он жил в Старом Осколе Белгородской области и работал резчиком металла на металлургическом комбинате. Программирование начал изучать менее года назад, а сейчас — Junior-разработчик Java в компании EPAM Systems. Это крупнейший производитель заказного ПО в мире. 

Первую работу в IT Никита получил в процессе обучения. Но были на пути и сомнения, и проваленное собеседование, и интересные учебные проекты.

— Привет, Никита! Ты уже завершил обучение или еще продолжаешь?

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

— Чем сейчас занимаешься в EPAM?

— Работаю над проектом, который был написан довольно давно, так что многие инструменты, используемые в нем, мы на уроках в GU не затрагивали. Например, Tomcat Vault, Axis2 или Sybase. Естественно, приходится все это изучать уже самостоятельно. 

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

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

— Как ты нашел эту работу? На каком этапе обучения?

— Работу я начал искать примерно в середине третьей четверти, и поначалу с вакансиями было совсем глухо. Я постоянно отслеживал предложения на сайтах типа HeadHunter. Еще попробовал «Мой круг», но там вакансий для начинающих Java-разработчиков не оказалось. 

Я прошел весь путь ищущего работу студента: откликался на вакансии, выполнял тестовые задания, дистанционно решал кейсики со Дня карьеры в GeekBrains.

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

Собственно, в результате этой рассылки я и попал на первое собеседование. И успешно его провалил. :) Надо понимать, что когда в компании нет открытой вакансии, то заинтересовать рекрутеров гораздо сложнее. По сути, меня пригласили «поговорить за жизнь» и посмотреть, что я из себя представляю. 

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

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

— Как выглядит хорошее резюме в EPAM? Чем оно отличалось от предыдущего?

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

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

Тестовое задание и собеседование

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

Как мне показалось, работодателя больше интересовала архитектура программы, нежели ее конкретная реализация. Главным было показать, что умеешь практически подходить к задаче и создавать гибкий код, в котором можно что-то быстро заменить. После курса по фреймворку Spring я уже понимал, как это должно выглядеть. Да и книга «Совершенный код» очень помогла разобраться в таких вещах. В плане инструментов оказалось достаточно простого Java Core.

Предложенное мной решение подошло — пригласили на собеседование. 

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

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

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

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

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

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

— Переезд из Старого Оскола в Москву был связан с работой?

— Да, я переехал именно ради этого. В Москве намного больше вакансий, чем в моем родном городе и в среднем по стране. Хотя, если честно, я еще рассматривал варианты в Питере, потому что мне больше нравился этот город. В итоге остановился на EPAM и Москве.

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

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

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

Не секрет, что рынок перенасыщен джуниорами и на старте приходится брать его брутфорсом (буквально — «грубой силой»). Это тоже подталкивало к раннему поиску работы. 

Переезд

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

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

— Почему ты решил идти в разработку и выбрал язык Java? 

— Оглядываясь назад, думаю, что предпосылок заняться программированием было две. Первая — с детства с компьютерами дружу. Конечно, сначала это было связано с игрушками, но я и обработкой изображений в Photoshop увлекался, и ролики монтировал в Sony Vegas, и в 3D-моделировании успел получить минимальный опыт — делал игровые карты для Counter-Strike 1.6. Разные бытовые вопросы с «железом» и «софтом» тоже сам старался решать, когда нужно было поднять домашнюю сеть, модернизировать или настроить оборудование, побороть «синий экран смерти», очистить ПК от вирусов и их последствий. 

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

Выбор языка

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

Про Java я к тому моменту чаще слышал, так что интуитивно был настроен на этот язык. Позже я познакомился и с другими: С++ и JavaScript. Пробовал на них писать и понял, что с первоначальным выбором не ошибся. Я хоть и люблю производительные приложения и переносимость, работать с Java мне приятнее. Это дружественный человеку язык программирования, что для меня важно.

— Над какими проектами ты работал за время учебы? Расскажи немного о самых интересных.

— Сначала я создал сетевой чат. Программа очень проста по возможностям, но когда впервые создаешь что-то сложнее «Hello, world!» — и тем более что-то полезное на практике, — испытываешь эйфорию!

Дальше я работал над облачным хранилищем. Захотелось добавить имитацию окошек Windows средствами Swing, и получилось интересно. Это привнесло в процесс каплю творчества — а творчество я люблю.

Дальше была разработка мобильной игры на Android. Этот проект затянул меня по-настоящему! Иной раз я приходил с работы и, вместо того чтобы поесть, садился за компьютер — пытался реализовать идеи, которые пришли в голову в течение рабочего дня, а их было немало. Отрывался только на сон или когда приходило время снова идти на работу.

Немного о самой игре. Это классический космический shoot ‘em up: летим вперед и крушим всех на своем пути. Жанр и тематику мы выбрали на первом занятии, в качестве движка использовали LibGDX. По итогам курса достаточно было сдать что-то типа бесконечного уровня с несколькими типами противников, но мне захотелось большего. 

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

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

Ресурсы частично брал из материалов урока, частично собирал и делал сам. Сначала я находил базовые изображения в Google, затем редактировал их в Photoshop — обрезал, склеивал, подгонял по цветовой гамме. 

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

Я бы выделил этот проект как самый интересный из всего, что я уже сделал за время обучения в GeekUniversity. Здесь было больше всего творческой работы. 

Позже я занялся разработкой новостного портала — мы делали его на курсе по фреймворку Spring. Этот курс был, пожалуй, самым сложным. Без знания Spring Boot в большом проекте легко запутаться и что-то неправильно настроить.

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

Тем не менее я внимательно слежу за проектом одногруппников: мотаю на ус, с какими проблемами они сталкиваются. Наверное, самое интересное пропускаю. :)

— Какие впечатления от GeekUniversity?

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

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

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

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

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

— Какие перспективы видишь для себя в профессии? В каком направлении хочешь развиваться дальше?

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

Когда я готовился к собеседованиям, просмотрел 24-часовой курс по Java, который записал Yakov Fain по своей книге. Яков — очень умный человек, в свое время компания Sun Microsystems присвоила ему титул Java Champion. Меня этот курс очень вдохновил — захотелось как можно скорее набрать опыта, стать бывалым разработчиком, возможно, получить какие-то награды. 

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

Пройти обучение

18 июл 19, 15:49
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Где нужен Java и как его преподают в GeekUniversity

Александр Фисунов — кандидат технических наук, доцент ДГТУ, где он преподает программирование и цифровую обработку сигналов, декан факультета Java в GeekUniversity, руководитель отдела разработки в НИИ многопроцессорных вычислительных систем. Работает над проектами в области анализа данных, компьютерного зрения и видеоаналитики, использует языки Java, C++, Python.

Александр, первый вопрос о тебе. Как наука и радиотехника пересеклись в твоей жизни с программированием и конкретно с Java?

— Вообще изучать программирование я начал лет с 8: приставка Subor + JBasic. Потом продолжил на компьютере — QBasic и Visual Basic. Все это я осваивал без книг и интернета — «методом тыка», — а на практике закреплял написанием простеньких игр и участвовал в конкурсах (например, с игровым проектом GALAXY FORCE).

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

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

Функций у системы на первых этапах было не так много: загрузка результатов тестирования, работа с графическим интерфейсом, вывод отчетов (в текстовый файл или таблицу .xls), пакетная обработка результатов, перенос математических формул в программный вид.

Ближе к четвертому курсу возможностей VB6 для нашего проекта стало немного не хватать, так что параллельно я стал разбираться с C# и переносить проект на платформу .NET.

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

Для каких задач ты начал использовать Java?

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

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

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

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

Какие перспективы, варианты развития есть у Java-разработчика?

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

Про Android-разработку и роль Java и Kotlin в мобильном направлении намного более подробно рассказал в своем интервью Александр Аникин — декан факультета Android.

Так сложилось, что Java — в числе основных языков, используемых для автоматизации тестирования. С помощью фреймворка Selenium можно эмулировать действия пользователя в веб-приложении, генерировать и проверять ввод правильных/ошибочных данных, проверять реакцию системы на такие действия. Это тоже очень перспективная область. Приведу пример из жизни.

Через знакомых знакомых меня нашел manual-тестировщик Алексей, который работает в США. Алексей для себя решил разобраться в Java Core и основах автоматизации тестирования. За 8 месяцев (примерно 120 часов консультаций) он не только освоил Java Core и Selenium, но и полностью автоматизировал рабочие задачи.

Дальше с Middle manual-тестировщика его взяли на позицию Middle QA Engineer в компанию, разрабатывающую веб-приложения для страховых организаций. Там на Java + Selenium он написал свой фреймворк для автоматизации тестирования всего проекта. До него в команде были только manual-тестировщики.

Алексей набрался опыта автоматизации на предыдущих двух проектах и с сентября 2018 года перешел на должность Senior QA Engineer в Disney. Теперь тестирует REST-сервисы внутренних продуктов компании.

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

В недавнем своем проекте Алексей использовал вот такой набор инструментов: Java, TestNG, Selenium (WebDriver, Grid), GitLab CI, Docker, SoapUI, Zap Proxy, Jersey Client и плюсом к этому зоопарку — внутренние разработки команды тестировщиков Disney.

При таком стеке технологий он уже выполняет задачи не только тестировщика, но и частично DevOps. Меня очень радует — не только в Алексее, но и вообще во всех студентах и знакомых разработчиках, — когда люди не пытаются что-то изучить и сидеть на месте, а постоянно двигаются вперед, осваивают все новые и новые технологии, о каком бы направлении мы ни говорили: разработке, тестировании, исследовании.

Кстати, сейчас развивается сравнительно новое направление — автоматизация тестирования мобильных приложений с помощью Java и фреймворка Appium (аналог Selenium, только под мобильные платформы). Это тоже открывает новые перспективы.

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

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

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

— Да, я принимал участие в разработке курсов по направлению Java: это были базовый, продвинутый и профессиональный уровни, «Разработка игр под Android», «Java. Углубленное изучение». Сейчас занимаюсь улучшением курсов Spring 1, 2.

Курсы на факультете постоянно дорабатываются и улучшаются. Если перечислить их все, получим: три уровня Java (базовый, продвинутый, профессиональный), «Разработка игр под Android», «Java. Углубленное изучение», «Алгоритмы и структуры данных на Java», шаблоны проектирования на Java, Java EE, Spring 1, Spring 2 и командная разработка. Плюс не забываем про смежные курсы.

Первые три курса — теория и задачи для быстрого вхождения в язык Java, разбор ООП и создание первых проектов. Дальше для опыта и практики создаем игру: основную часть (процентов 70 %) пишем на занятиях, а в качестве домашних заданий студенты дорабатывают отмеченные преподавателем блоки. На следующем курсе («Java. Углубленное изучение») приходит время самостоятельной практики — студенты разрабатывают сетевое хранилище. Конечно, они могут обращаться за помощью к преподавателю, плюс два занятия отводится на code review, но большую часть пишут сами. Если сравнивать, курс по играм — это 70–80 % кода от преподавателя, а проект на «Углубленном изучении» — 90 % от студента.

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

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

Следующий проект — игра под Android на библиотеке LibGDX. Его студенты особенно охотно дорабатывают и выпускают. После этого — облачное хранилище типа DropBox. Финальные проекты, которые у меня сейчас делают студенты: новостной портал и интернет-магазин.

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

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

Идею написать сетевой чат и облачное хранилище предложил Евгений Картавец. А разработку игры под Android я выбрал, когда по вебинарам заметил, что студентам эта тема нравится. Изначально задумывалась космическая стрелялка, но я всегда на курсе провожу голосование за жанр будущего проекта: пакман, танчики, tower defence, арканоид, бомбер, Марио, стрелялка. Что наберет больше голосов, то и пишем.

А как насчет фреймворков? Они есть в учебном плане?

— Для написания сетевых проектов на младших курсах GeekUniversity изучаем Netty. Большие курсовые проекты (новостной портал или интернет-магазин) пишем после знакомства с фреймворком Spring.

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

— Как правило, под конкретный круг задач подходит определенный набор языков программирования. Если мы хотим написать приложение для «тяжелой» работы с 3D-графикой, вероятнее всего возьмем C++ и OpenGL.

Если хотим заняться машинным обучением, теоретически можно попробовать С++ или Java. Но на деле оказывается, что большинство библиотек для работы с машинным обучением представлены на Python.

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

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

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

Если речь о backend-разработке, приходится выбирать между PHP, C# ASP.NET, Python с Django и Java Enterprise. И здесь надо учитывать масштаб задачи, какие в вашем регионе вакансии, ну и, конечно, нравится вам работать с этим языком или нет.

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

С выпускниками общаешься?

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

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

Пройти обучение

22 апр 19, 14:12
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Как стать Android-разработчиком — интервью с деканом

Александр Аникин — Senior Android developer и декан факультета Android-разработки в GeekUniversity. Он сам изучил профессию в GeekBrains, а сейчас руководит преподавателями и параллельно работает в крупной компании. Я расспросила Александра, что происходит с платформой Android, какие направления развития она предлагает программисту и как приобщиться к ней в GU.

 

— Привет! Расскажи, пожалуйста, о перспективах Android-разработчика, как ты их видишь. Чем это направление привлекло тебя и чем оно может заинтересовать сегодняшнего новичка?

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

Меня в мобильной разработке привлекает возможность сразу видеть результат своих трудов. Ты пишешь небольшое приложение за пару месяцев, выкладываешь его в Google Play и получаешь отдачу. Можно работать в одиночку или в маленькой команде, где вклад каждого участника важен и очевиден. Для сравнения: если в команде из 500 джавистов писать крупную серверную SAP-систему, результата своей работы можно не наблюдать годами и не увидеть никогда. Думаю, многим важно, чтобы их вклад был заметен.

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

— Помимо приложений для планшетов и смартфонов, что можно делать?

— Писать софт для Android Auto, телевизоров, часов и других устройств. Android для ТВ отличается от мобильной версии в основном управлением — все действия не через тачскрин, а через пульт.

Еще есть горячее направление Internet of Things: можно писать приложения для управления умным домом. Тут уже больше отличий от мобильной разработки. Умные дома — это тренд, который уже наметился и будет развиваться. Эти технологии ближе, чем кажутся, ведь не обязательно иметь комплекс устройств: лампочки и розетки Wi-Fi — тоже умный дом.

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

Будет развиваться индустрия — нужна ведь не только программная часть, но и аппаратная. Уже были «первые звоночки»: Microsoft HoloLens и Google Glass. Но технология еще недостаточно совершенна для реализации таких идей. Как только появятся недорогие и удобные очки (а это случится), произойдет взрыв! Дополненная реальность через смартфоны — это легко и это уже есть.

— Какими из перечисленных направлений вы занимаетесь на факультете Android-разработки?

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

Наши студенты изучают мобильную разработку за год и не в формате пятидневки: у нас два занятия в неделю по два с половиной часа каждое. За это время ты получаешь базовые знания, которые позволят устроиться на работу в качестве junior'а. Если ты очень упорно занимался и отдавал этому все силы, тебя могут взять на вакансию уровня middle. Будь у нас два года учебного времени, я бы с удовольствием добавил в программу курс по дополненной реальности.

— Помимо языка Java на факультете преподают Kotlin?

— Да. Недавно мы включили в программу изучение основ Kotlin. По итогам курса студенты пишут приложение для заметок, которое, по аналогии с Google Keep, хранит данные в облачном хранилище Firebase.

В планах — добавить еще курс профессиональной мобильной разработки на Kotlin.

— А еще какого типа проекты ждут студентов факультета?

— Сначала мы пишем погодное приложение, которое показывает сводку по любым городам и регионам. Дизайн интерфейса и дополнительные фичи — на усмотрение слушателей. Затем изучаем принципы Material Design и по этому курсу пишем приложение для просмотра фотографий — по аналогии с лентой Instagram.

Один курс посвящен популярным библиотекам: Dagger, Mosby, Butterknife, Room, Sugar ORM. Отдельный проект по итогу студенты не разрабатывают, вместо этого они внедряют изученные паттерны и библиотеки в свои текущие проекты.

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

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

— Что нужно для занятий мобильной разработкой? Как минимум среда разработки и Android-устройство для тестирования?

— Из обязательных требований — только компьютер. Даже Android-девайс иметь под рукой не обязательно, потому что тестировать приложения можно на эмуляторе. Гипотетически, код можно писать и в блокнотике, но на деле, конечно, понадобится среда разработки (IDE). Это бесплатная Android Studio, которую вы можете скачать из интернета.

Если сравнивать с iOS-разработкой, там тебе нужен Mac, который стоит в 5–10 раз дороже ПК под Windows или Linux. Плюс ты будешь ежегодно платить Apple по 100 $, чтобы иметь право что-то разрабатывать для их устройств. Это создает «имущественный ценз» — порог входа, который в Android-разработке практически отсутствует.

— Как изменилась Android-разработка за последние годы — с момента, когда ты пришел в это направление?

— Изменилась очень сильно и, думаю, продолжит меняться в дальнейшем. Потому что Android-разработка — это не только Java, хотя и этот язык взял курс на быстрые изменения. Нельзя быть разработчиком и не учиться постоянно. Ты прошел курс, но каждый год появляется что-то новое. Если не следить за происходящим, через пять лет просто не узнаешь свое направление.

Я пришел в Android-разработку четыре года назад — тогда многие использовали IDE Eclipse, и я тоже начинал работать в ней. С тех пор все перешли на Android Studio — среду разработки от Google. Еще появились архитектурные компоненты: стало ясно, какой должна быть архитектура Android-приложений. До недавнего времени все писали кто во что горазд. В число основных языков разработки вошел Kotlin — теперь это стандарт, и многие новые приложения изначально пишутся на нем.

— То есть за Kotlin будущее? Почему этот язык так «выстрелил» в Android-разработке?

— Создатели Kotlin плотно работают с Google. А если учесть, что они (JetBrains) создали еще и среду IntelliJ IDEA, на которой базируется гугловская Android Studio, сотрудничество получается очень успешным. Кроме того, Java принадлежит компании Oracle, у которой сейчас правовые проблемы с Google.

Я не вникал глубоко в этот вопрос, но, насколько понимаю, Oracle хочет сделать Java платным для корпоративных клиентов или брать royalties за использование отдельных модулей. А поскольку на этом языке пишется софт для двух миллиардов Android-устройств, Google не в восторге от такого хода. Если бы не юридические препирательства, не уверен, что Kotlin так быстро поднялся бы в этой сфере. Но есть и другие причины.

Возьмем Go и Dart — они со временем наверняка станут официальными языками Android-разработки, но у них узкая специализация. Kotlin позволяет делать все, что может Java, и больше того. На нем можно написать сервер, мобильное приложение, нативную логику, среду сборки — что угодно. Плюс создатели Kotlin добавляют в язык фичи, специально заточенные под Android-разработку.

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

— До Android я всю жизнь занимался маркетингом. Работал классическим маркетологом, мобильным маркетологом, SMM, продакт-менеджером. Потом захотел сменить профессию и начал программировать.

Мобильная разработка интересовала меня давно, потому что я всегда любил гаджеты: оценил прелесть смартфонов, когда они только появились, и следил за проектами в этой области на KickStarter. Специально ездил в Москву на «Горбушку», чтобы купить первый iPhone — тот, который официально в России никогда не продавался. И с тех пор старался пользоваться самыми новыми и современными девайсами.

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

— С чего ты начал путь в разработку?

— Знакомые разработчики порекомендовали мне начать с Java. И этот совет до сих пор актуален, потому что Java — развитый, хорошо документированный язык с отличным community. Он использует строгую статическую типизацию и подходит новичку. Если ты знаешь Java, тебе легко перейти на Swift, Objective-C, Kotlin, Go, Dart. Это позволяет выбирать практически любое направление.

— Сначала ты пробовал учить язык самостоятельно?

— Да. Месяца два я ковырялся с Java сам, затем понял, что лучше вложить деньги в свое образование и с помощью менторов закрепить и стандартизировать свои знания. Тогда я купил курсы в GeekBrains, прошел обучение и устроился junior'ом на первую работу.

— Какое-то портфолио удалось собрать?

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

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

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

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

— Через какое время в разработке ты решил преподавать?

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

— Чем ты занимаешься вне GeekUniversity?

— Работаю в крупном банке и пишу для него приложения.

— И там тоже проводишь собеседования? Ты на руководящей должности?

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

— До банка ты работал еще в нескольких компаниях?

— Да. Начинал в небольшой компании, где разработкой занимались два человека: я и технический лид, который меня многому научил. Через два года я перешел на middle-позицию в EPAM. Это крупнейший в мире производитель программного обеспечения.

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

— А кого-то из выпускников GB и GU тебе доводилось брать на работу?

— Только один раз, но случай интересный. В октябре 2018 года ко мне пришел выпускник курса, который я вел около года назад. Он уже 6 месяцев трудился Android-разработчиком и хотел устроиться к нам преподавать. Я его сразу узнал — это был один из активных студентов. Мы провели собеседование, он его не прошел: не хватало базовых знаний для ведения вебинаров. На мой взгляд, преподавателю, который ведет курсы Android-разработки первого и второго уровня, нужна очень хорошая теоретическая подготовка. Потому что студенты, еще мало знакомые с Java, могут задать любой вопрос — не только про Android, но и по смежным направлениям. И ты должен быть готов хотя бы в общих чертах говорить о вещах, с которыми на практике не сталкивался.

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

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

Пройти обучение

13 мар 19, 12:47
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

С Дня карьеры в «Альфа-Банк»: история студента GU

Ивану 22 года, и он уже успел поработать в авиационной отрасли, освоить C++ и приняться за Java, а еще — найти работу мечты в одном из крупнейших российских банков. Мне захотелось узнать эту историю подробнее, и мы с Иваном записали интервью. Поговорили о том, как начать новую карьеру, когда у тебя уже есть хорошая работа, и чем полезен GeekUniversity студенту известного вуза.

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

— Сейчас я — старший разработчик Equation в «Альфа-Банке». Наша команда совершенствует систему расчетов. Если конкретнее говорить о моих задачах, это написание и доработка кода, исправление ошибок ПО.

Как ты попал в «Альфа-Банк»? И трудно ли было искать вакансии параллельно с учебой?

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

Как это было?

— Первый День дал мне опыт: я растерялся и толком не успел поговорить с работодателями, зато узнал, как преподнести свои знания и пройти собеседование. Особенно полезным было выступление Людмилы Карамышевой. Ее советы помогли мне составить более удачное резюме. Старое просто выкинул.

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

«Альфа» зацепила с первых минут диалога. Компанию представляли приятные и приветливые HR. Они сказали, что ищут специалистов со знанием Java и C++. После беседы обещали перезвонить буквально через пару дней. У меня было чувство нереальности происходящего и огромное желание попасть именно туда.

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

Чем ты занимался до программирования? И с чего начался интерес к разработке?

— До программирования я учился в Московском авиационном институте (МАИ) и работал на авиационных предприятиях. Когда пришел на предыдущее место работы, понял, что не хватает знаний в области программирования (конкретно C++), и начал искать хорошие курсы.

Сначала я прошел курсы от МФТИ и Яндекса, о которых узнал на сайте Coursera. Было тяжело совмещать дополнительное образование с работой и учебой в вузе, но это принесло плоды.

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

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

Как получилось, что ты решил сменить сферу деятельности?

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

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

Почему ты выбрал язык Java?

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

Легко ли было изучать Java после С++? Были какие-то сложные темы?

— После C++ изучение Java шло более чем прекрасно. Достаточно было провести аналогию между двумя языками, и все становилось на свои места. Сложных тем в Java после C++ не было как таковых. Безусловно, эти языки не полностью идентичны, но похожи.

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

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

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

— Сложным я бы назвал создание чата. Это был мой первый более-менее крупный проект, и нелегко было воедино связать большие объемы кода. Пришлось попотеть, прежде чем у меня выработалось ясное и четкое понимание, что и как делать. Первое время было тяжело понять клиент-серверное взаимодействие. Но и это прошло. :)

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

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

Что за игра в итоге получилась?

— Мы разрабатывали своего Bomberman’а. Я сразу понял, сколько всего можно придумать и сделать. Здорово было делиться с преподавателем своими наработками и получать по ним рекомендации. Но главное — это был проект, к которому раз за разом хотелось возвращаться, чтобы дорабатывать.


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

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

А кто вел курс разработки игр?

— Александр Фисунов. Это один из лучших преподавателей GeekBrains: он может и заинтересовать, и оперативно подсказать в чате. Даже после окончания курса он открыт для общения со студентами: к нему можно обратиться за помощью. Короче говоря, остались только хорошие воспоминания, и я очень надеюсь снова попасть к Александру, когда возобновлю обучение.

Кстати, именно в работе над игрой я впервые на практике применил Gradle и Maven. А они очень востребованы на моей нынешней работе!

Были еще какие-то учебные курсы в GU, которые тебе особенно запомнились и помогли?

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

Также был очень интересен курс HTML/CSS. Очень жаль, что я пока не успел его закончить.

Сколько времени с начала учебы прошло, прежде чем ты нашел работу?

— Я поступил в GeekUniversity в декабре 2017 года, а на работу устроился в сентябре 2018. За это время некоторые курсы пришлось перепройти: не все успевал с первого раза, потому что параллельно работал и учился в университете офлайн. Но я все-таки благополучно добрался до конца второй четверти в GU.

И вот ты на собеседовании в «Альфа-Банке». Трудно было? И долго ли ты к нему готовился?

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

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

— В базовых вопросах знаний хватает, но, безусловно, учиться приходится многому. Во время испытательного срока понадобилось на новом уровне изучить Gradle, git и язык программирования RPG. Уверен, что первые два пункта дались бы мне гораздо легче, если бы я доучился в GU до конца. А вот RPG в любом случае понадобилось бы учить с нуля. Но благодаря знанию Java и C++, я без особых проблем освоил третий язык на минимально необходимом уровне.

Совсем недавно я прошел курс TDD на Java и получил сертификат, подтверждающий мои компетенции.

Что ты думаешь о студенческом сообществе, которое ведет Даша Грач? На практике оно тебе пригодилось?

— Это, пожалуй, одна из самых полезных вещей в GU! Студенческое сообщество дает возможность делиться мыслями, наработками, опытом. Я не только общался с одногруппниками, но и часто советовался с преподавателями в чатах. Мне это очень помогло.

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

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

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

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

Когда планируешь вернуться к обучению в GeekUniversity?

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

Спасибо тебе за историю. Успеха в любимой работе и, конечно, в дальнейшем обучении!

Пройти обучение

8 фев 19, 19:43
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0
Темы с 1 по 10 | всего: 19

Последние комментарии

нет комментариев
Читать

Поиск по блогу

Люди

7 пользователям нравится сайт lena2018.mirtesen.ru