Избранное сообщение

Фетісов В. С. Комп’ютерні технології в тестуванні. Навчально-методичний посібник. 2-ге видання, перероблене та доповнене / Мои публикации

В 10-х годах я принимал участие в программе Европейского Союза Tempus "Освітні вимірювання, адаптовані до стандартів ЄС". В рамк...

Благодаря Интернету количество писателей и поэтов увеличивается в геометрической прогрессии. Поголовье читателей начинает заметно отставать.

вторник, 27 февраля 2018 г.

Метод Бенджамина Франклина для чтения книг по программированию / Компьютерная литература

Посмотрим правде в глаза, книги по программированию — отстой. Эти общие книги по распределённым системам, науке о данных и так далее — их можно читать бесконечно. Но за редким исключением у практических руководств по языку/фреймворку/СУБД/кексопечке есть нечто общее. Зверюшка на обложке, примеры вычурных приложений, они так легко забываются, так банальны, настолько… ничему не учат.

Думаю, я наконец-то понял, почему они мне не нравятся. И не только потому что они учат навыкам, которые скоро станут устаревшими. Это их педагогический подход в целом. Алгоритм обучения как будто такой: напиши эти программы, где мы говорим всё, что нужно сделать, и теперь ты знаешь этот язык/фреймворк/базу данных/кексопечку. Главное в этих книгах — длинные листинги кода, которые читатель должен воспроизвести. Вот пример из одной из лучших книг этой категории.

class User < ApplicationRecord
  attr_accessor :remember_token
  before_save { self.email = email.downcase }
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }

  
end

Традиционно есть два способа изучить такую страницу:

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

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

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

Мысленные образы


По словам К. Андерса Эрикссона в его книге Peak, экспертиза — это процесс построения ментальных репрезентаций (мысленных образов). Мы можем их увидеть, потому что умы экспертов хранят знания в сжатом виде. Музыкант способен запомнить страницу с мелодией гораздо быстрее, чем страницу со случайными нотами. Опытный шахматист, которому сказали запомнить позицию на доске, сделает это гораздо лучше любителя, но если ошибётся, то перепутает целую группу фигур.

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

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



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

Это именно то, чего лишён подход «просто введите код»: ничто не заставляет ваш ум представлять программу как нечто лучшее, чем просто последовательность символов. Тем не менее, если заставить свой ум сделать это, то вы быстрее ухватите суть концепции. Вот идея 200-летней давности, как этого добиться.

Метод Бенджамина Франклина


Не знаю, что более впечатляет: что Бенджамин Франклин стал светилом во всём, от политики до физики, или что для этого ему не понадобились современные методы образования, такие как школы, учителя или StackOverflow. Вместо этого он открыл мощный метод самообучения. Позволю ему сказать самому (или можете прочитать чужой краткий пересказ).

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

—Бенджамин Франклин. Автобиография

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

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

Но в отношении книг по программированию основная идея особенно проста, и в то же время эффективна.

Как это работает:

  1. Читайте книгу как обычно. Когда попадётся образец кода, прочитайте его.
  2. Закройте книгу.
  3. Попробуйте набрать код.

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

Комментариев нет:

Отправить комментарий