Ты научился немного программировать, понял основы какого-то языка программирования и теперь готов перейти на следующий этап? Как стать хорошим программистом - об этом я хочу поговорить сегодня.
Недавно я затрагивал тему того, как выучиться на программиста, то есть как изучать. Тогда же я затронул очень важную тему того, что нужно заниматься практикой и сказал, что труд сделал из обезьяны человека и сможет сделать из ламера программиста. Желательно устроится на работу, где можно будет получать реальный опыт.
С устройством на работу действительно могут быть проблемы, потому что это замкнутый круг - чтобы стать хорошим программистом, нужно получить опыт, чтобы получить опыт, нужно стать программистом. Мало кто решается нанимать совсем уж явных начинающих, у которых знания заканчиваются после понимания циклов, условных операторов и базовых понятий ООП.
Прочитав одну книгу или после первого курса, являетесь ли вы программистом? Если вы можете написать простую программу самостоятельно, то да. Но являетесь ли вы хорошим программистом – скорей всего нет. Это только начало долгого пути.
Но ведь программирование - это такая область, где вы можете получить опыт даже самостоятельно. Возьмите какую-то задачу, которая вас интересует, и начните ее делать. Я кажется уже говорил где-то, что мой опыт начался с того, что мне с самого начала нравился Web, но когда я начинал много лет назад, то редакторы для создания GIF анимации стоили очень дорого, а у меня даже не было кредитной карточки, чтобы оплатить. В варезниках лежали какие-то базовые вещи, но. . . В общем, я поставил себе задачу написать программу GIF анимации, и занялся этим.
На написание такой программы ушло много времени и написано очень много говнокода, потому что слишком базовый уровень знаний был. Мне кажется, что я поставил слишком сложную задачу для моего уровня знаний, но я готов был потратить и год, на достижения цели.
Только тогда, когда вы начнете использовать знания из книг или онлайн курсов на деле, вы сможете продвигаться и начнете на примерах видеть, как все работает на самом деле.
Это как учиться вождению автомобилю. Нежелательно сразу прыгать за руль, нужно сначала познакомиться с теорией. Но в определенный момент увеличение теоретического материала не сделает из вас более профессионального водителя, потому что нужно будет переходить к практическим занятиям, садиться за руль и реально учится вождению.
Когда вы получили базовые навыки практики, дальше уже идет совершенствование ваших умений вождения – параллельная парковка, разворот полицейского и т.д.
Точно так же и с программированием. После получения базовых знаний и получения базового опыта вы начинаете совершенствоваться. И тут уже теоретические знания должны поступать одновременно с практикой. Если на самом первом этапе идет сначала теория, а потом практика, то после первых практических проектов нужно работать в обоих направлениях одновременно.
Самый лучший опыт и знания, которые получил я – это опыт от коллег, когда я работал в компаниях. Самостоятельно можно развиваться за счет книг, мануалов и различных видеоматериалов в интернете, но из личного опыта такое развитие происходит на много медленнее.
Возможно, это мое личное и вы сможете развиваться единолично так же эффективно.
Тут все зависит еще и от команды. Если в команде работают специалисты, которые выше вас на голову, то будет чему научится у них.
Я думаю, что самые сильные скачки моего развития произошли как раз в командах, особенно, когда я работал в Klick Health. Мне посчастливилось поработать с хорошими программистами, благодаря которым я вырос профессионально, по крайней мере я так считаю.
На мой взгляд, тут очень хорошо может способствовать развитию парное программирование. Я никогда с ним реально не сталкивался, но много читал и был на одной презентации в компании, которая практикует этот подход и мне очень понравилось. Я был бы не против получить такой опыт.
Я где-то читал, что нужно менять работу каждые несколько лет. Я уже не помню, сколько рекомендовалось, но мне кажется, что идеальное число – это 5. Меняя работу, на новой позиции вы можете встретиться с новыми людьми, новыми идеями и новыми технологиями, которые позволят двигаться дальше.
Вы можете работать программистом 10 лет и по прошествии этого времени посмотреть на свои навыки и понять, что в реальности не дотягиваете даже до среднего программиста. Такое легко может произойти, если работать в какой-то компании с простыми задачами, где нет каких-то вызовов или сложных задач, которые приходилось бы решать.
Опять же говорю из личного опыта. Я больше всего развивался, когда приходилось решать какие-то сложные задачи. Когда нужно что-то исследовать, найти возможности улучшить производительности или выловить сложно определяемый баг.
Если застрять в каком-то агентстве, которое изо дня в день делает простые сайты из пары страниц, развития не будет.
В ИТ очень часто работу можно выполнить несколькими способами, для решения одной и той же задачи есть различные варианты решений. Я считаю, что одно из отличий хорошего программиста – стремление найти и реализовать наиболее эффективное решение.
У меня у самого бывает желание просто сделать работу и забыть, особенно когда приходится работать с каким-то не очень старым кодом или тем проектом, реализация которого не очень нравится. Но каждый раз, когда появляется такое желание, я просто делаю паузу, обдумываю свое решение и просто движусь в направлении эффективного решения.
Просто научиться программированию можно достаточно легко. Я уже говорил, что для этого достаточно только прочитать одну книгу. Чтобы познакомиться с C#, достаточно прочитать мою книгу Библия C#, и вы уже освоите синтаксис и станете программистом. Но это будет только начало пути. Этого может не хватить даже до уровня Junior программиста.
После познания синтаксиса и когда вы научились написать свою первую программу, нужно начинать учить правила хорошего тона в программировании, а под этим я понимаю три вещи - алгоритмы, паттерны программирования и чистый код.
Алгоритмы позволяют найти наиболее эффективное решение базовых задач, таких как сортировка, поиск, деревья, списки и т. д. Возможно, вы никогда в своей жизни не будете реализовывать самостоятельно бинарный поиск и быструю сортировку, но в обоих алгоритмах есть важные особенности, которые можно использовать во время решения других, менее популярных и более специфичных решениях. Очень много задач решаются банальным делением сложного, на более простые составные части.
Паттерны программирования - это так же готовые решения на популярные проблемы, с которыми программисты сталкиваются каждый день. Вместо того, чтобы выдумывать велосипед, можно просто познакомиться с тем, как популярные проблемы решают другие программисты, как они пишут свой код и какие используют подходы.
Ну и третье в этом разделе - чистый код. У каждого свое отношение к тому, какой код считать чистым, но в целом есть определенные правила, которым стоит следовать. Стоит именовать свои переменные понятными именами, а не тулить везде i, j, x, y, z и так далее. Нужно писать короткие и простые функции, которые решают только одну задачу, но делают это хорошо. И так далее, и в таком духе.
На все три темы - алгоритмы, паттерны и чистый код есть много хороших книг. Я не буду сейчас советовать никаких конкретных книг, это может быть тема отдельного видео. Здесь же я только хотел обозначит направление, в котором нужно двигаться, чтобы стать хорошим программистом.
Я обещал пять советов? Будет шесть. Шестой просто будет коротким - нужно постоянно учиться.
Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание
После получения базовых знаний и получения базового опыта вы начинаете совершенствоваться. И тут уже теоретические знания должны поступать одновременно с практикой.
Я как раз на своем опыте столкнулся с этой проблемой. Вроде учу, понимаю, но нюансы быстро забываются без практики. А где брать задания для практики, выдумывать их? Получается, что после прочтения каждой главы книги нужно придумывать себе какой-то новый мини проект. Мне поэтому трудно дается Си Шарп. В нем куча абстракций в виде синтаксических нагромождений, которые бывает очень трудно понять, в отрыве от понимания, для чего это вообще нужно(на практике). Большинство моих озарений, случались когда я наблюдал или пытался разобрать устройство какой-то программы. И тут до меня "резко доходило", вот оно оказывается для чего нужно. В книгах такой информации днем с огнем не сыскать. Приходится продвигаться как в танце - два шага вперед, шаг назад(((
До этого учил язык Си по книге Стивена Прата и что мне там понравилось, большое кол-во разных практических заданий в конце каждой главы. Наверно это одна из причин, почему мне никак не удается понять ООП)
А что посоветуете насчет баз данных и ASP.Net? Просто повторять то же что и в уроках(ваших и других) или сразу пытаться сделать какую-то свою базу данных? Я так понимаю, лучше будет вначале полностью бегло ознакомиться с технологией, чтобы понять на базовом уровне что она из себя представляет. Потом пройтись еще раз, повторяя все примеры с небольшими вариациями. А уже потом пытаться сделать что-то свое.
P.S. Большое спасибо за ваши уроки, сайт и книгу! Они мне помогают, думаю другим тоже. Печально только что не вижу комментарием на сайте. Все тусуются на Ютубе)))