Как научить новичка программировать?

Исходный вопрос

Сейчас я учу своего брата программированию. Он абсолютный новичок, но очень умен. (И он действительно хочет учиться). Я заметил, что некоторые из наших сессий увязли в мелочах, и мне не кажется, что я был очень организован. ( Но ответы на этот пост очень помогли. )

Что я могу сделать лучше, чтобы научить его эффективно? Есть ли логический порядок, который я могу использовать для прохождения концепции за концепцией? Есть ли сложности, которых мне следует избегать на потом?

Мы работаем на Python , но совет на любом языке приветствуется.


Как помочь

Если у вас есть хорошие, добавьте в свой ответ следующее:

  • Упражнения для начинающих и идеи проектов
  • Ресурсы для обучения начинающих
  • Скринкасты / сообщения в блогах / бесплатные электронные книги
  • Печатайте книги, подходящие для начинающих

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


Интернет-ресурсы для обучения начинающих:


Рекомендуемые печатные книги для обучения начинающих

Ответов (25)

По моему предвзятому мнению, лучше всего начать с C. Язык небольшой, функции высокого уровня распространены повсеместно, а функции низкого уровня позволяют изучать машину.

Я нашел C Primer Plus, 5-е издание, очень полезным как начинающий программист, почти не имеющий опыта программирования. Он не предполагает никакого предшествующего опыта программирования, интересно читать и подробно рассматривает C (включая последний стандарт C99).

Это может показаться странным, но я начал писать код с автоматизации задач и анализа данных на моей прежней работе. Это было достигнуто путем записи и изучения кода, созданного макросом Excel. Конечно, этот подход предполагает, что вы можете учиться через VB.

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

Один из способов по-настоящему заинтересовать кого-то - предложить им небольшие проекты, которые они могут выполнить за час или около того. Когда я начал изучать питон, я играл в Code Golf . У них есть много небольших задач, которые помогут научить основам программирования. Я бы порекомендовал просто попытаться решить одну из задач в день, а затем поиграть с изученными концепциями. Вы должны сделать обучение программированию увлекательным, иначе интерес пропадет очень быстро.

Как не программист, я нашел книгу «Как программировать» от Pragmatic Programmers очень полезной с элементарной точки зрения. Он доступен и легко читается для новичка. Он не превратит вас из новичка в эксперта, но он подготовит вас к тому, что делать, как только вы выберете язык и возьмете свою первую книгу «Научитесь программировать на (язык здесь)».

Ваш вопрос во многом зависит от возраста и образования вашего брата, но если он ребенок / подросток, я бы порекомендовал сначала заняться программированием графического интерфейса или графическим программированием (с Canvas и т. Д.). Выглядит хорошо, и у вас есть немедленные результаты. Алгоритмы скучны и слишком абстрактны для молодых людей (скажем, до 15 лет).

Когда я начал программировать на ZX Spectrum (мне было около 12 лет), мне нравилось рисовать на экране разные вещи, и это все еще было интересно. Я не узнал о настоящих алгоритмических методах, пока мне не исполнилось 18 лет. Не заблуждайтесь, считая, что такое "простое" программирование - неправильное начало; интерес человека, изучающего это, - самая важная часть этого.

Итак, я бы посмотрел на PyKDE, PyGTK, PyQt или Python + OpenGL (в сети, конечно, есть несколько руководств, я знаю несколько чешских, но это вам не поможет :)).

Конечно, если ваш брат старше и имеет образование, близкое к математике, вы можете сразу перейти к алгоритмам и тому подобному.

Я предлагаю " Компьютерные науки отключены " в качестве дополнительного дидактического материала.

+1 к лекциям Стэнфордского университета. http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111

Они простые и качественные, и я могу поручиться за их способность обучать новичков (я один из них).

Эта ветка очень полезна мне как начинающему (> 100 строк кода) программисту.

Основываясь на том, через что я прошел, как только я закончил с «Hello World» и перешел к переменным и оператору «if / else», я получил слишком много синтаксиса; не зная, что с ними делать.

Так что интересным простым проектом я мог бы снова заинтересовать меня. Здесь довольно много предложений по проектам.

Могу я здесь задать вопросы?

Лучше ли сначала выучить язык сценариев, такой как Autohotkey?

Изменить: [Джастин Стандарт]

Я думаю, что изучение чего-то основанного на макросах, например Autohotkey, поможет только минимально. Попробуйте сначала выучить «настоящий» язык программирования. Самыми легкими для начала (по мнению большинства) являются python и ruby . Я предпочитаю питон, но оба они довольно просты. Также есть полный пост о stackoverflow, который отвечает на вопрос, с какого языка начать.

