Как стать автором
Обновить

О подходах к изучению программирования

Время на прочтение5 мин
Количество просмотров8.2K

Всем привет!

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

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

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

Почему это важно?

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

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

О подходах

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

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

Подход "снизу вверх"

Подход, которого придерживаются во всех университетах(ну, почти).

Его суть заключается в том, чтобы начинать обучение программированию с базовых тем, в которые входят: математика, информатика(здесь я имею в виду доскональное изучение работы компьютера), различные теории(компиляторов/баз данных и т.д.) и предметы, которые присущи специальности вроде криптоанализа для курса по криптографии.

Особенности

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

Плюсы

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

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

Минусы

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

  • Результат будет виден далеко не сразу. "Hello, World" на ассемблере - это прикольно. Но иногда масштабность проектов увеличивается не так быстро как хотелось бы. А видеть результаты важно. В первую очередь для собственной мотивации. Поэтому, часто идти вперёд придётся за счёт одного энтузиазма.

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

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

Когда стоит выбрать?

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

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

Подход "Сверху вниз"

Название не совсем отображает суть; Правильнее было бы назвать "Сверху, вширь и возможно вглубь", но об этом ниже.

Самый популярный в настоящее время подход.

Предполагает, что обучение начинается с чего-то высокоуровнего вроде ЯПа и какого-нибудь фреймворка(python + Django). Затем, после освоения этих "основ" есть два варианта развития: вширь и вглубь. Т.е. изучение других технологий на поверхностном уровне либо акцентирование на небольшом стеке - кому как нравится.

Плюсы

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

  • Низкий порог входа.
    Да, конкуренция высокая. Но это всё равно проще(не легче!), чем начинать с низов. Т.е. и работу найти получится быстрее.

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

Минусы

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

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

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

Когда стоит выбрать?

Когда требуется максимально быстро "войти в айти"(простите пожалуйста).

Но! Всё-таки питать надежд рода "я вот с завода уволюсь/с универа уйду, пару месяцев поучусь и найду работу" не стоит. Устроиться на стажировку за еду - уже достижение. А чтобы деньги платили это ох как круто! :-)

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

Так что выбрать?

В выборе подхода как и почти во всём, нет чёрного и белого. Где-то лучше одно, где-то - другое. Мой первый опыт был с Python + Django, но относительно быстро я осознал важность фундаментальной информатики и начал её изучение. Спустя некоторое время мне потребовалось быстро найти работу, поэтому я обратил внимание на тот же джанго, но в итоге устроился на стажировку гошником, не забывая о развитии в топиках CS с перспективой в дальнейшем сменить область.

Это я к тому, что надо уметь принимать новое и подстраиваться под ситуацию.
Главное - учиться, а чему и как - придёт само.

Надеюсь, кому-нибудь статья была полезна.

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

Теги:
Хабы:
Всего голосов 4: ↑3 и ↓1+2
Комментарии7

Публикации

Истории

Ближайшие события