Мой подход к изучению языков программирования
Недавно меня спрашивали - как ты учишь новые языки? В результате я проанализировал то - как же я действительно подхожу к этому вопросу и результатом этого анализа хочу поделиться с вами в виде 6 простых советов.
Disclaimer
я не могу гарантировать тебе успех или правильность этих методик, но для меня они работают не плохо.
1 Не зацикливайся на одном языке за раз
Моей самой большой ошибкой в своё время было зацикливание на изучении одного языка. Я мыслил так “лучше знать один, но знать его хорошо”.
Это, возможно, хорошо работает в теории, но в реальной жизни это может высосать из тебя кучу лишнего времени - ведь в процессе изучения ты рискуешь уйти в полный затуп на сложных местах, и потратить много времени на осознание вещей, которые потом покажутся очевидными и простыми.
Личный опыт
Изначально (в начале времен, ага) я загорелся открыть свой собственный форум. Денег на хостинги/домены у меня тогда не было, поэтому пришлось подстраиваться под бесплатные. На тот момент я нашёл только вариант с Perl и без БД.
С Perl у меня в итоге не сложилось - через какое-то время я устроился на работу по специальности, а там был PHP/JS стэк, и в PHP погрузиться получилось реально очень быстро, ведь у него очень много параллелей с Perl!
При этом, хоть я и не помню даже синтаксис Perl - я до сих пор использую знания почти во всех областях, которые получил благодаря ему, к примеру, регулярные выражения, работа с файловыми курсорами и многое другое.
Рекомендация:
Учи сразу несколько языков, основное время, разумеется, уделяй больше времени целевому.
2. Не учи только простые языки!
Как показывает моя практика — чем сложнее язык взятый как вспомогательный, тем быстрее и проще учится целевой.
Помимо этого, более сложные/строгие языки приучают тебя к соблюдению определённых норм при программировании, и зачастую наводят на углубленное понимание проблем с которыми вы столкнётесь на целевом языке.
Даже если это не поможет тебе в обучении, то, как минимум, позволяет мыслить шире и держать себя в тонусе!
Личный опыт
Честно говоря, мне сложно судить объективно, поскольку я всю жизнь использую только подход “от сложного к простому”.
В своё время перешёл с Perl к PHP, сейчас целенаправленно начал изучать Erlang, перед тем как перейти к Elixir.
При этом, я постоянно поглядываю и на многие другие языки - бывает на C чего нибудь наколдую, или на Ruby и бывает на Python пару скриптов набросаю, недавно ещё прокачивал мозги с Rust.
Рекомендация:
Даже если ты уже используешь первый пункт моей методики, я рекомендую всегда вторым языком брать тот, что сложнее вашего целевого.
Разумеется, обучение займёт больше времени, но по завершению, ты поймешь, что время было потрачено не зря, поскольку у тебя уже будут знания и опыт с другими платформами, и ты сможешь предлагать более эффективные решения, нежели твои коллеги.
3 Не спеши на StackOverflow
Я заметил, что при пользовании этим сервисом, у новичков возникает неприятная склонность к методике “копи/пэйст” в поисках резкого исправления проблемы в стиле “и так сойдёт”, но при этом упускается суть - почему возникла ошибка, и почему решение сработало или не сработало?
Без стремления к пониманию сути проблем - нет смысла идти в профессию.
Рекомендация
Не злоупотребляй StackOverflow! Пытайся самостоятельно разбираться с возникшими проблемами, изучай документацию языка экспериментируй и импровизируйте, это ж не ремесло в конце концов!)
4 Не останавливайся на примерах из книг!
У новичков, которые изучают языки по книгам/курсам/etc зачастую есть одна проблема - они пишут код, который там показан, запускают, следуют всем инструкциям и получают рабочий код из примеров.
Это с одной стороны хорошо - плавное практическое применение знаний никому не вредило, однако многие дальше примеров не идут, считая что и так все хорошо усвоили и запомнили.
Также многие, и я в том числе, думают в стиле - “сейчас базис усвою, накорябаю примеры, закончу всю книгу/курс, а уж потом буду писать настоящий код”. Такой подход не эффективен. Ваш мозг выбросит половину информации к концу книги, и приступая к разработке настоящего приложения вам придется потратить кучу времени на перечитывание и вспоминание многих мест.
Личный опыт
В разное время я начинал изучение многих языков, и заметил одну особенность - если я не писал на них что-то не по книжке или около примерной темы, то этот язык я в итоге забрасывал.
В своё время я так забросил Java, хотя очень горел этим языком (настолько, что в моей библиотеки до сих пор 30% книг - о Java), но разработав пару простеньких программ по работе - забросил этот язык.
Та же история с C#, прочитал книгу, попробовал несколько примеров - и забил, - не мой это язык.
И таких примеров, если вспомнить, было достаточно много - даже с erlang недавно у меня возникла такая проблема, когда я решил проверить насколько многопоточная программа на Rust быстрее работает чем на Erlang, я осознал, что забыл половину синтаксиса, ведь на Erlang я дальше тех же примеров не уходил.
Рекомендация
Примеры это разумеется хорошо, но не зацикливайся только на них! Бросай себе вызов с каждой новой ячейкой знания! Обязательно придумывай и решай реальные утилитарные задачи, это серьёзно укрепит твои навыки.
5 Заведи себе записную книжку
(если учишь первый/второй язык)
Да, я сейчас о самой обыкновенной записной книжке, в которую ты будешь обычной ручкой или карандашом (я предпочитаю ручку) записывать заметки, и да, я серьёзно.:)
Личный опыт
Сейчас я довольно редко пользуюсь бумагой, поскольку многие вещи мне удаётся запоминать чисто ассоциативно - многие языки похожи и когда ты уже знаешь 1-2 языка, то обучение идёт гораздо быстрее за счет эффекта прошлого опыта.
Однако, если ты только начинаешь свой программерский путь, я всё же рекомендую использовать эту методику.
Рекомендация
Самое главное что тебе нужно знать при работе с записной книжкой - выписывай только действительно важные, запутанные или не особо понятные моменты!
Не нужно переписывать всю книгу или документацию на бумагу - большую часть ты либо запомнишь, либо поймёшь в процессе!
6 Постоянная практика
Каким бы способом ты не изучал что-либо, всегда остаётся одно золотое правило - чем больше практики - тем лучше!
Практика укрепляет теоретический багаж знаний и позволяет заполнить многие пробелы, решить вопросы оставленные без ответа при теоретическом изучении, ну и разумеется порождает новые вопросы.
Как говорится - учиться, учиться и еще раз учиться!
Удачи!)
Знаешь другие эффективные методики?
Не стесняйся - пиши в коментах, а я добавлю их в статью!