С чего лучше начинать новичку? В какой вуз пойти? Какой язык выбрать? По каким материалам учиться?

В нашу рубрику «Вопросы к экспертам» поступило очень много вопросов от школьников о том, что им делать, если они хотят стать программистами. Мы задали этот вопрос экспертам и собрали для вас лучшие ответы.

Сергей Терлецкий, менеджер по работе с образовательными учреждениями в компании Embarcadero

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

А чтобы мотивация не падала и был быстрый результат, мы рекомендуем начинать с Pascal/Delphi XE7, тут и простой синтаксис и язык созданный для обучения программированию, так и возможность визуальной разработки из готовых компонент с поддержкой создания мобильных приложений с единого исходного кода. Тут самое интересное — это возможность создавать свои мобильные приложения для Android и iOS на любом этапе обучения программированию. А по мере роста уровня программиста всегда можно залезть в исходный код и в рамках той же среды перейти на C++. Что касается вузов, то набор весьма велик, но разъезжая по стране я обратил внимание, как сильно вырос уровень отдельных региональных вузов. Например кафедра ВТИК в Уфимском Нефтегазовом Университете. МГУ, МГТУ им. Баумана, МИФИ, МАИ, Политехнический Университет в Санкт-Петербурге, СПбГУ.

Дмитрий Волошин, директор департамента исследований и образования Mail.Ru Group

Начинать надо с кружков программирования или робототехники. Важно понять, действительно ли вы хотите стать разработчиком, или это импульсивное и ложное желание. Что касается вузов, то я советую ориентироваться на «сарафанное радио», на форумы в Интернете и мнения друзей. Также стоит сходить на дни открытых дверей, но все-таки иметь в голове ту мысль, что не всегда то, что говорят на таких мероприятиях — чистая правда. Что касается языка, то здесь нет универсального совета. На мой взгляд, выбор языка не важен, настоящий программист может овладеть новым для него языком очень быстро. Хотя, если есть возможность, то начните с C/С++.

Сергей Зефиров, программист с широким опытом работы, энтузиаст и евангелист языка Haskell

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

При наличии желания изучить программирование не очень сложно. А вот что с этим умением делать, вопрос гораздо сложнее. Поэтому вопрос должен стоять так: чем я хочу заниматься всю свою жизнь (или заметную её часть — 5–6 лет), и как в этом мне может помочь программирование.

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

Артём Зюрюкин, генеральный директор Zartis Russia

Начать лучше всего с образования. Для основного образования лучшими вузами в России можно назвать МГТУ им. Э. Н. Баумана, МГУ, МИФИ, МФТИ в Москве, Политехнический и ГТИ в Санкт-Петербурге, НГТУ в Новосибирске. Также всегда полезно заняться самообразованием: начинающие программисты имеют массу возможностей учиться в Интернете бесплатно; самые популярные сайты: microsoftvirtualacademy.com, coursera.org, lektorium.tv, universarium.org, lendwings.com. Кроме того, для развития карьеры важным может стать участие в олимпиадах и соревнованиях по спортивному программированию, например: Russian Code Cup, Google Code Jam, Facebook Hacker Cup, Яндекс.Алгоритм, ACM International Collegiate Programming Contest.

Михаил Кечинов, сооснователь студии Михаила Кечинова

Читать книги в оригинале и официальные статьи типа Getting Started. Не читать устаревшие на 3–4 года переводы.

Языки: Swift для iOS, Java для Android, Ruby для веб-разработки.

Алексей Зверев, руководитель направления образовательных программ СКБ Контур, партнёр международной олимпиады «IT-Планета»

Выучить язык и научиться программировать — разные вещи, и в целом не важно, с какого языка начинать. Хотя, приятнее и легче начинать с высокоуровневых, например, Python, C#, Java. Хороший программист должен знать несколько языков и уметь изучать новые. Вопрос про материалы скорее актуален для студентов с минимальными навыками программиста, поэтому гораздо важнее вопросы «С чего начать?» и «Какой вуз выбрать?».

