Привет, Голос!
Этот пост особенно будет полезен для новичков и тех, кто хочет попробовать себя в кодинге или начал изучать новый язык. Хотите сэкономить время и силы? Перейдём сразу к делу!
I. Не застревайте в "ловушке туториалов" слишком надолго.
Что такое "ловушка туториалов"? Если вы уже пробовали изучать какой-либо язык, то наверняка вам попадалось множество гайдов, мануалов и туториалов которым вы пробовали следовать и у вас получалось с определенными успехами. Опасность застрять в таковой ловушке - в неспособности в будущем мыслить полностью самостоятельно и реализовывать собственные проекты. Конечно, нельзя недооценивать полезность туториалов, и вам придётся, хотите вы или нет, прочитать десятки и сотни таковых. Однако, если вы ощущаете сильную от них зависимость, попробуйте сделать собственный проект. В первое время вам может быть тяжело, но усилия окупят себя с лихвой и ваша кривая обучения взлетит до небес.
II. Не пропускайте фундаметальные основы языка, переходя сразу к "прикольным" вещам.
Фундаметальные вещи могут показаться нудноватыми, скучными или малопонятными. Но с погружением в язык вам будет всё проще и всё понятнее понимать то, что написано в фундаментальных вещах, в той части которую вы читаете при первых шагах и знакомстве с языком. Полезно будет также перечитать основы после того, как вы более-менее закончили курс ЯП (Языка Программирования). Пропустить фундаментальные основы - это как пойти и попытаться играть в профессиональный волейбол сразу после трёх бросков мяча или пытаться победить гроссмейстера в шахматы, когда вы играли в них всего пару раз в жизни. Вам нужно совершить 1000 бросков или сыграть 1000 игр, чтобы "прочувствовать" игры. Рваться в бой это конечно здорово, но постарайтесь освоить основы на должном уровне. Иногда так же может быть полезно выйти за пределы языка, если вы понимаете, что "плаваете" в какой-то теме (к примеру, "работа с файловыми системами"), и изучить тему вне пределов кодинга, обособленно. А затем уже возвращаться к конкретному языку и определенной "fundamentals" теме. Кстати, важно также изучить основы не только языка, но и платформы или среды разработки, с которой вы планируете работать. Это сэкономит огромное количество времени в будущем.
III. Не стремитесь запомнить всё наизусть!
Не имеет значения, если даже вы профессиональный кодер и уже работаете с языком несколько лет, вы всё равно можете попасть в ситуацию когда хотите загуглить простейшие вещи, например, как реализовать цикл или условие. Это нормально! Не стыдитесь этого! Вы даже можете гуглить это изо дня в день на протяжении какого-то времени. Ничего страшного! Это происходит с нами со всеми и это совершенно нормально! Самое главное здесь - чтобы вы знали, где посмотреть. Документация, блог-пост, ваши собственные заметки... В этом случае вы всегда сможете обратиться к справочнику и быстро найти ответ. Особенно данный совет актуален для тех, кто кодит нерегулярно или использует множество различных ЯП. Это огромное заблуждение, что профессиональные разработчики проводят часы или даже весь день в бесконечном написании кода без того, чтобы заглядывать куда-либо (хотя изредка попадаются, конечно, и такие). Если только вы не хотите связать свою жизнь с одним и только одним ЯП, не парьтесь по поводу того, чтобы подсматривать куда-то, даже если давно уже свободно владеете каким-то ЯП. В конце концов, "научитесь учиться", даже если вы уже 10 раз читали определенную страничку документции - не стыдитесь заглянуть вновь и сэкономить время на проверке типичных ошибок.
IV. Найдите себе ментора.
Он не обязательно должен быть в оффлайне! Можно просто найти себе друга в сети или поискать телеграм-чат, обсуждающий данный ЯП. Если у вас не будет ментора, вы рискуете порой "застревать" с какой-то простой или небольшой темой на целые дни, не зная что делать и как загуглить проблемное для вас место. Пусть у вас будет человек, которому всегда можно задать вопрос, и сэкономить себе кучу времени. А отвлекаться от кодинга очень даже полезно. Задайте вопрос вашему ментору и вернитесь к задаче завтра, после того как получите от него ответ или подсказки! Изучение ЯП таким образом снимет множество нервных моментов и уберет излишнюю озадаченность, привнесёт лёгкость, человечность и понятность в ваш процесс обучения. Так же, снизится вероятность того, что вы просто забросите курс обучения, ведь мотивация может упасть очень сильно, если вы будете "буксовать" на каждой мелкой проблеме.
V. Ныряйте в документацию к ЯП и платформе разработки - чем скорее тем лучше!
Как только вы почувствуете некоторую самодостаточность в ЯП и независимость от учебников и "hello world" гайдов, документация будет вашим хорошим другом. В общем документация отлично поможет вам выбраться из той самой "ловушки туториалов" - проблемы #1. Кстати, очень часто есть "официальная" документация а также другие источники вроде учебников, подробных справочников от вашей платформы или среды разработки или же просто некая неофициальная документация. Посмотрите несколько разных форматов и выберите тот, который вам кажется наиболее полезным и понятным. Совершенно не обязательно привязываться к официальной документации, и единственное её преимущество может быть в том, что она обычно обновлена до самой последней, акутальной версии ЯП. Однако, фундаментальные вещи редко меняются в языках и вы совершенно спокойно можете пользоваться чуть-чуть устаревшей, но более понятной документацией (или, к примеру, вы можете обратиться к документации, переведенной на ваш родной язык). В конце коцнов, даже если документация изначально вам покажется неудобной, возможно со временем изучения языка вы измените своё мнение или же просто привыкните к формату, подготовленному авторами.
VI. Любите ваше дело!
Да-да, если вам не нравится то, чем вы занимаетесь, возможно вам стоит здесь остановится. Попробуйте найти другой ЯП, который вам понравится больше, или, возможно, кодинг не для вас (хотя, признаюсь, я лично (@sxiii) считаю что базовые знания в кодинге полезны для 100% людей). В конце концов, языков программирования более 1000 - и есть даже необычные графические или музыкальные - неужели даже среди них вы не найдете ничего интересного для себя? Не верю! Так же, если вы учите какой-то язык "чисто ради денег", то, пожалуй, вам стоит всё-таки найти язык, который вам реально понравится, или остановиться с этим квестом.
Конечно, бывают такие разработчики, которые работают "ради денег", и они не кодят потому, что им нравится решать необычные проблемы, разгадывать загадки или же создавать свои собственные вещи. Но это очень грустный кейс - не будьте такими! Найдите язык, к которму вам самим захочется возвращаться снова и снова. Вам должен самим нравится тот факт, что вы можете просто взять какую-то идею из своей головы, напечатать какие-то загадочные цветные слова на чёрном фоне, и затем произойдёт какое-то волшебство (и всё заглючит ;). Получайте удовольствие от процесса, или для вас кодинг будет не наградой, а наказанием, и вы не захотите возвращаться к нему без крайней необходимости. Конечно же, ваш путь будет не лёгкий, вы будете местами "застревать", искать решения очевидных проблем, но - это абсолютно нормально! Если у вас достаточно вдохновения и мотивации, и вам нравится то, что вы начали, у вас обязательно всё получится, и вы будете воспринимать любую проблему как вызов (challenge accepted!) и реально стремиться её решить. Если же вам не нравится определенный язык (или даже кодинг в целом), практически любая проблема - камешек на вашем пути - может "скинуть" вас с пути и уничтожить вашу мотивацию. На самом деле, спойлер - большинство "камешков" на пути никуда не денется - вы просто научитесь заранее их обходить или на них не попадаться... Или не научитесь ;) Кроме того, технологии постоянно развиваются и меняются, ЯП эволюционируют... Вам понадобиться достаточно мотивации для того, чтобы изучать всё это, обновлять свои знания, и следовать за актуальными трендами. Так что если вам не нравится процесс обучения, решения проблем, создания новых объектов, - вам придётся очень-очень трудно на вашем пути. Поэтому: реально вам нужно любить то, что вы делаете!
VII. Со временем станет проще!
Вначале вам может показаться просто фантастически огромным океан знаний и возможностей языка. Вам может казаться, что это никогда не изучить на достаточном уровне, не освоить... Но! В процессе роста вашей карьеры и знаний, например, работая на фрилансе или даже с обычными компаниями, вы будете постоянно создавать новые приложения и проекты. А когда вы их создаете, у вас на винчестере будет накапливаться кодовая база "старых" проектов. Вы всегда сможете к ней обратиться или даже просто скачать снова проект с гитхаба и взять от него какую-то часть (или построить на его основе новый проект, или переписать его с нуля, и т. д. - нужное подчеркнуть ;). Это сэкономит время и силы, вы также (скорее всего) сможете обнаружить конструктивные проблемы и ошибки в вашем более старом коде. Так или иначе, это будет ускорять и упрощать для вас разработку в будущем. Примерно так и работают системы управления версиями и крупные проекты от сообщества, вы можете ощутить эффект таких инструментов, даже работая с самим собой, а точнее со старой версией кода, который вы написали когда-то. Быстро сможете обновить и улучшить его. Таким образом, вы "новый" станете ментором сами для себя "старого", из прошлого. Можно также представить себе это, как ящик с инструментами, которые вы давно купили (или сделали сами). Доставая такой ящик, вы повышаете эффективность своей работы, быстро найдете нужный инструмент, доработаете его, сделаете ещё лучше, и скорее всего очень быстро сможете использовать в продакшене. Со временем станет проще!
VIII. Терпение, старание. Планомерное изучение!
Множество людей часто говорят: "я хочу стать разработчиком на языке XYZ так быстро, как только возможно!". Это звучит для меня как что-то вроде: "я не хочу ничего учить, но хочу зарабатывать уже сегодня кучу денег, и без усилий", - прямо серия "любимые заявления МЛМщиков". Обратитесь к концепции "утром деньги - вечером стулья", только временной разрыв между первым и вторым может быть целые месяцы или даже годы. Поймите, как и в любой десциплине, чтобы стать профессионалом на каком-то уровне, нужно время и усилия! Конечно же, всё зависит от вашей усидчивости, терпения, внимания и времени, которое вы готовы уделять вашему обучению и практике. Но невозможно стать профессионалом за один день. Будъте объективны в оценке своих сил и возможностей, но не стоит и недооценивать себя (см. пункт 7!). В общем, кодинг - это не спринт. Это марафон... Это очень, очень длительное путешествие (которое, по сути, не заканчивается никогда!). Если вы попытаетесь придти к конечной точке в режиме спринта, то все вещи, что я перечислил выше будут регулярно вас "кусать за задницу" ;). И не стоит пытаться сравнивать себя с другими людьми, у вас собственный темп обучения, и это абсолютно нормально. Конечно, вам будут постоянно попадаться люди, решающие вашу многочасовую проблему, раздумывая над ней 1 секунду. Но наиболее вероятно, их количество потраченных часов на обучение и практику будет значительно превышать ваше... Так что зачем пытаться это сравнивать? У вас свой собственный путь. Просто продолжайте изучать ваш любимый ЯП и не наказывайте себя за профессионализм других. Вы и не заметите, как станете таким человеком, которому другие будут задавать свои глупые 1-секундные вопросы. И в длительной перспективе ваше терпение и старания обязательно окупятся.
IX. Знания коммьюнити и современныме инструменты - ваши друзья!
Микроблоги, доски с вопросами и ответами, соцсети, чаты, форумы - ваши друзья! От Github до Twitter, от Reddit до форума вашего ЯП, и коненчо же Stackoverflow, Telegram, Quora, даже Steemit, Golos и Facebook - всё это может помочь вам сэкономить время, быстрее решить проблему, найти ответ, и т. д. Не пренебрегайте этими средствами, я бы даже сказал, обязательно пользуйтесь ими всеми время от времени. Очень важно, чтобы вы не боялись сразу запрыгивать в обсуждения, форумные ветки, дискашн-посты. Задавайте вопросы, просто общайтесь, зарегистрируйтесь везде в конце концов. Не тяните и не варитесь только в своём "маленьком уютном болоте" - помощь для необычного вопроса обязательно придёт из самого неожиданного источника!
X. Практический совет от @sxiii: пользуйтесь редакторами с подсветкой кода!
Если всяческие "свистелки" ещё можно обсуждать на предмет полезности при начальном обучении (напр., автоматическое закрытие скобок или дописывание параметров "за вас"), то вот специализированный редактор кода с подсветкой синтаксиса для вашего языка - это совершенно точно то, что вам необходимо с самых первых, ранних шагов. Изучите для начала ваш редактор или IDE - его базовые функции и возможности. Подсветка синтаксиса сэкономит вам множество нервов и времени при проверке своего же кода. Особенно данный совет актуален для не очень внимательных или легко отвлекающихся людей. Пользоваться специализированным софтом для кодинга - это не зазорно, это НОРМАЛЬНО и полезно.
Кстати, вы можете сделать из этой статьи чек-лист на 10 пунктов и отметить, какие вещи вы делали в соответсвии с рекомендациями, а какие - нарушили. Это будет отличным ориентиром и подсказкой как упростить себе дальнейшее изучение данного (или нового!) ЯП. Со временем вы поймете ценность данной статьи и сможете отмечать всё больше и больше флажков напротив пунктов, а в какой-то момент все 10 будут наконец-то отмечены зеленой "галочкой".
Удачи и стабильной супермотивации в изучении вашего языка программирования!
P.S. Статья написана на основе чудесного видео, расширена и дополнена мной.
С вами как всегда
@sxiii from OoOsLoO City!
@sxiii я не прогер, но мне тоже было весьма интересно!
@ladyzarulem glad to know! =)
@kedgaks и всем-всем-всем спасибо for your kind donations =))
@sxiii, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующих категориях: