Как правильно изучать программирование: метод Франклина
Главная проблема в самообучении — отсутствие системного подхода. Трудно понять, что учить в первую очередь, а что во вторую, и в каком порядке.
Если вам нравится узнавать новое, наводить порядок в хаосе с помощью продуманных инструкций, заставлять технику выполнять команды — значит программирование точно для вас. Чтобы начать путь и избежать сложностей самообучения, достаточно записаться на курс «Профессия веб-разработчик».
Талант программиста можно заметить в человеке, который не написал ни строчки кода. Это человек, который любит головоломки. И первая головоломка — как правильно изучать программирование самостоятельно.
Пишет про разработку в Skillbox. Работал главным редактором сайта «Хабрахабр», ведет корпоративные блоги.
Самообучение
Путь самоучки — это «метод тыка», общение на форумах, поиск единомышленников, хождение по конференциям и тусовкам-митапам. Это такой путь самурая. Путь подходит не каждому. Поэтому для широких масс выпустили кучу самоучителей — тысячи книг, похожих друг на друга как близнецы.
Самоучитель хорош тем, что быстро погружает в тему. Вы начнете кодить практически в тот день, когда открыли книжку. Но, как говорит преподаватель Джеймс Коппел из Массачусетского технологического института, есть одна проблема: эти книги ничему не учат. Главное там — длинные листинги кода, которые читатель должен воспроизвести.
Как и в конспектах университетских лекций, «код переходит со страницы книги на экран читателя, минуя мозг». Студенты, которые слушают обычные лекции, на 55% чаще проваливают экзамен, чем те, кто участвовал в обсуждении материала, пусть даже немного.
Метод Франклинa
Чтобы извлечь какую-то пользу из самоучителей или лекций, некоторые специалисты рекомендуют выполнять практические задания особым методом. Его можно назвать методом Франклина.
Этот метод очень прост на практике.
Суть в том, чтобы усваивать мысленные образы — структуры данных, чувствительные к распространению. В этом случае мозг работает по принципу автокодировщика в машинном обучении.
«Автокодировщик — нейронная сеть, что пытается воспроизвести на выходе такие же данные, как и на входе, но с прохождением через промежуточный слой, который слишком мал, чтобы полностью представлять данные. В ходе этой процедуры он учит более компактную репрезентацию данных. Здесь в качестве нейронной сети выступает скопление дендритов в вашей голове», — пишет Джеймс Коппел.
Лекции и литература
Освоив метод Франклина, ищите информацию, которая бесплатно доступна в интернете в огромном количестве, особенно на английском языке. Вкратце план действий такой:
Образовательные ресурсы с курсами и лекциями
Учебная литература
Самоучители для начинающих
Самообучение для неподготовленного человека не так эффективно, как отработанные методики передачи знаний и навыков, которые гарантируют качественный результат без особых затрат. Тратить силы и время всё равно придется, но не в таком фанатичном режиме, как у самоучек.
Программа обучения. Системный подход
В отличие от отдельных курсов, системная программа обучения предполагает обучение с нуля до трудоустройства джуниор-разработчиком. В этом случае ученик получает комплексные знания, необходимые для профессиональной работы.
Программа обучения «Профессия веб-разработчик» рассчитана на один год и включает в себя три модуля:
Практический годовой курс для тех, кто хочет стать профессиональным веб-разработчиком, запустить свой интернет-проект или веб-сервис и получить первые заказы на разработку.
Практический курс для тех, кто хочет научиться основам языка сценариев с индивидуальным наставником, разработать frontend для интерактивного веб-проекта и положить кейс к себе в портфолио.
Базовые навыки PHP
Курс, на котором вы познакомитесь с базовыми понятиями программирования и поймёте главные принципы. Научитесь писать чистый, структурированный, а самое главное — работающий код. Уже после первого курса сделаете свой первый сайт на PHP.
Система платная, но зато она повышает шансы на успешный результат. А результат — это престижная, востребованная и высокооплачиваемая профессия с интересными проектами и перспективами развития.
Заключение
С чего начать учить программирование, каждый решает сам. И каждый выбирает свой путь. Но главное, что после окончания этого пути вам точно не придется просыпаться с рассветом и идти на завод к первому звонку.
Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать

