?

Log in

No account? Create an account

Неужели это правда? - Общество дровосеков Бердичева по изучению Мишны

Jun. 13th, 2015

03:02 pm - Неужели это правда?

Previous Entry Share Next Entry

Пишет тут один кадр,

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.

Comments:

[User Picture]
From:scholar_vit
Date:June 13th, 2015 10:21 pm (UTC)
(Link)
Yes, this is true. Different people have their brains wired differently, and the understanding of pointers seems to be among the variable features.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 13th, 2015 10:36 pm (UTC)
(Link)
Is that feature really as rare as he claims?
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:archaicos
Date:June 13th, 2015 10:24 pm (UTC)
(Link)
Дык. Я асм понимал, а указатели в Це не понимал. Потом недостающая часть мозга выросла. По правде сказать, асмопонимающие и васикопонимающие части мозга тоже были приобретённые. Выменял. :)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 13th, 2015 10:36 pm (UTC)
(Link)
Выменял на что?
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:solomon2
Date:June 13th, 2015 10:25 pm (UTC)
(Link)
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.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 13th, 2015 10:39 pm (UTC)
(Link)
Even high-level programmers must understand low-level concepts to be able to write efficient programs.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:yatur
Date:June 13th, 2015 10:32 pm (UTC)
(Link)
Я думаю, это преувеличение. Мне кажется, достаточно склонности к абстрактному мышлению. Если человеку можно объяснить машину Тьюринга, то ему можно объяснить и указатели. А без машины Тьюринга какой ты computer scientist?

Другое дело, что синтаксис С в этом смысле весьма коряв: символ "звездочка" путается с умножением, да и стрелочка из минуса и знака "больше" делу не сильно помогает. С++ еще больше запутывает дело наличием ссылок (references).
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 13th, 2015 10:43 pm (UTC)
(Link)
Вот и я думаю, что должно быть достаточно склонности к абстрактному мышлению, потому и спрашиваю.

В цитате упоминается и Паскаль, так что дело не в синтаксисе.
(Reply) (Parent) (Thread)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
From:rkatsyv
Date:June 13th, 2015 11:17 pm (UTC)
(Link)
Не понимаю как это можно не понимать :)
Реально ж не rocket science :)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 13th, 2015 11:25 pm (UTC)
(Link)
Пр 66: Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.
(Reply) (Parent) (Thread)
[User Picture]
From:ak_47
Date:June 13th, 2015 11:31 pm (UTC)
(Link)
Нет, я в корне не согласен со Спольским. Я не верю в такую узкую специализацию мозга. Скорее всего препод толком не объяснял людям, а потом уже они сами рукой махнули и так и не знают. Так же как и с синусами/косинусами, например. Если человеку не повезло и ему с самого начала толком не объяснили, то так и будет жить и думать что это нечто сложное и непонятное. Тем более, что пойтеры как концепция, ну не rocket science ни разу.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 13th, 2015 11:39 pm (UTC)
(Link)
Вот и я удивляюсь. Ладно бы еще рекурсия, а то - указатели!
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]
From:yigal_s
Date:June 13th, 2015 11:59 pm (UTC)
(Link)
это он ещё про монады не слышал...
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 14th, 2015 12:25 am (UTC)
(Link)
Действительно, поиск на его сайте по слову monad ничего не находит.
(Reply) (Parent) (Thread)
[User Picture]
From:alextr98
Date:June 14th, 2015 12:17 am (UTC)
(Link)
C - это страх и ужас, когда дело доходит до указателей.
Но это же сложилось исторически - взяли машинные команды манипуляции с адресами и внесли в язык.
Ну вот типа (*а).b это всегда a->b или нет?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 14th, 2015 12:23 am (UTC)
(Link)
В Си - конечно, всегда, по определению. А вот в С++...
(Reply) (Parent) (Thread) (Expand)
(Suspicious comment)
[User Picture]
From:fatoff
Date:June 14th, 2015 12:33 am (UTC)
(Link)
Вдруг подумалось, а олени лучше. C++, конечно. Концепция ссылки. Я бы попытался дать её детям для начала. А потом предложил бы задуматься, а что же там, у неё, ссылки, внутри. Что это момент имплементации, строго говоря, понятно. И тут рассмотреть собственно адрес, подойти к интересной операции взятия адреса от значения, и ссылки. И кульминация, давайте запишем этот адрес куда нибудь, и будем считать, что по адресу значения определённого типа.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 14th, 2015 12:39 am (UTC)
(Link)
Возможно, что корень зла - в BASIC в качестве первого языка. Жалобы, что молодежь, чей мозг отравлен бейсиком, сложно учить настоящему программированию, я слышал/видел уже очень давно.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:ny_quant
Date:June 14th, 2015 01:10 am (UTC)
(Link)

