Ошибки при изучении программирования

Научитесь выявлять их. Выработайте привычки избегать их.

Цель этой статьи не загнобить новичков за типичные ошибки, а научить выявлять их и избегать. Порядок перечисления – случайный.

От переводчика

Иногда бывает трудно объяснить простыми словами казалось бы банальные вещи: зачем использовать гит, в чем фишка инкапсуляции, зачем писать тесты, как планировать свой код, рефакторить чужой и т.д. Мне показалось, что в этой статье компактно собраны важные «гуманитарные» аспекты программирования. Что-то вроде морального кодекса, ориентира и мотиватора в принятии решений, связанных с написанием кода.

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

1) Программирование без планирования
2) Чрезмерное планирование
3) Недооценивание важности качества кода
4) Хвататься за первое решение
5) Не отступать
6) Не гуглить
7) Не использовать инкапсуляцию
8) Планирование неизвестного
9) Использование неподходящих структур данных
10) Ухудшать код
11) Комментирование очевидных вещей
12) Не писать тесты
13) Думать, если что-то работает, то это правильно сделано
14) Не подвергать сомнению существующий код
15) Одержимость лучшими практиками
16) Одержимость производительностью
17) Не ориентироваться на конечного пользователя
18) Не подбирать правильные инструменты
19) Непонимание, что проблемы с кодом вызывают проблемы с данными
20) Изобретение колеса
21) Неправильное отношение к инспекции кода (code review)
22) Не использование систем контроля версий
23) Злоупотребление общим состоянием (shared state)
24) Неправильное отношение к ошибкам
25) Не отдыхать

1) Программирование без планирования

Качественный контент не создаётся “на коленке”, а требует основательной работы. Программный код – не исключение.

Хороший код должен проходить через следующие стадии:

Замысел. Исследование. Планирование. Написание. Проверка. Изменение.

Каждому из этих пунктов надо уделить достаточно усилий.

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

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

“Если ты зол, сосчитай до 10, прежде чем говорить. Если очень зол — то до 100”. (Томас Джефферсон)

Для нашего случая это можно перефразировать так:

“Когда проверяешь код, сосчитай до 10 прежде чем переписать 1 строчку. Если для этого кода нет тестов — то до 100”.

Программирование – это на 90% изучение существующего кода и его изменение посредством маленьких, легко тестируемых порций, вписывающихся в общую систему. Само написание кода это всего лишь 10% работы программиста.

Программирование – это не просто написание строк кода, а творчество, основанное на логике, которое надо развивать в себе.

2) Чрезмерное планирование

Планировать прежде чем нырять в написание кода – хорошая вещь. Но даже хорошие вещи могут навредить вам, если переборщить с ними. Даже водой можно отравиться, если слишком много её выпить.

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

Линейное планирование всей программы “от А до Я” (водопадным методом) – не годится для большинства программных продуктов. Разработка подразумевает обратную связь и вы постоянно будете удалять и добавлять функционал, что никак нельзя учесть в «водопадном планировании». Планировать следует несколько следующих элементов. И каждый новый надо включать в план лишь после гибкой адаптации к реальности (Agile).

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

3) Недооценивание важности качества кода

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

Смотрите на программу как на составные части, общающиеся посредством кода. Плохой код — это плохая коммуникация.

“Пишите свой код так, будто его будет сопровождать агрессивный психопат, знающий, где вы живете”. (Джон Вудс)

Важны даже “мелочи”. Если вы бессистемно используете заглавные буквы и отступы, то у вас нужно отобрать лицензию программиста.

tHIS is
  WAY MORE important
than
         you think

Не используйте длинные строки. Строку длиннее 80 символов очень трудно читать. Используйте специальные инструменты для приведения кода в порядок (ESLint, Prettier для js).

Следите за количеством строк в функциях и файлах. Разделяйте код на мелкие части, понятные и тестируемые. Функция больше 10 строк – слишком длинная.

Не используйте двойное отрицание. Не не не делайте так. Это очень не не плохо.

Давайте переменным осмысленные, информативные, однозначные названия. Не используйте короткие, общие, или опирающиеся на тип, названия.

“В компьютерных науках есть только две по настоящему сложные вещи: инвалидация кэша и именование переменных”. (Фил Карлтон)

Используйте константы с содержательным названием для хранения примитивов. Если вам где-то нужно использовать число 12, сделайте сначала так:

const monthsInYear = 12; 

Не используйте костыли в коде ради экономии времени. Не бегите от проблем, смотрите им в лицо и побеждайте их бескомпромиссно правильным кодом.

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

“Измерять программирование строками кода, это то же самое, что измерять авиастроительство тоннажем произведенных самолетов”. (Билл Гейтс)

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

4) Хвататься за первое решение

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

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

“Есть два пути написания программы: 1) сделать её настолько простой, что в ней, очевидно, не будет недостатков; 2) сделать её настолько сложной, что в ней никакие недостатки не будут очевидными”. (Тони Хоар)

5) Не отступать

