Главная » Хабрахабр » [Из песочницы] Научиться программировать становится сложнее

[Из песочницы] Научиться программировать становится сложнее

Привет, Хабр! Представляю вашему вниманию перевод статьи Аллена Б. Дауни, автора таких книг как Think Python, Think Java, Think Bayes и других, опубликованной в личном блоге автора.

Я написал несколько книг, в которых c использованием языка программирования Python объясняются темы вроде Байесовской статистики и цифровой обработки сигналов. В дополнение к книгам читатели могут загрузить код с GitHub. Для того, чтобы использовать этот код, нужно знать некоторые основы Python. То есть, у читателей должен быть компьютер, на котором установлен интерпретатор этого языка и необходимые библиотеки, они должны знать, как загрузить код с GitHub, а еще они должны знать, как запустить код, который они загрузили.

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

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

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

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

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

С тех пор три вещи сделали путь от пользователя до программиста сложнее.

  1. Компьютеры перестали продаваться с предустановленными по умолчанию средами разработки. Теперь любому, кто хотел научиться программировать, приходилось сначала установить среду разработки. И это больший барьер, чем могло бы показаться. Многие пользователи вообще никогда ничего не устанавливали, не знали как это делать и могли не обладать необходимыми для этого правами. Сейчас устанавливать программы стало гораздо легче, чем это было раньше, но возможные ошибки при установке никуда не делись и это может доставлять пользователям серьезные неудобства. Если кто-то хочет научиться программировать, он не должен для этого предварительно изучать администрирование системы.
  2. Пользовательские интерфейсы сильно отошли от командной строки в сторону графических интерфейсов. Последними, как правило, проще пользоваться, но они не отображают информацию о том, что происходит в системе на самом деле. Когда пользователю не требуется знать все эти детали, в подобном поведении нет ничего страшного. Но проблема в том, что графические интерфейсы скрывают информацию, которую необходимо знать программистам. Поэтому когда пользователь начинает учиться программировать, он внезапно сталкивается с вещами, которые обычно от него скрыты. Если кто-то просто хочет научиться программировать, он не должен для этого изучать устройство операционных систем.
  3. Облачные технологии только осложняют ситуацию. Люди, использующие веб приложения, часто имеют очень смутное представление о том, где их данные хранятся и с помощью каких приложений они могут получить к ним доступ. Многие пользователи, особенно на мобильных девайсах, не видят различий между операционными системами, приложениями, веб-браузерами и веб-приложениями. Когда они загружают данные или отправляют их через интернет, они часто не до конца понимают, откуда именно эти данные поступают и куда попадают. А когда что-то устанавливают, часто не до конца понимают, что именно устанавливается и куда.

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

Хорошо, и что же мы можем с этим поделать? Вот несколько вариантов:

  1. Назад в будущее. Во-первых, можно создавать компьютеры (как мой Commodore 64), которые бы разрушали барьер между использованием устройства и его программированием. Одной из предпосылок к созданию Raspberry Pi, по словам Эбена Аптона, было желание создать среду, которая бы превращала пользователей в программистов.
  2. Встретиться с болью лицом к лицу. Другой подход — учить студентов как настраивать и использовать среду разработки до того, как они начали программировать (или одновременно с этим).
  3. Отсрочить боль. Третий вариант предполагает использование облачных сервисов, чтобы студенты могли сразу начать программировать и на время отложить подготовку собственной среды разработки.

На одном из моих курсов мы пользуемся вторым подходом. Студенты учатся использовать командную строку UNIX одновременно с изучением языка программирования C. Однако эти студенты уже умеют программировать и у них есть возможность обратиться к инструкторам за помощью.

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

  1. Интерактивные учебники, позволяющие запускать код прямо в браузере, как например эта адаптация книги How To Think Like a Computer Scientist
  2. Cреды разработки, работающие через браузер, как например PythonAnywhere
  3. Образы виртуальных машин с уже настроенными и готовыми к работе средами разработки, которые пользователь может загрузить и запустить у себя (при условии, конечно, что он может установить программное обеспечение для запуска виртуальной машины).
  4. Сервисы вроде Binder, представляющие собой среду выполнения в облаке, и позволяющие пользователям получить доступ к некоторым функциям через браузер.

В некоторых своих проектах я использовал сразу все эти инструменты. В дополнение к интерактивной версии How To Think Like a Computer Scientist есть еще интерактивная версия Think Java, подготовленная и поддерживаемая Trinket.

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

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

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

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


x

Ещё Hi-Tech Интересное!

Встреча с DevOps Deflope на конференции DevOpsConf 2018

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

PsRealVehicle, или Open Source-плагин физики танков в Armored Warfare: Assault

Придерживаясь правила «делаем игру, а не технологию», прототип мы создавали на том, что уже есть в движке. Пару лет назад нашей команде выпала честь заняться созданием мобильной «Арматы». 9, в основе физической модели — PhysX Vehicles, и много боли (как ...