Неполное изучение новых технологий ведет на север: на примере Rust

задняя часть программист Rust

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

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

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

1. Достаточная учебная мотивация — источник непрерывного обучения

Изучение методов, особенно новых, — это деятельность с высоким уровнем неудач.

Я не знаю, сколько раз мы останавливались на установке зависимостей проекта и останавливались на уровне первых пользователей Hello World.

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

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

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

Недостаточная мотивация к обучению и преждевременный отказ от учебы являются важной причиной неудач в обучении.

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

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

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

Возьмем в качестве примера мою мотивационную поливку для Rust:

Моя работа — фронтенд-разработка, которая включает в себя множество интерфейсных фреймворков и построение интерфейсной инфраструктуры.

Нынешняя интерфейсная архитектура, в которой используются только технологические стеки, такие как JavaScript/TypeScript и Node.js, уже немного растянута. Например, Webpack, реализованный на JavaScript, не может соответствовать требованиям для компиляции и сборки крупномасштабных интерфейсных проектов. You Xiaoyou, автор Vue, пытается решить эту проблему с помощью собственного управления загрузкой модулей браузера, а именно популярного в последнее время Vite. Среди них Vite выбрал esbuild, высокопроизводительный сборщик и минификатор JavaScript, реализованный техническим директором Figma в Go.
В будущем инфраструктура фронтенд-разработки будет включать в себя все больше и больше инструментов системного уровня, поддерживаемых языками программирования. В конце концов, V8, Node.js и Deno содержат много кода реализации C/C++ и языка Rust. Все, что может быть реализовано в JS, даже если это будет реализовано в JS в конечном итоге, те части, которые чувствительны к производительности, будут реализованы в JS позже.

То есть фронтенд-архитекторы чистого JavaScript/TypeScript/Node.js/Deno в будущем могут иметь более слабые профессиональные компетенции и техническую конкурентоспособность, чем их коллеги, освоившие один или несколько языков программирования системного уровня и их экология. Поэтому студенты, интересующиеся фронтенд-архитектурой, выбирают один или несколько языков C/C++, Go, Rust и других языков для непрерывного обучения, что может быть полезно в будущем. (Видя это, мне интересно, есть ли семена интереса, посаженные?)

Инфраструктура внешнего интерфейса может быть оптимизирована на языке программирования системного уровня, но есть и другие вещи, которым нужно научиться, чтобы спроектировать хороший фреймворк внешнего интерфейса. Особенно функциональное программирование (FP), теория языков программирования (PLT) и теория типов (Type Theory). Например, изучение Haskell, понимание Monad, освоение алгебраических эффектов и знакомство с такими понятиями, как Codata.

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

1. Дизайн языка Rust более современный, он хорошо вбирает в себя функции функционального программирования, такие как сопоставление с образцом, алгебраические типы данных, Trait, Immutable по умолчанию и т. д.

2. Команда Rust из Mozilla, которая имеет относительно дружелюбную поддержку и больше инвестирует в WebAssembly.Выполнение кода Rust через Wasm в современных браузерах повышает производительность, что очень полезно для специфических и сложных веб-приложений. Подробнее об этом читайте в книге Rust and WebAssembly.

3. Rust обеспечивает лучший баланс между безопасным и полезным.

Один из основных разработчиков Haskell, Саймон Пейтон-Джонс, в публикации 2017 года «Побег из башни из слоновой кости: путешествие на Haskell» изобразил интересный координатный график:

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

Безопасно, но не практично vs Практично, но опасно. В конце концов, цель каждого — быть одновременно безопасным и практичным.

И Rust одновременно более безопасен, чем большинство основных языков, и более практичен, чем более академические языки, такие как Haskell, и находится в очень хорошем положении.

Кроме того, стоит отметить, что безопасность и практичность не совсем противоположны. Язык, который на 100 баллов практичен, но недостаточно безопасен, обычные разработчики могут эффективно играть в практическую часть языка только с 60 баллами, и лишь немногие мастера знают, как играть на 100% практической ценности. По мере повышения безопасности будет увеличиваться и соотношение практических возможностей, на которые могут рассчитывать обычные разработчики.

