Лучшие способы научить новичка программировать?

Оригинальный вопрос

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

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

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


Как помочь

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

  • Начальные упражнения и идеи проекта
  • Ресурсы для обучения новичков
  • Screencasts/сообщения в блоге/бесплатные электронные книги
  • Печатайте книги, которые хороши для новичков.

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


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


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

Ответ 1

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

1) FizzBuzz. Начните с программ с командной строкой. Вы можете очень быстро написать забавные игры или инструменты, и вы очень быстро изучите все языковые функции, не изучая сначала инструменты GUI. Эти ранние приложения должны быть достаточно простыми, что вам не нужно использовать какие-либо реальные инструменты для отладки, чтобы заставить их работать.

Если ничего другого, как FizzBuzz, это хорошие проекты. Ваши первые несколько приложений не должны иметь дело с БД, файловой системой, конфигурацией и т.д. Это концепции, которые просто путают большинство людей, и когда вы просто изучаете синтаксис и основные функции фреймворка, вам действительно не нужно больше сложностей.

Некоторые проекты:

  • Привет, мир!
  • Возьмите год моего рождения и вычислите мой возраст (только (сейчас - тогда) никаких месячных исправлений). (простая математика, ввод, вывод)
  • Попросите направление (вверх, вниз, влево, вправо), затем сообщите пользователю о своей судьбе (упадите в отверстие, найдите торт и т.д.). (логическая логика)
  • FizzBuzz, но считайте один раз в секунду. (Циклы, таймеры и многое другое)
  • В зависимости от их возраста некоторые действительно похожи на приложение, которое вызывает у пользователей случайное оскорбление с некоторым интервалом. (Циклы, массивы, таймеры и случайные, если вы делаете интервал случайным)

2) Простой проект Как только у них будет хорошее представление о языковых возможностях, вы можете начать проект (простые, веселые игры работают хорошо). Вы должны попытаться завершить первый проект в течение 6-12 часов. Не тратьте время, чтобы архитектовать его раньше. Пусть они проектируют его, даже если он сосет. Если он развалится, расскажите о том, что произошло, и почему он потерпел неудачу, затем выберите другую тему и начните снова.

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

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

Некоторые проекты:

  • Игра в висельник
  • Экспериментирование с робототехникой (Vex и Mindstorms являются опциями)

3) Реальный проект Запустите реальный проект, который может занять некоторое время. Используйте правильное управление исходным кодом и укажите, есть ли расписание. Запустите этот проект как настоящий проект, если ничего другого его опыта не придется иметь дело с инструментами.

Очевидно, вам нужно настроить это для каждого человека. Самое главное, что я нашел, - это сделать даже первые простые приложения применимыми к тому, что интересует человек.

Некоторые проекты:

  • Tetris
  • Текстовый движок, основанный на текстовом файле.
  • Более продвинутые робототехнические работы.

Ответ 2

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

Мне сказали, что это тоже смешно.

Ответ 3

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

Два самых больших препятствия для новых программистов часто:

  • Синтаксические ошибки
  • мотивация (написание чего-то значимого и забавного, а не надуманного)

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

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

Отказ от ответственности: я работал над Алисой.

Ответ 4

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

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

При обучении программированию я должен повторить предложение EHaskins о простых проектах, а затем сложных проектах. Лучший способ учиться - начать с определенного результата и измеримой вехи. Это позволяет сфокусировать уроки, позволяет студенту создавать навыки, а затем основываться на этих навыках и дает студенту что-то похвастаться друзьям. Не стоит недооценивать силу того, чтобы что-то показывать за одну работу.

Теоретически вы можете придерживаться Python, поскольку Python может делать почти все. Это хороший инструмент для обучения объектно-ориентированного программирования и (большинства) алгоритмов. Вы можете запускать Python в интерактивном режиме, например, в командной строке, чтобы понять, как это работает, или запустить сразу все скрипты. Вы можете запускать скрипты, интерпретируемые "на лету", или компилировать их в двоичные файлы. Существуют тысячи модулей для расширения функциональности. Вы можете сделать графический калькулятор, такой как тот, который связан с Windows, или вы можете сделать IRC-клиент или что-то еще.