Всем начинающим программистам очень повезло: научиться программировать можно играя, и таких продуктов очень много. Нам в Контуре больше всего нравятся coderussia.ru, codemonkey.co.il, codingame.com.

Есть, кстати, такой проект «Продлёнка про профессии», недавно они рассказывали про профессию Программиста. Замотивироваться хорошими докладами и найти ещё целую гору материалов для начинающих можно здесь: prodlenka.pro/meeting/programmers.

У нас есть и свои on-line курсы, в том числе курс «Основы программирования», рассчитанный на студентов первых курсов, не умеющих программировать, а значит и на талантливых школьников. Посмотреть их можно здесь: ulearn.azurewebsites.net.

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

Чаще всего хорошо преподают в больших вузах и университетах. Если в вашем городе есть вуз, в названии которого есть слова «государственный», «национальный», «федеральный», то в первую очередь стоит присмотреться к нему. Затем узнайте, есть ли в вашем городе крупные ИТ-компании или филиалы таких компаний, с какими вузами у них партнёрские отношения: такие компании почти всегда появляются рядом с сильными университетами очень редко появляются там, где нет качественной подготовки кадров (например, в Екатеринбурге кроме головного офиса Контура ещё есть 4 крупных офиса разработки, около 50 средних и гора маленьких).

Ещё один важный фактор — участие вуза и проведение на его территории ИТ-соревнований, например по спортивному программированию, информационной безопасности (в быту ACM, CTF), различных соревнованиях по робототехнике. Найти такую информацию про конкретный вуз иногда не так тривиально, но поискать можно среди архивов ICPC ACM на icpc.baylor.edu или ructf.org.

Кстати, мы совместно с УрФУ организуем QCTF — формат для начинающих, в него могут играть и школьники, подробно можно прочитать вот здесь: qctf.ru.

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

Василий Кобзарь, преподаватель GeekBrains, специализируется на администрировании Linux

Нельзя научить, можно научиться. Не стоит идти в вуз за знаниями, стоит идти туда за дипломом. Единственный способ стать программистом — писать программы.

Михаил Адигеев, начальник отдела проектов ГК «ГЭНДАЛЬФ», доцент ЮФУ, эксперт международной олимпиады «IT-Планета»

Для освоения программирования лучше всего, на мой взгляд, подходят процедурные языки высокого уровня, «скрывающие» от программиста детали реализации базовых операций и позволяющие сосредоточиться на алгоритмах. Когда-то это был Pascal, сейчас он немного отошёл в сторону, хотя есть и очень хорошие современные реализации, ориентированные на обучение программированию — например, система «PascalABC.Net». Другой вариант — Python, также хорошо структурированный язык, позволяющий сосредоточиться на освоении основных принципов программирования. Python обладает также дополнительным преимуществом — это интерпретируемый язык, т.е. даёт начинающему программисту возможность быстрее освоиться с языком и «пощупать» ту или иную конструкцию. Изучив основы программирования, стоит плотнее ознакомиться с «классическими» объектно-ориентированными языками, и тут варианты — либо C#, либо Java.

После освоения такого базового «джентельменского набора» наступает следующий этап профессионального развития. На этом этапе вопрос «на чём программировать» сменяется вопросом «какие задачи решать». Т.е. язык программирования из объекта изучения превращается в инструмент для решения задач. На первый план выходит предметная область (системное программирование, веб-разработка, автоматизация бизнес-процессов, обработка данных и т.п.), и уже исходя из интересующего вас направления следует выбирать и изучаемые языки, технологии (например — C, C++, PHP, 1С, SQL).

