Наш участник Valery_Solovey решил пообсуждать обучение программированию с людьми, в жизни никого не обучившими, да к тому же многократно доказавшими органическую неспособность to think straight.
Чтобы его труд не пропал, копирую сюда, с комментарием в конце:
Цитата:
Вот тут где-то советовали начинающим программистам пользоваться языком без сборки мусора. А что, это его (начинающего) главная цель? Освоить ручное управление памятью.
Я вот думаю, что есть вещи и по-важнее. Например, идя к результату применять операции, которые описывают суть задачи, а не которые успел где-то там на лекциях или в интернете запомнить. Даже если исключить ситуации, когда программисту может попасться задача, решения которой ему не давали (а понять это можно только при взгляде на ответ; при его отсутствии будет выбрано что-нибудь из имеющегося арсенала), то всё равно в реальности простых задач с одним-единственным массивом не бывает. И при наличии некоторого количества массивов вкупе с другими ресурсами выбор необходимых операций, хранящихся у него в голове, может привести его в ступор. А после того, как он определился с операцией нет гарантий, что он сделал правильный выбор.
Умение вручную разместить и убрать переменную из памяти поможет ему? Нет. Можно ли без этого навыка обойтись в программировании? Довольно часто - да.
Умение сначала пытаться усвоить задачу перед её решением поможет ему? Да. Можно ли без него обойтись? Только в простейших случаях.
Усваивать не значит заучить текст и уметь его по памяти слово в слово прочитать его как слева направо, так и справа налево. Это такая вещь, которая может много где пригодиться по жизни. И никакое программирование ей не нужно. А вот обратное - хорошо программировать пренебрегая этой вещью - я думаю, невозможно. И поэтому, это умение должно быть освоено или до начала программирования или вместе с ним. И поэтому преподаватели (конкретно Илья и info21) считают, что
а) любые элементы в зыке программирования лишние, и мешают учиться правильно воспринимать задачу. Но поскольку без элементов не будет формы, в которую можно облекать решение, то пускай хотя бы их будет разумно минимально.
б) требуются задачи, на которых студент учился бы "отпускать" своё сознание для усваивания задачи, а не судорожно бы тыкался по списку запомненных операций над данными.
Конечно, V._S. прав.
Сформулирую главную мысль покороче, повторившись в 100000-й раз:
В отличие от всевозможных интерпретируемых языков (ФЯ и проч.)
автоматическое управление памятью в Обероне позволяет разделить (DIVIDE ET IMPERA) две важные и разные вещи:
фазу проектирования структур данных -- когда нужные структуры данных еще не известны -- и
фазу их оптимизации -- когда структуры данных в случае нужды (sic) отображаются на статическую память.
Когда ни алгоритмы, ни структуры данных ещё не поняты, то проще застрелиться, чем переделывать "карту памяти" при каждом исправлении структур данных (и алгоритмов).
Эта же логика работает и при обучении.
У начинающих элементарно нет в головах понятия даже о такой наираспростейшей структуре, как последовательность операторов.
Понятие о том, как всё отображается в реальную память с адресами, формируется постепенно и малыми дозами.
Это на взрослых можно вывалить сразу всё, и они (ну, некоторые) разберутся, хотя и тут большой вопрос эффективности обучения.