XKCD описывает власть Python немного лучше: "You're flying! How?" "Python!"

После этого вы можете перейти на С# или Java, хотя они не предлагают многого, что Python еще не имеет. Преимущество заключается в том, что они используют синтаксис C-стиля, который используют многие (смею сказать, большинство?) Языков. Вам не нужно беспокоиться об управлении памятью, но вы можете привыкнуть к тому, чтобы иметь немного больше свободы и меньше владеть переводчиком языка. Python использует пробелы и отступы, что приятно в большинстве случаев, но не всегда. С# и Java позволяют управлять собственными пробелами, оставаясь строго типизированными.

Оттуда стандартом является C или С++. Свобода на этих языках почти экзистенциальна. Теперь вы отвечаете за собственное управление памятью. Нет никакой мусорной коллекции, которая поможет вам. Здесь вы преподаете действительно продвинутые алгоритмы (например, mergesort и quicksort). Здесь вы узнаете, почему "ошибка сегментации" - это проклятие. Здесь вы загружаете исходный код ядра Linux и смотрите в Abyss. Начните с записи кругового буфера и стека для обработки строк. Затем проделайте свой путь.

Ответ 5

Хороший курс python - MIT Нежное введение в программирование с использованием Python. Все это бесплатно в Интернете, и вам не обязательно быть MIT uberstudent, чтобы понять это.

Изменить [Justin Standard]

Этот курс использует эту бесплатную онлайн-книгу: Как думать как компьютерный ученый
Я определенно считаю это весьма полезным.

Ответ 6

Пакет Python VPython - 3D-программирование для обычного смертного (видеоурок).

Пример кода:

from visual import *

floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)
ball = sphere (pos=(0,4,0), radius=1, color=color.red)
ball.velocity = vector(0,-1,0)
dt = 0.01

while 1:
    rate (100)
    ball.pos = ball.pos + ball.velocity*dt
    if ball.y < ball.radius:
        ball.velocity.y = -ball.velocity.y
    else:
        ball.velocity.y = ball.velocity.y - 9.8*dt

прыгающий шарик VPython http://vpython.org/bounce.gif

Ответ 7

Начните с графики черепахи в Python.

Я бы использовал графику черепах, которая поставляется с Python. Это визуально, просто, и вы можете использовать эту среду, чтобы представить множество концепций программирования, таких как итерация и вызовы процедур, прежде чем слишком далеко перейти к синтаксису. Рассмотрим следующий интерактивный сеанс в python:

>>> from turtle import *
>>> setup()
>>> title("turtle test")
>>> clear()
>>>
>>> #DRAW A SQUARE
>>> down()        #pen down
>>> forward(50)   #move forward 50 units
>>> right(90)     #turn right 90 degrees
>>> forward(50)
>>> right(90)
>>> forward(50)
>>> right(90)
>>> forward(50)
>>>
>>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE
>>> clear()
>>> for i in range(4):
        forward(50)
        right(90)
>>>
>>> #INTRODUCE PROCEDURES   
>>> def square(length):
        down()
        for i in range(4):
            forward(length)
            right(90)
>>>
>>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW
>>> for i in range(50):
        up()
        left(90)
        forward(25)
        square(i)
>>>
>>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW
>>> #A SQUARE 'TUNNEL' (I.E. CONCENTRIC SQUARES
>>> #GETTING SMALLER AND SMALLER).
>>>
>>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING
>>> #EACH SUCCESSIVE SQUARE TILTED

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

Ответ 8

Главное, что у человека, о котором идет речь, должна быть проблема, которую они хотят решить. Если у вас нет программы, которую вы хотите написать (и что-то разумное и четко определенное, а не "Я хочу написать следующее Quake!" ), То вы не можете научиться программировать, потому что вам нечего мотивировать вас, Я имею в виду, вы могли бы прочитать книгу и иметь грубое понимание синтаксиса и семантики языка, но пока у вас нет программы, которую вы хотите написать, вы никогда не поймете крапиву.

Если этот импульс существует, то все остальное - лишь незначительные детали.

