Оригинальный вопрос
В настоящее время я занимаюсь обучением моего брата программированию. Он абсолютный новичок, но очень умный. (И он действительно хочет учиться). Я заметил, что некоторые из наших сессий увязли в мелких деталях, и я не чувствую, что был очень организован. ( Но ответы на этот пост очень помогли. )
Что я могу сделать лучше, чтобы научить его эффективно? Есть ли логический порядок, который я могу использовать для прохождения концепции по концепции? Есть ли сложности, которых я должен избежать до позже?
Мы работаем с Python , но совет на любом языке приветствуется.
Как помочь
Если у вас есть хорошие, пожалуйста, добавьте следующее в свой ответ:
- Упражнения для начинающих и идеи проекта
- Ресурсы для обучения начинающих
- Скринкасты / посты в блогах / бесплатные электронные книги
- Печать книг, которые хороши для начинающих
Пожалуйста, опишите ресурс со ссылкой на него, чтобы я мог посмотреть. Я хочу, чтобы все знали, что я определенно использовал некоторые из этих идей. Ваши материалы будут собраны в этом посте.
Интернет-ресурсы для обучения начинающих:
- Нежное введение в программирование с использованием Python
- Как думать, как ученый
- Алиса: 3d программа для начинающих
- Scratch (система для развития навыков программирования)
- Как разрабатывать программы
- Структура и интерпретация компьютерных программ
- Научиться программировать
- Роберт Рид как быть программистом
- Microsoft XNA
- Нерест следующего поколения хакеров
- COMP1917 Высшие компьютерные лекции Ричарда Бакленда (требуется iTunes)
- Погрузитесь в Python
- Python Wikibook
- Project Euler - примеры задач (в основном математические)
- Pygame - простая библиотека Python для создания игр
- Придумай свои компьютерные игры с Python
- Основы программирования для следующего шага за рамки основ.
- Писк по примеру
- Змея, спорящая для детей (это не только для детей!)
Рекомендуем распечатать книги для обучения начинающих
источник
Ответы:
Мне приходилось работать с несколькими начинающими (никогда не писавшими кода) программистами, и этой осенью я буду проводить внеклассный семинар со школьниками. Это самое близкое, что у меня есть к документации. Это все еще в стадии разработки, но я надеюсь, что это поможет.
1) FizzBuzz. Начните с программ командной строки. Вы можете очень быстро написать несколько забавных игр или инструментов, и вы очень быстро освоите все языковые функции, не изучая сначала инструменты GUI. Эти ранние приложения должны быть достаточно простыми, чтобы вам не понадобилось использовать какие-либо реальные средства отладки, чтобы заставить их работать.
Если ничего другого, как FizzBuzz, это хорошие проекты. Ваши первые несколько приложений не должны иметь дело с БД, файловой системой, конфигурацией и т. Д. Это понятия, которые просто сбивают с толку большинство людей, и когда вы только изучаете синтаксис и базовые функции инфраструктуры, вам действительно не нужно больше усложнять.
Некоторые проекты:
2) Простой проект Как только они хорошо разбираются в языковых функциях, вы можете начать проект (простые, веселые игры работают хорошо.). Вы должны попытаться завершить первый проект в течение 6-12 часов. Не тратьте время на его разработку рано. Пусть они спроектируют это, даже если это отстой. Если он развалится, поговорите о том, что произошло и почему это не удалось, затем выберите другую тему и начните снова.
Здесь вы начинаете знакомиться с возможностями отладки ваших инструментов. Даже если вы можете увидеть проблему, прочитав код, вы должны научить их, как использовать инструменты, а затем показать им, как вы можете это увидеть. Это служит двойной цели: обучить инструментам отладки и научиться идентифицировать ошибки без инструментов.
Однажды или если проект станет функциональным, вы можете использовать его для внедрения инструментов рефакторинга. Хорошо, если вы сможете расширить проект с помощью простых функций, которые вы никогда не планировали. Обычно это означает рефакторинг и значительную отладку, поскольку очень немногие люди пишут даже наполовину приличный код в первый раз.
Некоторые проекты:
3) Реальный проект Начните реальный проект, который может занять некоторое время. Используйте надлежащий контроль источника и составьте план, чтобы составить расписание. Запустите этот проект, как настоящий проект, если не более того, это хороший опыт работы с инструментами.
Очевидно, вам нужно настроить это для каждого человека. Самая важная вещь, которую я нашел, - сделать так, чтобы даже первые простые приложения применялись к тому, что интересует человека.
Некоторые проекты:
источник
Вы можете попробовать использовать Алису . Это 3D-программа, предназначенная для использования в начальных классах программирования.
Два главных препятствия для начинающих программистов часто:
Алиса использует интерфейс перетаскивания для создания программ, избегая возможности синтаксических ошибок. Алиса позволяет вам создавать трехмерные миры и управлять своим кодом (простыми) трехмерными персонажами и анимацией, что обычно гораздо интереснее, чем реализация связанных списков.
Опытные программисты могут смотреть на Алису как на игрушку и смеяться над перетаскиванием строк кода, но исследования показывают, что этот подход работает.
Отказ от ответственности: я работал на Алису.
источник
Я рекомендую Logo (он же черепаха), чтобы разобраться с основными понятиями. Он обеспечивает хорошую песочницу с немедленной графической обратной связью, и вы можете демонстрировать циклы, переменные, функции, условные выражения и т. Д. Эта страница предоставляет отличное руководство.
После логотипа перейдите на Python или Ruby. Я рекомендую Python, поскольку он основан на ABC, который был изобретен для обучения программированию.
При обучении программированию я должен поддержать предложение Э. Хаскинса о простых проектах, а затем о сложных проектах. Лучший способ учиться - начать с определенного результата и измеримой вехи. Это помогает сфокусировать уроки, позволяет ученику развить навыки, а затем развить их, и дает ученику что-то, чтобы похвастаться перед друзьями. Не стоит недооценивать силу того, что есть что показать для своей работы.
Теоретически вы можете придерживаться Python, так как Python может делать практически все. Это хороший инструмент для обучения объектно-ориентированному программированию и (большинству) алгоритмов. Вы можете запускать Python в интерактивном режиме, например, в командной строке, чтобы понять, как он работает, или запускать целые сценарии одновременно. Вы можете запускать интерпретируемые скрипты на лету или компилировать их в двоичные файлы. Существуют тысячи модулей для расширения функциональности. Вы можете сделать графический калькулятор, такой как в комплекте с Windows, или вы можете сделать IRC-клиент, или что-нибудь еще.
XKCD немного лучше описывает силу Python:
После этого вы можете перейти на C # или Java, хотя они не предлагают многого, чего у Python еще нет. Преимущество этого заключается в том, что они используют синтаксис в стиле C, который используют многие (я бы сказал, больше всего?) Языки. Вам не нужно беспокоиться об управлении памятью, но вы можете привыкнуть к тому, что у переводчика языка будет немного больше свободы и меньше усилий. Python применяет пробелы и отступы, что приятно в большинстве случаев, но не всегда. C # и Java позволяют вам управлять собственным пробелом, оставаясь строго типизированным.
Оттуда стандартом является C или C ++. Свобода в этих языках почти экзистенциальна. Теперь вы отвечаете за собственное управление памятью. Там нет сбора мусора, чтобы помочь вам. Здесь вы обучаете действительно продвинутым алгоритмам (таким как сортировка слиянием и быстрая сортировка). Здесь вы узнаете, почему «ошибка сегментации» является ругательством. Здесь вы скачиваете исходный код ядра Linux и смотрите в Бездну. Начните с написания кольцевого буфера и стека для работы со строками. Тогда поднимайся.
источник
Хорошим курсом Python является MIT's A Gentle Введение в программирование с использованием Python . Это все бесплатно онлайн, и вам не нужно быть студентом MIT, чтобы понять это.
источник
Пакет Python VPython - 3D-программирование для обычных смертных ( видеоурок ).
Пример кода:
VPython прыгающий мяч http://vpython.org/bounce.gif
источник
Начните с графики черепахи в Python.
Я бы использовал графику черепахи, которая входит в стандартную комплектацию Python. Это наглядно, просто, и вы можете использовать эту среду для представления многих концепций программирования, таких как итерации и вызовы процедур, прежде чем углубляться в синтаксис. Рассмотрим следующий интерактивный сеанс в Python:
Пытаясь выполнить два последних задания, у них будет много неудачных попыток, но неудачи будут визуально интересными, и они быстро научатся, пытаясь понять, почему это не нарисовало то, что они ожидали.
источник
Главное, чтобы у данного человека была какая-то проблема, которую он хочет решить. Если у вас нет программы, которую вы хотите написать (и что-то разумное и четкое, а не «Я хочу написать следующий Quake!»), То вы не сможете научиться программировать, потому что вам нечем мотивировать , Я имею в виду, что вы могли бы читать книгу и иметь грубое понимание синтаксиса и семантики языка, но пока у вас нет программы, которую вы хотите написать, вы никогда не схватите крапиву.
Если этот импульс существует, то все остальное - лишь незначительные детали.
источник
Я не знаю, упоминал ли кто-нибудь об этом здесь, но вы можете попробовать Zed Shaw 's Learn Python на нелегком пути
Надеюсь это поможет
источник
http://tryruby.hobix.com/"> Попробуйте Ruby (в вашем браузере)
источник
Как разрабатывать программы
Структура и интерпретация компьютерных программ . Видео лекции на http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/
источник
Это фантастическая книга, которую мои младшие братья изучали:
http://pine.fm/LearnToProgram/
Конечно, самое главное - начать по-настоящему полезную программу НЕМЕДЛЕННО после окончания книги.
источник
Если он заинтересован, разве мелкие детали не являются хорошими частями? Используя python, вы уже отключили GUI, чтобы избежать путаницы. Почему бы не выбрать проект, игру или что-то, и реализовать это. Классическая игра с угадыванием чисел hi-lo может быть просто реализована из командной строки в 20-30 строках кода (в зависимости от языка, конечно) и дает вам переменные, условия, циклы и ввод пользователя.
источник
Я бы просто позволил ему написать тонны кода. Пусть он вбивает все, что вы, ребята, делаете, и просто готов ответить на вопросы.
Хотите верьте, хотите нет, но после нескольких месяцев написания тонны дрянного кода он начнет понимать и начинает писать лучшие программы. На этом этапе вы можете увязнуть в деталях (память и т. Д.), А также поговорить об общих принципах проектирования.
Я слышал, что то, что отличает великих художников от посредственных, состоит в том, что каждый раз, когда они практикуют, они что-то улучшают, независимо от того, насколько они малы. Позвольте вашему брату практиковаться, и он будет улучшаться каждый раз, когда садится за клавиатуру.
источник
Прежде всего, начните, как и все остальные: с программы Hello World . Это просто, и это дает им общее представление о макете программы. Попытайтесь вспомнить, когда вы впервые программировали, и насколько сложными были некоторые концепции - начните с простого.
После Hello World перейдите к созданию некоторых базовых переменных, арифметики, затем к логической логике и операторам if / else. Если у вас есть один из ваших старых учебников по программированию, посмотрите некоторые из ранних примеров и попросите его просмотреть их. Только не пытайтесь вводить слишком много всего сразу, иначе это будет ошеломляющим и запутанным.
источник
То, о чем вы должны помнить при обучении своего брата программированию, - это чтобы он не слишком сильно на вас полагался. Часто, когда я помогаю другим, они начинают воспринимать меня как книгу ответов на все свои вопросы, и вместо того, чтобы экспериментировать, чтобы найти ответ, они просто спрашивают меня. Часто лучшим учителем являются эксперименты, и каждый раз у вашего брата возникает вопрос: «Что произойдет, если я добавлю 2 к строке?» Вы должны сказать ему, чтобы попробовать это и посмотреть на себя. Также я заметил, что когда я не могу донести концепцию до кого-то, это помогает увидеть некоторый пример кода, где мы можем посмотреть на каждый сегмент по отдельности и объяснить его по частям. Как примечание: люди, плохо знакомые с программированием, часто сталкиваются с проблемой объектно-ориентированного программирования
источник
Я преподавал программирование, и у твоего брата есть одно главное преимущество перед большинством моих учеников, которым он хочет учиться :)
Если вы решите пойти с C, у друга есть сайт, на котором есть программы, используемые старшими поколениями, которые запоминаются как основные вводы. Более сложные из них используют ncurses, которые как бы отрицают их использование в качестве учебного пособия, но некоторые из них являются крошечными мелочами, и вы можете научиться многим без обучения.
Лично я думаю, что Python и Ruby будут отличными первыми языками.
РЕДАКТИРОВАТЬ: список заданий для начинающих программистов, появившихся в одночасье, может быть именно тем, что вы ищете.
источник
Это действительно зависит от стиля обучения вашего брата. Многие люди учатся быстрее, пачкая руки и просто углубляясь в это, кристаллизуя концепции и общую картину по мере того, как они прогрессируют и наращивают свои знания.
Я предпочитаю начинать с общей картины и углубляться в мельчайшие подробности. Первое, что я хотел знать, было то, как все это объединяется, затем все эти объектно-ориентированные трюки, потом о классах, экземплярах и так далее. Мне нравится знать основные понятия и немного теории, прежде чем я изучу синтаксис. У меня было небольшое преимущество, потому что я написал несколько игр на бейсике 20 лет назад, но с тех пор ничего особенного.
Возможно, полезно замаскировать производственный процесс, начав с общей формулировки миссии, затем плана и / или блок-схемы, а затем углубившись в некоторый псевдокод (опираясь на синтаксис, который вы в конечном итоге будете использовать), прежде чем писать код.
Золотое правило здесь - выяснить стиль склонности вашего ученика.
источник
Если у вашего брата есть доступ к iTunes, он может скачать видео-лекции вводного курса по информатике, прочитанного Ричардом Баклендом в Университете Нового Южного Уэльса. Он является привлекательным инструктором и охватывает основы вычислительной техники и языка Си. Если ничего другого, скажите своему брату сыграть видео на заднем плане, и некоторые концепции могут проникнуть через осмос. :)
COMP1917 Higher Computing - Session 1, 2008 г. http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444
Если ссылка не работает, вот путь:
Главная -> iTunes U -> Разработка -> COMP1917 Higher Computing - 2008 Session 1
источник
есть вики-книга, которая очень хороша для изучения питона .
Я не знаю, как вики-книги для других языков, но я лично выучил Python из вики-книги, как это было в феврале 2007 года.
ps - если вы не знакомы с вики-книгами , то это в основном версия авторской книги в википедии. это сложно описать, но если вы посмотрите несколько книг, вы увидите, как это работает.
источник
Программирование на Python для начинающего
Программирование на Python для абсолютного новичка: http://safari.oreilly.com/images/1592000738/1592000738_xs.jpg
источник
Я думаю, что Python - отличная идея. Я бы дал ему несколько основных заданий, которые он мог бы выполнить сам, и сказал бы, что любые тупики, которые он ударит, могут быть устранены путём посещения Google. Для меня, по крайней мере, решение проблемы самостоятельно заставляло ее держаться лучше, чем кто-то, кто говорил мне решение.
Некоторые возможные проекты (без определенного порядка):
Монета флип-симулятор. Позвольте пользователю ввести желаемое количество испытаний для подбрасывания монеты. Выполните его и отобразите результаты вместе с процентом для головы или хвоста.
Сделайте преобразователь температуры с меню, которое принимает пользовательский ввод, чтобы выбрать, какой тип преобразования пользователь хочет сделать. После выбора преобразования и его выполнения он должен вернуться в главное меню.
Вот пример расширенного конвертера с той же идеей: http://pastebin.org/6541
Создайте программу, которая принимает числовые данные и отображает буквенную оценку, в которую она будет переведена. В конечном итоге он оценивает входные данные по операторам if и elif, чтобы найти, где они подходят.
Сделайте простой тест, который проходит через несколько вариантов ответа или заполните пустые вопросы. В конце он покажет, как сделал пользователь. Он может выбрать любые вопросы, которые он хочет.
Возьмите ввод некоторого (предположительно большого) количества копеек и конвертируйте его в более крупные номиналы. Например, 149 копеек = 1 доллар, 1 квартал, 2 цента и 4 копейки.
Создайте простой менеджер списков. Иметь возможность добавлять / удалять списки и добавлять / удалять записи в этих списках. Вот пример менеджера новогодних списков: http://pastebin.org/6543
Создайте программу, которая будет создавать и затем проверять, образуют ли введенные числа магический квадрат (с двумерным массивом). Вот некоторый пример кода, но он должен действительно распечатывать квадрат на каждом шаге, чтобы показать, где находится пользователь с точки зрения создания квадрата: http://pastebin.org/6544
Я также предложил бы сделать кое-что с xTurtle или другим графическим модулем, чтобы все перемешать и не дать ему скучать. Конечно, это очень практическое программирование, а не сценарии, для которых многие люди действительно будут использовать python, но примеры, которые я привел, взяты непосредственно из того, когда я учился через python, и это отлично сработало для меня. Удачи!
источник
Просто сделайте это весело!
Удивительно, что Scala может быть самым простым, если вы попробуете Kojo
источник
Если вашему брату нравятся головоломки, я бы порекомендовал Python Challenge . Я бы не использовал его в качестве формального учебного пособия в уроке 1 на 1, но он может сделать это, когда вы не вместе, чтобы бросить вызов себе и повеселиться.
источник
Python Challenge
источник
Пройдя несколько бесплатных электронных книг, я обнаружил, что лучшей книгой для обучения программированию была книга Head Head Programming, изданная O'Reily Press. Он использует Python в качестве языка и дает вам программы для работы с самого начала. Они все интереснее, чем «Hello World». Это хорошо стоит денег, которые я потратил на это, и, так как он вышел немного, возможно, вы сможете найти более дешевую использованную копию на Ebay или Amazon.
источник
Если вы хотите обучить основам программирования, не привязываясь к конкретному языку, в MIT создано приложение Scratch . Он предназначен, чтобы помочь людям развить навыки программирования. По мере того, как пользователи создают проекты Scratch, они учатся создавать условия, циклы и т. Д. Существует также сообщество чистых проектов, определяющих, какие проекты можно загружать, - таким образом, вы можете исследовать программы других людей и видеть, как они создавались.
источник
Я думаю, что когда у него есть основы (переменные, циклы и т. Д.), Вы должны попытаться помочь ему найти что-то конкретное, что его интересует, и помочь ему изучить все необходимое, чтобы это произошло. Я знаю, что я гораздо более склонен и мотивирован сделать что-то, если это мне интересно. Кроме того, не забудьте позволить ему бороться, хотя некоторые из более сложных проблем, нет ничего более удовлетворяющего, чем момент, когда вы решите это самостоятельно.
источник
Меня учили, узнавая, как решать проблемы не зависящим от языка способом с использованием блок-схем и PDL (Program Design Language). Через пару недель я научился конвертировать написанные на языке PDL языки. Я рад, что научился так, потому что большую часть лет проводил за программированием, решая проблемы, не привязываясь к языку. Какой язык я использую, всегда был деталью реализации, а не частью дизайна.
Необходимость решить проблему, разбив ее на основные этапы, является ключевым навыком. Я думаю, что это одна из вещей, которая отделяет тех, кто может программировать, от тех, которые не могут.
Что касается того, как вы справляетесь с порядком понятий языка, я считаю, что самый простой способ - это решить, что нужно иметь в виду проект, и заняться понятиями по мере необходимости. Это позволяет вам применять их по мере необходимости к тому, что вас интересует. При изучении языка хорошо иметь в виду несколько простых проектов и несколько с прогрессивной сложностью. Выбор тех поможет вам наметить концепции, которые необходимы и их порядок.
источник
Я бы порекомендовал также посмотреть некоторые скринкасты - они обычно создаются в контексте конкретной технологии, а не языка, хотя, если отображается код Python, это подойдет :). Суть в том, что они созданы хорошими программистами и смотрят, как хорошие программисты программируют. Вы и ваш брат могли бы также заняться программированием на равных, это может быть даже лучшей идеей. Только не забудьте объяснить, ПОЧЕМУ вы делаете что-то так, а не так. Я думаю, что лучший способ научиться программировать на хороших примерах и стараться даже не видеть плохих.
источник
Роберт Рид написал полезное руководство « Как стать программистом» , которое охватывает широкий круг вопросов программирования, которые новичок сочтет полезными.
источник