Другая частая ошибка новичков – не отступать. Даже когда они поняли, что выбранное решение не самое лучшее. Подход “не сдаваться” хорош во многих сферах, но не в программировании. Программистам полезно признавать ошибки раньше и чаще. Как только вы засомневались в решении – отбросьте его и переосмыслите проблему. Не важно, сколько вы уже вложили в этот путь. Системы контроля версий типа Git позволяют создавать ветки и экспериментировать с разными решениями, активно пользуйтесь этим.

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

6) Не гуглить

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

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

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

Не будьте креативным в понятиях Брета Виктора, который сказал:

“Думать, что ты знаешь, что делаешь – самая опасная мысль креативного человека”.

7) Не использовать инкапсуляцию

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

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

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

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

Если вам нужно создать новый метод, или расширить старый, хорошенько подумайте и прислушайтесь к интуиции. Не делайте это на авось, с мыслью “потом переделаю”. Делайте это прямо сейчас.

Стремитесь к тому, чтобы ваш код имел высокое зацепление и низкую связанность (High Cohesion and Low Coupling). Этот загадочный термин означает, что внутри класса должно быть максимально связей, а между классами – минимально зависимостей.

8) Планирование неизвестного

Когда вы пишете новую строчку кода, порой в голову лезут мысли: “а что если…” И вы начинаете фантазировать о разных новых фичах, которыми можно украсить программу. В большинстве случаев такие мысли вредны и не стоит на них ориентироваться.

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

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

“Рост ради роста — это идеология раковой клетки”. (Эдвард Эбби)

9) Использование неподходящих структур данных

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

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

Неуместно использованная структура данных это кричащее предупреждение: “код новичка!”. Вот несколько примеров.

Обычный массив или ассоциативный?

Самая распространённая ошибка – это использование обычных массивов вместо ассоциативных для хранения списка записей.

Обычный массив:

[{id: 1, title: "entry1"}, {id: 2, title:"entry2"}, .... ]

Ассоциативный массив:

{ 1: {id: 1, title: "entry1"}, 2: {id: 2, title:"entry2"}, ....}

Да, вы не ослышались, для хранения списка записей нужно использовать ассоциативные массивы. Под списком записей я подразумеваю такие записи, где присутствует идентификатор. Массивы оправданы для хранения скалярных величин и если планируется активное использование методов, вроде push, pop, shift, unshift, которые обращаются к записям не через ключ, а через порядок в списке.

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

Стек или рекурсия?

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

Но вместо рекурсии можно использовать такую структуру данных как стек. Помещайте вызовы функций в стек и затем извлекайте их, когда подойдёт очередь.

10) Ухудшать код

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

Вот несколько распространенных ошибок, приводящих к беспорядку в коде:

Дублирование

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

Не использование файла конфигурации

В файл конфигурации обязательно надо помещать те величины, которые:
могут меняться в зависимости от окружения
встречаются в разных местах кода
Каждый раз, когда вы вводите в код новую величину, спрашивайте себя: “может быть её поместить в файл конфигурации?” И ответ будет почти всегда “да”.

Лишние условные операторы и временные переменные

Любой if разветвляет логику вашей программы, поэтому их наличие должно быть сведено к минимуму, насколько это возможно без вреда для читабельности. Самое сложное – определить правильный уровень для изменений: будете вы расширять текущий код или вынесете его во внешнюю функцию и вызовете её?

Вот яркий пример ненужного if:

function isOdd(number) {
 if (number % 2 === 1) {
   return true;
 } else {
   return false;
 }
}

Его можно переписать без единого if:

function isOdd(number) {
 return (number % 2 === 1);
};

11) Комментирование очевидных вещей

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

Например, такой код:

// This function sums only odd numbers in an array
const sum = (val) => {
  return val.reduce((a, b) => {
    if (b % 2 === 1) { // If the current number is odd
      a+=b;            // Add current number to accumulator
    }
    return a;          // The accumulator
  }, 0);
};

Можно заменить таким:

const sumOddValues = (array) => {
  return array.reduce((accumulator, currentNumber) => {
    if (isOdd(currentNumber)) { 
      return accumulator + currentNumber;
    }
    return accumulator;
  }, 0);
};

Но иногда прояснить код можно только комментарием. В таком случае сосредоточьтесь на вопросе: “ЗАЧЕМ нужен этот код”, а не “ЧТО делает этот код”. Вот пример кода, где комментарии только засоряют код:

// create a variable and initialize it to 0
let sum = 0;
// Loop over array
array.forEach(
  // For each number in the array
  (number) => {
    // Add the current number to the sum variable
    sum += number;
  }
);

Не делайте так, если вы программист. А если вы работодатель таких программистов — увольте их прямо сейчас.

12) Не писать тесты

Если вы считаете себя экспертом в программировании, который не нуждается в написании тестов для своего кода, то вы – новичок.

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

Вы человек и рано или поздно, по мере роста проекта, вы забудете проделать какой-то из прошлых успешных тестов. Пусть компьютер проделает их за вас.

