Вы могли бы принять решение окончательно изучить программирование в этом году. Или ваши предыдущие попытки научиться программировать так и не увенчались успехом. Когда вы начнете искать, вам нужно научиться бесконечному множеству вещей. Но есть один ключевой навык, который вам нужно развивать - независимо от того, какой путь вы выберете в карьере программиста.

Примечание: этот пост включает несколько простых примеров кода на Javascript. Даже если вы никогда раньше не читали языки программирования, вы, вероятно, сможете понять, что происходит, просто прочитав их!

Если вы хотите изучать программирование онлайн, недостатка в учебных материалах нет. Блоги полны учебников - от основ до специализированных фреймворков. YouTube переполнен видеороликами, которые шаг за шагом демонстрируют, как решить задачу программирования. Образовательные сайты, такие как edX и Udemy, преподают информатику комплексно.

Но довольно скоро вы обнаружите (как я это сделал слишком поздно в своей карьере программиста), что просмотр видео или чтение сообщения (кроме этого 😆) не сделают вас лучшим программистом. Фактически, если вы не будете использовать инструкции, которые вы получаете из онлайн-контента, сразу в своих проектах, вы скоро их забудете.

Приятное чувство от самообразования, связанного с программированием вместо просмотра Netflix, превращается в осознание того, что вы проводите много времени, наблюдая за набором текста другими людьми.

Не поймите меня неправильно. Онлайн-уроки - отличный ресурс, и они понадобятся вам на протяжении всего пути. Но некоторые важные навыки кодера вы так не усвоите.

Почему нет четкого способа научиться программировать?

Несмотря на то, что мы все еще не согласны с тем, как изучать древние предметы, такие как математика, у нас было много времени, чтобы найти способы, которые работают, а какие нет. Но само программирование - молодая дисциплина. А исследования о том, как ее учить, еще моложе.

Многие исследователи выдвинули гипотезу, что для успеха в программировании нужно хорошо разбираться в математике, языке или и том и другом. Связь с математикой кажется очевидной. У вас есть утверждения и алгоритмы, которые часто связаны с математическими понятиями.

Аргумент о языке проистекает из сходства языков программирования с нашим письменным словом. Вы можете определить синтаксис и структуру. Почему метод, который помогает кому-то выучить новый язык, не подходит для изучения Python или Javascript?

Я считаю, что спрашивать, какое еще образование в области программирования больше всего похоже, - неправильный подход. Как разработчик вы будете сочетать навыки из нескольких связанных областей. Вам, безусловно, понадобятся математические концепции в вашей карьере, но это не значит, что вы должны учиться программировать так, как вы доказываете теорему.

Если вы хотите стать фронтенд-разработчиком, вы должны не только научиться писать код, но и получить базовые знания о дизайне пользовательского интерфейса. Если вы хотите стать специалистом по обработке данных или инженером по машинному обучению, вам нужно научиться программировать. Но для успеха вам также понадобится хорошее знание математики и особенно статистики.

Предсказывать будущее

Однако есть один навык, который вам наверняка захочется развить, когда вы начнете свое путешествие по программированию. Этот навык лучше всего может воплотить Доктор Стрэндж из комиксов Marvel.

Доктор Стрэндж может заглядывать в различные варианты будущего, чтобы увидеть их результаты.

Я знаю, что вы думаете. Черт возьми, Йоханнес, я хочу изучать программирование, а не приобретать парахронные познания. Когда вы программируете, вы на самом деле делаете очень похожую вещь. Вы должны предвидеть все способы выполнения вашего кода.

Другой способ понять этот навык - рассмотреть шахматы. Гроссмейстеры часто учитывают последствия своих потенциальных ходов на несколько раундов вперед. Вот как они могут решить, как лучше двигаться вперед.

Есть два простых способа получить эту способность, когда вы пишете код. В следующем разделе я покажу вам обоих на примере.

Представьте себе простую форму регистрации в Интернете. Чтобы структурировать бизнес-логику регистрации, вам необходимо создать форму, которая принимает электронную почту и пароль. Но что произойдет, если пользователь введет fakeEmail в поле электронной почты? Как ваша программа отреагирует? Именно эти соображения составляют ключевой набор навыков программиста.

Работа с псевдокодом и комментариями

Один из способов тренировать свои сверхспособности параллельной вселенной - писать шаги своей программы в комментариях. Это может быть краткая сокращенная форма, в которой прописана правильная логика. Обдумайте все возможные сценарии своего кода.

