Что такое программирование и зачем этому учиться?

Стоит ли становиться программистом?

Привет! 👋

Меня зовут Бородин Ростислав, я работаю fullstack-разработчиком телемедицинских проектов. Странное слово fullstack всего навсего означает, что я занимаюсь в основном созданием веб-сервисов и мобильных приложений. За 10 лет в качестве хобби я провел множество курсов по программированию и компьютерным наукам в Политехническом музее, Геккон-клубе и Высшей школе экономики. Так вышло, что именно я написал курс, который ты сейчас читаешь.

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

Если ты хочешь освоить что-то, что определенно пригодится в будущем, то ты по адресу! Ведь программирование и информационные технологии в целом – это одно из самых перспективных направлений для изучения. С одной стороны, по-прежнему актуально быть «программистом» (в топ-10 лучших вакансий по версии SuperJob.ru, между прочим!), а с другой - навыки программирования являются основой для специалистов по искусственному интеллекту, робототехнике, автономным системам и многим другим высокотехнологичный областям.

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

Надеюсь, что все это позволит тебе почувствовать себя в роли профессионального разработчика и принять решение о дальнейшей карьере. В прочем, эта карьера может начаться очень скоро, ведь уже через полгода можно будет спокойно брать некоторые задачи на фрилансе. Например, один из моих первых учеников, Леван Квирквелия, уже в старших классах разработал мобильное приложение для электронного дневника, которым пользовались тысячи московских школьников, а другой мой знакомый, Всеволод Жидков, прямо в девятом классе проделал долгий путь из Воткинского Лицея на работу в питерский офис ВК (победив в хакатоне ВКонтакте). Довольно необычный способ уйти после 9го, правда? 😉

Между прочим, сам по себе ВК, как и многие ИТ-комании, начинался со студенческого проекта Павла Дурова, а суперхит 2048 (ладно, если честно, суперхит 2010ых...) был написан итальянским студентом Габриэле Чирулли буквально за пару вечеров.

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

Весь необходимый материал, разбитый на отдельные главы, и практические задания для тренировки ты сможешь найти в этом учебном пособии на CodingProjects. Если найдешь опечатки - обязательно сообщи о них мне в Telegram (@roctbb). Удачи!

Кто такие программисты?

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

Самый очевидный ответ: программисты пишут программы для компьютеров. И это правда так! Программисты заставляют компьютеры выполнять любые наши желания.

Но современные программы бывают очень разными, поэтому сегодня не получится работать просто "программистом", на деле существует множество специализаций.

  • Разработка компьютерных игр (Gamedev) - здесь нужны не только программисты с опытом в игровых движках (Unity, Unreal Engine), но и графические дизайнеры (Blender) и аниматоры.
  • Настольные приложения (Desktop) - такие, как например, веб-браузер, Steam для ПК или Microsoft Office. Чаще всего пишутся на Java/C#/C++, но вариантов много.
  • Мобильные приложения (Mobile Apps) - все, что ты используешь в мобильных телефонах. Чтобы создать такое, обычно нанимают отдельных программистов для iOS и Android, хотя есть и способы написать одно приложения для всех платформ.
  • Веб-сервисы (Frontend, Backend) - все, что работает в интернете, например, ВК, TikTok или сервисы Yandex. У веб-сервисов всегда есть браузерная часть (frontend: html, css, js) и то, что работает на сервере (backend). Если программист умеет делать обе части работы, его называют fullstack'ом.
  • Системное программирование (OS) - разработка операционных систем, драйверов и прочего низкоуровнего ПО (чаще всего используется C/C++).
  • Машинное обучение и искуственный интеллект (ML, Data Science) - суперперспективная область на стыке программирования и математики, позволяющая разрабатывать умные программы, которые могут обучаться на данных и приспосабливаться к новым условиям.

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

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

Как создаются программы?

Вне зависимости от "типа" программы, ее разработка всегда начинается с идеи.

Иногда идеи рождаются у программистов или ИТ-предпринимателей, которые могут справиться с ней самостоятельно. Тогда появляются "стартапы", которые иногда вырастают в большие ИТ-компании. Яндекс, Facebook (простите, Meta!), ВК и Apple, все эти компании постепенно вырастали из гаражных условий во всемирно известные корпорации.

А если идея возникает у людей, не связанных с ИТ, они приходят в компании по разработке ПО на заказ (например, Luxsoft) или к системным интеграторам (например, КРОК, IBS), где им и помогают в разработке или поиске готового решения (очевидно, за большие деньги!).

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

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

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

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

План курса

Глава 0: Введение.

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

Глава 1: Текстовый квест.

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

Следующие главы доступны в рамках отдельных курсов.

Глава 2: Графика и фоторедактор.

Мы научимся устанавливать сторонние модули и используем библиотеку Pillow, чтобы рисовать картины и обрабатывать фотографии причудливыми фотофильтрами. Сначала потренируемся на стандартных, а потом придумаем собственные. В процессе разберемся с циклами и вложенными циклами, кодированием графических данных, моделью RGB и видами сжатия.

Глава 3: Настольные приложения и аркадная игра.

Разбираемся с библиотекой tkInter, которая позволяет создавать настольные приложения (с окнами и кнопками) и создавать несложные аркады. Разберемся со списками, освежим функции и напишем собственный Pong.

Глава 4: Текстовые игры и криптография.

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

Глава 5: Телеграм-боты.

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

Как учиться?

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

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

В чем можно практиковаться?

  1. В каждом уроке тебя ждут примеры кода. Не ленись скопировать их к себе, запустить и попробовать поменять на свой вкус. Что-то добавить, поменять и посмотреть, что при этом изменится в работе программы.
  2. Помимо готового кода, я периодически буду давать тебе небольшие практические задания. Не забывай их делать!
  3. Ну и сами проекты - в каждой главе я буду давать лишь общий алгоритм действий, примеры и подсказки, а вся основная работа будет за тобой. Проекты важно заканчивать, а еще более важно - показывать родственникам и друзьям. Обратная связь от пользователей - это очень важно!

А еще в конце каждой главы я постараюсь подвести итоги, про что я успел рассказать. Если какие-то темы останутся непонятными, попробуй перечитать блок и поискать дополнительную информацию в интернете.

Приступим? 🚀