Если можете, создавайте проверки даже прежде самого кода. Разработка через тестирование (test-driven development, TDD) создана не для прикола и хайпа. Она благотворно влияет на то, как вы продумываете, проектируете и реализуете программные элементы.

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

13) Думать, если что-то работает, то это правильно сделано

Взгляните на эту функцию, которая суммирует нечетные числа. Всё ли там правильно?

const sumOddValues = (array) => {
  return array.reduce((accumulator, currentNumber) => {
    if (currentNumber % 2 === 1) { 
      return accumulator + currentNumber;
    }
    return accumulator;
  });
};
 
 
console.assert(
  sumOddValues([1, 2, 3, 4, 5]) === 9
);

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

Проблема 1

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

TypeError: Cannot read property 'reduce' of undefined.

И это признак плохого кода по двум главным причинам:
Пользователи вашей функции не должны сталкиваться с деталями её реализации.
Сообщение об ошибке не информативно.

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

TypeError: Cannot execute function for empty list.

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

Проблема 2

Нет валидации. Что если в функцию передадут вместо массива строку, число или объект? Вот что произойдет:

sumOddValues(42);
TypeError: array.reduce is not a function

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

ОшибкаТипа: 42 - это не массив, чувак. 

Проблемы 1 и 2 описывают стандартные исключения, которые легко предусмотреть. Но бывают и менее очевидные исключения, с которыми надо быть внимательнее. Например, что произойдёт, если в массиве будут отрицательные числа?

sumOddValues([1, 2, 3, 4, 5, -13]) // => still 9

Следует ли программе воспринимать -13 как нечётное число? Или игнорировать? Или выдать ошибку? Может следует переименовать функцию в “сумма положительных нечётных чисел”? Вы легко выберете нужный вам вариант. Но самое интересное здесь то, что если вы не пишите тесты, документирующие работу вашей функции, то те, кто будут их сопровождать, даже не смогут понять, баг ли это или преднамеренное допущение.

“Это не баг. Это задуманный функционал” — удобная отмазка тех, кто не пишет тестов.

Проблема 3

Не все валидные случаи правильно работают. Забудьте разные каверзные исключения. Эта функция неправильно работает и с вполне обыденным набором переменных.

sumOddValues([2, 1, 3, 4, 5]) // => 11

В данном примере 2 попадёт в сумму, хотя не должна. Это произойдёт потому, что в функцию reduce не передано initialValue, и поэтому в качестве исходного значения будет взят первый элемент массива. Поэтому важно написать тест и для такого случая. Если такого нет, то это ещё один признак кода новичка.

14) Не подвергать сомнению существующий код

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

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

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

Новичкам можно посоветовать такое правило: любой недокументированный код, который вы не понимаете — возможно, плохой. Изучайте его. Спрашивайте о нём. Пользуйтесь командой git blame, выдающей автора каждой строки кода.

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

15) Одержимость лучшими практиками

Термин “лучшие практики” вредный, он ограничивает вас в исследовании, «ведь уже есть лучшая практика».

“Лучших практик” не бывает. Бывают хорошие практики на сегодняшний день и для этого языка программирования.

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

Не делайте что-то, потому что где-то прочитали цитату об этом, или увидели как кто-то делает это, или кто-то сказал про это “лучшая практика”. Ставьте всё под сомнение, бросайте вызов всем теориям, знайте все возможные варианты, и принимайте только обоснованные решения.

16) Одержимость производительностью

“Преждевременная оптимизация – это корень всех зол в программировании (или почти всех)”. Дональд Кнут, 1974

Хотя программирование существенно изменилось со времен Дональда Кнута, его совет актуален и в наши дни.

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

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

В погоне за вымышленной производительностью вы можете наделать реальные баги в самых неожиданных местах.

17) Не ориентироваться на конечного пользователя

Когда вы добавляете новый функционал в приложение, вы думаете в первую очередь о себе или конечном пользователе? Допустим, надо добавить новый ввод. Проще его прикрепить к уже существующей форме? Или нужно добавить ссылку. Проще всего прикрепить её к уже существующему меню ссылок?

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

18) Не подбирать правильные инструменты

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

Ориентироваться на популярность инструмента, а не пригодность для конкретной задачи – признак новичка.

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

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

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

19) Непонимание, что проблемы с кодом вызывают проблемы с данными

Один из важнейших аспектов программирования — это управление данными. Программа – это интерфейс для добавления, редактирования и удаления записей.

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

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

Как защитить себя от такого? Можно использовать несколько уровней валидации: на фронтенде, бекенде, при передаче и в базе данных (БД). Как минимум, используйте встроенные ограничения в БД.

Хорошо знайте все типы ограничений в БД и используйте их все при создании новых столбцов и таблиц.

NOT NULL накладывает ограничение на столбец, чтобы он не принимал пустые значения. Это обязательно делать, если ваше приложение предполагает существование этой величины.