Комментарии к коду помогают быстро продумать то, что вы собираетесь написать. Но будьте осторожны, не пишите свой код как одну логическую последовательность шагов. Я приведу вам пример того, что я имею в виду.

Давайте еще раз взглянем на нашу электронную форму. Мы хотим проверить, что происходит, если пользователь вводит поддельный адрес электронной почты, пароль короче 8 символов или правильную информацию.

Наш псевдокод может выглядеть так:

Теперь у вас может возникнуть соблазн написать свой код в точности так, как вы изложили логику. Это может оставить у вас запутанный беспорядок, подобный следующему:

Даже если вы еще не научились программировать, вы, вероятно, видите, что эта логика написана не очень хорошо. Существует много дублирования, и потребуется много работы, чтобы добавить больше ошибок в форму.

Попробуем лучше разобрать логику, учитывая все сценарии, определенные в наших комментариях. На этом этапе имеет смысл разбить нашу логику на отдельные файлы для обзора. Давайте сначала определим все правила, которые у нас есть:

Определив наши общие правила, мы можем затем определить правила, которые хотим назначить каждому полю ввода:

На данный момент у нас есть все, что нам нужно, чтобы просмотреть наши поля ввода и проверить наличие ошибок проверки.

Это все еще выглядит немного сложным. Вы даже можете возразить, что мы написали больше кода.

Но наш код стал гибким и расширяемым. Как насчет добавления еще одного правила в одно из существующих полей? Без проблем. Мы просто добавляем его в массив правил. Что, если мы хотим добавить еще одно поле? Это также легко сделать, добавив еще один массив правил. Остальной код по-прежнему будет работать, как ожидалось.

Вот почему мы хотим пересмотреть наш код после того, как мы написали его линейным образом. Эта практика называется рефакторинг.

В следующем разделе я покажу вам еще более эффективную технику, позволяющую увидеть будущие реалии и безопасно провести рефакторинг вашего кода.

Сначала напишите тесты

Написание в простых комментариях того, что вы хотите кодировать, - хорошее начало. Но вскоре вы обнаружите проблемы с этим. После рефакторинга кода он по-прежнему будет работать в том виде, в котором вы его написали изначально? Вы могли полностью изменить свою логику, перетасовывая различные части кода. Тесты помогут безопасно выполнить рефакторинг кода.

Тестирование часто рассматривается как сложная тема в программировании. Я столкнулся с этим в конце своего учебного пути - и часто только как побочная тема. Теперь я считаю, что тестирование должно быть одним из первых занятий, которым вы научитесь, потому что оно может вселить в вас уверенность в написанном вами коде.

Тест - это повторяемый алгоритм, который проверяет, дает ли часть вашего кода правильный результат - с учетом заранее заданного или случайного ввода. Когда вы заранее определяете возможные входы и выходы вашего кода, вы уже проигрываете все возможные сценарии, в которых может работать ваша программа. Впоследствии гораздо проще написать реальный код, который реализует эти сценарии.

Иногда тестирование может быть болезненным, особенно когда ваш код четко не разделен. Но вы увидите, что написание тестов в первую очередь сократит общее время, необходимое вам для выполнения любой задачи программирования. Написанные тесты - это мысленная дорожная карта для вашего развития. Тесты ценны не только для вас, но и как документация для ваших коллег.

Не бойтесь тестирования и начните с малого. Попробуйте протестировать небольшой фрагмент кода, например функцию, во всех ее сценариях.

Давайте напишем несколько простых тестов для нашей логики проверки. Мы пишем тесты в определенной форме, легко узнаваемой в будущем. Давайте сначала рассмотрим то, что мы хотим протестировать на простом английском языке:

Теперь давайте добавим код, который проверяет нашу реализацию этих функций. Помните, что мы предоставляем ввод и ожидаем определенного вывода.

Эти тесты можно расширить, чтобы проверить комбинации двух входов.

Теперь вы видите, насколько мощны тесты? Вы только что определили сценарии, которые может использовать ваш код - не только в уме, но и задокументированные. Теперь вы можете писать и рефакторинг кода сколько душе угодно. Если ваши тесты четко определены, они будут предупреждать вас, когда ваш код перестанет работать.

Предвидение того, как ваш код будет использоваться и работать, - одна из самых больших способностей, которые вы можете приобрести как программист. Я показал вам два способа немедленно практиковать этот навык, пока вы пишете код для своих проектов или заданий. Теперь к вам!

Первоначально опубликовано на https://johannes.co.