Найти в Дзене
Всё о IT и не только

Этапы обучения программированию

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

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

Часто, когда мы хотим глубже погрузиться в конкретную тему, мы можем столкнуться с большой стеной. То, что я наблюдаю в различных группах, объединяющих "младших разработчиков" или других людей, начинающих в сфере IT, кажется мне подтверждением моих подозрений. В настоящее время, как никогда раньше, у нас на рынке много людей, обладающих обширными знаниями в области программной инженерии, но в то же время эти знания ужасно поверхностны. Кандидаты в будущие программисты вкладывают в свои CV знание одного миллиона пятисот технологий, но большинство из них они знают на уровне приложений "hello world". Меня это удивляет? Вообще-то нет. Это результат того, что довольно часто можно найти в Интернете. Тысячи, а то и миллионы различных учебных материалов, которые называются полными курсами, призванными сделать читателя программистом. На самом деле их следует описывать большими заголовками "Введение в XYZ", где XYZ - это название любой технологии.

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

После этого введения вы, наверное, спросите себя, как научиться программированию? Ответ на этот вопрос прост, просто с помощью программирования. Однако я понимаю, что открыть IDE и написать, или попытаться написать строки кода без предварительного знания того, как работает язык, может быть достаточно сложно. На первом курсе изучения информатики (по крайней мере, на том, который я закончил) я на самом деле не написал никакого конкретного проекта. Что я делал за это время? Мое студенческое приключение началось с чего-то довольно банального, а именно с изучения того, как работают переменные, циклы, условные инструкции, принципы объектно-ориентированного программирования, полиморфизм, наследование, интерфейсы. В то же время я изучал машину Тьюринга, числовые системы и операционные системы. В то же время я расширял свои знания линейной алгебры, математического анализа и, самое главное, алгоритмов. Алгоритмы (по крайней мере, основные, такие как сортировка, поиск цикла на графике) - это то, что не изменится на протяжении всей вашей карьеры, но дело не в этом. Цель таких занятий - просто научить вас логически мыслить и решать проблемы. Задача программиста на самом деле заключается в том, чтобы постоянно решать проблемы, с которыми вы сталкиваетесь.

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

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

I этап - для абсолютных новичков

Начало всегда самое трудное. В этом случае всё как обычно. Если вы никогда в жизни не писали ни одной строчки кода и хотите стать программистом, то в самом начале я рекомендую проверить, не интересует ли это вас. Я сделал первые шаги по изучению HTML и CSS. Обе технологии имеют мало общего с "настоящими" языками программирования. HTML - это просто язык тегов, который правильно интерпретируется веб-браузером и позволяет создавать веб-страницы (все, что составляет их визуальную часть). С их помощью мы можем манипулировать положением списка, шрифтом, цветом текста и т.д. Почему я рекомендую начать с этого? Причина проста, здесь нет ничего сложного. Самое худшее, что вы можете сделать, когда учитесь чему-то новому, это начать на слишком высоком уровне. HTML и CSS не предлагают никаких циклов, переменных или других "сложных" элементов. Это просто метки, которые ты набираешь один под другим. В будущем, даже если вы не будете развивать свою карьеру в направлении фронтенд-развития в любом случае, эти знания всегда пригодится. Если вы находитесь на этом этапе, вам не нужно инвестировать в некоторые курсы или книги сразу. Необходимая информация и учебники вы можете найти в Интернете. Есть довольно много крутых материалов, которые имеют дело с этой темой. Но если по каким-то причинам имеющихся статей для вас будет недостаточно, я могу порекомендовать вам замечательную книжную серию - Head First - созданную только для начинающих. Одним словом, это "книжки-раскраски", которые максимально просто объясняют различные вопросы из мира программирования. Я уже несколько раз писал об этом в блоге.

II этап - я уже кое-что знаю, но не знаю, что...

Если у вас уже был шанс написать свое первое приложение "Hello World" и вы знаете, что оно вам понравилось, то вам наверняка интересно, что делать дальше? Вы также можете чувствовать себя немного перегруженным различными путями от "фронтэнда" до "бэкэнда" к админу или devops. Здесь, к сожалению, у меня нет ни одного конкретного совета для тебя. Я также не знаю, имеет ли смысл, по крайней мере, на данном этапе, проводить такое различие. Если вас больше интересуют визуальные вещи, создание веб-сайтов, то было бы неплохо пойти в направлении фронт-енда, т.е. таких технологий, как HTML, CSS, Angular, React и других подобных фреймворков. Если у вас есть аналитические наклонности, и вас больше интересует бизнес-логика и все, что "под ней", то у вас есть большой выбор. Существует множество языков программирования высокого уровня. В прошлом многие люди в самом начале выбирали С/С++. Я также программировал на эту технологию в начале учебы. Сегодня тенденции немного меняются. Если бы я начал учиться программированию с нуля, то выбрал бы питон - очень крутой и легкий в изучении язык, который также навязывает хорошие привычки при создании кода. Java тоже неплохая идея - но мы говорим об обычной "консольной" Java, а не об EE (Enterprise Edition) или FX. Вы только узнаете, как работают языки программирования, все объектно-ориентированные механизмы и другие элементы. Так что стоит сосредоточиться на том, как все это работает. Мы хотим быть сознательными программистами, а не теми, кто что-то программирует, а потом после пяти лет работы системы вдруг что-то ломается, потому что вместо флота мы использовали int. Наполовину плохо, если это будет простой блог-код, но что, если нет?

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

Подводя итог, выбрав какой-нибудь язык программирования, я рекомендую Python, Java, C# или, в конце концов, C++. Важно, чтобы это был объектно-ориентированный язык, чтобы вы могли изучить все механизмы и в целом понять, как все работает. Выбор IDE или других инструментов здесь менее важен. Решите, что будет использовать автор курса, над которым вы будете работать.

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

III этап - первый сертификат?

Если вы уже попали сюда, то я понимаю, что у вас уже есть некоторые знания о выбранных языках программирования, вы можете различать типы данных, вы знаете, как работают полиморфизм и другие объектно-ориентированные механизмы. Так что пришло время разобраться с некоторыми "более интересными" вещами. Здесь я бы посоветовал вам сконцентрироваться на том, чтобы получить хорошее представление обо всех паттернах данного языка программирования. Нас больше не интересуют базовые знания о том, как работает цикл, случай условной инструкции или другие подобные головоломки. Пришло время познакомиться со структурой наследования исключений, типами данных, зависимостями между различными объектами, построенными на языке программирования или немного более продвинутыми библиотеками, используемыми для построения продвинутых информационных систем (в Java это будет, например, Hibernate или Spring). Откуда ты знаешь, чему учиться? Рекомендую ознакомиться с материалом, который необходим для получения первого сертификата разработчика в данной технологии (например, в Java это будет OCAJP I). Учебные программы и подробное описание требований можно легко найти в Интернете.

Из литературы я могу предложить "Мыслить на Java", "Мыслить на C++".

Если вы выбрали путь тестера, то он довольно прост. Пожалуйста, прочитайте учебную программу для ISTQB на начальном уровне. На сайте Польской ассоциации качества информационных систем (sjsi.org) все эти материалы доступны на польском языке. Очень многому нужно научиться.

IV этап - нечто более универсальное

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

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

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

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

V этап - практика и первая работа

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

VI этап - от Джуниора до...

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

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