Привет, парни! Когда-то, почти полтора года назад, я читал здесь посты о том, как люди становились программистами - по-разному - и мне это правда помогло, показав, что такое возможно. Что ж, пора платить ту же дань, для будущих переквалифицировщиков. Надеюсь, кому-то это так же поможет, как помогло когда-то мне. Итак, поехали!
Мой путь в программирование можно поделить на два “плана”, уровня: один - материальный, другой - идеальный. Начнем с первого - он забавный.
Когда-то давно, 29 лет назад, я родился в очень странной семье. Мои родители были выпускниками журфака, бабушка - пианистка, дедушка - физик. С детства я решительно ненавидел читать, но любил музыку и математику. Мама, будучи преподавателем английского, с 4 лет меня обучала языку, а бабушка с 5 лет - музыке. В школе я был сорванцом и затейником, по русскому и литературе - катастрофой, в геометрии и физике - любопытным пионером. Но в 13 лет случилось несчастье, я получил компресионный перелом позвоночника и, не имея возможности сидеть, стал много играть на кларнете. Так я оказался в музыкальном училище через три года.
Но которое не привело меня в Гнесинку, где преподает, кажется, и по сей день мой профессор, И.П. Мозговенко. На 4 курсе я надумал жениться, решил, что пора работать - и стал готовиться к этому.
А что умеет человек, который 7 лет профессионально играл на дудке? Решив, что мне не хватает “кругозора” и всего гуманитарного, что входило в круг обязательного лет 130 назад, я оказался на журфаке, в след моих родителей, сам, по собственной воле.
Забавно, но писать именно в журналистике мне так и не пришлось, за исключением пары месяцев работы в КП, в новостном отделе. Я стал преподавать язык (англ) сам, лет с 20, в 23 на год сгонял в Питер, открыл два Циферблата там (антикафе). Вернувшись, остановился на работе с языком: учил, переводил, работал редактором, написал кое-что в качестве лит.раба (часть книги).
И тут-то я стал закисать. И тут-то мы переходим ко второй части, идеальной.
С детства мне нравилось все необычное. Сначала мне нравилась идея ангелов и бога - самому хотелось летать и помогать людям. Мама, сказав, что для этого сперва придется умереть, ловко остудила мой пыл. Но вектор порыва остался.
Когда занимался академической музыкой, мне было приятно думать, что я занимаюсь чем-то прекрасным само по себе - и что может освещать - и освящать - жизнь других людей. На журфак я шел, отчасти, надеясь, что с помощью журналистики можно сделать жизнь в России лучше. Но те отрывки истории России, которые мне пришлось изучить, донесли очевидное - и с моими идеями было покончено.
В итоге, мне осталось утешать себя тем, что в педагогике я могу делать небольшое “добро” для страны, для людей, а работой со словом занять себя трудным и интеллектуальным трудом. Но и тут...
Педагогика быстро превратилась в рутину. Я видел, что язык знают, в итоге, те, кто им пользуется и его любит, а не кто учит. А полезность работы со словом…
Когда я говорил, что я работаю переводчиком или что пишу, я чувствовал взгляды людей, мол - не высоко, парень, не высоко. Что качественный перевод или качественный текст настолько нисшевый товар сейчас, что я не могу представить себе уважающего себя и нуждающегося в средствах человека, кто мог бы им заниматься. И если когда-то работа со словом была элитарной (XIX век), то сейчас я просто не в обоиме. Я в прошлом веке. Все мои знания литературы, истории, текстов, никому толком не нужны. Я могу развлекать этими знаниями собеседников, но продать это некому - с этим можно только корешиться с нужным людьми (что я вижу ниже своего достоинства) либо идти на ТВ и кромсать бюджет на свой лад (что я ненавижу).
И тут-то я стал закисать. Я стал погружаться вечерами в игры, проводя огромное количество времени на англоязычных форумах, изучая игровую журналистику и т.п. Я строил графики для игры типа Цивилизации, искал оригинальные способы перепройти Dark Souls и т.п. Жена, видя как занудно и упорот я играю в игры, как-то в шутку сказала, что с моим-то рвением в играх неплохо было бы попробовать заняться программированием.
И я подумал, а отчего бы и нет. Дальше - путь обычный. Гугл, JavaRush - меня затянуло; шло легко, быстро, я был на коне. Потом встретилась многопоточность - и я вообще засомневался, программирование - это для меня? Так или иначе, дойдя до 23 уровня, я стал задумываться, а что я, собственно, буду делать на работе. Распустил, скрепя сердце, моих учеников, оставил переводы - и стал присматриваться к вакансиям.
Выбор, по сути, был такой: или java jun или android jun. Я, решив, что android будет повеселее, стяпляпил одно приложение и стал ходить по собеседованиям, который получал с известного всем сайта по поиску работы (обойдемся без лишней рекламы).
Если интересуют сроки, то было так: летом, в августе, я начал изучать программирование, через год разогнал учеников и уперся полностью, через два месяца - на собеседование с готовым проектом; еще через месяц меня взяли на стажировку, где я и остался.
Что можно сказать о моем опыте именно устройства на позицию Android джуна - ошибка была полагать, что мне, с примерным знанием Java, хватит совсем небольших знаний по Android, а остальное подтянется. Android - отдельная платформа, в которой куча своих классов, сложностей и подводных камней, типа памяти и скорости отрисовки экранов. О чем я не знал вообще ничего, когда начинал. Так как меня взяли?
Я сейчас очень странную вещь скажу - я сам не до конца понимаю всех выводов и даже входных данных этого явления - но для устройства на работу мне мои знания программирования не пригодились вот от слова вообще. Мне задали один или два глупых вопроса, типа, как у меня в приложении post запросы выполнялись и какие структуры данных я знаю (я назвал штуки три, которым пользовался, не сказав даже про деревья). Так что же?
Во-первых, мне просто повезло. Им нужен был срочно сотрудник (набрали больше проектов, чем могли сделать), на рынке с мобильными разработчиками туго - и парень, которого они нашли, был готов выйти спустя полтора месяца, а я - сразу, и мне решили дать шанс. Мораль - пробуйте, даже когда шансов мало. Не пробуете - шансов нет. И мало - тоже количество.
Во-вторых, мне помог не связанный с программированием бэкграунд. Оказалось, что ген.дир по совместительству музыкант, и мой муз.колледж завоевал его личный интерес и симпатию. Опыт руководителя косвенно свидетельствовал, что я человек ответственный, грамотная речь - адекватный, а то, что женатый - косвенно о том, что надежный. Женатые меньше рискуют, у них есть (в теории) ответственность. Вывод - лишних знаний не бывает.
В-третьих, личное впечатление. Я открытый человек, без особых закидонов, люблю общение. В маленьких коллективах это важно, так как кому приятно 200+ дней в году смотреть на буку. Вывод, на работу берут человека люди, а не винтик шпунтика.
В-четвертых, образование. МГУшный диплом косвенно говорит о способности поглощать и обрабатывать информацию. Теме “пригодилось ли мне мое образование” я бы мог посвятить научную работу - и не прийти к однозначному выводу, но одно точно: я научился обрабатывать огромные пласты информации и как бы чувствовать, что первично, что вторично в любой области, с которой сталкиваюсь. И этим навыком до журфака я не обладал.
В-пятых, у меня был мотив идти в программирование, о котором я честно рассказал на собеседовании. Ведь человек может многим в жизни заниматься, в конце концов все упирается в то, в чем он себя может найти и реализовать. И для меня это, оказалось, программирование. На вопрос, почему я вдруг решил податься в эту область, я честно сказал, что, во-первых, я имею слабость до алгоритмов и логических задач, а, во-вторых, мне нужна сложная логическая нагрузка - без нее я как бы простаиваю в стойле собственного потенциала.
В итоге, я достиг своей цели - получил работу программистом, и, если честно, как только получил - сразу спросил себя, успех ли это? Получать я стал в три раза меньше, стресс, связанный с количеством нового, ощутим и не маленький. Программисты порой - очень своеобразные люди, и с некоторыми мне тяжело найти общий язык (а некоторые из них - абсолютнейшие душки).
Но в итоге, я прихожу к выводу, что это действительно успех - и что я принял правильное решение. Во-первых, я четко знаю, что то, чем я занимаюсь, это, в некотором роде, арьергард современной культуры. Надо мной уже не смеются, когда я говорю, что я разработчик. Мы делаем нужное всем, сейчас все пользуются результатами нашего труда, и без него свою жизнь большинство слабо представляет. Во-вторых, в перспективе меня ждут многие еще более интересные отрасли (например, андроид в интернет-вещах, в автомобилях), другие города (хочу вернуться в Питер), другие страны (почему бы не пожить в другом месте, если языкового барьера нет?). В-третьих (и это было одной из причин оставить работу со словом и педагогику) - в третьих, программирование - это поток нового на всю жизнь. Да, скажете вы, это стресс, но отсутствие нового - это смерть. Это тоска. Люди, которые погружаются в рабочую рутину, немножко умирают внутри. Ведь детство - это когда вокруг новое. Программисты в чем-то всегда дети, потому что мир для них - вернее, в мире для них всегда есть новое.
Наверное, другие выводы и другие мысли посетят меня спустя год, пять, десять на счет этой вехи в моей жизни. Возможно, я когда-нибудь оставлю и эту профессию и вернусь к письму - кто знает. Но пока мой опыт такой, им и хотел поделиться. Дерзайте те, кто в раздумье. Жизнь одна, зачем ее тратить в нерешительности?
Успехов!
ps
Рассказ получился довольно выборочным, но занудства освящать каждый аспект методично не хватает. Есть вопросы - задавайте!
mshvdvsk
28 уровень
Интересуют следующие вопросы:
До какого уровня JavaRush дошли в итоге?
Как понимаю стажировку JavaRush не проходили?
Какой город, Москва?
Обговоренный срок стажировки на текущем месте?
Зарплата если не секрет (стажировка / после)
В остальном, желаю успехов и побед! У вас все получится, так держать ;)
1) 26 — дальше стал сильно чувствовать, что идет что-то совсем не то. Я не советую бросать ресурс после этого уровня, но начинать присматриваться к реализации самостоятельных проектов.
2) Нет, не проходил.
3) Да, Москва :)
4) 2 месяца, хотя по факту вышло три — забыли начать оформлять документы :D
5) 20/40 — что вообще ооочень мало по рынку, но, тк я и без образования, и без опыта, согласился. Средняя по рынку для Juniour'а — 60.
Спасибо большое!
Библиотеки: Picasso и Retrofit встречаются почти в каждом проекте, их я бы советовал смотреть новичкам до выхода на работу.
Источники: определенных, к сожалению, нет.
Обучался Android'у так:
1) посмотрел тестовые задания (обычно что-то типа приложения, которое берет список с сервера, показывает его в списке, при клике на элемент — открывает его содержимое, которое тоже тянет с сервера; опционально присыпать Dependency Injection, Cache, etc);
2) посмотрел обучалки по подобным проектам и выписал непонятные классы/библиотеки;
3) посмотрел похожие open-source проекты и выписал непонятные классы/библиотеки;
4) взял список и в порядке того, что наиболее непонятно/интересно, стал гуглить туториалы;
5) profit!
В моем подходе есть один изъян — я не читал документацию и исходники. Помню, до рабочего опыта мне было дьявольски тяжело их читать. Это была абсолютная теория в вакууме, я совершенно не мог «увидеть», что из этого и какое имеет отношение к жизни. Сейчас же я залатываю «дыры» в своем понимании базовых элементов, читая вот это все — первоисточники. Советовать ли новичкам это делать? Не знаю. Но знайте, документация и исходники — это ваша библия. Ну и еще статьи тех, кто писал исходники :))
Вопрос, что критично, очень зависит от ситуации. Если устраиваетесь в фирму, где один продукт и он сильно завязан на SQL, вас о нем точно спросят. И качество ответа может сильно повлиять на решение. Если в студию, где я работаю, то его там даже не используют — пока, по крайней мере, я с ним не столкнулся. Но вообще программисту придется познакомиться с SQL рано или поздно. Поэтому лучше это сделать во время учебы, а не работы, где больше стресса и меньшие сроки.
С картами я сам не умею работать и не работал. Но я видел вакансии, где этот опыт был обязателен (правда, это не уровень новичка).
В портфолио было одно приложение, которое не смотрели.
С REST было тяжеловато, пот
Да, вы, в общем-то, правы. Только тихонько замечу, что везением я назвал одну из первых причин почему меня взяли в конкретный офис. Им срочно нужен был сотрудник, и я лично понравился. Этого могло не случиться, если бы я пришел на пару месяцев позже, когда бы они взяли еще одного новичка, а директор бы уехал в отпуск) Да, это не означает, что я бы не устроился вообще — наверняка, в конце концов, меня бы кто-то взял. Ведь чем больше пытаешься, тем больше ты знаешь, тем привлекательнее ты для работодателя.
Но вообще элемент везения не стоит… презирать, что ли. Многие очень успешные люди признаются, что им повезло. Вот даже посмотреть на супер удачные игры, типа angry birds — студия делала игры, но не очень. Потом решила попробовать последнюю перед банкроством — и она «взлетела». Сделали они ее принципиально лучше, чем предыдущие? Подходили к ее разработки концептуально иначе? Ожидали такого успеха? Скорее всего, нет. Просто на рынке что-то взлетает, что-то нет.
Так же в жизни. Иногда мы случайно нравимся женщинам не нашего, хм, ранга. Иногда случайно кого-то постигает несчастье. А иногда удача.
Я моложе был, тоже не принимал это. Но опыт доносит то, на что юношеский пыл позволяет закрыть глаза)
Я бы советовал в портфолио класть нечто, что работает с API. Умение работать с POST запросами — очень распространенное требование к новичкам в любой области программирования. Как приятель сказал, на собеседованиях это своего рода «тест на дебила».
ПС думаю многим было бы интересно если бы подробнее рассказал чем занимаешься на работе.
Я работаю в студии, так что мы выполняем заказы. К нам приходят люди, которым нужно приложение. Мы оговаривали, что им нужно, делаем прототипы, выбираем стиль, а дальше дизайнеры рисуют, а мы это оживляем. API чаще всего на нашей стороне, но не обязательно.
Получается, мне дают макет экрана, а мне нужно его сверстать. Чтобы списки крутились, кнопки нажимать и выглядело все, как на макете. Потом, когда API будет готов, нужно будет приложение подключить к нему: чтобы данные получал, отправлял, отображал, обновлял.
Иногда я правлю баги в существующих проектах: у нас есть обучающее языкам приложение, вот мне там нужно было исправить несколько багов, типа когда два игрока начинают совместную игру, но у одного отсчет начала начинается с задержкой, а другой его не ждет, и игроки «теряются». Или нужно было перерисовать анимацию элементов как в iOS (это боль).
В студии очень разнообразный набор проектов. Мы делаем и мессенджеры, и финансовые приложения, и что-то типа тиндера, и игры, и приложения для горнолыжных курортов, с прорисовкой маршрутов по картам — в общем, задачи разнообразные.
Обратная сторона медали: на вас большая ответственность, так как проекты относительно маленькие в мобильных приложениях — один человек за месяц-два может сам написать его. Например, в банковской среде, если вы разрабатываете сервисы, вы создали тему лишь его маленькую часть под четким руководством сверху, снизу и сбоку. В мобильной сфере все на вас, и все ваши ошибки будут очень видны.
Например, мне дали исправить баг в приложении, когда приложение не обновлялась сразу после того, как поймали сесть. Я нашел таймеры сброса, и заставил обновляться их сразу до 5 секунд в случае, если подключиться не удалось.
Но я не проверил, какие еще методы, классы и сервисы завязаны на этом таймере. Оказалось, что на нём еще завязан аптейд какой-то довольно тяжелой части приложения, так что за неделю мой «патч» выкачал по 4 гига с устройства, которо