понедельник, 5 марта 2018 г.

[prog.memories] Байка про студентку и матрицу 100x100

В комментариях на LOR-е написал старую байку, которую помню еще со времен аспирантуры. Думаю, не лишним ее будет рассказать и читателям блога:

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

Дал он как-то студентке математического факультета задание: написать программу, в которой создается матрица 100x100, пользователь с клавиатуры вводит значения для этой матрицы построчно, затем (тут я деталей уже не помню, ну да не суть) распечатываются элементы главной диагонали.

Время действия — самое начало 90-х, когда персональные компьютеры в отдельных ВУЗ-ах только-только начинали появляться. Поэтому для студентов-математиков программирование было непрофильным предметом, но поскольку это веяние времени, то хоть как-то, да изучать программирование приходилось.

Так вот что было: одно занятие в дисплейном классе эта студентка сидит, что-то делает. Второе занятие, третье... И все более и более сосредоточено, ни на что не отвлекаясь, ни с кем не общаясь. Приходит время сдавать работу, а она говорит «Я не успела». Преподаватель спрашивает: «Да как же ты не успела, тут же задание простое, а ты каждое занятие за компьютером, от звонка до звонка?»

Ответ был шедевральным: «Я не успеваю вводить данные». А сама при этом чуть не плачет... Мол, каждый раз стараюсь, стараюсь, у меня уже все данные подготовлены, я уже научилась их вводить практически не глядя, а времени на ввода данных все равно не хватает.

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

Когда преподаватель пришел в себя и обрел дар речи, он спросил, а почему же она для отладки не могла сделать матрицу поменьше, например, 5x5, на что студентка не менее шедеврально ответила: «Но ведь в условии было сказано, что матрица 100x100, а с матрицей 5x5 — это уже другая задача».

ИМХО, пример ТС-а с суммой чисел от 1 до 100 ничем не отличается от этой истории с матрицей 100x100.

Собственно, достоверность этой истории я под сомнение никогда не ставил. Поскольку на первом курсе дабы получить доступ к компьютерам (а тогда это было вовсе не просто) мы практиковали "дружескую" помощь студентам-математикам. Мол, мы им быстренько делаем их лабораторную, они затем уступают нам компьютер. А т.к. у нас на математическом факультете на чистой математике из 75 человек 72 были девушки, то помогали мы, в основном, девушкам. И уж какие там были экземпляры с абсолютным непониманием программирования вообще и алгоритмов в частности, я насмотрелся вдоволь.

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

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


PS. Ну а чтобы закончить не менее пафосной ноте расскажу историю, которая произошла лично со мной. И за правдивость которой я отвечаю лично. Итак, тот же университет, только несколькими годами ранее, наверное 1992-й или 1993-й. Перед началом занятия по физкультуре мы сидим на скамеечке в спортзале, ждем пока уйдет предыдущая секция. Тут ко мне подходит один парень с другого факультета с тетрадочкой в руке и спрашивает: "Ты на программиста же учишься, язык C знаешь?" Я говорю, что знаю. Тогда он показывает мне строчку в программе, написанной от руки в тетрадке и говорит: "Я вот не понимаю, когда я буфер в файл записываю, туда запятые попадают?" Я долго не врубаюсь, потом начинаю мямлить что-то вроде "Ну, если в буфере запятые есть, то попадают". Вижу, что этот ответ его приводит в полное замешательство и начинаю выяснять, про какие запятые идет речь. Он еще раз тычет в строчку кода, а там что-то вроде:

fwrite(buf, 1, len, f);

И он мне говорит: "Вот я понимаю, что buf -- это буфер, 1 -- это размер одного символа, len -- это количество символов в буфере, а f -- это файл в который нужно все записать. Это я все понимаю. А вот запятые между buf, 1 и len, они-то в файл записываются или нет?"

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

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