andrzejn: (Default)
[personal profile] andrzejn
(По наводке [livejournal.com profile] avva).

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

Date: Thursday, 1 February 2007 14:10 (UTC)
From: [identity profile] marishia.livejournal.com
я вот понимаю, вроде как, концепцию присваивания, да и программки какие-никакие писала в свое время; думаю, я могла бы стать программистом
но теперь уже все основательно подзабылось
и первый вопрос теста честно поставил меня в тупик; если бы ты не сказал про "присваивание" - я бы, может, не смогла ответить вообще
что уж тут говорить о несчастных студентах первого года на третьей их неделе обучения?

Date: Thursday, 1 February 2007 15:36 (UTC)
From: [identity profile] marishia.livejournal.com
Результат действительно странный. Но вот я говорю, на своем примере, что он еще и какой-то неочевидный :)

Ну а насчет оголодать - думаю, если придется, я все вспомню, чему училась. Но, наверное, не придется.

Date: Thursday, 1 February 2007 14:57 (UTC)
livelight: (Default)
From: [personal profile] livelight
> около 50% людей не способны пройти этот тест

Не верю.
У нас в школе на уроке информатики бейсик проходили - и все что-то как-то писали. Значит, 100% нашего класса понять присваивание были способны.

Date: Thursday, 1 February 2007 16:00 (UTC)
From: [identity profile] jojoza.livejournal.com
вспомнилось, как информатичка обьясняла присваивание. Некоторые одноклассники понимали с большим трудом.

Date: Thursday, 1 February 2007 17:21 (UTC)
etoile_verte: (Default)
From: [personal profile] etoile_verte
Фигня. Понятие переменной не из программирования, а из математики, и там икс чему только не бывает равен. И в каждой задаче один и тот же икс бывает равен разному.
Людей, совершенно неспособных учиться даже на тройки, обычно называют не неспособными к программированию, а иначе.
Вот я понимаю, не быть способным понять рекурсию. Как я.