UNIQUE отслеживает уникальность величины столбца в масштабах всей таблицы. Идеально подходит для хранения логина или почты пользователя.

CHECK проверяет произвольное выражение, например, для процентов нужно проверять вхождение в интервал от 0 до 100.

PRIMARY KEY подразумевает одновременно уникальность и не пустое значение. Каждая таблица базы данных должна иметь такое поле для идентификации записей.

FOREIGN KEY говорит о том, что величины этого столбца содержатся в другой таблице.

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

20) Изобретение колеса

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

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

Иногда бывает сложно выбрать нужное колесо из-за многообразия. Проводите исследование. Пробуйте перед покупкой. Большинство “программных колёс” бесплатны и с открытым кодом. По возможности используйте заготовки с открытым исходным кодом (open source), их легко отлаживать, улучшать, заменять и поддерживать.

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

21) Неправильное отношение к инспекции кода (code review)

Один из признаков новичков, это восприятие инспекций кода как критицизма. Они не любят их, не ценят и даже боятся.

Это в корне неправильное отношение надо как можно быстрее изменить. Смотрите на каждую инспекцию кода как на ценную возможность обучения. Любите и цените их. Учитесь посредством них. И благодарите делающих замечания.

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

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

22) Не использование систем контроля версий (Git)

Новички склонны недооценивать пользу хорошей системы контроля версий/кода, вроде Git.

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

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

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

Ещё одно предназначение системы контроля версий – понятность предназначения той или иной вещи. Допустим, вы столкнулись с функцией и вам надо понять её назначение и устройство. Вы можете найти коммит, в котором она появилась, и перед вами возникнет контекст её создания, что прольёт свет на всё остальное, связанное с ней.

Система контроля версий может даже помочь обнаружить баг, а именно, ту строку кода, с добавления которой программа дала сбой. В Гите есть бинарный поиск bisect, обнаруживающий коммит, внёсший баг.

Систему контроля можно использовать в разных целях, даже до того, как изменения кода превратились в официальные коммиты:

  • отслеживание изменений (staging changes)
  • выборочный патч (patching selectively)
  • сброс (resetting)
  • прятание (stashing)
  • перезапись истории (amending)
  • применение (applying)
  • просмотр изменений (diffing)
  • отмена коммитов (reversing)

Изучите все эти возможности, поймите, используйте и цените их. Чем меньше возможностей Git вы знаете, тем больше вы новичок.

23) Злоупотребление общим состоянием (shared state)

И снова это не про сравнение парадигмы функционального программирования с остальными.

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

Большая проблема общего состояния начинается тогда, когда несколько ресурсов меняют его в рамках одной итерации цикла событий (в событийно ориентированных средах). Возникает состояние гонки (Race conditions). И новички склонны решать эту проблему посредством таймера, особенно при блокировке данных. Это большой красный флаг. Избегайте этого. Ни в коем случае нельзя писать такой код или принимать его.

24) Неправильное отношение к ошибкам

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

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

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

25) Не отдыхать

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

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

1. Зацикливаться на сложной задаче

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

Как поступить. Отдохнуть, забыть о задаче, а потом с новыми силами попробовать написать код с нуля. Если не получается и так— задать вопрос знающему человеку.

2. Не задавать вопросы

Помните, как в университете на лекции по новой теме? «Вопросы есть? — Нет». Никто из потока не спрашивает, даже если непонятно — потому что никто не хочет показаться глупым. В итоге это мешает учиться, а наставнику — учить. Наставник не может помочь, потому что не знает о проблеме, и думает, что вопросов нет, и всё понятно. Это приводит к тому, что задачи делаются бесконечно.

Задавай мне вопросы, я из тех, кто любит поговорить после пуллреквеста!

Как поступить. В вопросах нет ничего плохого, за них не ругают. Лучше сразу признать, что вы не можете решить задачу, и попросить о помощи. Главное, спрашивать правильно — всё обдумать, поискать ответ, и только потом задавать вопрос.

3. Спрашивать, не подумав

«А как вот это? А как вот то? А что это такое?»

Наставник, конечно, сможет ответить, но лучше сначала попытаться найти ответ самому, а если не получается, обратиться за помощью. Часто бывает так: студент мне пишет кучу вопросов, а я прямо сейчас не могу ответить. Беру телефон через пару часов, а там: «Отбой, я сам разобрался!»

Как поступить. Сначала поискать ответ в конспектах, книжках или интернете. Если не получилось — попросить о помощи.

Что-то нажали и всё сломалось

Что-то нажали и всё сломалось

4. Неправильно задавать вопросы

Когда ответ не нашёлся на первых двух страницах поиска, очень хочется срочно написать наставнику «У МЕНЯ НИЧЕГО НЕ РАБОТАЕТ». Это плохой подход, потому что всё равно придётся объяснять, что вы имеете в виду.

Как поступить. Описать конкретную проблему, чтобы наставнику было, что ответить и без уточнений. Например, «я добавил цикл на эти строки и блок перестал отображаться, удалил цикл, всё снова стало хорошо. Что не так с циклом? Понимаю, что дело в нём, но что конкретно не вижу, можешь посмотреть?».

