5 месяцев обучения и опыт стажировки

"Я не собираюсь обрисовывать всё в розовых тонах. Программирование - интересная и непростая область. Как только изучите необходимую базу, стучитесь на стажировку в разные компании..."
16 августа 2016AnonymousИгорь Филипенко1217229138

Здравствуйте, уважаемые пользователи GeekBrains!

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

Начало

К этому ремеслу я пришёл случайно. В школе я плевался на Pascal (мне и сейчас его синтаксис кажется диким после C++, Java и Python), но сессии по информатике худо-бедно сдавал. Тогда были определённые цели, не связанные с программированием. В университет я пошёл на специальность "Радиоэлектроника и Телекоммуникации". Закончил его неплохо, дальше была магистратура, во время которой я познакомился с товарищем, который прошёл бесплатный курс по основам программирования GeekBrains. После его уговоров я записался на курс и также его осилил. Уроки вёл Игорь Долгов. Мне кажется, это один из самых лучших преподавателей по IT-дисциплинам. Курс был простенький, мы закончили на массивах, но я понял, что программирование - это не жестокая математика. Нет, конечно, если вы разрабатываете игровой движок, то высшая математика обязательна, но для других целей вам больше придётся применять логику. Логические задачки мне нравятся, я решил попробовать себя в этой области и потопал на курсы по HTML-CSS в своем городе. Прошёл их и понял - не моё. Параллельно устроился на работу менеджером (не по специальности) в маленькую компанию, где с нас спускали 3 шкуры за мизерные деньги.

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

Поворот

Пару месяцев я штудировал айтишные форумы в поисках нужной информации. Была мысль удариться в PHP, потом в Python. Однако как-то наткнулся на один портал, посвящённый Java, узнал, что на этом языке пишут для Andriod, и тогда понял, куда хочу. Я окунулся в изучение Java, но потерпел неудачу. Java - целиком объектно-ориеентированный язык, а, чтобы вы понимали, на тот момент я не имел чёткого понятия обо всех этих парадигмах.

Я приуныл, однако хороший товарищ-программист посоветовал толковые курсы по С++ (процедурное программирование и ООП на его базе), которые проводились в нашем городе. Я вложил по пол зарплаты в каждый модуль. Занятия проводились интенсивно, было много задачек. Я уходил рано утром на работу, приходил в 9-10 вечера с квадратной головой. Это стоило того, чтобы терпеть - я получил неплохую базу и познакомился с основными понятиями в области программирования. Курсы закончились в декабре 2015. В январе я кинулся на Java снова. Она стала даваться куда легче. Поэтому я сейчас сделаю несколько промежуточных и важных выводов:

  1. Одним из важнейших качеств, необходимых в программировании, является терпение. Поверьте, без него вам тяжело будет куда-то продвинуться.
  2. Не стесняйтесь инвестировать деньги и время в своё развитие: курсы, книги, семинары. Нет денег - в интернете полно всего: ищите, копайте, что не понятно на первый взгляд придёт через какое-то время. Поверьте, даже платные материалы при большом желании и терпении можно откопать в сети безвозмездно.
  3. Я считаю, что человеку без базовых знаний программирования (процедурное и ООП) тяжело будет даваться на Java. С++ в этом смысле более последователен, на его основе можно плавно познакомиться с программированием. Поэтому я очень рекомендую пройти базу по С++, "процедурку" с указателями и основные парадигмы ООП. Много не надо - берёте 3 книги на выбор: или Стивена Прата, или Дейтлов (лучше их), или Роберта Лафоре (мне это книга очень понравилась). Разбираетесь в теории и делаете упражнения, которые представлены в конце каждой главы. Вообще С++ - это хорошая штука. Я ещё вернусь к этому языку в будущем.

Итак, с грехом пополам я прошёл Java-Core. Ну как прошёл. Базовые понятия, коллекции, исключения, какие-то знания про потоки. Для изучения Java я могу посоветовать несколько вещей:

  • книжка серии HeadFirst «Изучаем Java»;
  • для практики портал javarush (первые 10 уровней бесплатны, для старта вполне хватит);
  • также для практики можно попробовать книгу Блинова «Java: промышленное программирование».

Безусловно, есть ещё книжки (это вам и «Философия Java» Эккеля, это книги Шилдта и т.д.), но приведённые выше книги - самое простое, с чего можно начать (проще некуда).

Профессиональный рост

Потихоньку в нашем городе стали появляться стажировки от айтишных компаний. Я внаглую стал рассылать резюме, в котором были курсы по вёрстке, С++ и Java-Core. Пригласили на собеседование в крупную компанию, но там предложили лишь должность "Менеджер проектов". С одной стороны, это была неудача, потому что я хотел попасть на стажировку в качестве программиста. В другой - это был своего рода успех. Я впервые побывал в IT-компании на техническом собеседовании, это было испытание, которое дало ценнейший опыт.

