JavaRush /Java блог /Архив info.javarush /Путь Java разработчика
trinit
41 уровень

Путь Java разработчика

Статья из группы Архив info.javarush
Ну вот, настал и мой черед написать свою историю. Если кратко, то я уже 3.5 месяца, как Junior Java Developer. Если хотите подробностей, тогда читайте дальше. Как и все, кто пишет истории трудоустройства, наверное, правильно будет начать с предистории, кто я был и кем стал. Давным давно, много-много лет назад я пытался начать программировать. Это был 2-й или 3-й класс, я записался на кружок программирования, походил несколько раз, научился набирать на клавиатуре свое имя и домашний адрес, на этом мое программирование закончилось, потому что я почему-то бросил тот кружок. В школе у меня не было программирования, в универе тоже, так, как учился я на бухгалтера. Несколько раз я пытался поучиться программированию самостоятельно. У меня дома была книга по информатике, где были задачки на паскале, но я ничего там не понял, а объяснить было некому и я на это дело забил. Годы шли, я выучился на бухгалтера, работы не было. И примерно два года назад я таки нашел работу в одной фирме-франчайзи от 1С. Шел я туда на линию техподдержки пользователей, т.к. я знал бухгалтерию, а основным направлением 1С пока является эта отрасль. Через некоторое время директор сказал, что нужно бы, чтобы я поучил программирование, т.к. писать некому да и в техподдержке эти знания не помешают. Деваться было некуда и это был мой первый шаг на пути. Два месяца я читал книгу по 1С платформе, потом мне объяснили, что такое переменная, а дальше, как в тумане :) Шучу. Дальше переменных я вообще ничего не понимал и пришлось посмотреть курсы для начинающих на основе Python-a. Уже в процессе работы и конкретных задач я начинал понимать циклы, массивы, механизм пошаговой отладки. Настоящим прорывом был момент, когда я понял, как передавать параметры в другие функции. Однажды я сидел и гуглил в поисках, что мне может помочь в изучении 1С и на одном из форумов нашел, что в этом может помочь изучение языка VB.NET. Это был еще один прорыв. Я скачал книгу "Лукин С.Н. Понятно о Visual Basic.NET. Самоучитель в 3 томах" и начал по ней заниматься. Книга очень хорошая, особенно для начинающих. И язык для начинающих тоже хороший, хоть и многие о нем говорят плохое (видимо помнят старый VB). С одной стороны он позволяет пилить логику, не отвлекаясь на пользовательский интерфейс, с другой стороны, он как процедурный, так и ООП-шный одновременно. К тому же VB.NET действительно оказался очень похожим на 1С, точнее, 1С был похож на него и мне было легко целый день программировать на 1С, решая рабочие задачи, а вечером приходить и быстро переключаться на другой язык. Все свободное время, выходные я посвящал программированию. Примерно в то время мне уже начинала надоедать 1С и приходило понимание, что с 1С денег не заработать (зарабатывал я в полтора раза меньше, чем мои клиенты-бухгалтера, для которых я писал программу и которых обучал). Я начал думать, чем же заняться дальше? Пришли мысли об Андроиде, как казалось, это интересно, перспективно и т.д. Друг программист сказал, что там пишут на Java, интернет подтвердил. Друг сказал, что перед Java лучше бы поучить С++. Уже хотелось начинать, но было еще больше половины книжки по VB.NET, а бросать не хотелось. Книгу можно было прочитать за месяц, но я понял, что одно чтение без практики ничего не даст и придумал написать какой-то небольшой, но свой проектик. Для этого был выбран блокнот. Я написал блокнот, который открывает, сохраняет файлы, определяет кодировку при открытии файла, раскрашивает синтаксис 1С. Потом я написал калькулятор (никогда не думал, что это такая сложная штука). Потом был еще один большой, по моим меркам, проект - это программа для решения тестов по 1С. Суть в том, что она берет текстовый файл с вопросами и ответами, загоняет это все в excel-файл (да, тогда я еще не умел работать с БД) и потом можно решать, как раздел, так и случайные билеты и т.п. Было еще пару мелких программок, чтобы понять потоки, модификаторы доступа и прочие штуки. Пришло время, когда я завершил книгу по VB.NET. У меня была достаточная база, примерно, как после 2-го или даже 3-го курса универа. На работе тоже уже получалось хорошо писать, разбираться в дебрях кода. Вот только работа в конец надоела, т.к., чтобы писать на 1С не нужно знать программирование, а в большей степени нужно просто понимать механизмы работы платформы. Пришла очередь С++, как и советовал друг. Окрыл книгу по С++, открыл вторую. Везде пишут, что перед тем, как учить С++, нужно знать С. Нашел книгу по С, полистал и подумал "ДА НУ ВАС НАФИГ!", я же хочу на Андроид писать, мне НУЖНА JAVA. И как бы окончально и не бросая С, решил, так, чисто на будущее посмотреть курсы для начинающих по Java. Угадайте, куда я наткнулся? Да, на наш любимый JavaRush. Это был новый 2015 год. Стоило мне нажать большую зеленую кнопку ИГРАТЬ, как меня захлестнуло. Первые 10 уровней прошли налегке. Дальше было платно, а доллар был небывалых высот, нужно было ждать скидку. Тем временем мне попались бесплатные курсы по Python среднего уровня сложности, мозги поразмять никогда не бывает лишним и я прошел эти курсы, что заняло еще пару месяцев. Однажды мне выпал шанс пойти на собеседование в одну компанию, им нужен был человек, пишущий на Java. Всю ночь я не мог нормально спать, все думал, что меня могут спросить, утром повторял разницу между интерфейсом и абстрактным классом, модификаторы доступа, полифорфизм. Но меня ничего не спросили, а просто написали список технологий, которые нужно выучить, после чего пообещали дать тестовое задание, на его основании посмотрят стиль написания кода, логику и дальше примут решение о моем трудоустройстве. Вакансия была не на Андроид, а на сервер сайд, может это и к лучшему. На второй день я уволился с 1С, так как эта сфера для меня была исчерпана, а получать копейки и лопатить тонны 1С кода ежедневно, после чего изучать Java-технологии - было выше моих сил. Я с рвением начал изучать Java-технологии, которые мне дали, вот этот список: 1. OOP. 2. Maven. 3. Apache Tiles. 4. Spring MVC. 5. Hibernate. 6. Eclipse (я советую использовать не чистую среду а STS от Spring - https://spring.io/tools/sts/). 7. Tomcat 8. 8. JUnit. от себя добавлю еще парочку технологий, которые очень желательно знать: 9. Вооtstrap - с ним вы очень быстро можете сделать интерфейс сайта не изобретая сами знаете чего... 10. JQuery - чтобы не писать тонны нативного JS кода + тут есть всякие полезные плюшки типа autocomplete() и т.п. 11. Linux/Ubuntu - в большинстве случаев на работе будет стоять она. Нужно хотя бы уметь поставить JDK, Tomcat. 12. GIT/другая система контроля версий - это must have. 13. JSON. и технологии, которые возможно придется использовать в проектах: 14. AngularJS - JS framework, очень крутая штука. 15. МоngoDB. 16. RabbitMQ. и без чего вообще никак: 17. English! Нужно было держать баланс между качеством изучения и потраченным на это временем. Вакансия не могла меня ждать вечно, имеено это меня и подгоняло. Ежедневно, около 14-16 часов я уделял обучению. Чтобы ознакомиться с этими технологиями, у меня ушло 3 недели. Об одних технологиях я просто почитал несколько статтей, о других посмотрел видео. С такими, как Spring и Hibernate знакомился на практике - смотрел видео индусов и повторял, что они делают. Написал несколько JUnit тестов, tomcat просто установил на комп. Maven-ом подключал dependencies в pom.xml. Про Eclipse подумал, что это просто инструмент и я в любой момент смогу перейти на него с IDEA (как же я ошибался). Хоть и не был уверен в знаниях, но пришло время брать тестовое. Взял, оказалось не очень сложное, потому что за последние 3 недели я сталкивался почти со всем этим при изучении технологий. Нужно было написать веб-приложение - таскменеджер (сайт), где можно создавать задачу, изменять ее, удалять, давать ей статус, дату создания. А также к нему разработать модуль регистрации/входа. Это все можно было сделать без использования JS, красивого UI, простым HTML & CSS. В это же время появилась скидка на JavaRush и я оформил подписку, но времени на курсы уже не было. Было очень интересно делать тестовое задание. На основной функционал ушла неделя, потом еще 3 на исправление мелких багов, рефакторинг, переписывание с org.hibernate.SessionFactory на javax.persistence.EntityManager, изменение базы данных с MySQL на H2 или HSQLDB, написание JUnit тестов. Пока это все переделывал, столкнулся с тысячей ошибок, попутно научился читать на английском теперь уже любимый stackoverflow и хоть немного что-то понимать, хоть и с гугл translate. Также я боролся с Eclipse, ведь она была в списке технологий, которые мне дали на собеседовании. Скажу лишь, что разница между IDEA и Eclipse коллосальная. Представьте, что вы летите в самолете, так вот, IDEA - это самолет с пилотом, а вы спите в кресле первого класса и потихоньку летите к месту назначения, а Eclipse - вы тоже летите в самолете, но уже в качестве пилота, за бортом гроза и молния каждые 20 минут попадает вам в двигатель. Если серьезно, то IDEA много чего делает за вас, а вы об этом даже не догадываетесь, в Eclipse это все нужно настраивать, конфигурировать, прописывать. В первые дни "своего эклипса" я плевался, матерился и проявлял суицидальные наклонности, после 5 месяцев работы с этой IDE я могу заявить, что она классная, мощная и годная для работы, просто нужно привыкнуть. В итоге все получилось, было еще одно собеседование с вопросами по поводу реализации функционала приложения и я его прошел. Потом еще одно собеседование с директором. Потом некоторые люди, которые решали мою судьбу ушли в отпуск, потом были майские праздники, потом везли мой комп, еще что-то. Так прошло еще 2 месяца. За эти 2 месяца я успел пройти 13-22 уровни на JavaRush, посмотреть 2 курса Батыршынова по Spring и Spring MVC, кстати, годные курсы, но только для начинающих, потому что в основном все примеры на уровне "Hello world". И я попал на работу. Сразу же дали проект - REST API для игрушки под iOS, общение через JSON. Было очень интересно, но тяжело. Особенно тяжело было поначалу вникнуть в то, что я никогда не видел - это Ubuntu и GIT. Ubuntu осваивается без проблем, а вот GIT - штука веселая, мощная, сложная, особенно на больших проектах и в нестандартных ситуациях. Никогда не забуду свою первую зарплату, которая оказалась в 4 раза больше, чем в 1С. Сразу же, как устроился на работу, для самостоятельного изучения технологий и в качестве тестового проекта я решил написать игрушку, типа песочницы для реализации каких-то идей. И вот недавно я ее закончил. Если хотите, можете посмотреть результат (только заходить очень желательно с компа и хрома, потому что верстальщик из меня пока никудышний): http://triangles.cf Вот я работаю уже 4-й месяц. Я думал, что все сложное уже позади, оказалось, что наоборот. Впереди изучение английского, потому что, если вы его не знаете, даже если вас взяли на работу, долго вы не проработаете. Чтение документации, общение с заказчиками, написание кода и комментариев - все на английском. Еще обязательно нужно закончить курсы JavaRush, изучить паттерны, алгоритмы и прочие полезные вещи. Хочется всем пожелать удачи, легкого развития и крепкого ума. Тем, кто работает и тем, кто хочет найти работу. Все у вас получится, нужно только стремиться и делать, бороться с собой и с эксепшинами. Всем JAVA!)
Комментарии (20)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
zonder_maniak Уровень 8
24 декабря 2015
Шикарно описано. Хотел спросить
С высоты достижения Вы должно понимать насколько возможно устроится на фриланс.
Живу я в большом удалении от большого города и уезжать очень трудно(семья и все такое). Понятно что на собеседование прийдется желательно поехать. Но в общем начинать именно так есть возможность?
P.S.Если не секрет, какой начальный уровень Вашего заработка. Понятно что знания как таковы бесценны, но во сколько их оценивает работодатель))
P.S.S.Спасибо за статью.
Red_Fusion Уровень 19
1 октября 2015
Как ты занимался по 14-16 часов и не сошел с ума, тем более каждый день? У меня бывает после 8 часов котелок закипает?!
shtativ Уровень 9
1 октября 2015
Крутой) спасибо
levka Уровень 30
1 октября 2015
Ну, почет и уважуха!
dixisixi Уровень 24
25 сентября 2015
переписывание с org.hibernate.SessionFactory на javax.persistence.EntityManager
тут попрошу поподробнее, зачем вам это понадобилось? вопрос задаю потому, что сам недавно изучил основы Hibernate и не понимаю, зачем вам понадобилось переписывать SessionFactory?

по поводу требований технологий — список довольно скромный, в новосибирске и томске списки требований очень разные, но практически все из них больше вашего раза в полтора-два, это у нас такие крутые джуны или работодатели не в ладах с реальностью?
velobaduk Уровень 22
23 сентября 2015
Отличная статья. Подробная и веселая! Спасибо за мотивацию. Кстати, мы почти соседи. Я из Кривого Рога. :)
Gradus Уровень 27
22 сентября 2015
Спасибо за Вашу историю!
И куда же без банального вопроса — какой город?))