5. Не тестировать свой код

Другая проблема — написать код, который вроде работает, и сразу отправить его на проверку. Такой код с большой вероятностью вернётся на доработку, потому что никто не захочет проверять то, что не работает (да и по критериям качества не пройдёт).

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

6. Винить во всём компьютер

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

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

Решаем проблемы

  1. Вовремя откладывайте задачи, которые не можете сделать.
  2. И просите о помощи.
  3. Но сначала поищите ответ самостоятельно.
  4. Если не нашли ответ — спросите, но формулируйте вопрос правильно.
  5. Тестируйте свой код.
  6. Разбирайте алгоритмы на винтики и добирайтесь до сути.

Ошибки случаются, главное — быстро их исправить.


«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

ТелеграмПодкастБесплатные учебники

Планируете стать разработчиком, но не знаете, как учиться? Разбор частых ошибок новичков в программировании, чтобы вы не теряли время зря.

Допустим, у вас появилась возможность вернуться в прошлое и что-нибудь изменить в своей работе. Что это будет?

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

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

Плохой наставник или курс обучения

Те же грабли: разбор частых ошибок новичков в программировании

Амбициозным ученикам кажется, что можно пойти по отработанной модели. Например, всего лишь изучить Python, PHP, cPanel. Потом сделать пару десятков проектов, оформить их в портфолио. Наконец, начать работать, параллельно заниматься изучением каких-нибудь модных вещей, вроде блокчейна − в интернете ведь полно видео. Ну и таким образом, года через три стать специалистом высшего уровня.

Ага, если бы.

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

Те же грабли: разбор частых ошибок новичков в программировании

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

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

  • Активен ли инструктор на Github или других популярных веб-платформах для программистов? Есть какой-то подтверждённый опыт обучения, или только красивые лендинги?
  • Когда контент обновлялся в последний раз?
  • Чего достигли ученики спустя некоторое время после обучения? Если информация о них у вас есть, место работы можно проверить в LinkedIn или на Facebook.
  • В процессе обучения вы будете заниматься созданием бессмысленных проектов (дейтинг-приложение для собаководов, калькулятор, ту-ду лист) или сотрудничать с брендами, внедрять более-менее инновационные идеи?
  • Есть ли блог сервиса или наставника? Посмотрите, насколько качественный контент там публикуется и кем. Возможно, тексты пишутся на аутсорсе.
  • Пройдите несколько вводных уроков. Пропускаете их, потому что кажется, что все и так понятно? Тогда стоит выбрать другой источник информации.

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

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

Всё и сразу

Те же грабли: разбор частых ошибок новичков в программировании

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

Так, ну Google активно использует Go, Python помогает в машинном обучении, а это сейчас нужно всем, ну и вроде как без JavaScript сейчас никуда не возьмут. Всё, значит, сейчас я буду изучать эти три языка, может ещё чего в процессе освою.

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

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

Хотите изучить React, Angular, Vue, потому что они попали в какой-то топ? По сути, они выполняют одинаковые задачи. Сосредоточьтесь на чем-нибудь одном и стремитесь получить практический опыт только в этой области.

Стремление к совершенству

Те же грабли: разбор частых ошибок новичков в программировании

Идеальных программистов нет, как и идеального кода. Да, все вот эти спикеры, лекторы, выходцы из Google и Amazon тоже регулярно совершают ошибки. Если вам так будет проще, то примите факт, что задача, над которой вы сейчас работаете, через несколько лет станет неактуальна или потребует переосмысления. И да, ошибки − естественный процесс обучения, даже когда менеджеры негативно о вас отзываются, вам не стоит огорчаться: вы сделали так, как считали правильным.

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

Неправильный выбор инструментов

Те же грабли: разбор частых ошибок новичков в программировании

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

Среди новичков в программировании часто встречаются те, кто приступает к изучению библиотек, не понимая, что они делают и почему они популярны. Следовать трендам, не понимая сути, − bad idea.

Например, кому-то нравится модный React за удобство использования функциональных компонентов. А TypeScript − за то, что он позволяет совершать меньше ошибок. Разве такие особенности делают какой-то из инструментов обязательным к изучению? Нет! Мнения, тренды, да и сами инструменты постоянно меняются. Совет на все времена − сосредоточьтесь на основах.

Синдром студента

Те же грабли: разбор частых ошибок новичков в программировании

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

Вообще, доступ к YouTube есть у всех. Но посмотреть несколько десятков тематических лекций на YouTube, а потом перейти к следующим − значит стоять на месте. Это как смотреть на игру в футбол, а приходя на поле не попадать по мячу. Не нужно делать как все: попытайтесь поскорее отделиться от этой массы новичков в программировании, бесконечно поглощающих теоретическую информацию.

Стоит ли идти в тренировочные лагеря для программистов (Bootcamp)?

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

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

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

