Текст книги "Книга разработчика на каждый день"
Автор книги: Михаил Ковалев
сообщить о нарушении
Текущая страница: 1 (всего у книги 2 страниц)
ВВЕДЕНИЕ
Я работаю разработчиком программного обеспечения вот уже 8 лет. За это время я сумел вырасти до Lead Software Engineer, попробовать себя в роли тим-лидера, ментора, выступить на многочисленных конференциях и попробовать кучу технологий на вкус. Гордиться особо нечем – я каждый день вижу разработчиков, которые куда более успешнее, моложе, талантливее или смышленее меня. Они занимаются той же самой рутиной, что и все разработчики. Но при равных условиях кто-то доходит до старшего разработчика за 2 года, а кто-то сидит в рядовых 10 лет. Но это часто не имеет какого-то существенного значения, так как это их собственный выбор. Все мы разные. У всех нас разные способности, и мы ставим перед собой разные цели. И добиваемся разных результатов в равных условиях. Книга эта не о том, как вырасти быстро бесплатно без регистрации и смс, а о том, как вообще можно расти.
Мой путь был тернист и полон трудностей. Развиваться как разработчику мне не давалось легко. У меня нет специального образования. В школе я изучал французский, который подарил мне скорее гуманитарное мышление. Высшее образование инженера по автоматизации немного помогло, но не дало никакой базы и практических навыков для становления меня как программиста. Поработав пару лет тут и там, я понял, что пора уже что-то с этим делать, перестать размениваться на малоинтересные непритязательные занятия и все-таки осуществить школьную мечту – начать писать код. Несмотря на практически полное отсутствие необходимых для профессии навыков, по крайней мере, сильное желание у меня было не отнять.
Не имея никакого понятия об объектно-ориентированном программировании, я начал искать место, где бы можно было начать и научиться хоть чему-то полезному, потому как идея учить то – не знаю что, мне совершенно не нравилась, а в какую сторону двигаться я вообще не представлял.
Очень хотелось программировать, но очень не хотелась страдать за учебниками и бестолковыми материалами, коими в избытке изобилует интернет. Чтобы найти действительно стоящий материал, нужно потратить кучу личного времени, а главное – нужно знать, что ищешь. А ведь материал может и не зайти или, по крайней мере зайти не сразу, а это требует еще больше временных затрат.
Расскажу короткую историю из собственного опыта. В школе я изучал 2 иностранных языка: французский и английский. При этом французский в нашей школе преподавали на супер повышенном уровне, начиная с первого класса. Школа эта, а ныне лицей, наверное, и сейчас остается лучшей в своем роде, когда дело касается французского языка. Английский же язык в учебную программу был включен только с пятого класса, и количество учебных часов было ровно в 5 раз меньше, чем предусмотрено у французского. Как Вы думаете, насколько успешен я был в обоих языках по окончании школы?
Каждый божий день я возвращался из школы, выполнял все домашние задания за полчаса, а дальше… Дальше я садился за французский, и прикладывал титанические усилия, чтобы выполнить все заданное на дом. Компьютера в школьные годы у меня не было и в помине, как и у 90% моих одноклассников, поэтому я делал все ручками. Приходилось включать собственную голову и много-много думать. Особенно много времени отнимала работа со словарем, а художественный перевод или заучивание кусков текста на память были смерти подобны. Чтобы найти нужный перевод, приходилось по несколько минут листать засаленный от частого использования словарик, перебирая десятки вариантов. Эту незатейливую процедуру я был вынужден повторять для каждого слова. Все эти ужасно скучные, нудные занятия порядочно изнуряли и отнимали по 2-4 часа почти каждый день. О, как я ненавидел такую учебу. Это было по-настоящему отвратно и очень непродуктивно. Даже в вузе учиться было в определенной степени легче, чем в школе. Приходилось во многом разбираться с нуля, но, по крайней мере, я не тратил по 4 часа времени к ряду на занятия, которые ненавижу.
А всем этим я занимался лишь потому, что боялся получить плохую отметку. То есть мотивации заниматься французским языком у меня не было вообще, но было очень страшно последствий. Я бы с удовольствием отказался от этого предмета вообще и даже пытался это сделать, но, к сожалению, это было невозможно.
Английский! Чудо, а не язык! Я даже ждал, когда же его начнут нам преподавать. Это был глоток свежего воздуха, и один из моих самых любимых предметов. Учить английский мне было очень легко и очень интересно. В то время я играл в видеоигры, среди которых преобладали как раз английские версии. Я с удовольствием читал диалоги даже без аудио сопровождения. Возможно, поэтому у меня был самый богатый словарный запас в классе. А главное, на выполнение домашних заданий я тратил на порядок меньше усилий и времени и делал это с большим удовольствием. Что и говорить, когда по окончании школы уровни владения обоими языками были примерно равны.
Как Вы поняли, отношения у меня с изучением французского языка не заладились и оставили на душе глубокий след. С тех пор сознательно и подсознательно я по возможности избегаю тяжелой для себя учебы. У меня сложилась стойкая неприязнь на этот счет, и всякий раз, когда я встречаю вопрос, к которому не знаю, как подойти, ко мне подкрадывается чувство отвращения и тошнота. Ассоциация “Тяжелая учеба – это страдание и трата времени” дает о себе знать. Может быть, поэтому я так ленив и стараюсь найти наиболее оптимальный путь с наименьшими затратами, стремлюсь выполнять работу хорошо с первого раза, чтобы потом не пришлось переделывать и тратить еще больше времени и сил.
Так вот, к чему это я все?
В своей книге я рассмотрю несколько типичных проблем, которые показались мне наиболее важными. Некоторые из них будут повторяться с целью рассмотреть ситуацию с разных сторон и выявить несколько возможных путей решения.
Я верю, что путь к тому, чего я так хочу, к тому, что мне очень нравится, тоже должен приносить удовольствие. А, собственно, почему нет? Это чертовски мотивирует, дает позитивный настрой и силы продолжать в достижении намеченных целей и развиваться дальше. Кто сказал, что я должен тратиться на неинтересные темы, сложные книги, и проводить все свободное время за учебой, чтобы получить результат? Если такой подход Вас устраивает, и Вы полностью им довольны – ничего не имею против. Главное, чтобы Вам этот путь приносил плоды, и Вам было бы комфортно так работать.
Приведу ещё один небольшой пример. Читая книги по саморазвитию, я заметил любопытную тенденцию. Многие успешные авторы так или иначе говорят о том, что они добились успеха благодаря тому, что очень много трудились. С этим сложно не согласиться. Далее некоторые из них приводят пример, как они работали или продолжают работать по 12-14 часов в сутки и даже больше, а спят они всего несколько часов.
Честно скажу, я на такое физически чаще всего не способен. Мне не достаточно 4-6 часов сна, чтобы хорошо себя чувствовать и эффективно работать на следующее утро. Не знаю, связано ли это с особенностями моего организма или я не достиг достаточного уровня мастерства. Важнее здесь то, что такое количество времени вкалывать без последствий для здоровья могут разве что бессмертные пони. Более того, я придерживаюсь мнения, что работать много и работать долго – это совершенно разные вещи. Пусть я и работаю в среднем по 9 часов в сутки с перерывом на выходные дни, но не считаю, что я не выкладываюсь или работаю мало. Я также не учитываю некоторые свои хобби и активности, которые можно рассматривать как дополнительную работу. Например, написание этой книги. В любой случае, стоит ли надрываться или нет, каждый решает для себя сам.
Понедельник
С чего начать
«Viam supervadet vadens» (лат.)
«Дорогу осилит идущий»
То, что описано в этой главе, может быть успешно применено в любой области и не привязано жестко к программированию, как таковому.
Всегда самое трудное – это сделать первый шаг. Я очень надеюсь, что эта книга поможет вам в этом. На самом деле, есть множество вариантов, как начать учиться. Попробуйте выбрать наиболее комфортный для себя вариант.
Учитывайте при этом ваши начальные знания и умения. Подумайте, сколько времени Вы готовы уделять учебе. Готовы ли Вы учиться каждый день? Сможете ли Вы учиться в выходные? Будете ли Вы заниматься по одному часу за раз, или три раза по двадцать минут, или двадцать минут в день – это ваш предел? Одним словом, постарайтесь спланировать свои занятия насколько это возможно, и максимально придерживайтесь этого распорядка. Конечно же, учебный график в результате зависит от того, какой именно род занятий Вы выберете, но об этом чуть позже.
Важно здесь то, чтобы учеба ни в коем случае не была для вас обременительной, иначе Вы ставите под угрозу весь процесс обучения. Поверьте, даже 15 минут в день может дать вам ощутимые результаты – просто придерживайтесь удобного графика, вот и все. Уверен, если Вы начнете и выработаете привычку заниматься хотя бы по 15 минут в день, вас уже будет не остановить. Скорее всего, увлекшись изучением того или иного вопроса, Вы потратите даже больше времени, чем рассчитывали, именно потому, что это удобно для вас. А если это удобно, значит ничто не мешает, не отвлекает и не беспокоит вас, пока Вы учитесь. Ваш мозг не сопротивляется. Нет защитной реакции с его стороны. Нет никакого давления, нет лишнего груза ответственности, который бы вызывал дискомфорт и заставлял переживать из-за чего-то несделанного.
Например, в школьные годы я не мог нормально расслабиться, если знал что у меня есть домашнее задание, которое еще не выполнено. Это занимало большую часть моих мыслей. И чтобы отделаться от чувства тревоги, я выполнял задания не только на следующий день, но и вообще все, какие были. И лишь тогда я мог спокойно пойти заниматься своими делами.
Таким образом, я подвожу вас к тому, что, выбрав удобное для себя время, Вы получите не только максимум пользы и удовлетворения от учебы, но и насладитесь процессом. И если Вы в результате потратите, сколько бы то ни было, больше времени, чем собирались изначально, знайте, что Вы на верном пути и у вас все получается, как надо. В дальнейшем Вы даже можете сознательно увеличить длительность занятий, если посчитаете нужным.
Но будьте крайне осторожны и честны сами с собой! На этом и последующих этапах очень легко попасть в ловушку, когда Вы занижаете для себя планку по какой-то причине. Например, бывает просто лень, или, возможно, Вы недооцениваете свои силы, или же Вы просто не хотите этого на самом деле. С другой стороны, завышенная планка также не пойдет на пользу. Чистого энтузиазма и мотивации может надолго не хватить. Рано или поздно наступит момент, когда учеба отойдет на второй план. У вас появятся более срочные дела, магическим образом станет меньше времени. Вы начнете пропускать занятия, и, в конце концов, напрочь забудете об учебе.
Это может произойти по двум противоположным причинам, которые я уже упомянул.
В первом случае недостаток дисциплины и уделяемого времени приводит к потере концентрации. Не хватает целостности и какой-то законченности в том, что Вы делаете. Не хватает конкретного результата, который бы мотивировал на дальнейшие занятия. Разумеется, разные вопросы требуют разного количества времени для их изучения. И все же, постарайтесь найти минимальный эффективный для вас промежуток времени. Нащупайте нижнюю границу, и не понижайте ее, чтобы не потерять фокус и продолжать подогревать интерес к учебе.
Во втором случае есть опасность слишком быстро перегореть. Да, Вы жаждите покорить мир за неделю. День и ночь трудитесь, не поднимая головы. Круто! Но в один прекрасный момент Вы слышите щелчок в своей голове, и весь ваш запал внезапно заканчивается. И если с ленью можно бороться дисциплиной, то с таким “выгоранием” справиться не так-то просто и быстро. Да, если Вы чувствуете прилив энергии и небывалый интерес к тому, чем Вы занимаетесь – это очень здорово. Вы способны делать больше, чем обычно, и это очень даже неплохо. У каждого бывают периоды, когда чувствуешь себя на волне, и все получается на раз. С боевым настроем и интересом к делу будет гораздо легче изучать сложные вопросы и технологии.
Но будьте настороже! Когда почувствуете, что действительно устали, сделайте перерыв. Помните, что без хорошего отдыха невозможно показывать хорошие результаты. О, сколько раз я засиживался допоздна в программном коде, а потом жалел об этом. Очень часто недостаток сна в результате серьезной работы потом выливался в неприятные последствия в виде головных болей, вялости и прочих неприятных вещей, сопутствующих следующие несколько дней. Или, к примеру, изрядно потрудившись на выходных, я хоть и не перетруждался, но напрочь забывал отдохнуть после рабочей недели. В результате я отработал 12 дней подряд, и к следующим выходным чувствовал себя выжатым, как лимон. А ведь я мог бы добиться куда больших результатов и избежать переутомления и потерь времени на восстановление, сделай я вовремя перерыв.
Что важно – это определить для себя собственные нижнюю и верхнюю границы, которые будут служить своеобразным индикатором эффективности. На ум приходит аналогия про морковку спереди и морковку сзади. Морковка спереди – это ваша внутренняя мотивация, то, что заставляет вас двигаться к цели без дополнительных усилий. Соответственно морковка сзади – внешний стимул, который заставляет вас действовать вопреки желаниям. Нюанс состоит в том, что до каких бы размеров не выросла морковка сзади, она повышает мотивацию лишь до определенного уровня, причем гораздо более низкого, чем может дать морковка спереди (рисунок 1). Это значит, что заставлять себя что-то делать через силу весьма неэффективно, чем, если бы что-то действительно вас заинтересовало.
Рисунок 1
Определите свое личное пространство между морковками и постарайтесь не натыкаться ни на одну из них, чтобы избежать вышеописанных проблем.
Прислушайтесь к себе. Верным признаком того, что Вы делаете все верно, послужит чувство завершенности, удовлетворенность результатами и собой, легкая усталость. Если после занятия Вы все еще держитесь огурцом, или не чувствуете, какой Вы молодец, а, может, не успели сложить пазл до конца, попробуйте увеличить дозировку. В противном случае, я бы задумался о реальной пользе того, чем я занимаюсь, и, наверное, забросил бы все это дело.
Естественно планирование времени и графика тесно взаимосвязано, с тем, как именно Вы собираетесь учиться.
Существует масса вариантов на все случаи жизни. К примеру, можно посещать курсы, платные или бесплатные. Есть компании, которые спонсируют подобные мероприятия или даже выращивают собственных специалистов с нуля. Можно учиться онлайн. Можно читать книги и учебники. Можно собственноручно шерстить интернет в поисках конкретных ответов или смотреть обучающие видео. Официальная техническая документация к той или иной технологии, туториалы, песочницы, даже исходный код и, конечно, выполнение практических заданий – без всего этого невозможно научиться программировать. Отнюдь, это вовсе не означает, что нужно хвататься за все подряд. Но ведь здорово, когда есть выбор, не так ли?
Мы с вами уже привыкли, что при необходимости любую информацию можно найти в интернете. Я бы сказал, что зачастую информации слишком много. Существует огромное количество ресурсов, посвященных всевозможным темам. И если тратить время на всё подряд, то можно натрудить мозоль. А этого мы как раз не хотим. Будьте готовы, что придется постоянно проводить отбор и делать выбор в пользу того или иного источника информации.
Для начала выберите основной тип занятия, который вам более всего импонирует, и который приносит наибольшую пользу именно вам. Это не значит, что видео, например, лучше, чем книги, или наоборот. Это значит, что люди разные, и по-разному воспринимают информацию. Обычно выделяют тех, кто лучше усваивает информацию на слух, визуально или через действия, чувства и ассоциации. Поэтому для конкретного типа людей какая-то часть ресурсов будет более подходящей, чем другая. Необходимо подобрать свой собственный комплекс обучающих материалов. А в процессе его формирования я бы порекомендовал попробовать всего понемножку, чтобы осознанно сделать свой выбор наиболее подходящего представления информации и не упустить ничего важного.
Лично мне гораздо приятнее и легче воспринимать текстовую информацию, сдобренную схемами, анимациями и цветными картинками высокого разрешения, на красиво оформленном, удобном в обращении сайте. Такой ресурс изначально располагает к себе, и я получаю от него еще и эстетическое наслаждение. Удовольствие от неспешно съеденной конфеты куда больше, чем от такой же наспех сожратой. Так и подавиться можно. Так и формой представления информации.
Однако, важно понимать, что в самом начале изучать свободные темы несколько бессмысленно, да, и не получится это. Нужно сначала постичь азы и заложить фундамент, на котором выстроятся все остальные знания. А в качестве индикатора того, куда двигаться Вы уже готовы, а куда еще рановато, можете попробовать принять сложность материала. Если какая-то тема чересчур тяжело даётся, вам многое непонятно или совсем неинтересно, возможно, стоит предварительно углубить свои знания в смежных областях.
Изучая сферического коня в вакууме, нужно как минимум знать, что такое конь, сфера и вакуум, чтобы понимать, о чем вообще идет речь. Недостаток понимания хотя бы одного из понятий препятствует пониманию контекста и вопроса в целом. Поэтому, прежде чем продолжать, однозначно стоит отвлечься, чтобы в первую очередь закрыть дыры в имеющихся знаниях. При этом решением может быть, как поиск простого односложного ответа, так и изучение дополнительной темы. В конечном счете, выбор остается за вами. Eсли же смежная тема, как таковая, не особо важна, и Вы не очень хотите отвлекаться от основного вопроса, можете ее пропустить, как только проясните интересующие вас моменты. Это также вполне себе рабочий вариант.
Возвращаясь к подбору материала, хочу сказать, что посещение специализированных курсов будет хорошим вариантом особенно для тех, кто только-только начинает погружаться в тему программирования. Учтите, что учебный материал может быть рассчитан на аудиторию определенного уровня, поэтому стоит обращать внимание на требования к абитуриентам в рамках этих курсов. В целом же такие занятия рассчитаны все-таки для начинающих.
Так вот, вариант этот хорош тем, что учебная программа в каком-то виде проработана под нужды новичков. Не могу говорить за всех, но предполагается, что учебный материал уже адаптирован, все необходимое найдено и включено в учебный план, а все лишнее отфильтровано и исключено. То есть после прохождения такого курса программистом Вы скорее всего еще не станете, но будете разбираться в базовых вещах, и сможете наращивать темп на пути к своей цели.
Кроме того, существуют курсы, организуемые IT компаниями, по окончании которых есть шанс трудоустроиться в эту же самую компанию и продолжить обучение на конкретного специалиста. Я бы сказал, это хорошая возможность быстро освоиться в теме с наименьшими трудозатратами на поиск необходимых знаний. К тому же такие курсы обычно бесплатные. К сожалению, немногие компании этим занимаются.
В довесок к посещению курсов, да и без них тоже, будет большим преимуществом, если у вас есть товарищ или знакомый, разбирающийся в теме, который мог бы вам быстро что-то растолковать или разъяснить сложные для понимания моменты, обратить ваше внимание на важные нюансы и дать дельный совет.
Вышеописанная практика широко применяется в IT сфере и именуется менторингом (хотя и применима в любой другой отрасли). Соответственно ментор – это как раз тот самый человек, который вас направляет и ведет. Ментор, к слову, не является преподавателем. По большому счету, он не обязан вас учить. Это скорее исключение из правил. Учиться Вы должны самостоятельно. Задача ментора – помочь определиться, на каком этапе Вы находитесь, выявить пробелы в знаниях и помочь их устранить. Если же принимать во внимание других товарищей по учебе, тут Вы вольны научать друг друга сколько влезет.
Какой бы путь обучения Вы не выбрали: очный, онлайн, самостоятельный или еще какой-то, – в любом случае придется обращаться за информацией к интернет ресурсам.
Особенно мне пришелся по вкусу такой сайт, как www.tutorialspoint.com. Скажу о нем всего пару слов.
Здесь собраны обучающие материалы касательно множества современных популярных технологий. По сути tutorialspoint предоставляет документацию, адаптированную под новичков. Материал написан очень простым языком, последователен, логичен, разобран на достаточном для использования конкретной технологии уровне. Думаю, что не сильно совру, если скажу, что одного этого источника может быть вполне достаточно, чтобы овладеть большей частью, необходимых для джуниора знаний. Единственная трудность, с которой можно столкнуться при работе с этим сайтом, это незнание английского языка. В остальном ресурс просто изумительный.
Очень часто поиски решения определенных задач ведут на один из крупнейших IT форумов – stackoverflow.com. Здесь разработчики всего мира обсуждают любые вопросы, связанные с программированием. Это настоящий кладезь опыта решения реальных проблем и передовых знаний. Если, работая с какой-либо технологией, Вы столкнулись с трудностями, скорее всего кто-то уже изобрел велосипед до вас или, по крайней мере, обсуждал эту проблему. В худшем случае всегда можно задать вопрос и попросить о помощи лично. Ресурс также преимущественно на английском, хотя есть и поддомен сугубо для русскоговорящих пользователей – ru.stackoverflow.com.
Также хотелось бы отметить несколько толковых блогов. Например, habr.com, mkyong.com, блог сурового челябинского программиста samolisov.blogspot.com. На этих сайтах можно найти кучу практических примеров использования различных библиотек. Кроме всего прочего, только здесь я смог найти непростые для понимания темы, досконально и глубоко разобранные, как ни в одном другом источнике.
Еще одним особенно полезным типом ресурсов, которые хотелось бы упомянуть, являются так называемые “песочницы”. Песочница представляет собой реализацию той или иной технологии в виде онлайн терминала или командной строки. Это значит, что можно прямо в браузере выполнить код, написанный на каком-либо языке (например, Java, Python, SQL, JavaScript, Go и многие другие) и получить результат выполнения, не разворачивая дополнительного программного обеспечения на локальном компьютере. Тот же tutorialspoint предоставляет внушительный список различных песочниц.
Плюсы такого подхода очевидны. Можно быстро проверить, как работают несколько строк кода. Можно поиграть с незнакомыми языками, не тратясь на настройку окружения. Можно моделировать решения задач и даже делиться ими с другими людьми. Одним словом, песочница – вещь удобная и полезная.
В дополнение к перечисленным источникам нужно озвучить платформы, ориентированные непосредственно на учебу и самообразование. Многие из них также предлагают множество курсов по самым разнообразным тематикам. Главная их цель – помочь пользователям организовать свой учебный процесс, предоставляя определенный набор инструментов.
У таких вот платформ очень интересная задумка. Однако, попробовав одну из них, я быстро утратил интерес к занятиям, построенным на их основе. Во-первых, я и без дополнительной помощи могу самоорганизоваться. Во-вторых, платформа не помогла мне с поиском информации. Таким образом, лично для меня такой подход показался не особо эффективным. Тем не менее, не стоит сбрасывать его со счетов. Если требуется решить проблему организации процесса самостоятельного обучения, такая практика, скорее всего, будет весьма полезной. Пусть и не для всех.
Конечно же, это далеко не весь список ресурсов, которые могут быть полезны. Их сотни и тысячи. Это не значит, что сайты стоит разделять на плохие и хорошие. Зачастую очень хорошие ответы спрятаны в совершенно разных местах. Ответ на один вопрос размещен на одном сайте, другой ответ – на каком-то еще. Просто есть ресурсы, на которых концентрация хороших ответов выше, чем в среднем по больнице.
Не хочу говорить ничего плохого в чей-то адрес, просто приведу забавный пример. Очень часто я натыкался на один и тот же форум в поисках разного рода информации. Я переходил по ссылкам на него десятки раз и ни разу не получал хоть какого-то вразумительного ответа на мои вопросы. Символично, что в оформлении этого форума размещено чучело дохлого оленя или лося с роящимися вокруг него насекомыми.
Со временем, закрывая для себя очередную тему, узнавая что-то новое, должен наступить момент, когда Вы действительно знаете и понимаете, что готовы. Готовы к собеседованию. Все верно, рано или поздно придется пройти техническое интервью, чтобы проверить себя, понять, где Вы находитесь, и туда ли вообще идете, да и банально устроиться на работу. В том случае, если Вы уже работаете, скорее всего, вас все равно ждет какая-либо запланированная беседа, будь то собеседование на очередную должность, вступительное интервью на проект, плановая аттестация или что-то еще.
Для разработчика регулярные собеседования становятся частью рутины. Каждый проходит эту процедуру в среднем несколько раз в год. Бояться технических интервью не стоит. Никто не ставит двоек. Никто не хочет вас “завалить”. Главная цель процесса – понять, что Вы знаете и умеете на текущий момент, как Вы мыслите, оценить общий уровень и определить, куда следует двигаться дальше.
Да, поначалу проходить интервью может быть довольно волнительно и стрессово. Здесь важно понимать, что это важная часть учебного процесса и отличная возможность убить несколько зайцев сразу. Вы учитесь, на что обращать внимание, как себя вести, узнаете конкретные вопросы. Примечательно, что на собеседованиях спрашивают примерно одно и то же. Благодаря этому на третий, четвертый, пятый раз Вы уже заранее знаете, чего ожидать, можете подготовиться, как следует, и с легкостью показать требуемый уровень.