Всем здравствуйте, меня зовут Евгений, и я уже 2.5 месяца работаю программистом. И пишу этот пост я только по той причине, что хочу поведать миру, как я "докатился" до такого. Как несложно догадаться, под выражением "докатился", я имею ввиду добился. И да, могу сказать, что это было не совсем просто. Но обо всем по порядку и более структурированно.
Я учился в университете по специальности "Учитель информатики и английского языка". Это довольно прикольно, потому что это классное сочетание - ты просвещаешься в сфере информационных технологий и в то же время постигаешь другой язык, который, кстати, совсем не лишний в той же сфере. Ну и кроме всего, специальность педагогическая, так что параллельно обучению предметам еще учат тому, как эти предметы преподавать. Все круто, но понял всю прелесть своей специальности я только спустя два года после окончания университета.
Первые два года учебы я был сильно заинтересован программированием, математикой и техническими дисциплинами за исключением, разве что, физики. Я был лучший в группе по информатике и всему, что было с ней связано, но не могу сказать, что у меня была сильная мотивация кодить днями и ночами, изобретая что-то грандиозное. То есть я соображал, но в прикладном плане абсолютно не применял ничего. Да и что можно было изобрести, зная паскаль на школьном уровне (а примерно в такой мере нам его и преподавали). А после того, как преподаватель дисциплины "Программирование" отчитал курс лекций, он выдал гениальную фразу - все, что мы сейчас изучили, устарело 15 лет назад.
Не особо впечатляет, правда?
Параллельно с этим, нам преподавали такие предметы как Алгоритмы, Дискретная Математика, Математическая Логика и Абстрактная Алгебра. И да, сейчас я могу сказать, что свое внимание надо было уделять именно этим предметам, потому что это фундаментальные вещи, понимая которые, все остальное будет казаться до боли простым. Ведь ваш мозг приобретает необычайную гибкость, когда вы рассуждаете об абстрактных понятиях. Но тогда я этого не знал. И просто халатно относился к учебе, сдавая все, так сказать, на троечку, лишь бы от меня отстали эти люди, ведь "мне это не нужно, дайте мне программирование в чистом виде". Вот только эти люди не объяснили, что эти предметы важнее решения задач на паскале, где нужно найти корни уравнения. Они просто дальше читали скучные лекции про интерполяцию и аппроксимацию (ну например).
Да, получилось так, что 2 последних года учебы я ненавидел IT и все, что с ним связано, и ушел постигать дзен в других областях. Закончив учебу, я не знал, кем я буду, что мне делать, чем заниматься по жизни, и окончательно потерял веру в себя. Я стал овощем - просыпался, сидел до посинения в соцсетях, играл в видеоигры.
Иногда я видел в ленте новостей мотивационные изречения о том, как легко стать программистом, только вам надо будет зайти на javarush и "поиграть в игру". Что ж, я решил попробовать, так как последним тупицей я себя не считал, и знал, что при должной мотивации у меня все может получиться. Javarush смогли завлечь, я даже начал выполнять какие-то задания и чувствовать себя человеком, который пишет код. Нет, не программистом - а именно каким-то существом, которое делает, что ему говорят, но без разъяснения каких-либо причинно-следственных связей - почему это так работает и как я смогу применять это в реальности. Логично, что через пару-тройку месяцев и 6 пройденных уровней на javarush, я понял, что я ничего не понимаю, и всё это меня ещё больше запутало. После каждого уровня вам говорят, что программистом быть клёво, престижно и круто в материальном плане, но я не чувствовал, что у меня в голове появляются структурированные знания.
Я же хотел ясности - что мне делать и как мне это поможет в достижении моей цели - а ведь после мотивационных постов, я себе ее поставил - хочу стать программистом. Но не просто найти работу, а начать шарить и разбираться в задаче любой сложности, которая может передо мной возникнуть. Совсем абстрактно выразившись - я хотел знать.
Благодаря интернету, javarush и контексной рекламе в моем браузере, я понял, что java - это крутой язык и надо учить его, вот только javarush я уже отбросил и отрекся от него. И я нашел другой ресурс по интересовавшему меня языку - java.hexlet.io. Там была опять же красивая, мотивирующая страничка, которая меня завлекла, и я решил попробовать свою судьбу здесь. Формат уже был другой, и я считаю его более правильным для обучения - это видео лекция, да ещё и в виде диалога опытного преподавателя с еще совсем зеленым учеником. И прогресс пошел. К концу курса мы должны были написать игру Крестики-Нолики. Я проходил урок за уроком, выполнял практические задания и погружался постепенно в уже знакомую мне яму непонимания. Код разделяли на какие-то контроллеры, модели и представления, но я не понимал зачем. Я хотел ясности, но не встретил её - я не понимал. Я начал думать, что тут только два варианта - либо я тупой и ничего не понимаю, либо люди плохо объясняют материал. Принять первый вариант означало опустить руки, сказать себе - ты дурак, иди работать дворником, там не нужно думать и что-то понимать, программирование это не твое. И искать себя в другой сфере. Выбрать что-то полегче.
Но я выбрал второй вариант - я упорно думал, что надо найти место, где все хорошо объяснят - чтобы я понял. И думал я так, потому что реально знал - я же сам учитель, и я люблю объяснять вещи людям, я хочу их объяснять так, чтобы все было кристалльно ясно. Я хотел найти как раз такого "себя", который объяснит мне все так, чтобы было понятно. И я нашёл. И совсем рядом - это hexlet. Я посмотрел вебинар "Что нужно изучать начинающему программисту", и в мой мозг закрались мысли по поводу того, что все, что я делал раньше, было неправильным.
Я увидел другую сторону подхода к обучению программированию - неважно, какой язык вы будете учить, важны базовые знания фундаментальных вещей. Я начал постигать программирование через курсы по PHP, но эти курсы были не про язык: там задвигались идеи из книги "Структура и интерпретация компьютерных программ". И мне начало становиться яснее. Я стал постепенно осознавал все трудности, с которыми я столкнулся, начался процесс выползания из ям непонимания. Вещи, которые я изучал, были с первого взгляда странными и порою из ряда вон выходящими - я больше не слышал про переменные, циклы и массивы. Порядок вычислений, итеративный и рекурсивный процессы, лямбда функции - я узнавал это, и мне нравилось. Мозг пришлось повернуть в другую сторону. Для каждой задачи у меня уже находилось по нескольку решений. И нет, я не хочу сказать, что я моментально забыл про все, что знал ранее, и выкинул этот пласт из головы. Просто, оказывается, подойти к чему-то можно с нескольких сторон, и в плане обучения программированию есть другой подход.
Я проходил различные курсы - про абстракцию данных, функциональное программирование, не обошел стороной и императивное. Даже появился целый план прохождения - карта обучения. Я ему следовал, учился, проходил курсы, читал и решал СИКП, и в голову приходили знания. Что самое важное, там был чат. Я мог забуксовать на сложном моменте, но после того как я спрошу, что делать в определённой ситуации - мне могли дать вектор, следуя которому, я смогу сам найти ответ. Главное понять, почему человек что-то не понимает, и выявить, в каком месте пробел, а дальше всеми способами восполнить его. Вам не должны давать ответ на вопрос "а как мне получить наименьшее значение в списке?" - лучшее, что можно сделать - это подвести человека к ответу, чтобы рассуждения шли из его головы. Пусть он, к примеру, даст ответ на вопрос "А что такое список, и как с ним работать?" или "А как вы пытались решить поставленную задачу и что для этого сделали?". Если человек даже не пытался решать, а сразу полез к знающим людям за ответом, это неверный подход. Представьте, что вы уже работаете - вы же не будете круглый год доставать старшего товарища только что возникшим в вашей голове вопросом без единой попытки разобраться? Ему это надоест, и он скажет - разбирайся сам, у меня есть свои дела. К этому все и придёт, и этому надо научиться - находить ответы самому. Именно такой подход и используется на hexlet'е, что мне и понравилось. Проходя курсы, я опять же учился формальным вещам, оторванным в большинстве своем от реальности, но я уже мог что-то сделать сам, воспользовавшись тем, что я узнал. И однажды появилась такая штука, как онлайн собеседование. Вы общаетесь с вашим потенциальным работодателем, (а им, кстати, был один из создателей этого самого hexlet'а - Кирилл Мокевнин, который является автором большинства курсов) после чего он выносит вердикт, брать или не брать вас на работу. Только на самом деле вас не примут, а просто скажут, прошли ли вы собеседование или нет. И скажу честно, я не надеялся, что смогу пройти, а просто хотел оценить свои способности. И оценил - я не прошел его, но в который раз не опустил руки и просто учился дальше. И все равно боялся идти на реальное собеседование для приема на работу, пока однажды не попал на такое. Спустя два месяца после этого онлайн собеседования мной заинтересовались. Мне написал Рахим, еще один создатель хекслета и так же автор некоторых курсов, сказав, что одна компания хочет пообщаться со мной на тему найма на должность Web-разработчика. От меня хотели пример написанного мной кода, после чего мне дали тестовое задание. Я с ним справился, хоть и не сразу, и меня пригласили на собеседование. Полтора часа беседы со старшим программистом и исполнительным директором и бинго - меня взяли! Это Web-студия, и я считаю, что для первой работы это вполне хорошее место. Так что не теряйте рвение и мотивацию - и все получится!
Продолжение следует...
Здесь оставлю ссылки на упомянутые мной ресурсы и видео:
- JavaRush
- Java Hexlet
- Hexlet
- Вебинар "Что нужно изучать начинающему программисту"
- Публичное собеседование: Евгений Синицын