Date: Thursday, 1 February 2007 18:19 (UTC)
From: [identity profile] gds.livejournal.com
икс бывает равен чему только угодно только в специально обозначенных местах. Как я уже привёл пример ниже, "f(x) = x^2". Тут понятно, что определяется функция от "x", равная правой части выражения, поэтому, без области определения, "x" может быть равным чему угодно.
Либо "x^2 - 1 = 0" или "x = +- 1" (оба выражения эквивалентны определению "x является одним из членов множества {-1; +1}". Однако в подобных случаях ясно, что имеется ввиду уравнение или его решение (то есть, множество значений "x", каждое из которых удовлетворяет уравнению).
Остальные случаи то ли редки, то ли не существуют (не анализировал глубоко, могу ошибиться).
А с рекурсией всё просто.
Рассмотрим её на классическом примере факториала.
Процедурное определение:
fact(n) = 1 * 2 * 3 * ... * n
Математическое определение:
fact(0) = 1;
fact(n) = n * fact(n-1)

Из математического определения получаем вдобавок к методу вычисления ещё и границы применимости: очевидно, что fact(-1) не существует.
Вот и вся рекурсия (записываю выражения так, как они следуют из данных выше определений, а следует примитивно):
fact(3) = 3 * fact(3-1) = 3 * fact(2) = 3 * 2 * fact(2-1) = 3 * 2 * 1 * fact(1) = 3 * 2 * 1 * fact(0) = 3 * 2 * 1 * 1 = 6.

Date: Thursday, 1 February 2007 18:26 (UTC)
etoile_verte: (Default)
From: [personal profile] etoile_verte
...наверное, так и поступали жестокие преподаватели, думая, что до того никто не объснил студенту, что такое переменная и как присваивать ей значение.
//типа, я никогда не пыталась разобраться с рекурсией, ага

Date: Thursday, 1 February 2007 20:06 (UTC)
etoile_verte: (Default)
From: [personal profile] etoile_verte
Знаю. Красивая шутка.

Date: Thursday, 1 February 2007 20:22 (UTC)
From: [identity profile] gds.livejournal.com
//типа, я никогда не пыталась разобраться с рекурсией, ага

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

Впрочем, я не настаиваю. Я в этом плане слегка религиозен: как известно, "итерация свойственна человеку, а рекурсия -- богу".

Date: Thursday, 1 February 2007 20:29 (UTC)
etoile_verte: (Default)
From: [personal profile] etoile_verte
Я не математик. Точнее, с математикой у меня всегда было очень хорошо, но не более того: тем виднее граница между человеком и математиком. А плохо у меня с алгоритмизацией, но ей меня никогда и не учили с начала, плавно и вдумчиво. Начинать изучение с рекурсии и указателей явно не стоило.
В итоге я о рекурсии знаю, могу ответить на экзамене, понимаю примеры, но не могу написать ни одного сама. Даже на перле.

Date: Thursday, 1 February 2007 17:24 (UTC)
From: [identity profile] gds.livejournal.com
я считаю, что присваивание -- это самая уродская вещь, которая существует в программировании. Кстати, существует отчасти благодаря милитаризму, который хорошенько был опущен на картинке "пошли в жопу".

Не думаю, что люди с нормальным мышлением (да хотя бы с хорошим математическим образованием) будут вникать в это уродство и воспринимать его как должное: ведь их учили, что значения символов не изменяются, если это не связано с обозначениями (например, в правой части выражения "f(x) = x^2" очевидно, что "x" может быть любым, но это из-за обозначения (обозначение определения функции в математике; на самом деле, есть и формальная теория, которая всё это нормально описывает)).
Я сам тест не увидел из-за .doc-формата, однако в обсуждении увидел пример
int a=10;
int b=20;
a=b;
В первую очередь подумалось: "а зачем они объявляют типы, когда и без этого ясно, что это целые числа, т.к. без '.' внутри", во вторую очередь -- "дык ясно, 'False' получится". Только потом почитал, что они состояние хотели узнать. Ну так понятно, почему это у них возникло. В ц/ц++ ситуация уродская: позволены 1) объявления переменных без начального значения, 2) позволены одновременно и объявления вида "type var = val;", и присваивания вида "var = val;", что весьма путает людей, так как нелогично либо 1) иметь неинициализированные переменные с хрен знает каким значением, либо 2) иметь одинаковое обозначение как для инициализации, так и для присваивания.

Так что этот тест максимум что способен вычислить -- способность человека пользоваться виртуальным ластиком (затирать прошлые значения "переменных") и осознание переменных как "ячеек памяти, которые могут изменяться", что, в свою очередь, объясняет склонность к императивному программированию. Я рад, что _меньше_ половины людей (44%, если я правильно увидел) к нему имеют изначальную склонность -- значит, в будущем может быть ситуация получше, чем есть сейчас.

Date: Sunday, 4 February 2007 19:05 (UTC)
netch: (Default)
From: [personal profile] netch
> я считаю, что присваивание -- это самая уродская вещь, которая существует в программировании.

Я не был бы так категоричен. Присваивание - это прямое отражение метода работы на самом нижнем уровне (сиречь в железе), которое по понятным причинам исторически - из-за тесной связи с нижним уровнем - оказалось основным приёмом процедурных языков. Массовая возможность отхода от них - причём при своей массовости всё равно заведомо менее половины контекстов, ситуаций и применений - началась только в 90-е годы, и по причине огромной инерции IT ещё не вошла в обучение достаточно широко. Но если взять, например, методики MIT (они открыто выложены) - там основное обучение идёт со стороны функционального подхода и постепенно спускается к процедурному. Так что не присваиванием единым:), но без него всё равно на серьёзном уровне программирование не изучить.

> ведь их учили, что значения символов не изменяются, если это не связано с обозначениями

