Когда я смотрю онлайн-руководства по программированию, мне хочется зажечь компьютер.
Последние шесть месяцев я потратил много времени на то, чтобы освоить новейшие технологии машинного обучения, глубокого обучения и обработки естественного языка. Существует множество онлайн-ресурсов в виде сообщений в блогах, электронных книг, исследовательских работ и онлайн-видео. Я написал целый пост о шпаргалках по ML, которые вы можете найти в Интернете. Существует также много посредственного (и дрянного) контента, который видел каждый, кто использовал Интернет более нескольких минут.
На сайтах онлайн-курсов, таких как Udacity и Coursera, есть отличные варианты материалов под руководством инструктора по различным темам. Я просмотрел несколько видеоуроков и записей занятий в колледже по всему, от Pandas и PyTorch до Backprop и Naive Bayes.
Одна вещь, которую я передерну, - это когда инструктор открывает Jupyter Notebook и начинает говорить о своем коде. Вместо того, чтобы описывать ПОЧЕМУ кода, который они написали, большинство объясняют ЧТО. Вместо того, чтобы продумывать использование определенных методов, значений и циклов, они читают код построчно.
Это похоже на то, как выступающие читают свои слайд-презентации слово в слово. Сейчас не время рассказывать моему двухлетнему ребенку. Я могу читать!
Рассмотрим эту строку:
learningRate = 0.001
Главный грех в моей книге - это сказать:
Здесь мы устанавливаем переменную learningRate в значение 0,001.
Да, это правильно. Это звуковой перевод этой строки кода, который неявно понимает любой, кто когда-либо занимался программированием.
ПОЧЕМУ мы устанавливаем LearningRate на 0,001? Что особенного в 0,001? Почему не 0,01? И можно сказать, что «есть диапазон значений, которые я мог бы выбрать, но я выбрал 0,001, потому что это обычная отправная точка для оценки скорости обучения».
Возможно, у вас нет веских причин выбирать 0,001. Тоже норм! Программисты знают, что мы придумываем что-то на ходу. Каждая строчка не о том, чтобы доказать, что у вас есть ответы на все вопросы. Программирование - это исследование.
Если вам сложно говорить о коде, вам нужно делать больше, чем просто читать его построчно. Если вы не собираетесь это объяснять, дайте ссылку на репозиторий github и позвольте им скачать его.
Если вы думаете, что чрезмерно объясняете код, то, вероятно, это не так. Хорошая особенность формата видео / звука заключается в том, что за чрезмерное объяснение меньше штрафов по сравнению с письменным словом.
Рассмотрим такую простую строку:
for _ in range(1000):
Если бы вы записывали пояснение, возможно, вы не захотите тратить время на то, чтобы описать символ подчеркивания и то, как он является одноразовой переменной. Однако, когда вы обсуждаете объяснение, его легко упомянуть. Но это не все! ПОЧЕМУ в этом случае мы используем одноразовую переменную? Почему не именованная переменная? Почему не имеет значения, что мы правильно назначаем текущий индекс диапазона, в котором мы находимся во время цикла? Почему 1000 за ассортимент?
Кто-то может возразить, что комментарии в коде должны давать достаточно объяснений, но я тоже буду обсуждать этот вопрос. Если вы хотите просто дать мне копию своего кода, чтобы я мог изменить его для своих целей, достаточно комментариев в коде. Однако, если я записался на ваш курс, чтобы чему-то научиться, вы можете предположить, что я хочу, чтобы вы допустили ошибку в части чрезмерного объяснения всех аспектов кода, а не просто предположили, что я знаю вашу мотивацию для использования переменной подчеркивания.
Возможно, некоторые программисты будут жаловаться, что не хотят, чтобы им все объясняли на этом уровне, чему я тоже могу посочувствовать. Для онлайн-классов вы должны предполагать, что наименьший общий знаменатель довольно низкий. Возможно, курсы лучше пометить как продвинутые, когда это уместно, и в таких случаях вы можете пропустить излишнее объяснение каждой детали. Тем не менее, для тех, кто занимался парным программированием, я редко бывал в ситуации, когда кто-то тратил слишком много времени на объяснение своего кода. Почти всегда бывает наоборот. Вы думаете, что чрезмерно объясняете, когда на самом деле вы предоставляете достаточно деталей, чтобы ученик мог следить за ними.