Как стать программистом: инструкция по «горячим следам» вчерашнего новичка

Рассказывает Игорь Филипенко, Java-разработчик 


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

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

«Для чайников»

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

Дальше нужно познакомиться с базовыми понятиями и основными принципами программирования. Вам следует прочитать в сети, что такое процедурное и объектно-ориентированное программирование. У Tproger, кстати, есть серия материалов по ООП. Второе без первого не существует, и начинать нужно с «процедурки». Поэтому записываемся на курс «Основы программирования» GeekBrains и проходим. Прошли? Если да, то теперь у вас есть понимание того, что такое переменная, условный оператор, цикл и массивы.

Понравилось? Не тошнит? Хорошо, двигаемся дальше!

А дальше нужно закрепить изученное и получить ещё знаний по процедурному программированию. Для дальнейшего развития я бы рекомендовал С++. Можно выбрать Python, который покажется более простым, можно продолжить с JavaScript. Тем не менее, для отработки основных понятий С++ будет полезнее. Во-первых, многие языки Си-подобны. Во-вторых, это мощный инструмент в умелых руках и при его изучении вы «поковыряете» указатели, а также узнаете много интересных вещей, связанных с памятью и работой с ней. В той же Java прямого доступа к памяти нет, С++ же позволяет извращаться над железом, как вам захочется.

Есть 3 хорошие книги:

  1. Р.Лафоре: «Объектно-ориентированное программирование в C++» — эта книга понравилась мне тем, что в ней доходчиво всё объяснено и много схем. Информация, представленная схематически, мне даётся легче. При работе с этой книгой помните, что темы ООП там идут вперемешку с процедурным программированием. Подробнее о темах чуть ниже.
  2. Х.Дейтел, П.Дейтел: «Как программировать на C++» — это тоже очень толковое учебное пособие.
  3. С.Прата: Язык программирования С. Лекции и упражнения

Кстати, есть еще список книг для изучения C++, которые рекомендует сам создатель этого языка программирования — Бьерн Страуструп.

Ваша задача пройтись по основам программирования и хорошенько разобраться, что же такое переменные, условные конструкции и тернарный оператор, циклы и особенно вложенные циклы, массивы и многомерные массивы, функции, передача данных в функцию по ссылке и значению, структуры, указатели и пр. Прочитав теорию, обязательно практикуйтесь. Берите задачи из книги Дейтелов. В качестве IDE я рекомендую Visual Studio или CodeBlocks. Но есть и другие популярные варианты.

Теперь вы ознакомились с базовыми операторами и конструкциями программирования, дальше имеем 2 варианта:

  1. Вы уже выбрали язык программирования и область, к которой стремитесь;
  2. Вы ещё не определились.

И по одному и по другому вопросу мы вновь должны поработать. Заходим на Sololearn и проходим нужные нам курсы.

Если вы выбрали язык программирования, то проходите все курсы, связанные с ним. Например, для веб-разработки однозначно надо изучить PHP, Python, HTML, JavaScript, CSS и SQL. Эти знания потребуются дальше в ваших проектах. Выбрали С или Java? Вместе с С++ учите SQL, с Java учите SQL, HTML, CSS, JavaScript. Наверное у вас невольно возникает вопрос: «Почему с Java нужно учить веб-технологии?» Отвечаю: «Эти технологии активно используются в проектах, где живёт этот язык программирования». Вы делаете что-то на серверной части: сервлеты и прочее? Возможно, вам придётся хотя бы немного коснуться фронтенда. Вы пишете под Android? Android-приложения тоже верстаются, но там за основу взят не HTML, а XML, однако общие принципы у них похожи, поэтому лучше сейчас потратить лишние пару часов и изучить HTML. Выбрали C#? Набор технологий будет таким же, как в Java. Про Swift я знаю мало, но думаю, что и для него вам понадобятся элементарные знания технологии вёрстки.