Математику (настоящему) объяснить присваивание тривиально - например, через поколения состояний и присваивание как вид оператора над состоянием. Помощь в этом окажут менее конфликтные обозначения (например, в Алголе с потомками (Паскаль, Ада...) ":=" вместо "="), а первым самостоятельным упражнением - описать математически выполнение оператора "x=x+1".

Ну а дальше - только практика. Которую, опять же, лучше делать не на Си.

> и осознание переменных как "ячеек памяти, которые могут изменяться", что, в свою очередь, объясняет склонность к императивному программированию. Я рад, что _меньше_ половины людей (44%, если я правильно увидел) к нему имеют изначальную склонность -- значит, в будущем может быть ситуация получше, чем есть сейчас.

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

Date: Thursday, 1 February 2007 17:46 (UTC)
From: [identity profile] danvolodar.livejournal.com
Это что, и правда кто-то не способен пройти?! О_О

Date: Friday, 2 February 2007 01:07 (UTC)
From: [identity profile] arnilaarn.livejournal.com
Какой бред!

Специально написал программу на С++ для проверки:

Вот этот кусочек:
int a=10;
int b=20;
a=b;
std::cout<<a<<'\n'<<b<<std::endl;

печатает вот такое:
~$ ./a.out nu polnaja ahineja fignja
Хммм. Наверное, я не способен к программированию :(

А всё потому, что без контекста это строго говоря не определено. Вот полный текст программы, где определяется контекст присваивания.

#include<cstdio>
#include<string>
#include<iostream>
class Int{
private:
std::string s;
public:
Int(const int & i):s("fignja"){}
Int(const Int & i):s("fignja redkostnaja"){}
const Int & operator=(const Int & i){s="nu polnaja ahineja"; return *this;}
friend std::ostream & operator<<(std::ostream & o, const Int & i);
};
std::ostream & operator<<(std::ostream &o, const Int & i){return o<<i.s;}
int main(){
#define int Int
////////////////////////////////////////////
int a=10;
int b=20;
a=b;
std::cout<<a<<'\n'<<b<<std::endl;
///////////////////////////////////////////
return 0;
}

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

Date: Friday, 2 February 2007 14:05 (UTC)
From: [identity profile] tomotom.livejournal.com
да, видимо, те удивительные 50% как раз видят множество возможных контекстов, не желая понимать, "какой ответ от них хотели составители". Правильно, кстати, делают, с дурными тестами так и надо ;)

Date: Sunday, 4 February 2007 18:50 (UTC)
netch: (Default)
From: [personal profile] netch
В "здесь говорят" есть три неявных, но очень грубых допущения.

Первое - что программирование бывает только процедурным. Те, кто не понимает, например, указателей - вероятно, способны программировать на функциональных языках. В которых, заметим, и присваивания как такового нет, а так называемый биндинг обычно делается только один раз.

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

Третье - зависимость от результатов осознания заведомо конфликтного обозначения (знаком "="). Его применение для присваивания - одна из ключевых диверсий Си и потомков (постоянно создающая синтаксические ошибки); поэтому ожидать что кто-то посторонний поймёт что есть "a=b" - нереально. Скорее удивительно, что 50% кое-как осознают, что здесь неправильно, и методом тыка находят правильный ответ (выбором из двух, один из которых явно с душком и потому не годится). Да, они при этом обладают базовыми задатками - которые ещё надо правильно развить.

Суммируя. 50% - гон, прикрывающий творческую импотенцию методистов. Более реально - 10-20%, и то - за счёт не проблем собственно в программировании, а за счёт недостатка и несистемности математического образования (а вот это - значительно более вероятно как основная причина). В условиях недостатка времени и средств, да, может вырасти и до 50% и выше и хоть до 99%, но это ничуть не от каких-то врождённых неумений - а только за счёт хилого образования.

Profile

andrzejn: (Default)
Андрій Новосьолов

March 2026

M T W T F S S
       1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16171819202122
23242526272829
3031     

Most Popular Tags

-

Style Credit

Expand Cut Tags

No cut tags
Page generated Monday, 16 March 2026 12:50
Powered by Dreamwidth Studios