2013-11-26
Разработка —это умение создавать новые вещи, и это гораздо легче делать, если вы знаете конечную цель. Если ваша цель — «научиться программировать», ваша дорога будет запутанной и приведёт в никуда.
Чем вы хотите заниматься? Вебсайтами? Разработкой игр? Мобильных приложений? Может, вы мечтаете о своём стартапе? Интересуетесь интерактивным искусством? А может быть, вы хотите заняться автоматизацией текущих задач в компании, чтобы у вас и ваших коллег было больше времени на другие дела. Чёрт возьми, да даже простое желание изучить большее количество фреймворков и повысить свою ценность на рынке труда — тоже цель.
Определитесь со своей, и изучайте то, что нужно вам.
Нет в этом никакой магии
Программирование — такой же навык, как любой другой. Как в изучении любого человеческого языка, в языке программирования есть своя грамматика и свой словарный запас. Как и в математике, в ЯП есть процессы, которые нужно понимать для решения определённого круга проблем. Как в любой прикладной сфере, в программировании есть техники и инструменты, которые применяются в конкретных задачах, и под каждую задачу нужен свой инструмент.
Скажем, одним из краеугольных камней в использовании языка программирования является понимание таких категорий, как указатели и рекурсия.
Я узнал об указателях и рекурсии ещё в школе, и это было настоящим удовольствием для мозга. Именно они пробудили во мне интерес к информатике и компьютерным технологиям. Но вне школы и курсов программирования было очень мало ситуаций, где я мог бы применить категории рекурсии или указателей. А потом, когда я сам стал преподавателем, я многократно сталкивался с людьми, которые не имели ни малейшего понятия ни о том, ни о другом, но их проекты были успешно реализованы.
Нет никакого смысла постоянно себя спрашивать, достаточно ли ты умён для выполнения той или иной задачи. Конечно, чем сложнее перед вами задача, тем больший уровень мастерства вам потребуется. Но это верно абсолютно для любой сферы деятельности. Если вы не планируете всю жизнь заниматься только и исключительно программированием, вам вовсе не нужно становиться непререкаемым гением в этой области.
Ничего не работает с первого раза
(и даже со второго и с третьего)
Вы начали изучать программирование и приступили к выполнению упражнений и практической реализации полученных знаний. Вы очень быстро столкнётесь со следующим: вроде бы всё настроено, проверено и перепроверено, и… ВСЁ РАВНО НИЧЕГО НЕ РАБОТАЕТ! У вас нет ни малейшей подсказки о том, что именно нужно фиксить, а сообщение об ошибке всем своим видом говорит: «Да иди ты!». В такие моменты хочется всё бросить, махнуть рукой и сказать себе, что программирование — это не ваша стезя. Со мной такое случилось, когда я писал свою первую программу на С++, а при запуске мне выдавалось только скупое segmentation fault.
Все программисты проходят через это. И сообщения об ошибках ничего не говорят о вашем уме, технической подкованности и программистском таланте. Это случается и с новичками, и с опытными разработчиками. Разница между чайником и сэнсеем лишь в особенностях восприятия.
Сэнсей знает и верит, что можно найти логичную причину неполадок, что любую проблему можно исправить, что всегда найдётся выход. Не всегда очевиден путь от «не работает» до «работает», но опытный разработчик достигает рабочего состояния, несмотря ни на что. Новичка от опытного отличает вера и терпение.
Всегда кто-то будет говорить, что вы всё делаете не так
Переносите скобки на следующую строку. Оставляйте скобки на текущей строке. Используйте отступы для структуризации. Отступы — это зло. Используйте хранимые процедуры. Не используйте хранимые процедуры. Всегда комментируйте код. Хорошему коду комменты не нужны.
М? Как вам?
Многие программисты гениально отстаивают свою точку зрения и свой подход, но это не значит, что их путь — Единственно Возможный Верный.
Тем не менее, когда ты совсем ещё юн и зелен, один из самых стрессовых моментов — это именно взаимодействие с теми, кто говорит тебе, что ты неправ.
Если вы работаете в команде, будьте уверены, что обязательно найдётся кто-то, кто будет оспаривать каждый ваш шаг. Порой это будут даже ценные замечания, которые заставят вас размыслить: а вдруг и в самом деле что-то не так и можно сделать лучше? Но зачастую все эти замечания оборачиваются неконструктивной дискуссией ради дискуссии и самоутверждения.
Но, если вам самому нравится поупражняться в ораторском искусстве, почему бы и не позволить себе это?
Да, вас будут называть «неправильным программистом»
HTML не считается. Настоящие программисты работают только на С. Настоящий разработчик не опустится до Windows. Не всем людям дано изучить это. Программирование не для тебя.
Как это знакомо, правда?
Программирование может означать совершенно разное для разных людей, и в разные временные отрезки. У современных начинающих разработчиков гораздо больше инструментов для того, чтобы заниматься делом быстрее и проще, и именно это соблазняет разработчиков предыдущего поколения говорить: «Да что вы умеете? Перфокарт на вас нет!».
За этими словами скрывается страх: если все подряд начнут называть себя программистами, наша работа потеряет такую приятную для нас элитарность. Поэтому мы лучше будем доказывать себе, что мы можем сделать невозможное и рассуждать о том, что те, кто ищет пути легче и быстрей — не труъ. А мы труъ.
Это глупо, разве нет? Использовать инструменты, которые делают нашу жизнь проще — это нормально. Если вам проще создать игру с помощью Stencyl или GameMaker, а не писать её с нуля — это нормально. Если ваш путь разработчика начался с HTML или макросов в Excel, это тоже нормально.
Со временем вы обнаружите, что те инструменты, которыми вы пользовались раньше, вас больше ограничивают, а не помогают, и начнёте искать новые.
В качестве итога: важны не методы, важна цель
Для самообучения программированию существует множество ресурсов и инструментов. Можно читать книги, можно выполнять интерактивные упражнения, можно работать над кодом, написанным другими людьми. Рано или поздно вам придётся понять, на каких ЯП вы хотите работать в дальнейшем.
С какой проблемой сталкиваются все, кто начал изучать программирование самостоятельно? Вы с лёгкостью осваиваете основы, а потом внезапно сталкиваетесь с гораздо более сложными явлениями. Вы знаете, как вывести несколько строк текста, но не имеете ни малейшего понятия о том, как начать работу над реальным проекте. Вам кажется, что вы просто следуете указаниям из учебника или из интерактивного курса, но ровным счётом ничего не понимаете. Вы начинаете обвинять создателей программы или курса.
Другими словами, вы не знаете, чего конкретно вы не знаете. Понять, что начать изучать далее — уже головоломка.
Что делать, когда вы оказались в таком тупике?
Путь один: продолжать идти. Вам нужно продолжать изучение, читать, обдумывать, создать в уме идею проекта и постепенно наращивать те знания, которые вам понадобятся для его реализации.
Другого способа нет. Кирпичик за кирпичиком вы выстраиваете стену своих знаний. Потом стена будет укрепляться, она будет всё выше и стройней, превратится в настоящее здание. Но для этого нужно терпение и вера в то, что это вам нужно.
Подготовлено Люсей Ширшовой по советам блога Medium.com.