Мини-Клондайк начинающего программиста. Часть 1

"Хочу поделиться с вами тем, что я нашёл в процессе обучения, что мне понравилось и что было полезным..."
30 августа 2016AnonymousИгорь Филипенко285262497

Здравствуйте, уважаемые пользователи GeekBrains!

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

Хочу поделиться с вами тем, что я нашёл в процессе обучения, что мне понравилось и что было полезным. Ведь, как мы все знаем, информации в сети полно, а качественной информации мало. Сразу оговорюсь: я - зеленый новичок в области IT, эта статья не истина в последней инстанции, а моё личное видение тех или иных аспектов программирования, подкреплённое какими-то источниками информации, и оно может не совпадать с вашим. В этой статье я не ставлю себе цель стать кому-то "сенсеем" или указывать, что и как учить. Я лишь хочу поделиться тем, что я узнал. Когда я начинал обучение, у меня было множество вопросов и, несмотря на обилие форумов в сети, на многие я ответов не находил. Ответы появлялись в процессе обучения. Многие вопросы были вполне типичными для начинающих. Именно поэтому я рекомендую вам ознакомиться с моей статьёй. Зачем я это делаю? Затем, что в процессе моего обучения мне встречались и встречаются люди, готовые помочь, которые делятся своими знаниями. Я желаю продолжить эту цепочку и поделиться своими знаниями. На этом я завершаю долгий синопсис и приступаю к делу.

Если вы совсем уж новичок

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

Посмотрели? Итак, теперь вы понимаете, что и где примерно применяется (всего в видео не освещается, если по какой-то причине нужной информации там нет, вы можете найти её самостоятельно). Дальше нужно как-то познакомиться с базовыми понятиями и основными принципами программирования. И тут вам следует прочитать в сети, что такое процедурное и объектно-ориентированное программирование. Второе без первого не существует, поэтому начинать нужно с “процедурки”.

Поэтому записываемся на курс “Основы программирования на GeekBrains и проходим. Прошли? Если да, то теперь у вас есть понимание того, что такое переменная, условный оператор, цикл и массивы.

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

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

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

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

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

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

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

Если вы выбрали язык программирования, выбираете и проходите все курсы, связанные с ним. Например, если вы выбрали web, то однозначно надо проходить 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. Другими вещами я просто не занимался, но задержись тут ещё немного - в следующем абзаце я приведу список интересных курсов, где есть куча технологий.

Итак, пока нас не покинули будущие разработчики C#, "питонисты" и т.д., привожу ссылку на интересные источники информации и материалы:

Тут есть целый список всякого разного. Со многими порталами я познакомился и могу сказать, что подборка очень хорошая, особенно для начинающих программистов. Если у вас плохо с английским, то посмотрите на Интуит, Hexlet и ITVDN, ну и конечно же, на GeekBrains. Если же вы "шпрехен зе инглиш вери гуд энд ё нейм из Борис анд Лондон из зэ кэпитал оф Грейт Бритн", то можете попробовать академию Хана, Udacity, Lynda  и т.д.

English

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

Итак, зачем же нужен английский программисту?

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

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

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

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

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

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

В итоге

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