Что касается материалов для обучения, то наилучшим форматом являются обучающие курсы — либо очные (при непосредственном контакте с преподавателем), либо интернет-курсы. Сейчас активно развиваются интернет-ресурсы, предлагающие бесплатные (и платные тоже) курсы, включающие видео-материалы, тесты, практические задания, часто с возможностью обратной связи от преподавателя. Например, ресурс coursera.org или российский intuit.ru. Часто вендоры (разработчики программных инструментов) также предлагают обучающие курсы по своим продуктам. Например, фирма 1С предоставляет бесплатный комплект для освоения системы «1С:Предприятие», включающий как программные средства, так и учебные материалы.

Роман Юферев, руководитель направления ИТ-менеджмента и мониторинга в компании VIAcode

Увы, но с вузами сейчас ситуация непростая. Многие мои знакомые, работающие в системе высшего образования открыто говорят о том, что система высшего образования в России не функционирует. Об этом можно, конечно, спорить и приводить массу аргументов как за, так и против. В то же время сейчас мне трудно рекомендовать или не рекомендовать даже свою «альма-матер» СПбГЭТУ (ЛЭТИ). Ключевые вузы, которые в той или иной мере могут готовить программистов — это ЛЭТИ, ИТМО и «Политех». Но я бы хотел подчеркнуть, что главное, что дает любой ВУЗ будущему инженеру — это навык самостоятельного обучения, в противоположность школе, где весь необходимый материал преподносится «на блюдечке».

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

  • Вы, скорее всего, захотите начать работать по специальности уже на 2-м или 3-м курсе, поэтому стоит обратить внимание на языки программирования, актуальные прямо сейчас: C#, Java, Ruby. Дальнейшее развитие технологий и ваши личные предпочтения помогут вам определиться с тем, на какой платформе и языке продолжать работать. Самое главное — помните, что нет «хороших» и «плохих» языков. В каждой области существует свой набор инструментов и технологий.
  • Вуз может дать сносные знания по глобальным концепциям, например ООП, но не даст вам хорошей базы по конкретному языку; полагайтесь на себя, свой, пусть и небольшой опыт и постоянно расширяйте свой кругозор
  • «Вписывайтесь» во все известные сообщества — это ничего не стоит, как с точки зрения, так и времени, но дает вам колоссальный источник знаний и опыта.

Антон Пискунов, основатель и генеральный директор BeastGaming

Если у вас есть возможность не идти в вуз — не идите. Это крайне бесполезная история для программистов. Вы будете находится в постоянном поиске новой информации, знания в IT сфере устаревают очень быстро. В таких условиях вуз не сможет дать вам нужных скиллов что бы быть Middle/Senior Developer сразу после выпуска.

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

Что я имею в виду: на выходе после вуза имеем ребят которые ходят по компаниям и просят 60–90к в месяц и потихоньку разочаровываются в индустрии потому что больше 30к за их опыт никто не даёт. И начинается медленный, планомерный рост со стажировок в веб-студиях. Отсюда вопрос: а действительно ли вам нужен вуз?

Начинайте писать свои pet-projects. Берите идеи и пишите, пишите и еще раз пишите. Ваша основная задача писать код, много кода, забейте на качество — просто пишите, пишите и пишите. На определенном моменте у вас «щелкнет» и вы в остальном сами во всём разберетесь. Для начала, конечно, определитесь куда вам, в веб: PHP, Python, Golang (это не для выбора, это все три вместе), мобайл: Java, Objective-C, Swift, C#, геймдев: C++, Java, Lua.

Отдельно для геймдева — просто берите Unity и начинайте делать. Не пытайтесь писать базовые вещи, вроде своего движка, в первый месяц, просто делайте, а уже потом разбирайте фундаментальные понятия.

И да — use Google Luke.

Альберт Степанцев, преподаватель GeekBrains, эксперт PHP, специалист по MySQL, Postgres, некоторым NoSQL решениям, JS + JQuery, Yii