Ответ 10

http://tryruby.hobix.com/" > Попробуйте Ruby (в вашем браузере)

Ответ 12

Это фантастическая книга, которую учили мои маленькие братья:

http://pine.fm/LearnToProgram/

Конечно, самое главное - начать с реальной, полезной программы какого-то НЕМЕДЛЕННО после окончания книги.

Ответ 13

Если он заинтересован, не являются ли мелкие детали хорошими частями? Используя python, вы уже отключили графический интерфейс, чтобы путаница исчезла. Почему бы не выбрать проект, игру или что-то еще и реализовать ее. Классическая игра для угадывания чисел hi-lo может быть просто реализована из командной строки в 20-30 строках кода (в зависимости от языка) и дает вам переменные, условия, циклы и пользовательский ввод.

Ответ 14

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

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

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

Изменить: [Justin Standard]

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

Ответ 15

Прежде всего, начните, как и все остальные: с помощью Hello World. Это просто, и это дает им основное представление о макете программы. Попытайтесь вспомнить, когда вы были вначале программированием, и насколько сложны некоторые из концепций - начинайте просто.

После Hello World перейдите к созданию некоторых основных переменных, арифметических, затем логических логических и if/else-операторов. Если у вас есть один из ваших старых учебников по программированию, ознакомьтесь с некоторыми из ранних примеров и попросите его пройти через них. Просто не пытайтесь вводить слишком много сразу, или это будет подавляющим и запутанным.

Ответ 16

Что-то, о чем вы должны помнить, когда вы учите своего брата, чтобы он не слишком полагался на вас. Часто, когда я оказываюсь помогать другим, они начинают думать обо мне как о книге ответов на все их вопросы, и вместо того, чтобы экспериментировать, чтобы найти ответ, они просто спрашивают меня. Часто лучшим учителем является эксперимент, и каждый раз, когда у вашего брата возникает вопрос: "Что произойдет, если я добавлю 2 к строке?" вы должны сказать ему попробовать его и убедиться сами. Также я заметил, что, когда я не могу получить понятие кому-то, это помогает увидеть пример кода, где мы можем смотреть на каждый сегмент индивидуально и объяснять его по частям. В качестве побочной заметки у людей, новых для программирования, часто возникают проблемы с идеей объектно-ориентированного программирования, они скажут, что они понимают это, когда вы учите их им, но не получите четкого представления об этом до фактического его осуществления.

Ответ 17

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

Если вы решите пойти с C у друга есть сайт, который имеет вид программ, которые используются из более старых поколений, помнят как базовые типа модулей. Более сложные из них используют ncurses, которые несколько отрицают их использование в качестве учебного пособия, но некоторые из них крошечные мелочи, и вы можете изучать нагрузки, не будучи обученными.

Лично я думаю, что Python и Ruby сделают отличные первые языки.

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

Ответ 18

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

Меня, я предпочитаю начинать с большой картины и сверлить вниз в nitty-gritty. Первое, что я хотел знать, это то, как все это объединяется, а затем все объекты Object-oriented gobbledygook, а затем о классах и примерах и так далее. Мне нравится знать основные понятия и немного теории, прежде чем я изучу синтаксис. У меня было немного преимуществ, потому что я написал несколько игр в BASIC 20 лет назад, но ничего особенного с тех пор.

Возможно, полезно затенять производственный процесс, начав с общей миссии, затем план и/или блок-схему, а затем перейдем к некоторому псевдокоду (опираясь на синтаксис, который вы в конечном счете используете), прежде чем писать код.

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

Ответ 19

Если ваш брат имеет доступ к iTunes, он может скачать видео-лекции по вводному курсу компьютерной науки, предоставленному Ричардом Бакландом в Университете Нового Южного Уэльса. Он привлекательный преподаватель и охватывает основы вычислительной техники и языка C. Если ничего другого, скажите брату, чтобы он играл на фоне в фоновом режиме, и некоторые концепции могли бы погрузиться через осмос.:)

COMP1917 Высшие вычисления - сессия 2008 года http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

Если ссылка не работает, вот путь:

