Когда я преподавал программирование в ВУЗе, то в начале семестра я приглашал лучших учеников на кафедру и предлагал им следующий вариант изучения курса: «Можете не ходить на лекции. Я поставлю вам зачет автоматом и пять баллов на экзамене, если к концу семестра вы сделаете…»
Как я сам узнал этот секрет
Дальше я рассказывал студентам секрет быстрого изучения программирования. Но как я сам узнал его?
Это было давно, когда я еще работал программистом в космической отрасли. У меня был приятель, который работал переводчиком. Мы иногда пересекались и обсуждали всякие IT-темы. Он был гуманитарий и слабо разбирался в компьютерах. Но он купил компьютер и у него было много вопросов.
Как-то во время очередной встречи он мне неожиданно сказал: «Я тут написал драйвер для джойстика!» Я поразился, написание драйверов — это весьма сложная задача. Как мог человек, который не знал программирования, написать драйвер?
А дело было так. Он купил джойстик, чтобы играть в компьютерные игры. Но в те времена была проблема драйверов. Не каждое устройство можно было запустить на компьютере, если не было соответствующего драйвера.
Мой приятель попал именно в такую ситуацию. Драйвера для его материнской платы не было. Но на дискете с драйверами прилагался текст драйвера на языке Си.
Хотя он не был программистом, но играть очень хотелось. Он взял инструкцию к материнской плате и стал сравнивать коды в инструкции с текстом программы драйвера. Он обнаружил, что отличаются только последовательность команд, а сами команды были похожи.
Дальше он стал разбираться с тем, как можно скомпилировать программу на Си, как она отлаживается. Все это было очень трудно. Но когда первый раз джойстик вдруг среагировал на нажатие кнопки, это была победа!
Шаг за шагом он добавил обработку всех команд и джойстик полностью заработал!
Весь этот процесс у него занял полгода. То есть гуманитарий, который и с компьютером-то разобрался только недавно, за полгода написал сложную программу.
Когда я его спросил:
— Как же ты так во всем самостоятельно разобрался?
Он ответил:
— Играть очень хотелось!
Так я узнал секрет быстрого изучения программирования.
Что я говорил студентам?
Полная фраза звучала так: «Я поставлю пятерку автоматом, если в конце семестра вы принесете мне программу, которую сделаете для себя».
Что за программа, значения не имеет. Главное, чтобы студент сам ею пользовался. Обычно студенты писали базы данных, проигрыватели аудио, простые игры.
И у всех, кто брался, получалось превосходно. Они знали программирование намного лучше тех студентов, кто решал учебные задачи.
В чем же секрет этого способа изучения программирования?
Когда новичок прослушал курс и пытается написать свою программу, то он вдруг понимает, насколько сложное это дело и сколько он еще не знает.
В этот момент начинает казаться, что программирование — это безумно сложное дело и ему с этим никак не справиться.
Совсем другое дело, если новичок сразу начал с программы, которая ему нужно. В этот момент включается мотивация: «Играть очень хочется!» и тогда новичок пишет пусть криво и косо работающую программу, которая хоть как-то шевелится.
Но хитрость в том, что если традиционный студент изучает все подряд, а потом все это забывает, то продвинутый студент изучает ровно то, что нужно для конкретной программы и сразу это пускает в дело. А то, что сделал своими руками — это не забудешь.
Знания про запас
Большая проблема традиционного обучения в том, что знания получаются в надежде их будущего применения. Поэтому студенту трудно различить, где что-то важное, а где то, что никогда не пригодится.
Поэтому обычная стратегия такая: накопить побольше знаний в надежде, что они когда-либо пригодятся.
Продвинутые ученики, напротив, прямо сейчас ищут и изучают то, что нужно для решения задачи. Они ищут ответы в Интернете, задают вопросы на форумах, спрашивают на StackOverflow. То есть они активно накапливают знания, которые сразу применяют и получают пользу.
Но есть и еще один важный момент. Те знания, которые запасены на будущее, могут иметь пробелы, то есть студент думает, что понял какую-либо тему, но на самом деле он ее только «прослушал», а конкретно применить все равно не сможет.
А вот те знания, которые прямо сейчас используются, уже не могут быть с пробелами. Любое непонимание приводит к тому, что надо детально разобраться. Причем в программировании нужно разобраться вплоть до последней запятой, иначе программа не заработает.
Методика обучения пошагово
Итак, как же выглядит самый эффективный путь изучения программирования?
Шаг 1. Выберите программу, которую будет сами использовать.
Не нужно замахиваться на что-то сложное. Смотрите те ситуации, с которыми вы сталкиваетесь. Например, вам не хватает программы для заметок — напишите ее. Или вам хочется заметки автоматически публиковать в своем твиттере — сделайте это.
Главное — не думайте о том, что вы сейчас приступаете к проекту на миллиард долларов. Стартап вас еще ждет, но не сейчас. Программа должна быть самой обычной.
Шаг 2. Поищите аналоги и посмотрите, как они сделаны
Проведите небольшое исследование на тему того, какие программы используются для решения вашей задачи. Потом узнайте на каком языке эти программы написаны, и какие библиотеки были при этом использованы. Можете расспросить опытных программистов на форумах, они подскажут.
Шаг 3. Сразу начните писать программу
Ни завтра, ни через полгода, а вот прямо сегодня. На том уровне знаний, который у вас сейчас есть. Написали текст и запустили на компиляцию. Вы можете возразить: «Да я даже не знаю, что такое компиляция?» Отлично, самое время узнать, что это такое.
Не ждите идеала. Пишите кривой, но работающий код. Запомните: сначала — результат, а потом — оптимизация.
Шаг 4. Заминка
Может получиться так, что некоторые моменты программы заработали сразу, а вот с другими случилась заминка. Тут надо поступать так: параллельно пишите то, то получается и одновременно разбираетесь с тем, что не получается. То есть работу над программой не останавливаете ни на минуту.
Шаг 5. В зачет идет только код
Это одно из главных правил программиста. Вы можете что-либо изучать, искать информацию, задавать вопросы, но главное — это кодирование. Каждый день пишите код.
Шаг 6. Пользуйтесь программой
Каждый день после кодирования начинайте пользоваться своей программой. Записывайте баги и пожелания. Вы будете своим заказчиком. В этом и состоит мотивация.
Шаг 7. Друзья-тестировщики
Если ваши друзья тоже хотят данный функционал, то передавайте им версии программ. Пусть они тоже станут бета-тестерами и генераторами идей.
Твердость и упорство
Конечно же, предлагаемый путь очень сложный. Как только вы начнете писать первую реальную программу на вас обрушится такое количество трудностей, что захочется сдаться и опустить руки.
Но я предупреждал в самом начале, что это путь не для всех, только для самых упорных.
Добрый день!
начинаю путь программиста.
Самый фундамент лучше получить из книги — книга обычно хорошо раскладывает по полочкам, дает нужную теоретическую базу, задает правильную последовательность. Я редко дочитываю техническую литературу до конца, до практики — так как и читаю для базы и теории. А вот всякие среды разработки, фреймворки, новые инструменты мне хорошо заходят по небольшим видеоурокам. Еще по видеоурокам хорошо делать первую практику — понятно что откуда скачивается, откуда берется. Есть андройд-приложение с бесплатными видеокурсами по программированию. Много курсов на русском языке, есть фильтр по языкам программирования. Называется itVideo — https://play.google.com/store/apps/details?id=ru.polina.itvideo А вот уже вопросы, которые в процессе разработки возникают — хорошо закрываются либо документацией либо ответами с сервисов «вопрос-ответ»
Изучаю самостоятельно С++.
Идея изучения языка с разработкой любой программы мне понравилась, но никак не могу понять какую прогу замутить.
И какой у неё должен быть минимальный размер? Ведь если набросаю калькулятор или игру в кости в консоли, то это же не будет великим прорывом?
А дальше консоли дело не идет(…
Лучше всего писать программу, которой сами будете пользоваться. Обычно пишут напоминали, список рецептов, учет прочитанных книг и много другого. Наберите «топ 100 бесплатных программ» и выберите тему. Другой вариант — зайти на сайт фриланса и посмотреть, какие заказы предлагают программистам. Тогда скоро сможете зарабатывать разработкой программ.
Константин, спасибо за ответ! Вы можете подсказать как «вылезти» из консоли? Как визуализировать прогу? Мои 50-летние мозги скрипят и кипят от напруги )
Если вопрос о том, как писать оконные приложения, то нужно использовать GTK:
https://progtips.ru/minimalnaya-programma-gtk
Если вопрос о том, как выключить консоль, то ответ здесь:
https://progtips.ru/instrumenty-programmista/9-prichin-pochemu-codeblocks-ne-rabotaet.html#15