“Не ты выбираешь язык программирования, а он тебя”

Язык C++ далеко не самый простой для изучения. Однако по индексу популярности языков программирования Tiobe С++ занимает прочное третье место. В чем секрет притягательности C++, мы выясняли у преподавателя курса C++ для начинающих, практикующего разработчика и просто влюбленного в C++ человека, Антона Водостоева.

Антон, почему ты сделал выбор в пользу языка C++?

В 11-м классе мы немного писали на Delphi, и все было ОК.

На 1-м курсе мы писали на C, и я долго не мог понять, что вообще происходит. Поэтому я решил, что язык нужно брать. Спустя год я сказал себе: “Да, теперь ты прекрасно знаешь C”.

На 2-м курсе мы начали писать на C++, и я долго не мог понять, почему они переименовали язык, на котором я уже целый год как пишу. Потом я постепенно начал понимать, что это все же кое-чем отличается от C. Потом я пришел к выводу, что совершенно не знаю C++. Поэтому я снова решил, что язык нужно брать. Спустя несколько лет штурма я сказал себе: “Да, теперь ты знаешь C++”.

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

С годами стало ясно: чем лучше ты узнаешь C++, тем больше обнаруживаешь неизведанного. Как ни парадоксально это звучит, но чем больше ты знаешь C++, тем меньше ты знаешь C++. Я вот его не выбирал – язык выбирает программиста:)

Представим типичную ситуацию: молодой человек решил стать программистом, что дальше? Какие шаги сделать, куда податься?

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

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

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

Интернет – неисчерпаемый источник знаний. Тут вам и видео-лекции, и статьи, и блоги, и специализированная литература. Есть даже специальные интернет-порталы, посвященные изучению различных языков программирования. И все бесплатно! Но наличие такого огромного количества источников знаний не гарантирует успех. С чего начать? В какой последовательности двигаться? Во что углубиться, а что оставить за рамками рассмотрения? Эти вопросы могут свести с ума, навести на мысль о том, что, видимо, не судьба. Как минимум, вы потратите уйму времени на то, чтобы разобраться во всем многообразии ресурсов и организовать для себя эффективный процесс обучения.

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

С этой точки зрения неплохим может показаться еще один вариант: частные занятия под руководством репетитора. Здесь тоже есть свои “но”. Самое очевидное – такие занятия всегда обходятся дороже. Есть и менее очевидные, но куда более важные моменты.

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

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

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

О самообразовании. Какие книги, на твой взгляд, должны быть прочитаны будущим специалистом C++ в обязательном порядке?

  1. Серия книг “C++ In-Depth”. Сюда входит большое количество книг разных авторов. Как видно из названия серии, каждая книга посвящена углубленному рассмотрению тех или иных аспектов языка.
  2. Anthony Williams подробно рассказывает о многопоточном программировании на C++, что на сегодняшний день очень актуально.
  3. Nicolai Josuttis – автор подробнейшего труда по стандартной библиотеке C++.
  4. Steve McConnell должен быть прочитан каждым, независимо от языка.
  5. Шаблоны проектирования за авторством GoF (Gang of Four)  будут нелишними.
  6. Scott Meyers – лучший (читать все книги). Они об эффективном использовании C++.
  7. Ну и, наконец, Bjarne Stroustrup  “The C++ Programming Language”. Книга, написанная создателем (языка). Эта книга как “Война и Мир”. Во-первых, она такая же огромная. Во-вторых, все о ней знают. И в-третьих, её все вроде бы  и читали, но мало кто прочел.

Расскажи о своих увлечениях, хобби. Есть теория, что хобби человека расскажут о нем больше, чем он сам.

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

О чем студенты твоего курса по C++ узнают только здесь и больше нигде? Есть какие-то фишки?

Мне трудно обозначить то, что можно получить у нас, но нельзя получить где-то еще, потому что я не знаю, каково это там, “где-то еще”. Что касается фишек – они есть. Главная фишка: студенты не узнают о том, что не нужно знать, где под “не нужно” подразумевается лишняя информация, устаревшие техники, слишком изощренные техники.

Это важнейший момент. Весь материал максимально отфильтрован. Я потратил (и до сих пор уделяю этому должное внимание) изрядное количество времени на то, чтобы взять самое необходимое. В рамках курса освещаются, в соответствии с неформальным правилом 80-20, золотые 20% языка, использующиеся в 80% случаев. Здесь также подробно и наглядно обсуждаются вопросы сложности основных алгоритмов над основными структурами данных. Рассматриваются некоторые приемы проектирования, обсуждаются приемы оформления исходного кода (каждый самостоятельно вырабатывает свой стиль и следует ему).

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

Человек прошел наш курс по C++ и… Будет ли он иметь представление, что делать дальше или будет сразу брошен в самостоятельное плавание?

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

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

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

Кстати, курс C++ для начинающих стартует в сентябре. Вы можете присоединиться к группе, заполнив заявку на нашем сайте, позвонив по телефону +7 (800) 500 15 56 или просто написав на почту academ@suhorukov.com.