Пойдите учиться в хороший вуз. Если вы в одной из столиц — то ваш выбор очевиден и вы давно уже себе выбрали учебное заведение. Если вы живете в дальнем регионе, то неплохим выбором будет физмат бывшего педагогического вуза, которых у нас немало. Не обязательно выбирать в качестве специальности «программист» или «разработчик ПО», тем более, что такие специальности встречаются достаточно редко. Подойдет любая специальность, базирующаяся на математике, на которой математику используют в достаточном объеме.

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

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

О выборе первого языка советовать сложнее. Обычно этот выбор происходит спонтанно. Но можно достаточно точно сказать, что веб-программирование не потеряет актуальности в ближайшие 5–10 лет, поэтому можно порекомендовать PHP. Тем более, что его часто называют «Си для чайников» :)

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

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

Александр Тормасов, ректор Университета Иннополис, руководитель российского отделения IEEE Computer Society

Холивар на тему того, какой язык выбрать первым для обучения программистов не утихает: кто-то называет Pascal, кто-то С, кто-то Ruby или даже Haskell, и каждая сторона приводит свои аргументы. Правда в том, что язык — это лишь инструмент, который профессионал каждый раз должен выбирать сообразно задачам проекта. Понимание алгоритмов позволит изучить любой новый язык в течение нескольких дней. Для тех, кто только делает первые шаги рекомендую воспользоваться образовательными онлайн-ресурсами типа Сodecademy, для тех, кто хочет не просто кодить, а понимать, как организовать процесс, рекомендую прочесть книгу, без преувеличений, повлиявшую на умы поколений и актуальную до сих пор — «Мифический человеко-месяц». Выбирая вуз, стоит обратить внимание на то, насколько его программа соответствует международным стандартам (посмотрите computer curricula топовых ИТ-вузов и сравните), насколько реально высок уровень профессорско-преподавательского состава, где активно проходит практика и идет активная интеграция обучения с индустрией.

Евгений Фатеев, преподаватель GeekBrains, профессиональный программист, приверженец The Ruby/Rails Way

Как и в любой другой сфере, обучение программированию прежде всего основывается на личном интересе и желании учиться — это основа любого дела. Разумеется, нужна хорошая техническая база, которую логичней всего получить в вузе. Можно отметить 4 вуза, где качество обучения не оставляет сомнений: МГУ (например, факультет ВМК), МГТУ им. Баумана (ИУ-5..ИУ-8), МИФИ (Кибернетики и информационной безопасности), МИЭМ НИУ ВШЭ (Факультет компьютерных наук).

Что касается выбора языка, здесь важно учитывать несколько моментов. Во-первых, язык не должен быть слишком сложным и «тяжёлым» в отношении синтаксиса. Он должен быть востребован и реализовывать самые современные подходы в программировании. Например, Python, Ruby или JavaScript станут хорошим выбором. Относительно книг и материалов, здесь лучше начать с самого начала, то есть с Теории Информации. Есть потрясающая книга на эту тему: Бауэр Ф. Л., Гооз Г. «Информатика» в 2-х томах. Также полезно будет изучить любой учебник по Информатике. Далее — общение на форумах, чтение статей в блогах, понимание основ устройства ПК и принципов программирования. Из литературы по языку, для Ruby можно порекомендовать книгу с жирафом (Майкл Фитцджеральд «Изучаем Ruby»), для JavaScript (Дэвид Сойер Макфарланд «JavaScript. Подробное руководство»).

Подводя итог, можно составить коротко такой маршрут:

  1. Теория информации;
  2. Устройство и архитектура ПК;
  3. Выбранный язык программирования.

Наконец, необходимо постоянно помнить о том, что программирование — это способ рассказать машине о наших мечтах. Иными словами, нужно постоянно практиковаться и решать самые разные задачи из всевозможных областей на языке, который вы изучаете. Спросите себя: а как написать программу для решения квадратного уравнения, выбора случайного файла с музыкальной композицией, обратиться по сети к сервису Яндекса и узнать правильность написания слова? А затем сделайте это. Наблюдайте, исследуйте, пишите код, и всё обязательно получится! :)

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