Проще говоря, компилятор Rust может сделать нас более уверенными в безопасности памяти и безопасности типов нашего кода, поэтому мы можем осмелиться написать более сложный код, не борясь с проблемами памяти и не тратя много времени на отладку.
Приведенный выше анализ дал мне сильную мотивацию для изучения Rust. С помощью Rust я могу рассчитывать получить больше практического опыта в функциональных возможностях, чем в JavaScript/TypeScript, иметь возможность писать высокопроизводительную интерфейсную инфраструктуру для оптимизации эффективности разработки и иметь возможность писать высокопроизводительные модули wasm для оптимизации. Производительность веб-приложения. Существует возможность изучить идеи дизайна языка Rust для достижения различных возможностей, таких как небольшая среда выполнения и внешний DSL, не требующий GC.

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

2. Серьезное обучение — основная часть эффективного обучения

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

У многих учащихся есть серьезные проблемы с методами обучения, то есть они застряли на этапе формирования учебной мотивации. В чем смысл?

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

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

Так что же такое серьезное исследование?

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

Взяв, к примеру, Rust, серьезный процесс обучения началу работы с Rust заключается в том, чтобы вникнуть вrust-lang.orgОфициальный веб-сайт, прочитайте основную информацию на домашней странице, изучите введение и обязательства, данные Rust, установите Rust и создайте новый проект hello world через GET STARTED и запустите его.

Затем мы вошли в УЗНАТЬ БОЛЬШЕ, Официальная документация рекомендовала нам прочитать книгу «Язык программирования Rust», поэтому мы послушно читали и выполняли упражнения из книги. Не ждите, чтобы закончить эту книгу, мы нашли другую книгу «Rust By Example» и добавили ее в список для чтения. Прочитав первую книгу, прочитайте вторую книгу и так далее.

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

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

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

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

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

3. Интервалы высокой интенсивности — секрет эффективного обучения

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

Я лично подытожил навык обучения, чтобы поделиться с вами.

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

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

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

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

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

Эффективным способом является многократное появление этих материалов, то есть высокой частоты, высокой плотности и высокой интенсивности.

Планируйте период времени каждый день, примерно от получаса до двух часов, например, я планирую изучать серьезные материалы по Rust между 10:00 и 12:00 вечера. Пусть Rust появляется передо мной каждый день, каждый день выставляется в моем сознании, и по мере увеличения времени и частоты его появления мозг автоматически постепенно осознает важность Rust для моей жизни. В частности, очень много проблем и их решений при изучении Rust. Они активируют еще одно когнитивное предпочтение мозга — быть более чувствительным к негативному контенту. Другими словами, для моего мозга проблемы, связанные с Rust, постоянно генерируются и решаются каждый день, это будет выделять больше когнитивных ресурсов для обработки и усвоения знаний о Rust, это будет стимулировать нас больше интересоваться Rust, потому что он захочет получить больше информации о Rust для обработки. Субъективный опыт заключается в том, что мы будем чувствовать, что Rust становится все более и более увлекательным.

Необходимо интенсивное непрерывное информационное воздействие, Трудно эффективно активировать серьезное позиционирование мозга для Rust или других технологий.

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

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

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

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

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

Мой личный выбор — учиться онлайн. Мой Chrome настроен на восстановление ссылок, которые были открыты при последнем закрытии, каждый раз, когда я его открываю. Страница вкладок с материалами Rust всегда будет отображаться в моем браузере, пока я не закончу обучение.Пока у меня есть разум, я могу быстро переключать вкладку, чтобы начать обучение, и быстро запускать VSCode, чтобы писать и запускать код.

Серьезность учебного материала, содержит реальные знания. Серьезность, содержащаяся в учебной среде и учебной атмосфере, не содержит знания. Если предположить, что уровень учителей в учебном классе не слишком высок, а выбранные учебники не являются ни систематическими, ни авторитетными, мы не сможем усвоить надежные знания даже в серьезной учебной атмосфере. Независимо от того, в какой среде или атмосфере мы находимся, до тех пор, пока мы можем погрузиться в серьезный материал знаний, происходит эффективное обучение.
При разработке плана обучения нам необходимо определить, оптимизирована ли сухая часть эффективного обучения: 1) Мы ищем учебные материалы, содержащие серьезные знания; 2) Нам удалось заставить наш мозг осознать серьезность этих знаний, чтобы мы могли помнить их в течение долгого времени. То есть знание серьезности объединено субъективно и объективно.

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

4. Внеклассное обучение — надежный способ закрепить знания

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

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

Как это доказать?

Делайте эти тренинги без эталонных ответов, то есть внемасштабное обучение.

В качестве примера я изучаю Rust. «Язык программирования Rust» привел нас к реализации простой программы grep cli, простого многопоточного веб-сервера. Однако наша реализация кода слишком похожа на ответ в книге. Даже если мы можем диктовать ответы, мы не можем убедить свой мозг в том, что эти коды созданы нами.