Прошли курсы на Sololearn, что теперь? Я очень рекомендую посмотреть семинар «Что такое ООП и с чем его едят?» 

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

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

DWiki — это список всякого разного. Со многими порталами я познакомился и могу сказать, что подборка очень хорошая, особенно для начинающих программистов. Если у вас плохо с английским, то посмотрите на Интуит, Hexlet и ITVDN, ну и конечно же, на GeekBrains. Для тех, кто чувствует себя увереннее в английском языке, подойдут академия Хана, Udacity, Lynda и т.д.

Английский язык

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

  1. Вы неизбежно столкнётесь с нехваткой информации в Рунете по интересующим вас темам. Иностранные программисты постоянно пилят какие-то гайды и прочие ништяки, которые будут очень полезны, но чтобы их понимать, нужно знать английский.
  2. Работа над проектом построена таким образом, что между программистами распределяются задания. Для координации специалистов используются RedMine, GitLab (кстати, познакомьтесь с редмайном, просто для себя зарегистрируйтесь и пощупайте данный сервис) и прочие программы, позволяющие агрегировать информацию по проекту в одном месте. Тут же вам “тимлид” будет давать задания и за вашей командой будет наблюдать клиент, который будет вносить правки по заданиям и писать комментарии. Как думаете, на каком языке он это будет делать?
  3. И наконец, вы сами, вполне возможно, вынуждены будете контактировать с клиентом напрямую. Тут вам тоже пригодится английский.

Более развернутые ответы дали несколько экспертов Tproger.

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

Подытожим вышесказанное. Какой уровень владения языком нужен? Обычно требуется Intermediate. Но не пугайтесь, во многих компаниях всё не настолько строго, с вас будет достаточно:

  1. Понимать язык и читать документацию, туториалы на английском;
  2. Вести диалог с собеседником более или менее свободно.

Вы можете делать какие-то ошибки, но вы должны говорить и иметь какой-то словарный запас. Или есть другой выход: вы должны быть хорошим специалистом. У нас на работе есть парень, который в предложении делает по 5 ошибок, но он понимает код в документации и работает отлично. Но пока вы, скорее всего, не самый крутой программист, поэтому мы немного подтянем ваш английский. В сети существует море курсов, методик и прочего хлама. Есть даже курсы типа «английский для айтишников». Большая часть из этого — шлак. Я вам предлагаю найти двухтомник от Бонка, Котия и Лукьяновой и работать по нему.

Причём работать нужно следующим образом. Там есть теория, есть упражнения на грамматику, перевод и т.п., и есть тексты. В конце каждой главы вы должны сделать хотя бы 2-3 упражнения. Желательно найти человека, который их проверит. Я бы поискал какой-нибудь форум по изучению английского и попросил бы там помощи. Уверен, кто-то знающий откликнется и согласится проверить ваши задания. В каждой главе вы должны пересказать текст, причём использовать новые слова, которые идут после текста. Если вы подойдёте к делу сознательно, то уже после первого тома вы сможете вполне неплохо понимать и использовать английский. Что касается технических терминов, поверьте, их усвоить будет легко. Когда начнёте изучать туториалы на английском, впитаете нужные термины автоматически. Поэтому не бойтесь учить язык и не влезайте в крайности. HR’ы в компаниях будут запугивать и скажут, что нужно быть ну просто англичанином. Это не совсем так, но и знать элементарные вещи необходимо.

В итоге

Это была первая часть моего материала с ссылками и советами начинающему программисту. Я очень надеюсь, что мой труд не пропадёт даром, и эта информация кому-то будет полезной. В следующих выпусках я расскажу о материалах по Java, Android и некоторым вещам, связанным с JavaScript. Ещё раз подчеркну, что цикл этих материалов — моя личная точка зрения, которая не является истиной, и за вами всегда остается право прислушаться к ней или пройти мимо. Успехов вам в изучении программирования, до скорых встреч!