(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)
Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь PayPal и владелец Palantir (написал ли он что-нибудь?), а Илон Маск в детстве написал свою игру и успешно её продал.
Никита truesnow из #tceh сказал мне, что на курсе «Врубаемся в Ruby» они научат программировать любого человека, даже с нуля. Я спросил его: «А с гуманитарием справитесь?» И мы задумались, были ли случаи, когда «гуманитарий» выучил язык программирования?
На ум сразу пришел бомж-программист, но после успеха с его приложением он предпочёл остаться «дзен-монахом». Есть ли еще примеры? Вдохновляющий пример, что научиться кодить может каждый — слепой программист. Когда я прочитал статью на Хабре «Смотря на код с закрытыми глазами», то понял, что нет преград, кроме собственных отмазок.
А у меня для вас есть три истории из моей жизни. Просто три истории.
История первая — ламер
Слово «ламер» я прочитал в «Компьютерре». Там давалось такое определение: «Ламер — отнюдь не безграмотный человек, не умеющий (как бы это помягче выразиться?) программировать». Окрылённый истиной я побежал и рассказал об этом друзьям-одноклассникам, но они предпочли поиграть в футбол, вместо того чтобы освоить суперспособности. Забавно, что потом все они зарабатывали программированием деньги, а я нет. Через неделю я записался в краевую станцию юных техников (КСЮТ), где был кружок по программированию. Там для новичков давали qbasic. А боги прогали на C.
Так вот как-то один из «богов» подозвал меня к монитору и спросил: «Так сможешь?». И показал прогу, которая ждала, когда пользователь введёт в командной строке любой символ, а потом поворачивала его на 90 градусов. Я был ошеломлен.
Наверное, меня это так зацепило, что я решил — во что бы то не стало, выучить все что можно, и стать самым крутым программистом. Заряда хватило на годы. Этот случай я позабыл, прошло несколько лет, и, вспомнив о нем, я написал не больше десятка строк на basic`e минут за 20. Программа работала идеально.
Вывод. Личные отношения с падаванами очень важны. Возможно, ваша простенькая программа определит судьбу человека и повлияет на выбор жизненного пути.
История вторая — первый шифр
Задумка была следующая: каждой букве русского алфавита мы приписываем массив из 5 символов в виде букв русского и английского языка, спецсимволы. При шифровании мы рандомно выбираем один из них. Получалась «расширенная» простая замена. Это сейчас мне понятно как его ломать, но тогда для меня была запредельная высота. Через 3-4 года я поступлю на компьютерную безопасность.
Вывод. Решать интересные задачи — это круто. Но гораздо круче придумывать и находить задачи самому.
История третья — триумф BASIC`а
Я уже 2 года «занимался» программированием. И тут в школе появилась… информатика. Меня почему-то отправили в слабую группу. Как узнал позже, моё лицо не понравилось преподавательнице и она посчитала, что я тупой. Мои друзья ворвались в кабинет к директору и сказали, что я занял призовое место на краевой олимпиаде по программированию. Начались, разборки, но мне было так пофиг, что я остался в слабой группе, где учили вводить цифры в Exсel. За первую неделю я сдал всю программу и спокойно ходил играть в Diablo 2 в компьютерный клуб.
А на олимпиаде был забавный случай. Разрешённые языки — C, Pascal, а я то был прожжённым бейсичником. Выкрутился. Задачу принимали в виде exe’шника, а я подсуетился и нашёл бейсик, который кует exe’шники. Программы проходили тесты, а сами тесты принимались на серваке. Одна задача была сугубо вычислительная. Давались координаты центров и радиусы двух окружностей. Требовалось выдать взаимное расположение окружностей в текстовом виде: пересекаются, касаются, одна в другой, совпадают, и прочие.
С формулами было возиться лень, и недавно я как раз разбирался с графикой. Задачу решил графически, рисовал окружность одним цветом, а потом «сканировал» попиксельно по второй окружности, втыкаюсь ли я в уже окрашенный пиксель. Был большой страх, что прога не сможет работать на серваке без монитора, но все обошлось — 10 тестов из 10. На разборе задач был звездный час. Полсотни человек решили задачу один в один как автор, какого же было их удивление, когда я рассказал свой способ.
Вывод. Школа — зло. Результат — круто. Нестандартное мышление — прикольно. Обходной путь есть всегда.
Зачем взрослым учиться программировать
У меня есть три ответа на этот вопрос. Они зависят от горизонта планирования:
— Цель на 1 неделю или месяц — это вызов. Это как пробежать марафон или забраться на Эльбрус, проверить не засохли ли мозги, выйти из зоны комфорта.
— Цель на год-два — это бабло. За это время можно научиться создавать ценность и работать удаленно. Или учить других. Очень многие хотят научиться программировать.
сам поискал 8 сентября:
на русском в 1000 раз меньше: 
— Цель на 5-10 лет — развитие в целом. Во-первых, вы улучшите своё мышление. Во-вторых, вы сделаете неоценимый подарок детям. Они получат несколько лет форы в изучении программирования и у вас появится много чудных моментов совместного написания программ. Для полного счастья останется научиться играть в компьютерные игры, но это вы скорее всего уже умеете.
Как научиться программировать
Есть заезженная картинка на этот счёт:
Почему-то все сразу начинают советовать Кнута, Кормена и прочее, но неподготовленный человек сможет осилить только предисловие. Если совсем проблемы с самооценкой возьмите детскую книгу и напишите игру.
Если готовы приступить по-взрослому, то есть множество ресурсов для самообучения. От Coursera (раз, два) до всяких %имя%academy (codeacademy, htmlacademy и пр)
Если намерения совсем серьёзные, могу посоветовать курс «Врубиться в Ruby».
Во-первых, есть живой преподаватель с хорошим бэкграундом в разработке. Виталий Куреннов, 6 лет пишет на Ruby и больше года обучает всех желающих этому навыку, работал над Ruby проектами для Nokia и Avaya.
Во-вторых, есть группа единомышленников, работая бок о бок с которыми, у вас многократно повысятся шансы дойти до победного конца и освоить программирование до того уровня, когда оно начнет приносить прибыль.
— Никита, почему именно Ruby?
— Все просто, мы нашли очень хорошего преподавателя.
Про Ruby
Попробовать сделать первые шаги можно прямо сейчас, займет всего 5-10 минут.