Среди новичков в программировании популярна практика поиска готовых фрагментов кода на Stack Overflow или GitHub в целях ускорения разработки. Но вместо того, чтобы понять, почему этот код работает, а их собственный нет, они двигаются дальше, оставляя пробел в знаниях.

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

Задавайте вопросы нормально

Обычно говорят, что нет плохих вопросов. На самом деле, это не так. Почему-то новички в программировании очень плохо умеют объяснять другим, в чём им нужна помощь. Из-за этого, многие бояться задавать вопросы на форумах, избегают критики и программистского снобизма.

Те же грабли: разбор частых ошибок новичков в программировании

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

Чтобы нормально задать вопрос, объясните его контекст, расскажите, что вы уже пытались сделать, поделитесь, какой вариант решения вам самим кажется наиболее правильным (и предположите, в чем именно может быть ошибка), приложите код, чтобы можно было воссоздать ситуацию.

Перестаньте сомневаться в своих перспективах

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

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

Оставайтесь человеком

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

Программирование − это просто ещё одна область для изучения, которая не требует отказа от встреч с друзьями, нормального питания, отдыха. Всё это − базовые, необходимые для функционирования организма вещи. Делать вид, что они подождут, глупо. Так или иначе, бесконечное обучение может вызвать отвращение к тому, что вы изучаете.

Заключение

Главное − критическое отношение ко всему. Идеальных формул нет, и если вы видите, что все увлекаются новой книгой о программировании, которая вам неинтересна, не стоит тратить время впустую. Каждый раз, когда вы вкладываете свое время во что-то, вы отказываетесь от возможности заняться чем-то другим. Качество, а не скорость − вот долгосрочная стратегия.

И последнее: прежде чем следовать советам из этой статьи, оцените, совпадают ли наши идеи с вашими принципами.

Понравился разбор ошибок новичков в программировании? Возможно, вас заинтересует следующее:

  • 5 столпов программирования, с которыми вы точно освоите азы
  • Советы программистам, которые учатся самостоятельно
  • 25 самых популярных мифов о программировании и программистах

Источник: Обзор популярных ошибок новичков в программировании на Medium

Перевод статьи «Don’t Make These Mistakes Whilst Learning How to Code».

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

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

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

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

Выбор неподходящего учителя или наставника

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

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

Технологии постоянно развиваются, и выбор источника знаний — одна из вещей, определяющих ваш успех.

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

Одновременное изучение разных вещей

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

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

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

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

Недостаточно изученные основы

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

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

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

Хорошей аналогией может послужить дерево. Представьте, что корни и ствол дерева это основы программирования, а листья — популярные сегодня технические стеки. Листья каждую весну появляются новые, а ствол и корни остаются все те же.

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

Бултыханье в болоте туториалов

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

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

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

Отсутствие конкретных целей и сроков

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

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

Если при работе над проектом что-то вас затормозит, наличие плана позволит вам определить, насколько далеко вы уже продвинулись, и откорректировать конечные сроки.

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

Неумение объяснять технические концепции простыми словами

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

В сфере разработки конечный пользователь (или клиент) заинтересован в продукте, а не в процессе его создания. Поэтому когда вы рассказываете клиенту, что «бэкенд-сервер при обработке команды обнаружил ошибку на 12 строке», это ему ни о чем не говорит. Но если вы скажете, что «возникли проблемы с загрузкой документа, мы постараемся решить эту проблему в течение часа», клиент получит всю необходимую ему информацию.

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

Нежелание обращаться за помощью

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

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

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

Заключение

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

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

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

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

1. Выбор платформы и языка программирования

1

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

Что же делать? Все гораздо проще, чем кажется. Зайдите на любой сайт фриланса и посмотрите, какие специалисты требуются на данный момент. Скорее всего, вы сможете увидеть общую картину и понять, какие навыки вам нужно освоить. Если вы хотите сесть на красный трактор и уехать в другую страну, то попробуйте посмотреть на ситуацию на зарубежных сайтах фриланса.

Еще один более трудоемкий способ – это ходить на собеседования. Там вы не только сможете понять, нужны ли вы вообще хоть кому-нибудь с тем объемом знаний и навыков, которыми вы обладаете на данный момент. А еще вы поймете, какие требования есть у работодателей.

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

2. Слишком много сомнений

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

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

3. Слишком высокое самомнение

2

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

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

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

4. Не знать английский

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

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

5. Слишком много комментариев

3

Конечно, никто не недооценивает важность комментариев в коде. Особенно в специфических моментах комментарий необходим. Ну а если вы работаете над одним проектом в команде, то комментарии становятся неотъемлемой частью кода.

Но вот что вам не стоит делать, так это оставлять комментарии вроде этого: “score += 5; // добавляет 5”. Это очевидно, и нет нужды еще раз писать об этом в комментарии. Конечно, комментировать каждую линию – это отличное упражнение для вашей первой программы. Но это не то, к чему вы должны привыкать.

6. Не доучиваться до конца

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