Дальше мне позвонили из компании поменьше, я прошёл собеседование там. В результате попал на стажировку. Стажировка была бесплатная. Взяли меня в качестве Java-программиста и подпустили к продукту компании (на одном из слоёв их приложения используется Java). Тут началось самое весёлое. Первый день меня шокировал. Я не буду рассказывать о подходе людей. Мне никто толком не помогал. Нет, безусловно, я понимаю, что никто не обязан там был возиться со мной. Однако, задавал вопросы я 1-2 раза в день, и в таких случаях мои вопросы означали, что я перерыл Google, книги и форумы, а ответа так и не нашел. Спасал старый товарищ, который посоветовал курсы. Пока он давал советы, я тихонько и со скрипом решал поставленные задачи. У меня сформировался некий перечень того, что следует понимать, если вы задумали устроиться стажёром или джуниором:

  1. Обязательно знание английского. Он необходим хотя бы для того, чтобы читать гайды от "интуристов", так как в Рунете толковых статеек крайне мало.
  2. Надо уметь работать с Linux. В первый же день я бахнул второй системой на свой ноут Ubuntu. Через 2 месяца меня пересадили на Mac OS, что тоже является Unix-подобной системой. Я плакал, плевался, опять плакал и опять плевался на консоль, но спустя 4 месяца вкусил некоторые её преимущества. Так что считаю, что для работы в некоторых специальностях Linux будет необходим. И если вы хотите стать Java-разработчиком, то он жизненно необходим (просто подумайте о том, что Java очень славно живёт именно в серверной части, а сервера в большинстве случаев поднимают именно на Unix-системах). Безусловно, можно работать с Java и на Windows. Но поверьте, у вас будут спрашивать про умение работать с той же Ubuntu, как и знание английского. По крайней мере у меня спрашивали.
  3. Нужно знать основные понятия по SQL. Слишком сложно? Ничего подобного! Есть классные статьи на Хабре, есть книжа Форты “SQL за 10 минут”. Если вы метите на джуниора или стажёра, уметь "пилить" сложные запросы не обязательно, но понимать синтаксис надо. Я по наглости своей пришёл на стажировку без малейшего понятия о том, что такое База Данных и СУБД. Лились потоками горючие слёзы при первой же задаче, где мне пришлось быстро учиться писать запросы и со скоростью звука знакомиться с JDBC.
  4. Если вы уже освоили Java Core, то не поленитесь и познакомьтесь с Java8. Лезть в дебри не надо, я предлагаю просто понять, что нового появилось в данной версии. Потому что может случиться похожая ситуация. Мне дали задачу написать простенький сервер для одного проекта с использованием Vert.x 3. Документация этих ребят стала для меня откровением - я неделю потратил на то, чтобы привыкнуть к лямбда-выражениям. И раз уж зашла об этом речь, тут я напишу простенькую задачку, с которой я начинал писать сервер. Кому интересно, сделайте - это будет хорошим опытом, потому что для её решения вам придётся изучить фреймворк и ещё некоторые технологии. 

    Задача: Итак, у вас есть Vertx. Вам нужно создать веб-соккетный сервер. Далее скачиваете расширение Simple Web Socket Client. Через него можно подключиться к вашему серверу и отправлять сообщения (но если на том же Vertx вы напишите клиент - это тоже будет очень хорошо). Получилось? Хорошо, сделайте так, чтобы сервер отвечал эхо-сообщениями. Сделали? Разберитесь с Vert.x web и докрутите на ваш мега-сервер роутер, добавьте пару рутов, по которым также вы будете передавать сообщения (эта задача касается Java Enterprise, тут следует понять, что такое хендлер, что такое соккеты, веб-cоккет, рутер и для чего это всё надо).


     

  5. Сборщики... Когда я прибыл на стажировку, я знал про Ant и Maven. Конечно я слышал, что это удобная штука, но я ею не пользовался, потому что я отложил на потом знакомство с этими инструментами и решал простенькие задачки. В меня сразу же кинули Gradle. Это тоже сборщик проекта, тоже удобная штука. Однако я даже не подозревал о её существовании. После упорного штудирования документации и дерганья программистов, я кое-как в ней освоился. Исходя из всего вышесказанного, я рекомендую научиться создавать ваши проекты и подгружать сторонние библиотеки в них с помощью сборщиков. Не нужно многого - освойте Maven и Gradle, научитесь подгружать в проект библиотеки и работать со структурой проекта.
  6. Великий и ужасный Debug. Этот скилл необходим. Вы должны уметь дебажить в IDE, вы должны дебажить в уме. Как иначе вы сможете найти ошибки в коде?
  7. Git и Github. Кому сложно работать с Git через консоль, используйте SmartGit. Ваша задача понимать, для чего всё это надо, и иметь какие-то проекты на Github, чтобы можно было их показать на собеседовании. Поверьте ссылка на Github будет более востребованной у работодателя, чем ваш диплом об образовании. И да, перед добавлением кода в свой репозиторий, не забудьте отформатировать его в соответствии с Code Conventions.

