Ну вот и всё. Так быстро и незаметно подходит к концу второй(!) месяц моего самостоятельного обучения программированию под присмотром Кирилла из Хекслета. И наверно, на этом этапе уже можно попытаться подвести какие-то промежуточные итоги.
Если говорить честно, то до сих пор всё шло не совсем так, как я ожидал. С одной стороны, за это время я действительно узнал очень много нужных и важных вещей. Такого количество информации, которое успел переработать мой мозг за эти пару месяцев, мне раньше не доводилось усваивать и за полгода. Я успел прочесть несколько хороших книг, дающих фундаментальные и незаменимые знания по вопросам, связанным с программированием и саморазвитием. Я прошел несколько курсов в сети по работе с такими важными инструментами, как гит и гитхаб, научился создавать статические сайты при помощи джекилла, прочел огромное количество статей в Интернете и разобрался в таких сложных темах, как алгоритмы и шифрование данных. Я хорошо прокачал свои навыки владения операционной системой Linux, научился делать многие крутые штуки в терминале (даже играть в судоку и звездные войны! ;) Я прослушал огромное количество подкастов на тему фронтенд-разработки и уверен, что это тоже было очень полезно для общего развития.
Все это, конечно, очень круто и необходимо, однако, думаю, что вам, как и мне, кажется, что что-то тут не так и во всей этой истории не хватает чего-то очень важного и необходимого. Того, без чего не может обойтись ни один человек, если он действительно хочет научиться программированию: собственно, программирования!!!
До старта этого проекта я обучался на Хекслете примерно в течение трех месяцев. На самом деле, четырех, но там был один вынужденный перерыв, так что с точностью можно говорить о трех. На протяжении всего этого периода моим основным занятием в свободное время являлось практическое прохождение заданий. Зачастую это давалось легко и я сразу же переходил к следующему уроку, иногда приходилось хорошенько пошевелить мозгами, бывало и такое, что над одним заданием приходилось потеть целую неделю. Но я просто не мог себе позволить сдаться и посмотреть решение учителя, ведь изначально я решил, что никогда и ни за что не буду этого делать и 100% заданий должно быть решено мною самостоятельно. Да, были взлеты и падения. Временами было очень сложно, скучно, одолевали сомнения и много раз хотелось все бросить, но все это продолжалось только до очередного прохождения всех тестов. Внезапно мир вновь обретал краски, я ощущал прилив сил и уверенности в себе и снова казалось, что программирование — самая крутая в мире вещь. Написание кода действовало на меня как наркотик. Строка за строкой я чувствовал себя волшебником, который творит чудеса и управляет железным монстром по имени Компьютер, пользуясь заклинаниями на древнем тайном языке. И все это было в кайф, несмотря на все сложности, препятствия и иногда возникающие сомнения.
Но внезапно все это куда-то подевалось. Вдруг появилась вся эта лавина теории, которая поглотила меня целиком и совершенно вытеснила практику. Определенно, это не то, что подразумевал Кирилл, когда давал мне свои задания. Да и я сам представлял себе, что вот именно сейчас в мою жизнь наконец-то придёт настоящее программирование, а не просто какие-то там задачки. Но почему-то я воспринял все в каком-то ином ключе и переключился на бездумное потребление тонн информации, совершенно забросив написание кода.
Кроме того, если уж говорить начистоту: я не считаю, что использую свое свободное время достаточно эффективно. Да, времени действительно не так уж много: есть и тяжелая работа и семья и необходимый отдых, и прочие жизненные обстоятельства, отвлекающие от учебы. Но блин, кого я обманываю? Ведь я прекрасно сам вижу и знаю, как много времени я до сих пор трачу на всякие глупости, не связанные с учебой. Я могу сколько угодно рассказывать другим насколько я бедный, несчастный и занятой, но ведь в глубине души я знаю, что все это фигня на постном масле и при желании я мог бы успевать намного больше за то же самое время, если бы не тратил его на всякие глупые и ненужные вещи вроде фейсбука, чтение последних новостей о том, что ел на завтрак президент Трамп во время визита в Израиль и бездумного сёрфинга в Интернете на темы, совершенно не связанные с программированием. Все это может показаться смешным и забавным, но если серьёзно задуматься, то я считаю, что это просто катастрофа и следует срочно что-то предпринимать, брать себя в руки и мобилизироваться.
В свете всего вышесказанного, я решил для себя, что с этого момента я:
- Прекращаю убивать время в фейсбуке, даже если речь идет о контенте, связанном с программированием. Все последние и самые важные новости о фронтенде я могу узнать из последних выпусков подкастов и этого вполне достаточно для того, чтобы оставаться в курсе и не отставать от жизни.
- Удаляю с телефона приложение Facebook и закладку на него в мобильном браузере. Одного раза в день с компа — вполне достаточно, чтобы унять ломку.
- Также удаляю с телефона закладки на все новостные сайты и забываю об их существовании. В крайнем случае, о начале третьей мировой я узнаю в слаке Хекслета, ну или по ядерному грибу, растущему на горизонте за окном, так что в любом случае, ничего важного я точно не пропущу.
- В ситуациях, когда программированием заняться невозможно (например, нет с собой компа) или просто уже устал и хочется почитать что-то интересное — читать книги с телефона. Он всегда с собой: и в транспорте и в очереди на почту и даже в том самом месте, о котором вы сейчас подумали)) При этом никто не заставляет все время штудировать справочник по юниксам или по алгоритмам, это может быть и мотивационная литература и околотехническая/научно-популярная, или что-нибудь на английском, но только не постики с котиками!
- Прекращаю конспектировать книги, которые читаю. Да, конспектирование это полезно и помогает лучше переварить и структурировать в голове пройденный материал, но это отнимает очень много времени, кроме того, это предполагает наличие рядом компа или тетради с ручкой и часто вместо того, чтобы просто открыть книжку с телефона и почитать 5 минут, я вместо этого лезу в Интернет: ведь у меня сейчас под рукой нет компа и я не смогу законспектировать прочитанное! Клевая отмазка, ничего не скажешь. Фтопку! Лучше прочитать 3 книги на одну тему и получить информацию из разных источников, чем за то же время успеть законспектировать лишь одну и никогда больше не возвращаться к тому, что написал. Больше чтения и меньше отговорок и напрасной траты времени.
- И наконец, самое главное: начинаю писать код. Много кода! Потому, что иначе никак. Иначе — смерть меня, как программиста. Литература и прочая информация это, несомненно, нужно и важно, но основным моим направлением сейчас должна быть практика. И чем больше, тем лучше. Только программирование и его практические результаты, отображаемые на экране, способны поддерживать мою мотивацию продолжать начатое. И сейчас это должно стать моей основной задачей, краеугольным камнем, на котором зиждется все остальное.
Начинаю, наконец, гулять с собакой!- Шутки шутками, но на самом деле, такие, казалось бы, совершенно не имеющие отношения к делу занятия, как прогулки с животным на свежем воздухе помогают побороть лень и приучить себя к распорядку, дисциплинированности и ответственности. Ну и заодно, немного прийти в тонус и получить необходимую порцию витамина D, которого мне так не хватает из-за ночной работы и лежачего образа жизни.
Ну а теперь, после всех своих пространных рассуждений, напишу немного о том, что успел за эту неделю. Не так уж много, но похвалиться на этот раз хотя бы есть чем. На этот раз я сосредоточился именно на практике и всю неделю разбирался с программной реализацией такой структуры данных, как односвязный список и разнообразных методов для работы с ним.
Вначале я отыскал в Интернете неплохую реализацию самого списка и его узлов на JavaScript. Какое-то время у меня заняло на то, чтобы вникнуть в то, как это работает. После этого, я переписал ее по-своему, используя синтаксис es6 и реализовав то же самое в виде классов. Конечно, освежение всего этого в памяти тоже потребовало времени, особенно если учитывать, что с классами я познакомился как раз незадолго до нынешнего перерыва в практике. Затем стал добавлять по одному методы, тестируя все это дело на каждом шаге при помощи метода отладочной печати. Например, я добавил возможность добавлять и извлекать из списков узлы по заданной позиции, создавать копию и срез нужной части списка, переворачивать список, вычислять его длину, выводить на печать содержимое узлов списка и т.п. Все свои методы я написал таким образом, что их можно использовать по цепочке, применяя паттерн fluent interface, при этом исходные списки, использованные в цепочке не изменяются, а на выход отдаются их измененные копии. Эта погоня за иммутабельностью не всегда давалась легко, например, в один из дней я 12 часов подряд потратил на отладку одного единственного метода remove, поскольку его использование приводило к неожиданным сайд-эффектам. В итоге, так и не поняв в чем была причина, я плюнул и переписал функцию с нуля таким образом, чтобы она работала совершенно по другой логике. В итоге получилось даже более коротко и симпатично). Ну и наконец когда все было готово, залил все это дело к себе на гитхаб. Так что кому интересно — можете зайти и посмотреть.
В принципе, кроме списков на этой неделе я больше ничем не занимался, но по идее, так, наверно, и должно быть. И это именно то, к чему надо стремиться в дальнейшем: больше практики и меньше пустой траты времени.
Ну конечно, были еще подкасты, бла-бла-бла, но это как бы само собой разумеется и особо здесь рассказывать нечего.
На этом все, пойду дальше совершенствоваться в мастерстве программирования. Теперь буду заниматься тем же самым, но уже с двусвязными списками. Думаю, на основе уже имеющегося кода все будет намного проще и быстрее реализовывать. В общем, будем пробовать.
Ну а вам, дорогие читатели — хорошей недели!