Сначала пару слов о себе
С программированием связан давно, хотя бОльшей частью занимался сотовой связью. В разные годы и коммутацией, и качеством работы базовой подсистемы.
Всё время делал какие-то программы, облегчающие жизнь мне и моим коллегам. В первую очередь на C++Builder (замечу, что пользовался лицензионной версией). Некоторые из программ, типа программного комплекса по анализу качества работы базовой подсистемы 2G и 3G, используется до сих пор (PHP+JS, «фишка» там больше не в программировании, а в использовании множества алгоритмов для поиска проблемных элементов), хотя на момент написания этой статьи я уже 2 года как не работаю в сотовой связи.
Одновременно с этим всем я всегда кого-то чему-то учил. В первую очередь сотовой связи. У меня даже есть несколько «авторских» курсов по обучению этим самым основам сотовой связи. Но сейчас речь не о них.
Поэтому, я думаю, совершенно не удивительно, что в какой-то момент я начал обучать программированию. Тому, чем занимаюсь сейчас: веб-программирование на основе PHP, Javascript, HTML, CSS. Обучение только индивидуальное. И вот этим своим опытом, своими наблюдениями я и хочу поделиться. Это будет полезно, я думаю, как изучающим программирование, так и тем, кто берет на себя смелость учить других.
Для начала отвечу на вопрос «почему берет на себя смелость». Потому, что учить другого тоже надо уметь. У меня, говорят, это получается неплохо (как говорит моя жена в подобных ситуациях, “сам себя не похвалИшь – как оплеванный сидиИшь»). И да, я могу что-то не знать. Но я учу так, что человек сам в итоге сможет найти нужную ему инфу. Моя задача – дать понимание происходящих процессов, чтобы у ученика была в голове целостная картина происходящего. А уж какие-то точные названия функций и набор их параметров можно всегда уточнить в мануале.
Как проходит обучение
Краткий ответ простой и односложный: «дистанционно». Skype + TeamViewer. На компьютере ученика должны быть установлены все необходимые инструменты: Apache, PHP, mySQL или PostgreSQL, редактор кода. В назначенное время связываемся в скайпе, я подключаюсь через TeamViewer и «процесс пошел». В итоге все коды остаются у ученика. Он может их анализировать, дорабатывать, выполнять какие-то домашние задания. Да, именно домашние задания. Если ученик действительно хочет изучать программирование, он должен много работать самостоятельно, а не только во время уроков. Хотя бы потому, что для серьёзного изучения программирования надо буквально «погрузиться» в него, как в сон. Очень хорошо об этом написано в статье «Не будите программиста!». Рекомендую прочитать, если кто еще не читал.
Вообще говоря, у меня нет однозначной и жесткой«программы обучения». Я учу каждого тому, что надо ему и на том уровне, который ему требуется в настоящее время.
Еще я очень настоятельно рекомендую ученикам читать мануалы по изучаемому языку. Читать книги. Читать статьи. Общаться на форумах.
Кстати, насчет форумов. Это тоже очень полезно для обучения! Но не просто читать, хотя и это тоже полезно. Пробуйте найти ответ на заданный кем-нибудь вопрос. Вполне вероятно, что ответ простой. А кто больше всего пользы получит? Правильный ответ: тот, кто не знал ответ, но нашел его и первым ответил. Почему так, говорите? Да это очень просто, мне кажется. Если человек знал ответ, то он для себя ничего нового не узнает. Если этот ответ получен автором темы так, что он не задумывался, то он в следующий раз опять не сможет решит такую же задачу. А вот тот, кто «не знал, но нашел ответ», реально продвинулся вперед. И вот так, по шажку, можно далеко уйти.
Ну и, естественно, просто вникать в суть форумских дискуссий, иногда переходящих в «холиварные войны». На «правильных» форумах в ходе таких дискуссий обычно звучит много доводов «за» и «против» чего-нибудь, обсуждаемого в определенной теме. Изучение мнений обеих сторон поможет лучше понять суть обсуждаемой проблемы.
Вот чего я не советую, так это видео-курсы. Для программиста они зло! Потому что при изучении программирования часто требуется приостановиться, задуматься, вникнуть. А видео подстегивает, подгоняет «вперед, вперед!». В итоге, вроде бы что-то видел-слышал, но мало что запомнил. Да, можно еще раз посмотреть. И еще раз. И еще раз. Но при этом не всегда попадешь в нужное место. Если же будешь пересматривать через какое-то время, то еще сложнее найти нужных фрагмент, будешь опять смотреть много лишнего.
А в печатном тексте, будь то бумажный или электронный вариант, проще найти интересующую часть. На бумаге можно сделать пометки, а в электронном виде можно очень быстро поискать по каким-то ключевым словам.
Видео хороши, например, для изучения работы в графическом редакторе. Потому что там, действительно, лучше увидеть, чем пытаться понять по написанному объяснению. Посмотрел — повторил — уже знаешь.
Какие бывают ученики
Попробую сделать небольшую классификацию учеников-программистов, благо дело, с разными общался. Естественно, я не претендую на абсолютную правоту в этой классификации.
1. Боязливый
Характеризуется тем, что боится что-либо изучать сам. Ждет, когда ему всё разжуют.
Достаточно редкий тип. Я вообще был удивлен, если не сказать, что был в шоке, когда с таким столкнулся. Был у меня один такой ученик. На самом деле боялся самостоятельно изучать. Я ему что-нибудь объясню, потом даю «домашнее задание»: прочитай то-то и то-то. Нет, говорит, мне лучше чтобы объяснили. И ладно бы запоминал всё хорошо. Так и с этим тоже были проблемы – на каждом занятии повторяли часть того, что изучали ранее. Причем так, будто вообще ни слова ранее не говорилось.
Я с ним помучился какое-то время и сказал «хватит с меня!». С одной стороны, с точки зарабатывания денег, это идеальный вариант, вечный ученик. Который никогда не будет работать самостоятельно и его можно учить вечно. А он еще даже умудрился взять какой-то заказ! И решил, что я буду для него писать этот заказ, объясняя по ходу дела, что я там делаю. А он будет смотреть и, типа того, что учиться. Да, именно тут я сказал «с меня хватит».
Не знаю, может быть он и стал программистом типа «копипастер», не общаюсь с ним. А на большее он не способен. О чем я ему честно сказал. И ведь не глупый человек, нет! Но программирование не его стезя.
2. Не-программист
Это совершенно нормальный человек, который что-то умеет делать хорошо. Но вот программирование у него, как говорится, «не идёт». Человек может честно пыхтеть-сопеть, добросовестно изучать всякие доки, делать всё, что ему говорят, включая домашние задания. Но процесс изучения идет очень медленно.
С такими учениками заниматься очень тяжело, да и им самим нелегко.
3. Прошаренный
Вот с такими общаться лучше всего, хотя одновременно и сложнее всего. Это действительно Программисты, с большой буквы. Люди, которые сами изучают всякие мануалы, вникают во всё. И им требуется помощь преподавателя только на начальном этапе, для разгона, для понимания основ. А детали они прочитают в доках. Сами, без подсказок. И быстро поймут многое.
Почему с ними лучше всего общаться, хотя и сложнее? Потому что они не дают закостенеть
Минусом работы с такими учениками является то, что они обычно недолго занимаются. Потому что дальше они сами уже развиваются.
4. Просто программист
Этот тип ученика тоже сам работает в процессе обучения, как и «прошаренный». Чаще всего уже работает программистом. Обращается за обучением по отдельным вопросам, а не «в целом». В отличие от «прошаренного» может не так быстро схватывать суть, но когда понял (а понимает он быстро), то начинает активно использовать новые знания в работе.
Между 3-м и 4-м типами учеников, на самом деле, сложно провести однозначную грань. Она скорее на уровне какого-то внутреннего ощущения, чем по объективным критериям. Один из немногих критериев описан чуть ниже.
5. Бизнесмен
Такие люди, с одной стороны, неплохо понимают программирование. Но, с другой стороны, начавши заниматься программированием, быстро понимают, что лучше они будут организовывать процессы, чем сами писать коды. Поэтому через некоторое время такие люди перестают заниматься.
И это правильно, наверное. Каждый должен заниматься своим делом, которое у него получается лучше и к которому у него, как говорится, «лежит душа».
Его бизнес связан с интернетом, естественно, иначе ему программирование было бы не важно.
Для меня обучение — это коммерческое мероприятие, поэтому финансовый результат для меня немаловажен. Хотя и сам процесс должен быть интересен, это совершенно однозначно.
Чем для меня лично интересны 4-й и 5-й типы, так это тем, что от них иногда, совершенно неожиданно, поступают заказы.
Для 4-го типа это чаще всего какой-то небольшой скрипт, за который человек готов заплатить, чтобы не тратить много времени на изучение. Он потом эти потраченные деньги вернёт тем, что быстрее сделает заказ. Тем более, что я не просто «отдаю скрипт», а даю консультации по его использованию и переиспользованию. Как сразу, так и по прошествии какого-то разумного времени после исполнения заказа.
5-й тип, бизнесмен, также может делать заказы. Но он их просто использует, а не встраивает в свои скрипты. По причине отсутствия последних.
Рекомендации для учеников, которые хотят стать программистами
Подумайте, а надо ли это вам! Нет, я вполне серьёзно. В мире много других профессий, которые не хуже программирования. Как утверждают умные люди, если рассмотреть склонность людей к какому-либо делу, то порядка 5% людей очень склонны (тип «прошаренные» из моего списка), порядка 5% вообще никак (именно к этому делу, «не-программисты» в моей классификации), оставшиеся 90% склонны, но в разной степени. Кстати. Себя я отношу, скорее, к середине этих 90%.
Если вдруг вы, ученики-программисты, окажетесь в этих 5%, которые «не склонны», то не тратьте своё время зря. Я уверен, что вы умеете еще что-нибудь, что у вас получается намного лучше.
Ну хорошо. Вы все-таки уверены, что попадаете в те самые 90% и даже ближе к 5%, которые «программисты от бога»? Хорошо, тогда думаем дальше.
Что же нужно для того, чтобы стать программистом?
* Понимание, зачем это нужно
С этого надо начать. Зачем вы хотите стать программистом? Считаете, что программисты «гребут деньги лопатой»? А может быть, уже попробовали и понравилось? Хотите работать по свободному графику? У друга хорошо получается, а вы «не хуже»? Задумайтесь, какова ваша конечная цель и что нужно для её достижения.
* Способности
О них я уже говорил, повторюсь. Надо иметь определенную склонность к программированию. Без нее ничего не получится. Это не хорошо и не плохо, это просто факт, с которым надо считаться.
* Умение учиться. Желание и настойчивость в обучении. Целеустремленность
Без них – никуда. Впрочем, как и в любом деле, не только в программировании. Как говорится, «будь хоть семи пядей во лбу», но если ничего не делать, то ничему и не научишься. Также надо быть готовым не только делать, но и переделывать. Потому что хорошо известно такое явление, что программист когда смотрит на свой код, написанный ранее, то обычно видит, как его можно улучшить. И в ряде случаев такие улучшения имеют смысл. Ну, например, сделал «что-то». А потом изучил некую библиотеку, о которой не знал ранее. Которая дает дополнительные возможности. Почесал затылок, подумал, переписал.
Сюда же можно отнести и то, что много информации можно почерпнуть из разных книг и мануалов. Надо только не просто читать, а пробовать применять это на практике. Хотя бы в виде небольших тестовых скриптиков. Читаешь книгу и пробуешь одно, другое, третье… Зато потом, при написании реальных скриптов, у тебя в руках оказывается множество возможностей. Которыми можешь жонглировать, как хочешь – при условии, что хорошо представляешь, что делаешь.
* Компьютер
Это понятно, что он нужен. Какой лучше? Лично мне удобнее работать за ноутбуком. Привык за много лет. Если куда-нибудь еду, в деревню ли, в офис, домой или еще куда – всё с собой беру «в одном флаконе», т.е. в ноутбуке. Ноут у меня HP, с монитором 17''. Даже с таким иногда хочется экран побольше.
Возможно, вам стационарный комп больше нравится. Хотя бы потому, что у ноута монитор обычно не такой и большой. В любом случае, оперативная память, процессор, диски – их много не бывает, поэтому чем больше, тем лучше.
* Программы
Лучше или заведомо бесплатные, или купить лицензионные.
А какие именно программы? Всякие серверы, типа Апача или IIS, компиляторы и интерпретаторы – это само собой. Про них не буду в деталях говорить.
Но вот о чем надо обязательно сказать – никогда не экономьте на инструментах! У программиста инструментом является не только компьютер, но и тот редактор, в котором он «кодит». Тут нельзя экономить и пользоваться Блокнотом или другим простеньким текстовым редактором. Полноценная IDE – это то, что просто необходимо. Чтобы и подсветка кода была, и проверка синтаксиса, и поиск места определения переменной или функции, и подсказки по параметрам функций, и многое-многое другое. Да, если у вас в проекте всего 3 файла, то это ничего не нужно. Но если проект серьёзный, в котором десятки-сотни файлов, то IDE позволит спокойно работать, в то время как любители Блокнота будут много времени тратить впустую.
Я специально не называю какие-то определенные IDE потому что их много разных, одному нравится одно, другому другое. У каждой есть свои «фишки». И все они, что существенно, платные. Повторю еще раз: не экономьте на инструментах. Лучше потратить деньги на хороший инструмент, чем потом терять время и деньги при работе с плохим инструментом.
На этом, я думаю, можно закончить рассуждения. Дальше пойдут только те, кто хочет и может учиться. А те, кто передумал – тоже молодцы. Надо уметь вовремя остановиться и потратить свои силы на то, что получается хорошо.
Автор: sergeiss