tgoop.com/dereference_pointer_there/6639
Last Update:
#prog #rust #article (надо ли хештег для постов на тему образования?)
Teaching Rust in 5 days
Опыт автора по преподаванию Rust в университете.
Должен сразу предупредить, что курс был (а) факультативный (потому на него шли люди, которые в принципе мотивированы учить Rust) и (б) уже подразумевал наличие базовых знаний о программировании, так что опыт автора навряд ли переносим напрямую на изучение Rust в других контекстах.
Автор честно признаётся, что писал курс не с нуля, а взял за основу Comprehensive Rust от команды разработчиков Android. Курс, тем не менее, подвергся сильным модификациям — главным образом, избавлению от Android-специфичных частей.
Каждый день состоял из двух половинок с перерывом между ними, в каждой половинке были теоретическая и практическая части. Для практической части автор использовал форк Rustlings, модифицированный под содержимое и порядок материала в плане курса. Одним из интересных нововведений автора была интеграция Rustlings с собственным сетевым приложением для отображения сводки индивидуальных прогрессов каждого из учеников. По словам автора:
> The mix of Rustlings and collective-score
[вышеупомянутого приложения автора] was a gamification that was very positively received! It was also a good way to monitor student's progress without watching over their shoulders.
За 5 дней автору с учениками удалось покрыть множество тем. Ученики сами были удивлены тому, как много они успели изучить за столь короткое время:
> We were not able to finish all 90 exercises, but the majority of students finished about 2/3 of them.
Автор предлагает практические советы на тему того, на какие именно темы нужно упор для людей с опытом программирования в других языках, а также предлагает объяснять нужду в borrow checker путём демонстрации того, к чему может привести сосуществование мутабельной и иммутабельной ссылки на один и тот же объект. В статье автор иллюстрирует это примерами на Python с модификацией списка в процессе итерации по нему:
l = [1, 2, 3]
# бесконечный цикл
for item in l:
print(item)
l.append(item)
l = [1, 1, 2, 3]
for item in l:
if item == 1:
l.remove(item)
l == [1, 2, 3] # True
Также автор предлагает аналогию с ковриком для объяснения принципов, которые энфорсит borrow checker. Если коротко: на коврике могут стоять люди, переместить коврик, пока на нём стоит человек, нельзя, если человек всего один (мутабельная ссылка), то он может сойти с коврика, чтобы перенести его в другое место (и далее распространение на прочие концепции Rust). Автор указывает, что ученики нашли эту аналогию полезной. Он также признаёт, что у неё, как и у любой аналогии, есть ограничения, но она полезна для выработки интуиции в первом приближении.В заключении автор заявляет, что трудности с изучением Rust связаны не только и не столько со сложностью языка как такового:
> I used to agree with the statement that Rust is complicated because some tend to say that.
But now, after giving the 5-day Rust course at my university, I believe that it is a problem of having more learning resources AND willing to go out of the comfort zone to learn completely new concepts like ownership and borrowing.
After the course, students are not Rust experts. But they will not panic on the first borrowing or lifetime compiler error they encounter.
<...>
Rust is neither easy nor complicated, it is a language that requires you to learn new concepts and read a book or take a course before being able to start hacking.
Rust already has excellent resources for learning on your own. We have the official Rust book (available for free) and Rustlings as leading examples. But we need more resources and initiatives in organizations that teach programming (like universities).
BY Блог*
Share with your friend now:
tgoop.com/dereference_pointer_there/6639