Нашел шикарный ресурс с геймификацией и сразу из браузера tryruby.org
За 5 минут выполняем несколько заданий, получаем ачивку и переходим на следующий уровень.
А зомбяк не хотите ли? railsforZOMBIES.org
«Однако я не думаю, что смогу убедить кого-нибудь (старше 25) выучить Lisp.» Пол Грэм, «Побеждая посредственность»

Нашёл для себя удобную браузерную обучалку Learn Lisp The Hard Way
«За те годы, что я проработал в Viaweb, я прочитал множество объявлений о найме на работу. Примерно каждый месяц появлялся новый конкурент. Первое, что я делал после того, как проверял, доступна ли онлайновая демонстрация работы их программы, — смотрел список их вакансий. Через пару лет я научился отличать опасных конкурентов от неопасных. Чем больше отдавало IT-мэйнстримом от описания требуемых кандидатур, тем менее опасна была компания. Самыми безопасными были те, кому требовались специалисты по Oracle. О таких не стоило беспокоиться. Также мы были спокойны, если требовались разработчики на C++ или Java.
Если требовались программисты на Perl или Python, это уже было слегка пугающе — это значило, что компанией или, по крайней мере, ее технической частью заправляли настоящие хакеры. Если бы я когда-нибудь увидел объявление о найме на работу Lisp-хакеров, я бы обеспокоился не на шутку.» Пол Грэм, «Побеждая посредственность»
Ещё пара советов
Общие упражнения:
Project Euler содержит более 500 математических задач (на теорию чисел, числовых систем и пр.), которые нужно решить, используя программирование на любом языке.
Code Abbey хранит более 200 задач по программированию. За решения 125 из них выдают сертификат, чем мотивируют многих студентов.
Rosalind — это ещё один сайт наподобие Project Euler, который предоставляет на выбор более 200 задач по биоинформатике.
Codingbat.com дарит упражнения по Java и Python, как для новичков, так и для продвинутых программистов.
codegolf.stackexchange.com – сайт, на котором публикуют и обсуждают программистские головоломки.
Ruby Quiz — серия головоломок, в которых вас просят написать короткие программы различной сложности. Исходные решения описаны на Ruby, но их можно реализовать на любом языке.
Задачи из олимпиад по программированию:
UVa Online Judge — коллекция из сотен задач с олимпиад по программированию, с онлайн-системой проверки решений.
TopCoder содержит сложные задачи на алгоритмы, собранные годами с разных соревнований. Также несколько раз в месяц проводит олимпиады по программированию.
CodeForces похож на TopCoder, но содержит больше задач на соревнованиях и несколько особых фишек, включая «виртуальные соревнования».
Timus — то же, что и UVA. Содержит задачи с последних соревнований (мирового и регионального уровня).
SPOJ — похож на UVA, с огромным числом языков программирования на выбор.
USACO содержит несколько задач на алгоритмы с руководством по их решению.
Под определённые языки:
Для Prolog, Lisp и подобных языков посетите P-99 и L-99, наборы из 99 задач для повышения вашей эффективности в данных языках.
Python Challenge — объединяет загадки и головоломки, которые помогут вам серьёзно прокачаться в Python.
4Clojure — набор упражнений по программированию, специально разработанных под Clojure, Lisp-подобный язык.
Как эффективно изучать языки программирования? Отвечают эксперты
Авторизуйтесь
Как эффективно изучать языки программирования? Отвечают эксперты
В Сети сейчас очень много обучающих курсов, статей, видео и прочих ресурсов, которые призваны помочь в изучении того или иного языка программирования, и каждый из них советует свою программу обучения. Какой алгоритм самый эффективный? Спрашиваем у экспертов.
разработчик DIRECTUM
Как эффективно изучить новый язык программирования? Вопрос, с которым сталкивается каждый разработчик. За 11 лет в ИТ я сам изучал 10 языков и на практике понял, какие моменты нужно учесть для лучшего освоения.
Цель первична
Просто познакомиться с новым языком программирования — цель достойная, но когда речь заходит об эффективности, необходим измеримый результат. Нужно чётко сформулировать конечную цель и ответить на вопрос: «Зачем?».
Язык может быть нужен, чтобы:
Конкретно сформулированная цель позволит достигнуть желаемого результата.
Теория и практика
Теория нужна, чтобы как можно быстрее перейти к практике!
Было бы желание, а способ изучения и материалы найдутся.
Окружение
Окружение становится турбокнопкой к эффективности.
руководитель Центра программных решений «Инфосистемы Джет»
Изучать синтаксис языка программирования исключительно в теории не стоит. Помню, когда я учился в 9-ом классе, когда у меня даже не было компьютера, я прочитал книгу про Algol-60 и ничего не понял. В освоении языков самое важное — практика! Поэтому на первых этапах надо изучать не синтаксис, а идиоматику — средства, которыми принято выражаться в этом языке. Надо научиться понимать, как правильно формулировать. Без этого код будут плохо понимать другие программисты, даже если синтаксис будет правильным.
Если говорить об алгоритме изучения языка, советую:
ведущий разработчик BestDoctor
Труднее всего для новичка в программировании не заучить синтаксические правила, а научиться понимать смысл кода. Даже небольшие программы, с которых начинаются учебники и курсы, для многих сперва выглядят неделимой стеной текста. Что уж говорить о попытках внести туда какие-то изменения — чаще всего они будут заканчиваться непонятными ошибками и вызывать фрустрацию.
Поэтому начинать нужно с практики. Возьмите любое пособие по изучению иностранного языка — там почти сразу будут простые упражнения, в которых надо подставить в предложение правильное слово. Потом, когда вы поймёте, например, как работают глаголы-связки и где должно находиться подлежащее, вы будете учиться писать предложения целиком самостоятельно, а потом связывать предложения в текст. А новые слова и новые правила грамматики будут идти параллельно, начиная с наиболее часто используемых.
Аналогично стоит изучать и программирование. Ищите материалы и курсы, которые дают много практики, будь это написание кода в онлайн-редакторе или работа с учителем. Пусть эти курсы начинаются с самых простых вещей, которые можно написать в несколько строк: ввод и вывод текста, сложение и умножение чисел, операции с массивами.
При этом очень важна самостоятельная работа. Чем больше упражнений будут сопровождать ваше пособие, тем лучше. С учётом того, что вы начинаете с маленьких упражнений, вам будет сложнее допустить ошибку и проще найти и понять, как её исправить.
Через некоторое время код для вас превратится из иностранного манускрипта в понятную структуру, которая создаёт описания, сохраняет значения в памяти и производит действия тогда, когда вы этого захотите.
директор департамента информационных решений компании РДТЕХ
Выбор оптимального варианта зависит от того, знаете ли вы какие-то другие языки программирования и есть ли у вас опыт программирования вообще. Если опыт есть, то изучение очередного языка программирования не представляется сложной задачей — достаточно посмотреть правила написания и оформления программ, а также синтаксис основных конструкций нового языка (объявление переменных, процедур/функций, циклов и т. д.) и можно сразу приступать к практике. Обычно предлагаемые в Сети курсы и материалы ориентированы именно на эту многочисленную аудиторию.
Другое дело, когда человек только начал постигать науку программирования. В этом случае предпочтение стоит отдать одному из популярных и достаточно простых языков, таких как JavaScript или Python, и найти обучающие курсы по программированию, основанные именно на этом языке. Обычно подобные курсы построены таким образом, что теория перемежается с практикой, необходимой для закрепления материала, а в конце курса предлагается самостоятельно реализовать более сложную задачу.
Несколько слов стоит сказать о практической задаче. Лучше всего пробовать решать какую-то свою актуальную задачу (например реализовать приложение для управления компонентами «Умного дома»), максимально её упростив для начала. Как показывает мой опыт, это отлично мотивирует, ведь на выходе удаётся достичь сразу двух целей: и язык/технологию новую изучить, и реализовать давнюю идею.
программист платформы Валарм, компания «Онсек»
Как правило, специалист начинает изучать тот или иной язык программирования в двух случаях. Первый — когда он только начинает погружаться в программирование, и это первый язык для изучения. Второй — когда один или несколько языков уже освоены, и хочется развивать свои компетенции дальше. В каждом случае будет свой алгоритм действий.
Вы начинающий программист
Очень часто людям, которые только начинают свой путь в программировании, сложно освоить весь объём новой информации, который они получают из книг и видеолекций. Они не могут категоризировать весь объём поступающих данных самостоятельно. В этом случае поможет ментор: человек, который сможет скоординировать процесс обучения, обратить внимание на важные вещи, стать проводником в мир ИТ. Поэтому если у вас есть знакомый программист, который готов стать ментором, то вполне возможно изучать язык по видеолекциям и книгам, периодически консультируясь с ним. Пусть он даст вам вектор движения и будет корректировать его по мере надобности — а с самостоятельным изучением темы вы справитесь своими силами.
Если же такого знакомого нет, то лучший путь для изучения языка — офлайн- или онлайн-курсы. Во время прохождения курсов обязательно консультируйтесь с преподавателем, задавайте вопросы, даже те, которые кажутся вам глупыми, а также выполняйте все задания. Благодаря непосредственному доступу к носителю экспертизы вы очень ускоритесь в освоении языка и пройдёте наикратчайший путь от новичка до специалиста.
Вы уже знаете один или несколько языков программирования
В этом случае достаточно прочитать книгу или посмотреть видеолекции по нужному языку программирования. Проходить курсы вряд ли необходимо, так как они в подавляющем случае разработаны для начинающих программистов, и темп изучения покажется вам слишком медленным. Единственное, что нужно помнить — в каждом языке есть свой подход к написанию кода. Например, если вы изучали JavaScript, а потом захотели освоить Golang, не пытайтесь писать код на Golang, используя практики программирования на JavaScript. Лучше потратить дополнительное время для изучения best coding practices изучаемого языка, чтобы не быть «белой вороной» и не вгонять в ступор других людей, когда они увидят получившийся код.
генеральный директор компании «Инфомаксимум»
Половина нашей команды — разработчики. И даже среди них нет единой точки зрения о том, с чего стоит начинать изучать тот или иной язык программирования. Все по-разному пришли в разработку — кто-то «играл в код» ещё в начальной школе, другой изучал сам вопреки основной профессии.
Сам я по образованию программист, много лет занимался разработкой на С++. По опыту скажу: нельзя найти универсальный и единственно правильный путь изучения программирования. Если кому-то «заходит» только практика, это не значит, что другой, прикладывая максимальные усилия, тем же путём освоит язык.
На мой взгляд, наиболее приближен к идеалу следующий алгоритм изучения языка:
И запомните одну вещь — учиться и совершенствоваться необходимо на протяжении всего своего пути. Это аксиома.
исполнительный директор Астраханского технопарка FABRIKA
Если речь идёт о программисте, который уже умеет кодить и работать со сторонними библиотеками — это одно дело. Уже есть понимание механизма и нужно наращивать, что называется, «мясо» — добавлять знания новых языков к уже имеющимся. Если же речь о том, кто только учится, то не рекомендую начинать обучение с конкретных языков. Нужно учиться кодить в принципе. То есть строить алгоритмы.
Несомненно, важно изучать и теоретическую базу — это основа, и без неё невозможно научиться писать качественный код. Достаточно сильную теоретическую базу для самостоятельного изучения дают книги, курсы онлайн-академий и видео-разборы. Следует, однако, помнить, что чем раньше приступить к решению практических задач, тем продуктивнее будет идти обучение. Тут важно соблюдать баланс теоретической подкованности и практического опыта.
Как для обучения, так и для развития новых компетенций у работающих программистов отлично подходят различные практические тренажёры. Например, полезно решать задачи по олимпиадному программированию, где знания определённого языка накладываются на решение задач с использованием другого. Среди резидентов технопарка популярна площадка Timus Online Judge — крупнейший архив задач по программированию с автоматической проверяющей системой. Особенность таких тренажёров в том, что для решения задач не используются фреймворки, сторонние библиотеки и методы сортировки. Ты должен сам писать код от и до. Отлично прокачивает умение строить алгоритмы.
Весьма достойный тренажёр есть также и для SQL. В целом, для программистов олимпиадное программирование — это не только обучение, а некий вид спорта, где можно соревноваться с коллегами и самим собой, чтобы показать себе, чего ты стоишь.
Отличный вариант «прокачки» компетенций в том или ином языка — стажировка в сильной проектной группе, в IT-компании, специализирующейся на этом языке. Это самый экстремальный, но, пожалуй, самый эффективный способ быстро освоить язык программирования.
преподаватель направления «Программирование» в Нетологии, frontend-разработчик
На вопрос, какой алгоритм самостоятельного изучения языка программирования самый правильный, нет однозначного ответа, поскольку все люди разные.
В первую очередь следует определить, сколько времени в день или в неделю вы готовы тратить на освоение нового материала. Если свободного времени достаточно, то можно самостоятельно изучать язык по разнообразным материалам — универсального ресурса, который подойдет для изучения любого языка, к сожалению нет. Параллельно нужно самостоятельно практиковаться и отрабатывать полученные знания на пет-проектах, например на сайте Codewars, где можно найти практику сразу по многим языкам.
Самые лучшие источники знаний написаны на английском языке. Даже русскоязычные разработчики пишут статьи на английском, поскольку это позволяет охватить бо́льшую аудиторию. Переводы появляются не всегда и часто запаздывают. Поэтому важно обратить внимание на свой уровень английского языка и при необходимости включить его в свой план обучения.
Также при самостоятельном изучении языка важно обращать внимание на уровень материалов. Поскольку у каждой задачи в программировании есть больше одного решения, вы можете найти разнообразные статьи на интересующую вас тему, главное не запутаться в них. Но существуют так называемые «best practice», которые позволяют избежать постоянного изобретения велосипеда. Их нужно искать более тщательно.
Если времени не так уж и много, а новое знание освоить очень хочется, то оптимальным будет поискать подходящий онлайн-курс, благо их теперь очень много. Это позволит получить концентрированный поток знаний и обратную связь от профессионалов, что сильно ускорит процесс обучения. И дополнительный бонус — вам не придётся тратить время на самостоятельный поиск хороших материалов.
Какой бы способ изучения вы не выбрали, самым важным является практика! В программировании совершенно не важно, какие курсы или учебные заведения вы окончили. На любом собеседовании вам будут задавать предельно практичные вопросы. Поэтому во время или после прохождения какого-либо курса или по ходу изучения языка самостоятельно практикуйтесь как можно больше. Если перевести соотношение теории к практике в проценты, то, на мой взгляд, оно составит примерно 20/80. Работодателю важно сразу после найма получить работоспособного программиста, а не тратить время на перевод теоретических знаний в практические навыки и умения.
руководитель отдела интеграционных решений компании «Синимекс»
Вопрос достаточно сложный. Нельзя выбирать между теорией и практикой, должна быть гармония. Нужно учить синтаксис и понимать алгоритмы и основы. При этом без практики эти знания не имеют ценности. Нужно чередовать — прочитали некоторую часть, затем опробовали на практике. При этом, на мой взгляд, совсем не обязательно покупать платные подписки на курсы. Очень много материалов есть в открытом доступе. Большое количество интересных практических задач можно получить, задав в Google вопрос «олимпиадные задачи по программированию». На них вам придётся поискать и почитать теорию про алгоритмы, их сложность, структуры данных и прочее. При этом они дают возможность писать свой код, и потом при разборе увидеть свои ошибки и варианты решения из best practice.
Как только почувствовали уверенность — нужно браться за боевые задачи, чтобы увидеть реальный мир и реальные проблемы. Зачастую в учебнике и обучающих задачах многие сложные и интересные практические моменты пощупать не получится. Начните писать свой проект на GitHub. Ещё очень важный момент: ваш шанс на успех сильно повысит наличие ментора — более опытного друга/коллеги/наставника, который может помочь, если у вас «затык», что-то объяснить, проверить результат вашей работы и дать правильный вектор вашему развитию. Никогда не останавливайтесь на достигнутом. Удачи.
декан факультета Искусственного Интеллекта в онлайн-университете GeekUniversity
В изучении языка программирования вам, скорее всего, потребуется соблюдать баланс между изучением синтаксиса и применением его на практике.
Следующие шаги помогут вам сделать это правильно.
Определитесь с конечной целью
При изучении языка программирования нужно для начала хотя бы примерно представлять, что вы хотите в итоге научиться делать. К примеру, ваша цель — научиться писать игры, либо делать сайты, либо написать приложение с использованием искусственного интеллекта.
А может, вы хотите уметь делать и то, и другое, и третье? Такое тоже возможно.
Вам будет легче продолжить изучать язык программирования, если у вас будет определённая цель, даже если в будущем вы передумаете и будете применять свои знания совсем для другого.
Учите синтаксис небольшими порциями
Не нужно сразу штудировать целый учебник по программированию. Проходите теорию по небольшим пунктам.
Сразу применяйте знания на практике
К примеру, вы прочитали часть материала про работу со строками. Возможно, даже всего лишь про одну команду. Сразу же попробуйте эту команду применить на практике, самостоятельно придумав для этого небольшой пример. Если вы хотите отработать команду, с помощью которой можно сделать замену символа в строке, возьмите конкретное слово и замените там какой-либо символ.
Решайте задачи по программированию
Пройдя небольшой раздел, попробуйте порешать задачи на эту тему. В интернете много сайтов с задачами, которые можно решать онлайн и сразу увидеть результат. Например, если вы изучаете Python, вам подойдет сайт pythontutor.ru.
Переходите к созданию проектов
Проекты — это то место, где у вас получится применить навыки, отработанные на задачах.
Если работа над программным проектом происходит в реальной рабочей обстановке, то знания усваиваются с большой скоростью. Причем за первые месяцы работы программист получает больше знаний и навыков, чем за любой из последующих месяцев.
Большую роль здесь играет эффект новизны — как за счёт того, что язык программирования изучается относительно недавно, так и за счёт нового рабочего окружения.
руководитель отдела разработки в AWG.RU
Подход к изучению нового языка сильно зависит от предыдущего опыта программирования. Если его нет, то проще начинать с азов и учиться по книжке с уроками и заданиями. При этом важно выбирать актуальный учебник — учить древнюю версию даже не сильно обновляемого языка программирования занятие неблагодарное и бесполезное. Если есть опыт в программировании, то новый для изучения язык выбирается обычно на основе либо применимости к какой-то области (и тогда обычно всё идёт от конкретных задач — то есть, практический путь), либо на основе «хайпа». Во втором случае проще найти эксперта, который будет готов ответить на вопросы и рассказать о подводных камнях.
Алгоритм может быть следующий:
автор программы курса «Фронтенд-разработчик» в Яндекс.Практикум
Самое сложное на старте — выбрать направление. Например, в разработке сайтов их три: фронтенд, бэкенд, фулстек. Как понять, к какому направлению больше лежит душа? В идеале — попробовать фронтенд и бэкенд, а потом определиться, что интересно изучить дальше.
Если говорить о фронтенде, то обязательные основы — HTML и CSS, нужные для вёрстки, и язык программирования JavaScript, который делает сайт интерактивным. Фронтенд-разработчику важно понимать на базовом уровне, как устроен бэкенд, поэтому нужно изучить, как происходит сборка проекта — подключение сайта к серверу и его «доставка» до пользователя.
Лучше равномерно распределить занятия во времени — тратить на обучение один-два вечера в неделю не так эффективно, как проходить небольшие уроки каждый день. Чтобы быстрее перейти к практике, на начальном этапе нужно заниматься не меньше десяти часов в неделю.
Через месяц-полтора уже получится сверстать несложный сайт, ещё через два месяца — «оживить» сайт при помощи JavaScript и адаптировать его для разных устройств.
Чтобы учиться было интереснее, придумайте себе проект (сайт) и начните его воплощать — верстать, писать код. Дело пойдёт быстрее, потому что код не будет абстрактным, перед вами будут стоять конкретные задачи, решение которых вы будете искать. В Яндекс.Практикуме мы предлагаем студентам сделать пять проектов: четыре шаблонных и одна полностью индивидуальная дипломная работа. Эти проекты они смогут сразу положить в своё портфолио.
PR Менеджер в IT Компании Enterprise сегмента
Изучение любого языка происходит примерно одинаково, но всё же обязательные шаги примерно следующие:
Одному из разработчиков нашей команды в изучении Java когда-то очень помогла книга, которая была посвящена алгоритмам данных, но имела примеры на Java.
Ещё один вариант. Придумываете для себя простой, но интересный проект, а далее начинаете его пытаться делать, параллельно задавая вопросы в Google или StackOverflow. Там можно прояснить вопросы простого характера и найти в комментариях полезные мнения. Но тут есть и минус. Без понимания базовых концепций программирование может превратиться в «загугли решение». Некоторые девелоперы так и копируют асинхронные функции, не понимая, что такое вообще асинхронность.
Если вы уже разрабатывали на каком-то языке, то сидеть и отдельно изучать синтаксис нет смысла. Можно сразу лезть в практику и по ходу дела разбираться с особенностями нового языка.
руководитель группы Computer Vision ABBYY
Ответ во многом зависит от языка программирования и сферы его применения.
Допустим, человек занимается научными исследованиями, и сотрудники его лаборатории в проектах используют Fortran — это одна ситуация. Другой вариант — студент, изучающий машинное обучение, который хочет писать проекты на Python. Ещё вариант: разработчик решил изучить С++, чтобы устроиться на работу в коммерческую компанию. Эти и другие ситуации требуют разного подхода и объёма прилагаемых усилий для изучения языка.
Я попытаюсь дать общие рекомендации, но в каждом случае в этот алгоритм следует вносить коррективы.
1. Найдите хорошую книгу, освещающую основной синтаксис языка, с примерами и объяснением принципов работы. От правильного выбора книги зависит многое, она сформирует ваше первоначальное «видение» языка. Разумеется, в будущем оно будет корректироваться по мере накопления вашего личного опыта работы с ним.
2. Практика. В каждом языке есть свой «Hello, world!». Пытайтесь сразу же применять полученные знания на практике, закрепляйте освоенные конструкции языка.
3. Будьте любознательными. Как только в голове возникает вопрос, ответа на который вы не знаете, — ищите его не откладывая! В интернете полно форумов и блогов, в которых разработчики обсуждают практически все нюансы языков. Ни одна книга не может охватить их все. Особенно это касается языков, имеющих богатый набор выразительных средств.
4. Изучайте основы ООП, паттерны программирования, алгоритмы и структуры данных. Посмотрите, как устроены библиотеки внутри, загляните в их код. Великолепное формальное знание языка ещё не означает, что вы будете писать элегантный и эффективный код на нём.
5. Старайтесь, чтобы ваш код увидело как можно больше коллег, чтобы как можно раньше получить фидбэк на то, как вы пишете или оформляете код. Оформление кода или code style в крупных проектах — отдельная тема, и её тоже следует изучить. Также как и процесс code review.
6. Если вам требуется глубокое понимание языка (например если вы разработчик в крупной коммерческой компании), не ограничивайте себя изучением только его одного. Посмотрите вокруг на остальное: скриптовые языки, ассемблер. Задайте себе вопрос, чем они отличаются, почему устроены иначе, какую цель преследовали авторы этих языков? Изучайте различные фреймворки, библиотеки, погрузитесь немного в теорию компиляции, разберитесь с тем, как устроен процесс «сборки» проектов в разных средах.
7. Придётся изучить английский достаточно хорошо, чтобы читать форумы разработчиков, техническую документацию. Это и в жизни пригодится.
8. В какой-то момент стоит открыть документацию, или, говоря проще, изучить «стандарт» языка. Многие привычные вещи в этот момент откроются вам с нового ракурса. Не помешает также проследить исторический путь развития языка, разобраться, что в нём менялось от одной версии стандарта к следующей.
9. Посещайте различные мероприятия, конференции, семинары. Они могут быть посвящены дальнейшему развитию языка или различным сферам его применения.
10. Помните, что нельзя «изучить» какой-то язык «от и до». Язык не монумент, он живёт и развивается, это же справедливо и в отношении естественных языков. И если язык «живой», востребованный в мире, то процесс изменений в нём со временем становится всё более интенсивным.
На этом у меня всё. Ищите свой путь, не бойтесь наступать на «грабли». Чем раньше вы их «соберёте» — тем меньше «мин» будет в проектах, которые вы после себя оставите.
мобильный разработчик в DD Planet
На самом деле единственного верного алгоритма не существует. Каждый выбирает для себя подход, который соответствует его предыдущему опыту и уровню подготовки. Кто-то уже наработал достаточную практическую базу и хочет углубиться в изучение конкретной специализации, а кто-то только начинает свой путь в программировании и едва знаком с синтаксисом.
Тем не менее, существует довольно эффективный алгоритм, с помощью которого можно научиться программировать. Если, конечно, есть чёткое намерение и мотивация. Сводится он к следующему: человек определяется, какой язык программирования хочет изучить, покупает книгу по этому языку и начинает её осваивать. Как только в тексте встречается пример кода, обучающийся в обязательном порядке опробует его на своём компьютере, и так пока не дойдёт до конца книги. Только практика в сочетании с теорией позволяет научиться писать код. К концу прочтения человек будет знать язык программирования на приемлемом уровне.
Что касается базового образования, то при желании научиться программировать способен даже выпускник школы. Высшее образование для этого иметь не обязательно. Однако, если оно есть, процесс будет идти быстрее. Книги по программированию охватывают базовые основы, повествование продвигается от простого к сложному. Это позволяет без труда освоить материал.
Следующий важный этап — выбор специализации и последовательное её освоение. Разные языки программирования позволяют писать код под разные платформы. Так, используя Java, можно создавать серверные и мобильные решения (например для Android). C# позволяет писать практически всё: серверные, мобильные, десктопные и веб-решения. Здесь также будет эффективным самообучение по книге. Однако параллельно с этим нужно задумываться о развитии собственных навыков с точки зрения архитектуры написания кода. Изучать мануалы по паттернам проектирования и пытаться применять знания на практике. Это, пожалуй, самый простой и надёжный алгоритм.
Ещё один вариант самостоятельного обучения программированию — изучение видеокурса. Здесь имеет смысл применять тот же подход, что и при работе с книгой. Важно не просто слушать то, что говорит преподаватель, но и пытаться работать с кодом самостоятельно.
Если посвятить всё своё продуктивное время обучению, то полностью освоить язык программирования (не включая специализацию в разработке ПО) можно за один календарный месяц. Но это при условии, что человек не станет отвлекаться на постороннюю деятельность и будет практиковаться в написании кода, углубляясь в специализацию.
Напоследок отмечу, что у каждого из перечисленных мной вариантов обучения есть свои преимущества. Из книги удобнее переписывать код для дальнейшей работы с ним. Видео наглядно продемонстрирует, как ошибки и изменения в коде влияют на функциональность. Выбирать нужно тот вариант, который удобен обучающемуся.
Итак, как лучше изучать язык программирования?
Каждый эксперт рекомендует свой алгоритм, но мы выписали и объединили общие пункты:





