По-моему фигня полная. Конечно, не всем это одинаково легко дается - но как и все остальное.

(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 14th, 2015 04:15 am (UTC)
(Link)
Я понимаю его удивление, если до того все прочие CS вещи давались легко, а принципиальной разницы между элементом массива целых чисел, который при желании может служить индексом, и указателем нет. Но он списывает это на магическую aptitude, а я - на педагогическую запущенность.
(Reply) (Parent) (Thread)
[User Picture]
From:asy
Date:June 14th, 2015 04:31 am (UTC)
(Link)
когда мы в школе дошли до указателей, это было как какое-то озарение. мы там что-то странное писали с ними. но нифига все равно не помню. 20 лет не сталкивалась
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 14th, 2015 05:00 am (UTC)
(Link)
Я жалею, что не помню, когда и как именно я осознал указатели.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:stas
Date:June 14th, 2015 04:57 am (UTC)
(Link)
Че-то мне кажется, что проблема в преподавании, а не в мозге. Почтой пользоваться умеют? По телефону звонить? Понять конструкцию типа "рецепт этого пирога находится на странице 20 в поваренной книге, которая в шкафу в кухне на третьей полке"? Тогда и указатели могут понять.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 14th, 2015 05:00 am (UTC)
(Link)
Вот и я того же мнения, что проблема в преподавании.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:sab123
Date:June 15th, 2015 06:24 pm (UTC)
(Link)
Я в свое время не понимал указателе в Паскале. А вот когда изучил ассемблер, и понял, что они - адреса, то все встало на свои места. В сях все очень просто - адреса они и есть адреса. После ассемблера и Си и Паскаль стал понятен. Проблемы возникают только когда люди начинают придумывать абстрактные сущности и пытаться объяснять указатели не как адреса.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 15th, 2015 06:45 pm (UTC)
(Link)
Т.е. проблема чисто педагогическая, а понимание/непонимание при объяснении с помощью абстрактных сущностей зависит от наличия/отсутствия инсайта "Ба! Так это ж просто адреса!", и к интеллекту/aptitude имеет слабое отношение.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:orleanz
Date:June 16th, 2015 08:22 am (UTC)
(Link)
я вроде бы понимаю пойнтеры в Си (кстати, а что является критерием понимания, может, на самом деле НЕ понимаю)

но я не понимаю дофига других вещей связанных с пойнтерами

например, когда код скомпилированный в ассемблер и бегущий уже без всякого дополнительного рантайма - вылазит за пределы отведенного ему сектора памяти - как ОС бьет ему по рукам? А ведь бьет же, насколько я знаю (хотя, опять таки, все равно есть какие то способы обойти эту защиту и проблема защиты не имеет окончального решения на 100%)

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

Edited at 2015-06-16 08:25 am (UTC)
(Reply) (Thread)
[User Picture]
From:mynine
Date:June 22nd, 2015 10:50 pm (UTC)
(Link)
Я тоже сперва не врубался в понятие указателя, долго вспоминал почему и, кажется, вспомнил - любая переменная в программе и есть адрес данных. Тут и возникало недопонимание - что же за еще какой-то дополнительный адрес? Дальше требуется усилие понять что указатель это переменная (то бишь опять адрес места), где хранится адрес другой переменной.
(Reply) (Thread)