Поэтому, прочитав «Язык программирования Rust» и «Rust на примере», я устроил себе новый учебный проект — трассировку лучей.

"Ray Tracing in One Weekend«Это пошаговая книга, код в нем реализован в C ++, и мы можем использовать Rust, чтобы сделать повторную реализацию. Это представляет собой тренировку HyperScale, наш код имеет ссылку, но не код ржавчины, но код C ++. Нам нужно пройти три уровня понимания: 1) понять алгоритм отслеживания лучей; 2) понять реализацию C ++; 3) Используйте реализацию ржавчины.

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

Функции, используемые для реализации трассировки лучей в Rust, примерно следующие:

0) Основные функции: переменные, циклы, базовый поток управления, сопоставление с образцом, структуры данных, числовые вычисления, модули, интерфейсы файловой системы и т. д.

1) Перегрузка операторов: такие операции, как +-*/ векторной структуры данных Vec3, должны быть перегружены.

2) Объекты признаков: различные типы геометрии, различные типы материалов должны иметь возможность помещаться в список или поле для унифицированной обработки.

3) Рекурсивная функция: алгоритм трассировки лучей — это алгоритм, который непрерывно генерирует новые пути лучей в рекурсивной функции.

4) Использование пакетов/ящиков: rand и threadpool

5) Оптимизация производительности: используйте многопоточность для оптимизации производительности алгоритмов трассировки лучей.

6) Модульное тестирование

7) чтение параметра cli

8) Дизайн организационной структуры кода

9)……

В основном охватывает большую часть основных функций языка Rust.

Как показано на рисунке выше, мы следовали «Трассировке лучей за один уик-энд» и использовали Rust для реализации более дюжины простых и относительно сложных графических рендерингов, выполнив эффективный объем кода более 1000 строк (повторяющиеся части между демонстрациями были удалены). ).

Таким образом, мы завершили суперклассное обучение, которое обязательно столкнется с большим количеством путаницы и проблем.Мы будем неоднократно читать соответствующие части в «Языке программирования Rust» и «Rust By Example», проверять стандартную библиотеку Rust документации, проверьте документацию ящика, погуглите другие вопросы и многое другое. Именно эти вопросы и процесс поиска ответов укрепляют те части наших книг, которые мы неосознанно или непреднамеренно пропускаем.

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

Еще одно обновление заключается в том, что мы можем запустить Rust через Wasm в браузере и сравнить алгоритм трассировки лучей, реализованный в JavaScript, чтобы увидеть разницу в производительности между ними. Это соответствует одному из моих мотивов изучения Rust: использование Rust + Wasm для оптимизации производительности определенных задач в браузере.

Итак, я начал читать Rust и WebAssembly, еще одну книгу на официальном сайте Rust, чтобы научиться запускать код Rust в браузере, а затем адаптировать нашу трассировку лучей Rust к библиотечной корзине.

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

Стоит отметить, что на верхней панели навигации также есть модули для JavaScript и Rust: Small Image. Версия JavaScript — это гипермасштабный учебный проект, которым я занимался, когда изучал алгоритмы трассировки лучей более года назад. С этой целью я также написал 3 статьи, описывающие, как оптимизировать производительность рендеринга трассировки лучей: «Применение методов оптимизации React в веб-версии трассировки лучей:начальство,серединаиВниз, который можно использовать для сравнения производительности с Rust.

Rust: модуль Small Image — еще одно обновление суперкласса. Предыдущий рендеринг был статическим изображением, потому что текущая реализация не может поддерживать требования к производительности трассировки лучей в реальном времени. Но поскольку мы все в браузере, всегда веселее связать какое-то взаимодействие с пользователем, переключить угол обзора и т. д.? Кроме того, Rust + Wasm работает намного лучше, чем чистая реализация JavaScript. Мы уменьшили масштаб изображения, уменьшили количество объектов и добились грубой интерактивной реализации трассировки лучей.

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

В настоящее время сверхмасштабное обучение, которое я провел, сводится к вышеизложенному. На самом деле есть еще апгрейды, которые можно сделать.Есть 3 связанные серии, написанные автором «Трассировки лучей за один уик-энд», и есть еще два упражнения, которые еще не сделаны. Даже если все это сделано, вы можете продолжить обновление и превратить учебный проект в более серьезный проект с открытым исходным кодом, ящик для трассировки лучей в экосистеме Rust. Все возможно, но это не является моей текущей целью, поэтому у меня нет планов работать в этом направлении. В общем, трассировка лучей сделала свою работу в качестве гипермасштабной тренировки для изучения Rust.

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

