Ответ на пост «Изучение языка программирования»

Чтобы выбрать первый язык программирования нужно всего лишь…


Я сам не ожидал такого выплеска графоманства, так что в самом низу будет краткое резюме.

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


0. Осознать истинную цель, заглянуть дальше своего носа.

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


1. Обучение, что это?

Процесс обучения в любом деле одинаков, начинаешь с чего-то простого и идешь по восходящей к сложному. И чем проще и дружелюбнее инструменты с которыми ты начинаешь - тем больше шансов что удастся сохранить темп и не бросить дело на полпути. Сделаем отступление про физиологию. Мозг наш так устроен что учиться не любит. Потреблять информацию любит, даже очень, а учиться очень не любит. Поэтому мы любим смотреть сериальчики, залипать в ютубе и прочие визуальные радости. Почему не книжка? Потому что книжка заставляет думать. Если что - есть термин цифровой псевдодебилизм. Мало кто видит, но катастрофа уже наступила. Тут я оставлю первое предупреждение - видеоуроки хороши, но имеют и обратную сторону медали, не пренебрегайте текстовой информацией. Если вдруг кто не знает - программирование (естественно если речь о хорошем программисте) это постоянное обучение, эта область развивается так стремительно что держаться на гребне волны очень сложно. Это можно сказать о многих профессиях, но IT это явление очень гипертрофированно. Вот сколько буков написал а о языке и не заикнулся… Я лишь хочу обосновать свое видение проблемы и почему пришел к этим выводам.


2. Так с чего начать?

Итак, программирование это про учебу. Для самых азов, чтобы понять как вообще эти буковки превращаются в программы может быть подойдет какой-нибудь академический язык типа паскаля. Не знаю, учил его еще в универе и не скажу что от этого был толк. Я бы предложил что-нибудь повеселее, например Python. Причем не просто сферический питон в вакууме а с конкретной книжки - Майкл Доусон “Программируем на python”. Поясню свой выбор, ведь книг для начинающих просто море. Не исключаю что это не самая лучшая, но точно очень хорошая. Когда мы говорим об обучении то редко обращаем внимание на практику, а именно практика является вторым необходимым элементом. Можно сколько угодно долбиться головой о теорию, без практики да хоть на зубок выучи - толку не будет. Чем мне понравилась книга - она сразу бросает новичка в практику и заставляет писать простейшие программы. Без практики теория мертва, это точно. Питон много прощает и писать на нем приятно (что обусловлено его происхождением). На этом этапе я рекомендую изучить простейшие понятия, например типы данных, переменные, простая арифметика и циклы. В общем добивать книги до победного конца необязательно. Почему? Потому что дальше можно взяться за другой язык. На этом начальном этапе поймешь что такое программирование в приблизительном виде и вообще готов ли ты решать постоянные головоломки, что-то доучивать, разбираться в нюансах и постоянно помнить о принципе запятой “казнить нельзя помиловать”. Переходим на следующий уровень.


3. Так что же выбрать в фундамент?

Учиться лучше сразу хорошему. Если научишься делать плохо, потом будет тяжело переучиваться, кривой фундамент это всегда плохо. Поэтому основным первым языком должен стать строго типизированный, например Java. И не надо путать с JavaScript, который создавался на коленке и лишь бы работало, но тут сработало как в поговорке - нет ничего постоянней временного. Он оказался весьма удачным и быстро выгрыз себе нишу. Почему он плохой для начала? Опять причина в его происхождении. Итак, Java очень больно бьет по рукам метровой линейкой приучая думать правильно и вникать в процессы происходящие в программе. Второй книгой рекомендую из серии Head First - “Изучаем Java” авторов Сьерра Кэти, Бэйтс Берт. Многие сразу бросят в меня грязью за эту книгу, но это их проблемы - игнорируем их желание заставить нас страдать так, как страдали они грызя скучные справочники. Если человек задает вопрос “какой ЯП мне выбрать?” то он однозначно не справится со сложными и скучными справочниками, так как просто еще не умеет собирать и анализировать информацию. В общем, эта книга просто шикарна в своих объяснениях на яблоках, снимаю шляпу. Я между тем не новичек в IT,  успешно работал админом долгое время и как бы с головой. Но даже для меня эта книга была очень полезна, она с легкостью объясняет сложные концепции. Это просто сэкономит вам кучу времени и сил. Еще раз - книга потрясающая находка для новичка. В принципе вся серия Head First очень не дурна.


4. Обвязочку не забываем, без неё никуда.

И навыки программирования не ограничиваются лишь одним знанием языка, хочу еще раз заострить на этом внимание. Язык это азбука. Дальше надо впитывать алгоритмы (например “Алгоритмы. Руководство по разработке.” Стивен С. Скиена или\и “Грокаем алгоритмы” Адитья Бхаргава), от баз данных точно никуда не денетесь, например “Изучаем SQL” Бейли Линн, без знания хоть сколько нибудь распространенных фреймворков и инструментов разработчика вы никому не нужны, так что - Spring in Action, Hibernate in Action, Maven in Actinon, Pro GIT… и дальше понеслось по наклонной.

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


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


Если кратко, то:

Этап 0.

Если нет никаких навыком начинаем с питона. Майкл Доусон “Программируем на python” - в книге неплохо объяснены самые азы сразу закрепляемые на практике. Как альтернатива есть ресурсы типа CodeCombat, Code Hunt или Codewars где все это в развлекалочек, но я олд и предпочитаю книжки.


Этап 1.

Head First - “Изучаем Java” авторов Сьерра Кэти, Бэйтс Берт. Очень просто на яблоках о сложном. Даже если будете дальше учить не Java, будет очень полезно ознакомиться с концепциями программирования.


Этап 2.

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


Прикольные дядьки в ютубе у кого можно многое почерпнуть.

Петр Арсентьев

АйТиБорода

SHIFU

S0ER


Это те кого вспомнил навскидку, они не единственные адекватные на этой площадке но для начала сойдет.


PS несколько раз пытался все структурировать… но и так сойдет ^_^ иначе просто сотру все к чертям.