Я бы порекомендовал сначала преподавать самые основы, которые используются почти на каждом языке, но делать это без языка. Обрисуйте все основные концепции If-Else If-Else, циклы, классы, типы переменных, структуры и т. Д. Все, что является основой большинства языков. Затем переходите к пониманию логических операций, сравнений и сложных операторов И ИЛИ, чтобы понять, каковы результаты для более сложных операторов.

Делая это таким образом, он поймет концепции программирования и ему будет намного легче переходить на языки, оттуда он просто изучает сложные детали языков, их функции и синтаксис.

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

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

Только тогда я мог бы дать им «задания», чтобы попытаться их выполнить.

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

Я настоятельно рекомендую придерживаться языка, в котором есть сборка мусора, например D , Perl , или какого-либо интерпретируемого языка, например javascript. Было бы неплохо держаться подальше от Perl, пока Perl 6 не будет ближе к завершению, потому что он устраняет некоторые трудности чтения и понимания Perl.

Мой личный опыт начался с элементарной работы с Logo Writer (который в какой-то мере превратился в Scratch), учитывая, что я был маленьким ребенком, и компьютеры были не такими крутыми, как сейчас, но в настоящее время это заняло меня там, где я раньше не видел ''. Так было раньше ... Думаю, именно так я увлекся бизнесом ... Могу сказать, что именно эти первые впечатления, основанные на такой простоте и крутизне, сделали товары, которые засели в моей голове на всю жизнь. Вот как следует преподавать основы обучения программированию ... простой процесс, жаждущий магии.

Вернувшись к моему первому CS 101, я начал с представлений о том, что представляет собой алгоритм, построив Tequila Sunrise (пошаговый процесс, который можно повторить в любое время с правильными ингредиентами, что приведет к тому же результату), оттуда. мы переходим к основным математическим функциям, используя Scheme (как говорил Эхаскинс ... начинайте с малого, а затем наращивайте), а затем переходим к понятиям циклов, булевой логики, структур, а затем встраиваем в концепции объектов и некоторые исполнения моделирования. .

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

ИМХО, изучение основ программирования и создание основы, вероятно, лучшее, что вы могли бы научить своего брата, как только цель будет достигнута, вы можете перейти к более общему языку использования, например, python, и научить их более высоким концепциям, таким как архитектура и шаблоны проектирования ( сделайте их естественными в процессе, чтобы он привык к передовым методам с ранних стадий и видел их как часть процесса) ... мы далеки от того, чтобы заново изобретать теплую воду, но мы всегда должны начинать с разжигания огня.

Оттуда небо - предел!

Для меня изучение и эксперименты в самой среде IDE помогли мне изучить Java и Visual Basic, но я усвоил основы программирования на собственном горьком опыте: Perl 5. В то время не было бесплатной среды IDE, поэтому это означало вводить коды в Блокнот. , сохранив его, а затем запустите интерпретатор perl.

Я бы сказал, что IDE облегчают изучение основ программирования. Попробуйте сначала поиграть с управляющими структурами и переменными. Скажите на Java:

int a = 5;

for (int i = 0; i < a; i++) {
     System.out.println("i is now " + i);
}

По сути, простое изучение управляющих структур и переменных позволит новичку уже начать писать забавные вещи.

Лучший способ научиться чему-либо - начать с базового. Вы можете найти любой хороший учебник, чтобы объяснить, что такое программирование, память, алгоритмы.

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

Тогда это просто код, код, код. Кодируйте каждый пример прямо из книги. Затем немного измените его, чтобы выполнить другое действие. Обучение программированию - это активный процесс, а не пассивный. Вы не можете просто прочитать C++ How to Programming by Dietal, а затем ожидать, что будете писать код на C++, не делая этого активно во время чтения.

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

Некоторая дополнительная информация, которую кто-то может прикрепить к более раннему сообщению Джейсона Пратта об Алисе ... в частности, вариант Storytelling Alice .

Несмотря на то, что исследование было нацелено на девочек средней школы, вам может показаться интересным технический документ, написанный Кейтлин Келлехер .

Я использовал со своими детьми CEEBot . Это не питон, но он учит программированию в стиле C / Java в увлекательной игре, посвященной программированию роботов. Он рассчитан на детей 10-15 лет, но действительно хорош.

Я бы порекомендовал Think Python .