7. Учить один язык за другим

4

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

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

8. Пренебрегать дебаггерами

Если вы работаете с такими языками как Java, C# или ActionScript3, то вам стоит пользоваться дебаггером. Он не только облегчит вашу работу, но и обнаружит то, что вы можете не заметить.

9. Не делать бэкапы своей работы

5

Вы должны вычеркнуть из своего словаря фразу “На это было потрачено Х часов работы!” Существует масса отличных инструментов, которые автоматически делают бэкапы и помещают их в облако, например, поэтому любые проблемы, будь то пожар или “синий экран”, не могут свести на нет все ваши труды.

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

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

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

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

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

Читайте также: 9 полезнейших сайтов для изучения программирования

Читайте также: Уроки по JavaScript для начинающих

Читайте также: 16 полезных уроков по CSS3 для начинающих

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

Розовые очки

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

Первым делом нужно осознать, что за вас никто ничего делать не будет. И что получить эту профессию очень и очень непросто. И чем больше вам лет, чем дальше ваша текущая профессия, образование и интересы от IT сферы, тем сложнее (и дольше) вам будет переучиваться. Поэтому будьте готовы к упорному труду. За месяц изучить программирование не выйдет. Придется учиться практически ежедневно на протяжении всей дальнейшей жизни. Обходных путей и каких-то тайных знаний тут не существует.

Нереальные/неконтролируемые цели

Цель «Стать программистом» — очень большая и серьезная. Типичный «слон». А значит, есть его надо по кусочкам. Эту цель не взять с наскока. Будут дни, когда вы будете впадать в депрессию из-за того, что результатов нет, вы весь день промучились с какой-нибудь задачкой, которую так и не получилось решить. Рассылаете свое резюме джуниор-программиста, а в ответ тишина. В такие моменты очень легко потерять мотивацию, разочароваться, сменить направление деятельности.

Чтобы поддерживать себя в мотивированном состоянии и плодотворно учиться, стоит ставить себе контролируемые цели. Например, учиться программировать каждый день минимум по 2 часа (этого мало, если вы хотите получить быстрый результат, но это гораздо лучше чем три дня по 8 часов, а потом забросить на 2 недели). Можно разбить эти 2 часа на 4 «помидорки» по полчаса в течение дня. (гуглите «техника Помодоро») Еще лучше — если вы распишете, что конкретно будете делать, например заниматься на Хекслете, или по какой-то конкретной книге. В этом случае, если вам удастся придерживаться этого графика, вы 100% будете двигаться вперед.

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

Читайте также
Стать программистом можно и после 35 лет: история успеха студента Хекслета.

Зубрежка функций

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

Типа: Ой, Руби классный. Ой нет, Руби умирает, вот Питон супер, его рекомендовали в какой-то статье которую я краем глаза читал. А пхп так вообще ужас, да и к тому же полумертв. О, так джависты оказывается получают в 5 раз больше других программистов, мне срочно нужна Java! И так далее. Эти попытки разобраться какой язык лучше занимают уйму времени и плодят сотни новых вопросов на тостерах.

Какое занятие может быть еще бесполезнее? Это не выучив даже синтаксиса языка, до посинения читать форумы и пытаться разобраться, что же блин лучше React или Ангуляр.

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

Дети Ютуба

Где брать эти знания? Кроме очевидного -Youtube, Coursera, Stepic, Openedu, курсы Хекслета, стоит начать активно читать книги (бумажные или электронные — разницы нет). Видеокурсы все больше движутся в направлении развлечений, народ хочет зрелищ. (и хлеба в виде больших зарплат). А скучать никто не хочет. Под видео часто можно видеть отзывы типа “Скучно! Монотонно!”. Людей приучают развлекаться, и они постепенно привыкают. А ведь обучение по книге гораздо более эффективно, потому что информация в книге сконцентрирована, а в видео наоборот, размазана, чтобы было подольше да повеселее.

Однако не зря говорят: «У бедных людей большие телевизоры, а у богатых большие библиотеки». Поэтому, читайте больше, друзья. Даже 3 хороших книги уже вас прокачают. И если вы решили изучать программирование, то очень советуем вам вдобавок к любым курсам и менторам с первых дней начинать читать книги.

Что именно читать? Смотрите здесь, в книжной подборке Хекслета.

А вот отдельная статья про то, как выбирать и эффективно читать технические книги.

Перфекционизм

Некоторые хотят выучить все идеально, даже и не приступая к реальным проектам. Чтобы не дай бог где-то не ошибиться, не показать себя глупым. Грубо говоря, хотят стать senior программистом, еще перед трудоустройством. Им всегда кажется, что они знают мало, нужно еще, еще, еще. Еще чуть-чуть подготовиться, тогда можно и сходить на собеседование. Наверняка, это явление исследовано вдоль и поперек всякими мощными психологами. Мне кажется, здесь основной страх один — показаться плохим(неумелым) перед какими-то людьми, мнение которых для тебя важно.

