И делать другие вещи, связанные с компьютерами, тоже хорошо в 21 веке.

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

Используйте несколько языков. Все они.

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

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

Сосредоточьтесь на задачах, а не на синтаксисе.

По какой-то причине, которую я действительно не могу понять, большая часть программирования проходила по справочному руководству по языку программирования, отбивая команды и синтаксис до тех пор, пока они не вытатуировались в душе учащегося. Позвольте мне сказать вам кое-что: синтаксис не имеет значения. Если вы не поймете с первого раза, в информативных сообщениях об ошибках будет указано, что не так, а если вы все еще не поняли, вам поможет весь Интернет. Сосредоточьтесь на задачах, начиная от самых простых, таких как определение результата простой операции, до самых сложных, реализуйте этот очень сложный алгоритм с хорошей сложностью big-O.

Начни со знакомого.

Зачем начинать, как это делают многие курсы, с компилируемых языков, таких как C ++, или функциональных языков, таких как Haskell? Программирование - это как лайфхак, так и карьера, а инструменты для программирования уже есть у нас в кармане и на рабочем столе. Программировать можно любую электронную таблицу или офисный пакет, но также можно и браузер со встроенной средой разработки. Также есть командная строка. Эти языки программирования могут далеко продвинуть вас, но с их помощью можно изучать самые простые вещи: переменные, выражения, циклы. Почему бы не начать с этого, а затем перейти на другие языки?

Начните с выражений и однострочников

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

Момент обучения отладке - это когда в программе больше одной строки.

Большинство людей задыхаются, когда пишут программу из 20 строк, а она не работает. Они не могут понять, где что-то пошло не так, когда ответ находится прямо там, перед ними, если только они могут показать значения переменных и где программа фактически находится на каждом этапе пути. Представляем IDE, и в духе полиглотов, множество из них, ни одной, в том числе отличные онлайн-среды, такие как c9.io. важно научиться плавно писать правильные программы.

Это также подходящее время для комментариев и тестов.

Фактически, тестирование следует отложить, когда вы обучаете функциям, но все же дух разработки, основанной на тестировании, следует прививать с самого начала. Также дух шоу и рассказывают, что вы делаете с самого первого момента. Покажите, как начинать каждый блок, с небольшого объяснения того, что сделано и чего следует ожидать. Хорошая документация также начинается с последовательных практик при написании кода: осмысленных и последовательных имен переменных, отступов кода и размещения разделителей блоков - все это должно быть встроено с самого начала. Это заставит каждого, кто учится таким образом, распознавать или понимать код независимо от языка, на котором он написан. Если только это не Erlang. Erlang - это круто.

Используйте окружающую среду

Сегодня очень немногие приложения будут использовать стандартный ввод и вывод. Не тратьте зря время людей, заставляя их вводить значения переменных, вводя их каждый раз, когда они пытаются запустить программу для ее отладки. Миллионы часов миллионов студентов CS были потеряны, вводя значения трех или более переменных каждый раз, когда они запускали программу для ее тестирования. Используйте окружающую среду! Любая операционная система или IDE позволяет вам устанавливать переменные среды, которые можно повторно использовать каждый раз при запуске программы, избегая их повторного ввода. Кроме того, переменные среды используются в современной облачной разработке, так что вы получаете это бесплатно. Cin появляется на GitHub почти десять миллионов раз. Действительно. Почему? Покажите, как читать файл с самого начала. Еще лучше, покажите, как читать файл JSON и интерпретировать значения. Это сэкономит им много времени и вас самих, если вам придется ставить им оценки.

Включите батареи

Установщики модулей, make-файлы и т.п., линтеры, генераторы документации ... Как вы можете научиться писать программу на C, не зная, как создать Makefile? make clean должна быть вторым делом, которому нужно научиться после того, как вы узнаете, как что-то скомпилировать, поскольку после компиляции или до того, как вы ее отправите, у вас будет много мусора. Приложения создаются для доставки, и они всегда нуждаются в этих батареях, чтобы идти вместе с ними, чтобы скомпилировать их для конкретной цели или для создания фактического объекта, который будет доставлен. Лучше используйте это.

Не забывайте облако.

Облако - это среда для запуска приложений. Это больше не рабочий стол и не рабочий сервер. И это не только означает, что вы на полпути к завершению своей работы, когда приложение компилируется нормально, это означает, что вам придется отправить или, скорее, развернуть свое приложение в облаке, чтобы запустить его. Но это также имеет ряд последствий для ввода / вывода и тому подобного. Базовый план таков: консоль практически мертва, но вам также придется включить такие приложения для доставки, как Fabric или Capistrano, на любом компьютерном языке. Это сложно? Может быть. Сложнее, чем концепция компиляции или наследования? Определенно нет.

Программирование ведется в командах.

И этому тоже нужно учить с самого начала. В общем, git. Но также и определенный способ написания программ и их документирования, чтобы они были открыты для сотрудничества. Имеется в виду также открытый исходный код, конечно, но здесь я имею в виду щедрое использование README.md и CONTRIBUTING.md, чтобы это привлекало соавторов. А также проблемы и вехи, проверка кода и так далее. Очень много программирования делается на чужом коде. Почему бы не включить рецензирование кода в число навыков, которым вы хотите, чтобы люди научились? Зачем сосредотачиваться на написании программ с нуля? Там миллиарды строк кода, некоторые из них неправильные, а некоторые красиво написаны. Очень важно научиться работать с чужим кодом.

А это десять

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