Главная страница → iTunes U → Engineering → COMP1917 Higher Computing - 2008 Session 1

Ответ 20

есть wikibook, что очень хорошо для изучения python.

Я не знаю, как wikibooks для других языков, но я лично узнал python из wikibook, как это было в феврале 2007 года.

ps - если вы не знакомы с wikibooks, это в основном версия книги по созданию книги в википедии. это сложно описать, но если вы посмотрите несколько книг, вы увидите, как это работает.

Ответ 22

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

Некоторые возможные проекты (в определенном порядке):

  • Симулятор перевода монет. Позвольте пользователю ввести желаемое количество испытаний для переворачивания монет. Выполните его и покажите результаты вместе с процентом для головок или хвостов.

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

    Вот пример расширенного конвертера с той же идеей: http://pastebin.org/6541

  • Сделайте программу, которая принимает числовой ввод и отображает класс, на который он переводится. Это закончит тем, что будет оценивать входные данные против операторов if и elif, чтобы найти, где он подходит.

  • Сделайте простую викторину, которая проходит через несколько вариантов или заполняет пустые вопросы. В конце он покажет, как это сделал пользователь. Он может выбрать любые вопросы, которые он хочет.

  • Взять вклад некоторого (предположительно большого) количества пенни и преобразовать его в более крупные наименования. Например, 149 пенни = 1 доллар, 1 квартал, 2 дня и 4 пенни.

  • Создайте простой менеджер списка. Уметь добавлять/удалять списки и добавлять/удалять записи в этих списках. Вот пример менеджера списка: http://pastebin.org/6543

  • Создайте программу, которая будет строить, а затем проверяет, образуют ли введенные числа магический квадрат (с 2D-массивом). Здесь некоторый пример кода, но он должен действительно распечатать квадрат на каждом шаге, чтобы показать, где пользователь в терминах превышения квадрата: http://pastebin.org/6544

Я бы также предложил сделать кое-что с xTurtle или другим графическим модулем, чтобы смешивать вещи и не дать ему становиться скучными. Конечно, это очень практическое программирование, а не сценарии, на которые многие люди действительно будут использовать python, но примеры, которые я дал, в значительной степени непосредственно взяты из того, когда я учился через python, и это сработало отлично для меня. Удачи!

Ответ 23

Просто сделай это весело!

Удивительно Scala может быть самым простым, если вы попробуете Kojo

Ответ 24

Если вашему брату нравятся головоломки, я бы рекомендовал Python Challenge. Я бы не использовал его в качестве формального учебного пособия в учебном пособии 1 на 1, но это то, что он может сделать, когда вы не вместе, чтобы бросить вызов себе и повеселиться.

Ответ 26

Пройдя несколько бесплатных электронных книг, я обнаружил, что лучшей книгой для обучения программе является Head First Programming, опубликованное O'Reily Press. Он использует Python в качестве языка и дает вам программы для работы с самого начала. Они все более интересны, что "Hello World". Это стоит денег, которые я потратил на это, и, поскольку это было немного, вы можете найти более дешевую использованную копию на Ebay или Amazon.

Ответ 27

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

Ответ 28

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

Ответ 29

Меня учили, изучая, как решать проблемы в агностическом языке, используя блок-схемы и PDL (язык программирования программ). Через пару недель я научился преобразовывать PDL, который я написал на язык. Я рад, что так узнал, потому что большую часть своего летнего программирования я проработал, решив проблемы, не привязавшись к языку. Какой язык я использую, всегда был деталью реализации, а не частью дизайна.

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

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

Ответ 30

Я бы рекомендовал также посмотреть некоторые скринкасты - они, как правило, создаются в контексте конкретной технологии, а не языка, хотя, если там отображается код Python, это будет делать:). Дело в том, что они созданы хорошими программистами и смотрят, как хорошая программа программистов - это хорошо. Вы и ваш брат могли бы также программировать сверстников, это может быть еще лучше. Просто не забудьте объяснить, ПОЧЕМУ вы что-то делаете, а не так. Я думаю, что лучший способ научиться программированию - это хорошие примеры и стараться не видеть даже плохих.