Education

Часто на Reddit или Quora я вижу вопросы “Как понять, что я могу стать хорошим программистом?”. Такие вопросы о программировании часто всплывают, когда люди задумываются о переменах в карьере и хотят знать, что для этого нужно.

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

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

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

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


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

1 | Вам не хватает любопытства

Если вам не очень интересны компьютеры и технологии, вам никогда не стать успешным программистом.

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

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

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

2 | Вам не хватает самостоятельности и гибкости

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

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

В мире программирования вся необходимая информация находится в волшебном месте, ранее известном как Информационная Супер-Автострада. Это внушительная библиотека с одним огромным входом: Google. Понимание, что вы просто можете ввести что хотите в Google и получить нужную информацию, — ваша первая задача при изучении необходимых для программирования навыков.

Вы должны не только умело пользоваться Google. У всех языков программирования есть документация и инструкции, в которых предельно ясно объясняется, как работает язык. Это как пользоваться словарем — когда вам встречается незнакомое слово, вы ищете его там. Чтение документации — самый быстрый и надежный способ развить навыки программирования. В ней есть буквально всё.

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

3 | Нехватка настойчивости при возникновении проблемы

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

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

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

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

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

4 | Вы не чувствуете удовлетворения после решения проблемы.

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

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

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

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

5 | Вы нетерпеливы при обучении и понимании чего-либо

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

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

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

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

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

6 | Вам лень или сложно думать

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

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

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

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

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

7 | Вы не можете думать самостоятельно

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

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

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

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

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

8 | У вас ограниченное, узкое и беспорядочное мышление

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

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

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

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

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

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

9 | Вы ищете “правильное” решение, не понимая, что есть спектр “хороших” и “плохих” решений

Если для вас цель программирования — это поиск единственно правильного решения, а не нескольких подходящих решений, вы никогда не станете успешным программистом.

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

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

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

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

10 | Вы не уделяете внимания деталям

Если вы игнорируете детали и не замечаете мелочей, вы никогда не станете успешным программистом.

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

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

Говорят, дьявол в деталях. И в программировании это действительно так.

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

Бонус: Вы думаете о бизнесе

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

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

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

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


Вывод

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

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

Перевод статьи Jonathan Bluks: 10 Signs You Will Suck at Programming