Дата публикации: 1.12.2023
Сегодня снова обсуждаем образование в сфере ИТ и сперва продолжим разговор, который начали в первом материале. Мы затронули вопрос самостоятельного обучения и обещали дать рекомендации о том, какой язык программирования выбрать и на примере какой задачи начать с ним разбираться. Выполняем наше обещание, а помогает нам ответить на эти (и многие другие) вопросы, как и в первой статье, генеральный директор ИТ-компании Hello World! Technologies (HWdTech) Евгений Тюменцев. Итак, поехали!
Выбираем язык
При выборе первого языка программирования для изучения не стоит ориентироваться на «самые популярные языки сегодня». Цикл обновления технологий в ИТ составляет примерно два года, и если ребёнок, к примеру, взялся за изучение в шестом классе, то есть шансы, что «популярные языки» дважды сменятся до того, как он окончит школу.
Выбор языка должен быть основан на долгосрочном прогнозировании. В идеале нужно брать тот, который имеет потенциал для развития и адаптации к новым технологиям. Но понять, какой это язык, не так просто, особенно если вы только в начале пути. Так что берём другой очень простой рецепт: следует начинать с того языка, по которому доступно наибольшее количество обучающих материалов.
«Сейчас их множество по всем языкам!» – скажете вы. Здесь нам будет полезен совет нашего эксперта:
«До сих пор язык С++ является самым доступным в плане количества уроков. Он также хорош тем, что позволяет получить представление о работе компьютерных программ на более низком уровне, чем тот, на котором сейчас приходится кодить. С одной стороны – изучать сложнее, потому что в нём заложены некоторые базовые вещи, о которым современным программистам даже задумываться не приходится. С другой – это лучший вариант, потому что появляются фундаментальные знания и понимание того, как вообще работает компьютер».
Язык С++ – не единственный вариант. Можно взять для изучения JavaScript, и тогда вы всё-таки ненадолго встанете на путь изучения «популярного языка», но это особый случай. Дело в том, что сейчас JavaScript фактически является «безальтернативным» для разработки веб-приложений в подавляющем большинстве случаев. У любого приложения должен быть интерфейс, а он пишется на JS. В общем, это прагматично, но не стоит использовать такой подход к выбору языка при прочих равных условиях.
И третий вариант – это Python. С одной стороны, он сейчас набирает популярность, (хоть на это мы и не обращаем внимание, да!), но, что более важно, он достаточно базовый, простой для изучения (по сравнению с С++) и материалов по нему очень много.
Какую задачу будем решать
Просто брать и изучать «сферический язык в вакууме» не так-то просто. Где взять мотивацию и с чего начать? Нужна интересная задача! Предлагаем в качестве своего первого проекта взяться за разработку собственного «Тетриса». Почему? Ну, для начала потому, что в следующем году у этой игры юбилей – целых 40 лет! Можно отдать дань истории. Кроме того, это достаточно «залипательная» игра и можно рассчитывать на то, что в процессе разработки будет действительно весело.
Те́трис (производное от «тетрамино» и «теннис») – компьютерная игра, первоначально изобретённая и разработанная советским программистом Алексеем Пажитновым. Игра была выпущена 6 июня 1984 года – в это время Пажитнов работал в Вычислительном центре Академии наук СССР.
Спасибо, «Вики»: wikipedia.org
Многие даже не знают, что «Тетрис» – наша игра, а всё потому, что, несмотря на железный занавес, она стала жутко популярной на Западе. И до сих пор по разным подсчётам она занимает от 1 до 7 места в разных рейтингах самых продаваемых игр.
С чего начать? Ищем исходный код этой игры на том языке, который решили изучать, и пытаемся разбираться и смотреть, что же в нём написано, смотрим на синтаксис и пытаемся понять, что означает каждое слово, каждая буковка – это первый шаг, первое погружение в контекст. То есть, например, видим надпись «for». Что такое «for»? Это цикл. Дальше появился перед нами какой-то «int» – выясняем, что это тип данных. Разбираемся, читаем книги, смотрим материалы и пытаемся по мере их изучения осознать, что за синтаксические конструкции у нас есть в примере кода. На этом этапе начинают появляться вопросы – и если до сих пор интерес не угас, можно попробовать пойти к преподавателю, поговорить, задать свои вопросы и посмотреть, как на них отвечают. Это пригодится при выборе занятий или курсов.
Первоначальная версия игры была написана Пажитновым на языке программирования Паскаль для компьютера «Электроника-60». Коммерческая версия игры – первая из многих последующих – была выпущена американской компанией Spectrum HoloByte в 1987 году. В последующие годы «Тетрис» во множестве различных версий был портирован на великое множество устройств, включая всевозможные компьютеры и игровые консоли, а также такие устройства, как графические калькуляторы, мобильные телефоны, медиаплееры, карманные персональные компьютеры и – в качестве «пасхального яйца» – устройства, вовсе не предназначенные для воспроизведения медиаконтента, такие, как паяльник.
Спасибо, «Вики»: wikipedia.org
Ещё важный момент. На первом этапе мы не обращаем внимания на графику и не пытаемся сразу сделать «красиво». Вместо этого просто опираемся на ту же идею, которая была у самого первого «Тетриса», и пытаемся её реализовать. Нужно помнить, что игра для нас только средство изучения, а не цель и не «продукт». Именно поэтому никаких заморочек с графикой на первых этапах – только простое и понятное «консольное приложение».
«Игры, наверное, до сих пор считаются самыми “удобными” задачами для того, чтобы начать программировать, – комментирует Евгений Александрович, – Игры хороши не только с точки зрения мотивации и обратной связи, но и с точки зрения педагогики. С их помощью достаточно просто смоделировать ситуацию, в которой ученик сам найдёт свои ошибки, придёт к противоречию и поймёт, каким образом можно решить задачу, а каким – нет. При разработке игры можно придумать какие угодно правила, приводить примеры и контрпримеры, чтобы научить видеть неудачные способы решения задачи – и удачные».
Колледж или вуз, 9 или 11 классов
Мы уже говорили о том, в каком возрасте стоит начинать изучать программирование, а теперь давайте затронем другой важный момент – как продолжать. Сегодня каждому доступно огромное количество учебных материалов – и в это же время процесс обучения в сильно трансформируется и усложняется. В результате будущие айтишники часто получают не целостные знания, как это было раньше, а множество фрагментарных кусочков информации.
Что это значит и как с этим бороться, сейчас объясним на практике. Чтобы стать программистом в прошлом, было достаточно прочитать всего одну книгу – «Дизайн и эволюция С++» Бьерна Страуструпа. Если же вы хотели стать топовым специалистом, то могли дополнительно почитать программиста Андрея Александреску. Также можно было добавить «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» (англ. Design patterns: elements of reusable object-oriented software, авторы – «Банда четырёх»: Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес). И всё – вы великолепны, изучив этот материал, вы уже могли претендовать на звание «хорошего программиста».
Сегодня же количество необходимых знаний исчисляется десятками книг. Более того, эти книги необходимо прочитать за очень короткое время, поскольку технологии постоянно меняются. И мы приходим к тому, что главное – это ориентация на результат. Этот подход подразумевает, что мы не изучаем предмет целиком, а выбираем только те области, которые нам нужны и сосредотачиваемся на них, получаем фрагментарные знания. Но чтобы свободно применять их, обязательно требуется наличие базовых знаний и понимание того, как функционирует программирование в целом. Без этого все кусочки изученного никогда не соберутся в целостную картину.
«Без изучения фундаментальной базы человек фактически выучит одну-две операции – и на этом застрянет, потому что не поймёт, как это всё связывается вместе, как оно должно работать. Это возвращает нас к вопросу о том, можно ли стать программистом без высшего образования. Можно. Но всегда будет ощущение, что чего-то не хватает», – говорит Евгений Александрович.
Если вы чего-то «нахватались по верхам», без понимания того, как на самом деле «работает» программирование, вас не будет покидать ощущение чуда – некоторые вещи будут выглядеть как магия. Но в работе вам эта «магия» точно не поможет! По мнению нашего эксперта, классическое образование – 11 классов и вуз – самый оптимальный вариант для айтишника:
«Идти учиться “по специальности” лучше после 11 класса, потому что в 10–11 классе как раз закладываются фундаментальные познания в математике. Кроме того, основной объём сочинений по русскому языку приходится на старшие классы. А сочинения развивают умение думать и выражать свои мысли. Если вы уйдёте получать среднее специальное образование, важный этап обучения просто “выпадет”. Опять же, выбирая высшее образование, надо идти “на преподавателя”, у которого будете писать диплом – это самая важная часть вашей подготовки как специалиста. Сильный диплом и рекомендации от научного руководителя – важные составляющие будущего хорошего трудоустройства».
Очень вероятно, что прямо сейчас у вас возник вопрос: «При чём тут вообще сочинения?!» – и это значит, что настало время разобраться, что у нас там с изучением русского языка и литературы для программистов.
Русский нам не нужен?
Если вам кажется, что работа с текстом и с кодом сильно различаются, вы удивитесь, насколько это неверно. Основоположником теории формальных языков программирования вообще-то является ныне живущий филолог, Ноам Хомский.
Для справки: Коротко говоря, формальный язык – это математическая модель реального языка. Язык программирования – формальный язык, он регламентирован строгими правилами. Формальный язык – язык, в котором значение каждого слова или знака, правила построения предложений и понимания их смысла однозначны.
Примеры формальных языков: запись арифметических выражений, нотная грамота, запись ходов шахматных партий, дорожная разметка и т. д.
Хомский попытался построить математическую модель для естественных языков и то, что у него получилось, стало теорией, с помощью которой стали писаться компиляторы. Евгений Александрович подчёркивает, что деятельность программистов и филологов – это очень близкие сферы:
«Когда я сам учился, люди любили хвалиться: “Вот я по-русски плохо изъясняюсь, а в программировании я молодец”. На самом деле это полное враньё. Если у человека в голове каша – это отражается на всех процессах. Любая программа проецирует ход мыслей человека. И если он не умеет формулировать свои мысли, то неважно, на русском языке он этого не умеет или на языке программирования – результат будет одинаково плачевный».
Любой естественный язык неоднозначен и потому более сложен – выражать на нём свои мысли тяжелее. Формальные языки сильно проще в плане формулировок, и если вы лучше справляетесь с ними – это совсем не доказательство того, что вы умнее, это подмена понятий. Сейчас вообще популярна такая штука, как domain-driven design, DDD – это современный подход к ООП-программам, для которого умение грамотно формулировать свои мысли – бесценный ресурс.
Предметно-ориентированное проектирование (реже проблемно-ориентированное, англ. domain-driven design, DDD) – набор принципов и схем, направленных на создание оптимальных систем объектов. Сводится к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит бизнес-логика, устанавливающая связь между реальными условиями области применения продукта и кодом.
Спасибо, «Вики»!
Тут мы говорим о том, что описание программы должно максимально перекликаться с описанием бизнеса, который она автоматизирует. Это значит, что нужно очень точно выразить, что бизнес из себя представляет и какие процессы в нём происходят. А это невозможно без нормального человеческого умения формулировать на естественном языке. А уже потом это «естественное» описание нужно переработать в программный код.
Вместо резюме
Есть вариант, когда идти учиться не хочется даже в колледж после 9 класса: реклама различных онлайн-платформ говорит нам «Пройдите наш курс и сразу идите работать программистом!». Не надо так.
Ещё недавно мы жили в реальности, когда айтишников требовалось не так много и в эту сферу очень тяжело было попасть. Кто сказал, что в будущем больше никогда так не будет? Ошибочно полагаться только на текущий момент. Напротив, потратить несколько лет на то, чтобы получить фундаментальные знания за счёт которых вы будете работать последующие 45 лет, – это небольшие траты времени и сил.
В общем, мы рекомендуем не гнаться за сиюминутным профитом, а трудиться на перспективу. Кроме того, сейчас одни навыки программирования ценятся мало – нужно иметь какую-то смежную специальность, чтобы получить действительно хорошую работу. И приобретать её, как правило, приходится самостоятельно – в этом деле не обойтись без навыка обучаться, который прокачивается в вузе. И, в целом, чем шире фундамент ваших знаний, тем проще адаптироваться к новым тенденциям, а в IT это бесценно.
Автор: Ольга Зайцева
Фото: freepik.com