Фундаменталният въпрос за мен е, какво се случва в главите на програмистите, което не се случва в главите на останалите хора? А на тази база може да се постави по-конкретния въпрос, съществува ли тест, който да покаже със задоволителна точност, кой би могъл да се научи да програмира и кой не, още преди тестваният да е виждал език за програмиране или да има някакво знание за тази дисциплина?
Попаднах на една публикация на Saeed Dehnadi и Richard Bornat от School of Computing, Middlesex University, които твърдят, че са съставили такъв тест. Накратко, още преди началото на курс по програмиране, на студентите се дава тест със съвсем прост програмен проблем включващ единствено присвояване и последователно изпълнение, например:
int a = 10;
int b = 20;
a = b;
Въпросът е "Какви са новите стойности на а и b?" и са дадени възможни комбинации от стойности.
Ключовият момент е, че на този етап студентите имат само общи математически познания от училище и не знаят какво се предполага да стане след "a = b". Авторите предлагат 11 възможни мисловни модела, например "=" означава еквивалентност, или означава присвояване от дясно на ляво, или присвояване от ляво на дясно и тн. Важното в теста е не, дали се избира правилният модел (задачите са били на Java), а какво се случва с модела при решаването на различните задачи.
Резултатите от теста показват, че субектите се обособяват в 3 групи:
1. 44% използват един и същи модел за всички, или почти всички въпроси (последователна група)
2. 39% използват различни модели за различни въпроси (непоследователна група)
3. 8% отказват да отговорят на всички или почти всички въпроси (празна група)
Авторите правят два теста, преди курса и в средата и имат сравнения с реалните изпитни резултати на студентите. Освен това имат и интересна статистика за движението между групите.
Логично за мен, най-успешните студенти са от първата група. Не мога да си представя, как някой би написал половината програма мислейки по един начин и посредата да реши да смени своята представа за системата и да я донапише опирайки се на различен фундамент.
Много интересно разсъждение присъства в публикацията, което гласи:
"Формалните логически доказателства и от там програмите - формални логически доказателства с възможни определени изчисления, изразени чрез формална система наречена програмен език - са напълно безмислени. За да пишеш компютърна програма трябва да приемаш това, че каквото решиш програмата да значи, машината сляпо ще следва своите безмислените правила и ще стигне до лишени от смисъл заключения. В теста последователната група показва предварително приемане на този факт - те са способни да видят математическите проблеми като правила и могат да следват тези правила, където и да ги отведат те. Непоследователната група от друга страна, търси значение, там където такова няма. Празната група знае, че вижда пред себе си безмислици и отказва да се занимава с тях."
Цялата публикация е тук, а
това е връзка към страницата на единия от авторите.