Пара других стартовых платформ:

  • Хороший программируемый калькулятор (это то, чему я научился еще в 70-х), и HP25, затем HP41, теперь TI69 и т. Д.
  • Платформы интерактивной фантастики, такие как "Информ 7", позволяют взглянуть на все с другой стороны.
  • Flash / ActionScript

Все они разные и увлекательные, и любой из них может вызвать интерес, необходимый для того, чтобы научить новичка бегать.

LBB

Что бы они ни писали, попросите их выполнить это построчно в отладчике при первом запуске. Пусть они сами увидят, что делает компьютер. Это избавляет от множества загадок, уменьшает запугивание («о, каждая строка действительно такая простая!») И помогает им изучить навыки отладки и понять, почему распространенные ошибки являются обычными (и почему они являются ошибками).

Какой бы язык и среду вы ни выбрали, если студент хочет учиться по профессиональным причинам или заниматься «настоящим» программированием (что бы это ни было), попросите его начать с написания своих начальных программ 1 на бумаге и забирать их для выполнения. Вернитесь с результатами и / или ошибками и попросите их исправить ситуацию на бумаге.

Поначалу это не особенно сложно, чем делать это на экране и нажимать кнопку «Бег», но это значительно упростит задачу, когда они начнут открывать для себя чудесный мир ошибок.

1) вкратце, "Hello, World!" - программы типа, которые все еще имеют некоторую логику и / или вычисления, делают это до нескольких программ, в которых могут быть ошибки.

"Кто боится C++" Хеллер

Возможно, стоит попробовать

Microsoft Small Basic - это бесплатная среда программирования на основе .NET, призванная стать «веселой» учебной средой для начинающих. Этот язык является подмножеством VB.NET и даже содержит объект «Черепаха», знакомый по языку Logo. На сайте есть пошаговое руководство.

Я согласен с superjoe30 выше, но у меня еще недостаточно репутации, чтобы оставлять комментарии.

Я был профессором CS 4 года. Языками были Basic, а затем Pascal, но на самом деле неважно, какой язык.

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

I would start with very simple stuff, read and print, maybe a simple calculation, just to get the student used to putting something in and getting something out. Then IF statements. Then really simple FOR loops, always in terms of something the student could write and have some fun with.

Then I would spend about 3 weeks teaching a very simple sort of machine language for a phony decimal machine called SIMPL, that you could single-step. The reason for doing this so the student could see where the "rubber meets the road", that computers do things step-by-step, and it makes a difference what order things happen in. Without that, students tend to think the computer can sort of read their mind and do everything all at once.

Then back to Basic. A couple weeks on arrays, because that is a big speed bump. Then sequential files, which is another speed bump. What I mean by "speed bump" is the student can be sailing along feeling quite confident, and then you hit them with a concept like arrays, and they are totally lost again, until you ease them through it.

Then, with those skills under their belts, I would have them pick a term project, because that is what makes programming interesting. Without a use for it, it's really boring. I would suggest a variety of projects, such as games, accounting programs, science programs, etc. It's really great to see them get turned on. Often they would ask me for help, and that's great, because you know they're learning.

Пока они работали над своими проектами, мы продолжали охватывать более сложные методы программирования - поиск, сортировку, объединение, создание простой базы данных и т. Д.

Удачи. Преподавание - тяжелая работа, но приносит удовлетворение, когда видишь, как ученики растут.

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

Обычно я начинаю с примера калькулятора. Я говорю: представьте, что у вас есть коробка для каждой переменной, и у вас есть 10 карточек с числами от 0 до 9, напечатанными на них. Скажем, что в коробке можно хранить по одному картону, и аналогичные способы объяснить, как работают элементы программирования.

И акцент на том, как работает каждый оператор ... например, простой оператор '=' всегда сначала вычисляет правую часть в одно значение. и поместите это значение в поле с именем "num_1" (которое является именем переменной)

Это было очень и очень эффективно, поскольку они могут очень быстро представить себе течение.

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

Что-то, где он может узнать, каким должен быть результат, и указать ему на материалы (в Интернете или в печати), относящиеся к проекту. Если он переходит на Python или программирует `` холодно '', проявите терпение, пока он работает над пониманием основ, таких как синтаксис, ошибки, область видимости, и будьте готовы отойти в сторону и позволить ему бежать и делать свои собственные ошибки, когда вы начинаете видеть свет. лампочка горит над его головой.

Я настоятельно рекомендую « Программирование на Python: введение в информатику, 2-е издание » Джона Зелле . Он ориентирован на новичков и занимается семантикой программирования. После прочтения вы сможете гораздо быстрее освоить другие языки благодаря семантическому и синтаксическому подходу Zelle. Проверьте это!