Итог по стажировке:

Я не собираюсь обрисовывать всё в розовых тонах. Программирование - интересная и прибыльная область. Попасть и задержаться там тяжело: можно, но тяжело. Это не из-за сложности технологий. Поверьте, после двух недель стучания головой о какой-либо вразумительный фреймворк, вас вдруг осенит. Главное, надо интересоваться программированием и иметь устойчивость, терпение, а также желание учиться новому. В первый день стажировки на меня упал Linux, База Данных, Rabbitmq и Gradle. Я смотрел на это ошалелыми глазами. Это был хороший стресс, я думал, что ничего не получится. Спустя пару месяцев всё не выглядит таким уж страшным. Я много читал, много пробовал и спрашивал, смотрел семинары в свободное время, изучал книги, листал гайды. Это было непросто, но по-своему интересно. Денег мне не платили, всё было на голом энтузиазме, благо родители пошли навстречу и поняли, что это дело нужное, и учёба - штука хорошая. В итоге, не так страшен чёрт как его малюют. Но прежде чем вы с ним наладите хоть какой-то диалог, придётся “попотеть”.

Конец?

Вы думаете, это всё? Разобрался я с теми заданиями и зажил спокойно? Нет, не всё.

Задания по Java кончились, в компании на этот язык программирования упор не делали, он мало где был задействован. Мне предложили побыть тестировщиком и написать тест на Selenium. За недельку я накатал код, который тестировал форму входа на сайт, перебирал кейсы. Кстати, тут мне пригодились знания вёрстки, так как пришлось повозиться с Xpath. Дальше мне предложили протестировать скрипты, написанные на Python. Честно признаюсь, и сегодня для меня тестирование - скучно. Уж лучше говнокодить, чем тестировать. Моё мнение субъективно, оно может не являться истиной в последней инстанции. Тогда мне предложили написать свой скриптик и я с радостью согласился. Ну ладно, чего уж там, не разберусь я что ли в Python? Это гибкий язык программирования, он неплох, однако его синтаксис здорово потрепал мне нервы. Разделять операторы пробелами после C-подобных языков, показалось мне чем-то диким, но я привык. Дальше появился проект, в котором используется Flask-admin. Я познакомился и с ним. Выполнил пару простых заданий, написал пару классов, прописал миграции. В какой-то момент было принято решение - переделать базовый Front End, который предоставляет Flask. Было решено взять ReactJS, Material UI. Вместе с этим добром проследовал сборщик Gulp, пришлось познакомиться с созданием простенького сервера на Node.JS, а чуть позже мы перешли на ReacJS Bootstrap. Ах да, там же ещё фигурируют JQuery и Ajax. Я согласился заняться этим, но когда взялся - ужаснулся. Дело в том, что на JavaScript я прошёл только базовый курс на GeekBrains. Там не объяснялись функции, ОПП и прочее. До сих пор я этим и занимаюсь. Не могу сказать, что мне понравился JavaScript с его библиотеками и фреймворками, я и по сей день в нём плаваю, но по выходным продолжаю разбираться.

Конец

За 5 неполных месяцев я познакомился с большим стеком технологий. Это потребовало много сил и энергии, но было очень интересно. Поэтому, я очень рекомендую: как только изучите базу в вашей области, стучитесь на стажировку в разные компании. Реальные проекты дают огромный толчок в развитии, какой не даст ни один курс. Что касается моего присутствия на GeekBrains - именно базовый курс по основам программирования привёл меня к тому, что я имею сегодня. Вернее, он подтолкнул погрузиться в новую для меня область. 

Я бы посоветовал начинающим программистам сохранять пытливость ума и быть авантюристами. Даже если вы не знаете всего стека технологий - шлите резюме. Берут ведь не только "всезнаек", но и просто адекватных мотивированных ребят. Поэтому читайте, развивайтесь и пробуйте - рано или поздно что-то выстрелит. Надеюсь мой рассказ будет многим полезен. У меня сохранилось немало ссылок на обучающие источники (Java и SQL, ReactJS). Я мог бы написать ещё пост, где поделился бы ими, однако не знаю, как к этому отнесётся команда GeekBrains. 

Давайте так: пишите в комментариях и ставьте лайки. С вас активность - с меня статья! 

На этом всё. Спасибо GeekBrains за ваш труд и удачи вам в вашем развитии. Пользователям я желаю мотивации и времени!