Реальность же такова, что практически невозможно к чему-то подготовиться «с дивана». Нельзя научиться драться по книгам, невозможно на 100% подготовиться к собеседованиям, не посетив ни одного. Стоит принять для себя, что неудачи это просто опыт. Конечно, сложно сломать устоявшиеся привычки за один раз, но пробуйте разрешать себе ошибаться, хотя бы в мелочах. Не бойтесь показаться глупыми. Не бойтесь ошибок, не бойтесь отказов, не бойтесь неудач — это путь к лучшей жизни.

Ладно это все общая болтовня, а вот конкретный совет. Если вы уже хотя бы несколько месяцев занимаетесь программированием, начинайте составлять резюме, читайте статью про алгоритм поиска работы и вперед!:)

Спасибо за то, что дочитали до конца и удачи во всех начинаниях!

А если вы уже готовы учиться, начните изучать разработку с бесплатного курса «Основы современной вёрстки». Вы научитесь создавать статические веб-страницы, стилизовать элементы, использовать редакторы кода с полезными расширениями. В конце курса вы опубликуете свой первый сайт на GitHub Pages.

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

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

1. Тратить много времени на исследования технологий вместо того, чтобы писать код на самом деле

Какой язык программирования или фреймворк мне выбрать для изучения? Какую базу данных мне выбрать для изучения?

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

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

2. Не проверять работу вашего кода постоянно и позволять коду бесконечно накапливаться.

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

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

3. Кодирование в изоляции

Многие новички не взаимодействуют с другими разработчиками или сообществами программистов из-за синдрома самозванца или по какой-либо другой причине. Это одна из самых распространенных и серьезных ошибок, которые допускают большинство программистов. Во время обучения программированию всегда полезно принять участие в сообществе программистов, чтобы учиться друг у друга. Stackoverflow, Reddit и т. Д. — все эти онлайн-платформы не только помогают найти решение проблем, связанных с кодированием, но также помогают изучить лучший подход к кодированию от ведущих программистов со всего мира.

Сотрудничество с другими программистами и обмен знаниями — признак хороших программистов. Оставайтесь активными на этих платформах как можно дольше и не бойтесь посещать мероприятия или комментировать эти онлайн-платформы. Участие в диалоге по кодированию, работа над некоторыми проектами с другими программистами — один из лучших способов улучшить и развить навыки.

4. Сомневаюсь в своих знаниях и способностях, когда видишь ошибки.

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

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

5. Неправильно просите о помощи

В какой-то момент каждый новичок сталкивается с некоторыми проблемами программирования на этапе обучения программированию. Это довольно распространенное явление, и просить о помощи — нормально. Многие новички не получают четкого и лаконичного ответа на свои проблемы, потому что не понимают, как правильно и конструктивно задать вопрос. Они не понимают, какие детали они должны предоставить, как сформулировать вопрос, как объяснить, какое решение они пробовали, и как вещи связаны в их коде. Помните, что какое бы сообщество (StackOverflow, Reddit) вы ни посетили, чтобы задать свой вопрос, задавайте его правильным способом, чтобы быстро и легко получить правильное решение. Ниже приведены некоторые моменты, о которых следует помнить, чтобы правильно задать вопрос …

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

6. Не обращать внимания на изменение плохого / спагетти-кода

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

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

7. Сдаваться прямо перед тем, как перемены вот-вот произойдут

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

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

Перевод статьи «Don’t Make These Mistakes Whilst Learning How to Code».

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

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

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

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

Выбор неподходящего учителя или наставника

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

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

Технологии постоянно развиваются, и выбор источника знаний — одна из вещей, определяющих ваш успех.

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

Одновременное изучение разных вещей

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

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

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

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

Недостаточно изученные основы

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

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

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

Хорошей аналогией может послужить дерево. Представьте, что корни и ствол дерева это основы программирования, а листья — популярные сегодня технические стеки. Листья каждую весну появляются новые, а ствол и корни остаются все те же.

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

Бултыханье в болоте туториалов

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

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

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

Отсутствие конкретных целей и сроков

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

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

Если при работе над проектом что-то вас затормозит, наличие плана позволит вам определить, насколько далеко вы уже продвинулись, и откорректировать конечные сроки.

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

Неумение объяснять технические концепции простыми словами

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

В сфере разработки конечный пользователь (или клиент) заинтересован в продукте, а не в процессе его создания. Поэтому когда вы рассказываете клиенту, что «бэкенд-сервер при обработке команды обнаружил ошибку на 12 строке», это ему ни о чем не говорит. Но если вы скажете, что «возникли проблемы с загрузкой документа, мы постараемся решить эту проблему в течение часа», клиент получит всю необходимую ему информацию.

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

Нежелание обращаться за помощью

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

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

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

Заключение

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибки начинающего мотоциклиста
  • Ошибки при изготовлении мыла
  • Ошибки позирования на фотосессии
  • Ошибки при завязывании галстука
  • Ошибки подразделение организации должно быть указано полностью