spamsink: (Default)
[personal profile] spamsink
Пишет тут один кадр,

I’ve come to realize that understanding pointers in C is not a skill, it’s an aptitude. In first year computer science classes, there are always about 200 kids at the beginning of the semester, all of whom wrote complex adventure games in BASIC for their PCs when they were 4 years old. They are having a good ol’ time learning C or Pascal in college, until one day the professor introduces pointers, and suddenly, they don’t get it. They just don’t understand anything any more. [...] For some reason most people seem to be born without the part of the brain that understands pointers.
Page 1 of 5 << [1] [2] [3] [4] [5] >>

Date: 2015-06-14 12:18 am (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
For some reason most people seem to be born without the part of the brain, period

Date: 2015-06-13 10:21 pm (UTC)
From: [identity profile] scholar-vit.livejournal.com
Yes, this is true. Different people have their brains wired differently, and the understanding of pointers seems to be among the variable features.

Date: 2015-06-13 10:24 pm (UTC)
From: [identity profile] archaicos.livejournal.com
Дык. Я асм понимал, а указатели в Це не понимал. Потом недостающая часть мозга выросла. По правде сказать, асмопонимающие и васикопонимающие части мозга тоже были приобретённые. Выменял. :)

Date: 2015-06-13 10:25 pm (UTC)
From: [identity profile] solomon2.livejournal.com
The bigger point is that pointers is a low-level behind-the-scene concept, totally unnecessary for high-level programming. Low-level programming is obviously more difficult than high-level, so less people have aptitude for it.

Date: 2015-06-13 10:32 pm (UTC)
From: [identity profile] yatur.livejournal.com
Я думаю, это преувеличение. Мне кажется, достаточно склонности к абстрактному мышлению. Если человеку можно объяснить машину Тьюринга, то ему можно объяснить и указатели. А без машины Тьюринга какой ты computer scientist?

Другое дело, что синтаксис С в этом смысле весьма коряв: символ "звездочка" путается с умножением, да и стрелочка из минуса и знака "больше" делу не сильно помогает. С++ еще больше запутывает дело наличием ссылок (references).

Date: 2015-06-13 10:53 pm (UTC)
From: [identity profile] proxfessor.livejournal.com
Извините, что встреваю в диалог. Мне тоже кажется, что источник непонимания - не сама природа указателей, а синтаксис С/С++. В связи с чем - вопрос: какой альтернативный синтаксис мог бы помочь студентам понять указатели? Может быть, что-нибудь "векторообразное" (типа теховского \overleftarrow{a} - указатель на a).
Edited Date: 2015-06-13 10:58 pm (UTC)

Date: 2015-06-13 10:54 pm (UTC)
From: [identity profile] proxfessor.livejournal.com
А в Паскале синтаксис указателей ничуть не интуитивнее, чем в С.

Date: 2015-06-13 10:57 pm (UTC)
From: [identity profile] solomon2.livejournal.com
The pointers are not among those useful low-level concepts though...

Date: 2015-06-13 11:08 pm (UTC)
From: [identity profile] proxfessor.livejournal.com
А чем стрелка вверх лучше @? Такая же условность.

Date: 2015-06-13 11:17 pm (UTC)
From: [identity profile] rkatsyv.livejournal.com
Не понимаю как это можно не понимать :)
Реально ж не rocket science :)

Date: 2015-06-13 11:20 pm (UTC)
From: [identity profile] archaicos.livejournal.com
На другие части. Не стал большим художником, например. :)

Date: 2015-06-13 11:21 pm (UTC)
From: [identity profile] proxfessor.livejournal.com
Теховская стрелка позволяет интерпретировать указатель как вектор (каковым он, собственно говоря, и является). Как правило, студенты знают, что такое вектор, из школьного курса алгебры или геометрии. Они знают, как обращаться с векторами (сложение, вычитание, умножение на константу). Если отождествить вектора с указателями, то переменные автоматически отождествляются с точками (в одномерном пространстве, естественно). Сразу становится понятна сущность указателей, их связь с переменными и различие между переменными и указателями. Операция & превращает точку в вектор и обозначается той самой теховской стрелкой. Операция * превращает вектор в точку (можно использовать |a|). Остается домыслить, как интерпретировать переменные, которым присвоено значение указателя. - Не надо, точка - она точка и есть, ее внутренняя структура несущественна.
Edited Date: 2015-06-13 11:22 pm (UTC)

Date: 2015-06-13 11:29 pm (UTC)
From: [identity profile] proxfessor.livejournal.com
Ну, хорошо, хорошо, поймал, складывать нельзя :) Но если это твое единственное возражение - то не все так плохо! :))))

Date: 2015-06-13 11:30 pm (UTC)
From: [identity profile] solomon2.livejournal.com
I do not dispute that some knowledge of implementation detail is helpful, but one has draw the line someplace. There is a high-level concept of reference - it's quite enough. When you start worrying about cache locality, you stop doing high-level programming.

Date: 2015-06-13 11:31 pm (UTC)
ak_47: (default)
From: [personal profile] ak_47
Нет, я в корне не согласен со Спольским. Я не верю в такую узкую специализацию мозга. Скорее всего препод толком не объяснял людям, а потом уже они сами рукой махнули и так и не знают. Так же как и с синусами/косинусами, например. Если человеку не повезло и ему с самого начала толком не объяснили, то так и будет жить и думать что это нечто сложное и непонятное. Тем более, что пойтеры как концепция, ну не rocket science ни разу.
Page 1 of 5 << [1] [2] [3] [4] [5] >>

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 10:51 am
Powered by Dreamwidth Studios