5. Накопление достижений — необходимое условие обретения технологической уверенности в себе

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

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

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

Наш мозг нуждается в плодотворном стимуле.

В чем разница между успешным исследованием и неудачным исследованием, от которого отказались на полпути? это результат.

Как упоминалось ранее, трассировку лучей в Rust можно обновлять бесконечно, и этому нет конца. Что бы я ни делал, я, по сути, сдался на полпути, чтобы бесконечно повышать сложность. Поэтому мы хотим создать поэтапный результат, который четко определяет процесс обучения как успешный и ожидаемый. Вышеупомянутый демонстрационный проект, размещенный на Github, и эта статья на этот раз относятся к моим постановочным результатам изучения Rust.

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

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

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

Для технического обучения репозиторий на Github является хорошим носителем для хранения результатов.

6. Формирование менталитета — ключ к счастливому обучению

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

Обсудите здесь несколько мифов в надежде вдохновиться.

6.1 Неудача — это нормальное состояние обучения, а успех случается редко

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

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

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

То есть, открыть обучающую поездку, сам по себе неизвестный риск. Обучение не удалось, не совсем отрицательный сигнал, не означает, что мы полностью закончили, он дает много положительных подсказок: 1) эти материалы мне не подходят; 2) мне нужно найти другие материалы; 3) мне нужен период времени, с другим накоплением, попробуйте еще раз.

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

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

6.2. Не сравнивайте эффективность обучения вслепую

Во время учебы мы иногда не можем не сравнивать свою эффективность обучения с другими, и нам не терпится установить риторику изучения технологии XXX за 1 день. Как только мы застреваем в процессе обучения, особенно когда мы застреваем на основных понятиях, мы чувствуем тревогу, думая, что учимся недостаточно гладко, и снижаем эффективность обучения.

Однако, если подумать, мы можем увидеть, что эти маленькие мысли несостоятельны. Во-первых, мы учимся, то есть сталкиваемся с тем, чего не знаем, откуда нам знать, сколько дней нам понадобится, чтобы освоить это? Даже если бы мы были точны в отношении времени исследования, это было бы необоснованным предположением и совпадением. Почему мы должны ограничивать время обучения, когда нет внешнего давления времени? Если наша цель — изучить эту технику, то сохраняйте темп обучения, который нам нравится, и двигайтесь вперед молча, пока не закончите. Продолжительность времени варьируется от человека к человеку, поэтому нет необходимости сравнивать.

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

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

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

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

До изучения Rust у меня уже был опыт изучения и использования языков, сред выполнения и таких инструментов, как JavaScript/TypeScript, Node.js/Npm/Webpack, Haskell и т. д. Многие из синтаксиса, функций и концепций Rust не новы для меня. Кажется, я могу пропустить большую часть контента. С помощью примеров и шпаргалки я могу писать код, проверяя и записывая.

но у меня нет.

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

Серьезное изучение требует меньше лени и основательного, искреннего, скромного прочтения систематического материала, что в конечном итоге принесет нам неоценимую пользу.

Не думайте о том, достаточно ли я эффективен, чтобы учиться, эффективнее ли я других, а вместо этого думайте, добросовестно ли я учусь?

Эффективность обучения - это объективная статистика, которая рассчитывается после того, как наше твердое обучение завершено.Когда мы используем ярлыки, просматриваем контент без понимания и ускоряем прогресс, наша эффективность обучения не улучшается, но ее нельзя правильно подсчитать. Только когда наше обучение искреннее и твердое, наша скорость чтения отражает эффективность обучения. В противном случае скорость чтения — это просто скорость чтения, это не означает мою скорость обучения, это не означает, что я полностью понимаю содержание.

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

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

6.3 Вам не нужно быть беспокойной обучающейся машиной

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

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

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

7. Резюме и обзор

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

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

Начало серьезного учебного пути — это когда наш мозг официально отправляется на охоту за сокровищами.

Искреннее и добросовестное изучение должно уберечь наш мозг от потери каких-либо сокровищ знаний.

Установление результатов обучения убеждает наш мозг в том, что мы, наконец, достигли цели этой экспедиции — сокровищницы знаний.

Выше приведено все содержание этой статьи, я надеюсь, что эта статья вдохновит вас на изучение новых технологий. нажмитеRust-Ray-Tracing-DemoВы можете перейти к репозиторию Github, который содержит мой обучающий код для изучения Rust для справки.