Сфера программирования предлагает богатые возможности для самоучек во всех уголках мира. Любой может без проблем решить заняться программированием и сразу перейти к написанию кода.
При этом большинство новичков интересуются, с какого языка лучше всего начать. Только вот, когда этот выбор сделан, выясняется, что изучения языка недостаточно. В результате энтузиазм первого порыва иссякает, и многие не знают, что делать дальше.
Я знаком с несколькими людьми, которые с отличием проходили мощные учебные программы на Coursera или edX. И все же по их завершению они не знали, чем заняться дальше.
Эта статья предлагает отчетливый план из семи шагов, которому можно следовать после освоения азов любого языка программирования. На прохождение всех семи шагов может уйти семь и более недель, что будет зависеть от наличия у вас свободного времени.
Шаг 1. Алгоритмы и структуры данных
Освоив язык программирования, необходимо продолжать его практиковать постоянно. Пишете любой код. Хотя наилучшим способом совершенствования навыков будет их разностороннее применение в различных областях. При этом хорошим стартом будет знакомство с алгоритмами и структурами данных. Это поможет не только понять язык более глубоко, но и повысит навык написания кода.
Что именно нужно делать?
- Структуры данных. Узнайте, какие структуры данных доступны в используемом вами языке программирования и разберитесь в том, как их прописывать в коде. Будет нелишним также узнать, как использовать структуры данных из других языков. Здесь мы говорим о массивах, списках, словарях, хэш-картах, деревьях и других структурах.
- Алгоритмы. Вам не обязательно осваивать все возможные алгоритмические задачи этого шага. Достаточно будет разобрать основные. Так что просто ознакомьтесь с хорошо известными алгоритмами сортировки и поиска, после чего начинайте писать на их основе код. Решайте задачи с использованием поиска методом брут-форса, двоичного поиска, сортировки слиянием, быстрой сортировки и динамического программирования.
Тут уже от вашего желания будет зависеть, углубитесь вы на этом шаге, занявшись освоением всего курса по структурам данных и алгоритмам, либо же решите пробежаться лишь по основным моментам, касательно этих тем. В качестве краткого знакомства рекомендую книгу “Cracking the Coding Interview: 189 Programming Questions and Solution”.
Это не спонсорская рекомендация. У меня есть эта книга, и мне очень понравилось то, как оформлено ее содержание. Для каждой известной темы в ней дается по несколько задач. Поэтому, если алгоритмы вы еще не изучали, то можете ориентироваться на названия глав этой книги и искать соответствующие материалы в Google. Например, берете главу “Trees” и начинаете углубленно изучать деревья по различным статьям и видео на YouTube. После этого возвращаетесь к книге, знакомитесь с задачами этой главы и пишите их решения.
Шаг 2. Анализ алгоритмов
Теперь, когда вы ознакомились с основными структурами данных и алгоритмами, пора научиться анализировать их применение.
Анализ подразумевает определение для каждого алгоритма времени его выполнения и требуемого объема памяти. Время выполнения, как правило, выражается через нотацию О большое.
На этом шаге стоит более подробно почитать про использованные вами алгоритмы и протестировать, как быстро ваш код справляется с задачей. При этом необходимо отмечать, в какой ситуации и какой алгоритм будет более подходящим. То же касается и структур данных.
Новички часто выбирают себе любимчика, например сортировку слиянием или списки. А вот профессионал уже более прагматичен и знает, что предвзятость здесь неуместна, так как все определяется задачей.
В результате у новичков недостает разнообразия в коде, и решения получаются медленными, требуя при этом больших объемов памяти на обработку. Так что читайте больше, узнавайте новое, постоянно практикуйте отладку кода, а в случае особо сложных задач предусматривайте наихудшие возможные сценарии.
Шаг 3. Спортивное программирование
В двух предыдущих шагах рассматривалось быстрое знакомство с основами. Там вы выступали больше в роли учащегося, нежели самостоятельного практика. Теперь настает черед активной проработки задач, которые сложно сходу отнести к какой-то определенной теме.
На этом этапе нас не интересует получение медали в соревновании CodeJam от Google или любом другом конкурсе спортивного программирования. Мы все еще начинающие, и цель данного этапа не победить, а освоить максимум за минимальное количество времени.
Для этого достаточно обратиться к сайтам вроде Codewars, HackerOne и Leetcode. На них вы сможете решать задачи и соревноваться с другими участниками. Чем больше практики, тем быстрее обучение. Большинство подобных сайтов помогут вам пошагово перейти от задач базового уровня до более продвинутых.
Этому шагу необходимо уделить не меньше недели.
Шаг 4. Базы данных
Каждая реальная программа нуждается в базе данных. Очень редко встречаются такие, функционирование которых заключается исключительно в обработке данных в отсутствии БД.
Поэтому необходимо пройти краткий курс знакомства с базами данных. Наиболее известной является SQL. Здесь не играет роли, какую именно БД вы будете использовать в конечном итоге. Это может быть SQL, MongoDB и даже хранилище Firebase. Самое важное — это понять, что такое базы данных, как хранятся данные и как их можно извлекать с помощью знакомого вам языка. На начальном этапе будет полезно познакомиться с инструкциями CRUD — создание, чтение, обновление, удаление. Затем нужно будет научиться прописывать для баз данных алгоритмы сортировки и поиска.
Шаг 5. Объектно-ориентированное программирование
Большинство начинающих не углубляются в знакомство с ООП. Они сосредотачиваются на использовании циклов, инструкций if
и наискорейшем решении задач. На данном же этапе вашей целью будет именно углубление в ООП. Эта концепция может не быть идеальным или единственным решением для всех программ, но она широко распространена в IT-сфере, в связи с чем знать ее необходимо даже, если использовать вы будете другие методики.
Большинство языков программирования поддерживают принцип ООП. Поэтому обязательно уточните для себя его значение и сопутствующую терминологию, которая включает классы, наследование, полиморфизм, инкапсуляцию, абстракцию и т.д.
Глядя на подобные термины, можно решить, что речь идет о чем-то сложном, но, поверьте, все весьма просто. Помимо того, если вы собираетесь использовать ООП в будущем, то углубленное освоение всего этого поможет вам делать это структурированно и эффективно.
Шаг 6. Инструменты
Вот вы и стали программистом. Теперь пришло время использовать инструменты и настроить среду для работы.
Базово я рекомендую на этом этапе три составляющих:
- IDE — интегрированная среда разработки. Ее выбор будет зависеть от применяемого языка программирования. Это может быть Visual Studio, Android Studio или любая другая на ваш вкус. IDE предоставляет множество инструментов, ускоряющих написание кода и упрощающих его отладку. Если вы не видите нужды в использовании IDE, то такой вариант тоже приемлем, однако стоит хотя бы оценить доступные возможности. Лично я в основном работаю с JavaScript, и мне вполне хватает текстового редактора вроде Sublime.
- Система контроля версий. Это необходимая составляющая. Вы уже наверняка слышали о GitHub. Этот ресурс использует git, аналог Bitbucket. Использование системы контроля версий действительно необходимо, как и знакомство с ее устройством. Она не только поможет управлять кодом и взаимодействовать с другими разработчиками, но также позволит просматривать открытый исходный код. Поэтому смело беритесь за изучение любого материала по основам git и начинайте эту систему использовать.
- Сборка, упаковка и развертывание. Скорее всего изначально вы работали локально. Теперь пришло время научиться делиться своими программами с другими. Так что осваивайте техники сборки, упаковывания и развертывания программ. Направление изучения будет зависеть от выбранного языка программирования, но для начала можете ознакомиться, например, с Docker. На этом этапе лучшим помощником для вас окажется Google.
Шаг 7. Выбор пути
Вся предыдущая работа заключалась в освоении азов программирования. Теперь пора решить, чем именно вы хотите заниматься, и на основе этого решения выбрать для изучения те или иные технологии.
Здесь вам доступно множество специализаций, каждая из которых будет подразумевать освоение различного стека инструментов.
Для начала составьте список возможных путей и конечных продуктов, к которым они ведут:
- веб-разработка;
- бэкенд-разработка;
- фронтенд-разработка;
- разработка для мобильных платформ;
- кроссплатформенная разработка;
- разработка расширений Chrome.
Это далеко не исчерпывающий список. Через Google можно найти и много других направлений. В некоторых YouTube видео и статьях авторы делают обзор тенденций развития тех или иных направлений на текущий год.
Специализации отличаются сложностью освоения, интересностью, размером оплаты и прочими факторами. Так что выбирайте на свой вкус. Главное — это исключить всяческие сомнения после того, как выбор будет сделан. Если же вы будете метаться между разными направлениями, то в итоге окончательно растеряетесь.
Предположим, я выбрал разработку расширений Chrome. Теперь нужно понять, какие требуются навыки для продвижения в этом направлении. На начальном этапе это будут HTML, CSS, JS и Chrome Extension API. План становится понятен.
Освоить JS будет несложно, так как все основы программирования мне уже знакомы. В итоге вы можете быть приятно удивлены, что на изучение разработки расширений Chrome уйдет менее двух недель.
А вот если выбрать путь фул-стек разработчика, то потребуется осваивать различные фреймворки и другие новые концепции, на что уйдет существенно больше времени.
В любом случае выбор за вами, и вы к нему готовы.
Надеюсь, что описанная схема из семи шагов поможет вам начать свое продвижение в мире программирования и сформировать мощную основу для занятия первой должности.
Читайте также:
- React для начинающих: какие компоненты лучше — классы или функции?
- Тестирование больших данных: руководство для начинающих
- 5 советов для начинающих программистов
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Nuha Khaled: What To Do After Learning the Basics of a Programming Language?