Артур Думчев

Как я бросил всё и стал Android-разработчиком

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

Время чтения: 10 минут
Как я бросил всё и стал Android-разработчиком

Несколько лет я хотел стать программистом и каждый раз отказывался от этой идеи. Гуманитарию, который уже пошёл по другой дороге, не силен в математике, в 24 года менять направление развития казалось опасным начинанием, лишённым смысла. Ведь кто-то взялся за программирование ещё до школы!

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

Если раньше моими кумирами были Шерлок Холмс и Тирион Ланистер из «Игры престолов», то теперь я решил равняться на этого супермена с гуманитарным образованием. Шутки шутками, но статья произвела на меня сильное впечатление, и я решил попробовать.

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

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

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

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


Как я сфокусировался на месяц

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

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

Источник: xkcd.ru

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

Мне попадалось сообщение на форуме от студента, который ходил на курсы по программированию, в духе: «программистам приходится много работать, они должны работать ещё и дома… очень тяжелая профессия…» Сейчас я могу сказать, что этому человеку вряд ли нужно идти в разработчикиии. Потому что программист не ДОЛЖЕН, и ему не ТЯЖЕЛО — он ХОЧЕТ и ему ИНТЕРЕСНО. Конечно, я не могу назвать себя программистом, но рискну сказать, что если программист ДОЛЖЕН и ему НЕ ИНТЕРЕСНО, то либо он не в том проекте, либо не в той профессии. Когда я писал свои первые приложения, я как будто играл в игру — постоянно возникают новые задачи, и я должен их решать. Решения могут быть разными, простор для фантазии безграничен. Это поинтереснее Skyrim или GTA.


Как я обучался: шкатулка с инструментами

Как человек, который последние 2 года занимался вопросами памяти и запоминания, я знаю о некоторых минусах интенсивного обучения. Мной же написанные статьи (Горячее время в обучении: часть 1, часть 2) почти полностью противоречат тому, что я сделал.

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

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

Приведу пример типичной карточки средних размеров:

 

 

Есть и другой тип — на понимание принципов. Здесь я отвечаю, не подглядывая в ответ.

 

 

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

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

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

Например, я начал книгу Android Development и очень легко прошёл 200 страниц, а потом вообще перестал что-либо понимать. Тогда я отложил книгу и взял обычный учебник по программированию на Java, там застрял на 300-й странице. Затем перешёл на онлайн-курс по разработке под Android и проработал все уроки, кроме последнего — с ним я не справился. Когда вернулся к первой книге, прежние проблемы показались мне пустяком. Помимо этого я параллельно читал бумажный учебник по Java перед сном, а во время еды смотрел видеоуроки на телефоне.

Вообще я заметил, что все курсы по программированию построены так. Сперва тебе часами объясняют простейшие вещи:

а = 1;
b = 2;
с = a + b;
— Чему равно с?
— Трём!
— Поздравляем, вы завершили 50% курса!

А затем за несколько минут пытаются дать остальное:

— Хорошо, с = a + b, но зачем вам писать это каждый раз? Если вы перенесёте это в метод, то избавите себя от лишней работы. А вообще, вы могли бы реализовать абстрактный класс или интерфейс и через них уже решать подобные задачи. Попробуйте.
— Что?! Какой ещё абстрактный класс? Зачем использовать функцию? Зачем нужны интерфейсы и абстрактные классы?.. Похоже, программирование не для меня…

Примерно так это всё происходит.

Источник: joyreactor

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


Начинайте решать практические задачи как можно раньше

Этот принцип заслуживает заголовка. Если вы решаете реальные проблемы, вам будет интересно. Вы научитесь именно тому, что нужно вам. На четвертый или пятый день, когда я ещё занимался в метро, я начал писать программу, которая считала интервалы для Anki. Меня интересовало, сколько карточек нужно будет повторять в день через полгода, если всего ты решишь выучить 500 штук.

 

 

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

Другой пример: позавчера я зашёл на КиноПоиск и обнаружил совсем другой сайт. Но мне нужен старый КиноПоиск. Вы видите тут возможность для обучения? Я увидел ии написал приложение Kinopoisk vote. Потому что проходить уроки и выполнять задания — скучно. Интересно делать проект. Пусть приложение получилось так себе, скачает его человек 20 и денег я с него не получу. Сейчас главное, что я многому научился, пока его писал, а писать его было интересно.

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


Ресурсы, которыми я пользовался

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

 

 

Очень удобно читать комментарии рядом с кодом, а не перелистывать страницу, чтобы прочесть, что делает та или иная строчка.

 

 

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

Удобны курсы на Treehouse — тебя ведут за ручку с самого начала, всё подробно объясняют и дают промежуточные задания (я их, кстати, никогда не выполнял). Также можете посмотреть codecademy, codecombat, codebabes.

На мобильном прошел до середины: Изучаем java, Learn java. Ежедневно заходил повторять пройденное в Anki.

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


Итоги марафона

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

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

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

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

Мнение автора может не совпадать с позицией редакции.

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.
12 октября 2015, 15:00

Оставайтесь в курсе


У вас есть интересная новость или материал из сферы образования или популярной науки?
Расскажите нам!
Присылайте материалы на hello@newtonew.com
--