пятница, 18 декабря 2009 г.

Развитие алгоритмических способностей

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

Гипотеза 1: умение программировать и способности к математике взаимосвязаны.
Перефразируя - скажи мне какую оценку ты получил за Мат.Ан. I и II и я скажу какую оценку ты получишь в любом предмете связанном с програмированием.
На мой взгляд логично: если ты умеешь увидеть взаимосвязь в математических формулах и преобразованиях, если понимаешь их а не заучиваешь - у тебя алгоритмический способ мышления подходящий для программиста.

Аргумент: Многие программисты на заре компьютеров вышли из математиков. (А не телега ли это перед лошадью: ведь именно они построили архитектуру компьютера и придумали языки программированию. Может быть, если бы у истоков стояли художники мы имели бы нечто совсем иное?)
Контраргумент (или исключение подверждающее правило??): Я видел людей которые получали 1 или 2 по матану и умели очень хорошо программировать.

Гипотеза 2: умение программировать заложено в генах и определяется родителями.
Контргипотеза 2: умение програмировать развивается благодаря среде в которой человек рос и воспитывался (вернее - это воздействие и является определяющим)

У нас тут было много споров на эту тему. Естественным выводом из гипотезы 2 - умению программировать нельзя научиться - можно научиться только владеть тем или иным языком программирования. Сторонники контргипотезы утверждают, что заинтересовваность на ранних этапах играет определяющую роль - например ребёнок интересуется в школе играми, проводит вместе с компьютером много времени, пытается использовать его в своих целях постепенно обучаясь программированию. В зависимости от среды в какую попадает ребёнок развиваются его умения и способности - следовательно именно среда определяет умение делать чего либо хорошо.

Компромисная гипотеза: любой человек обладает определёнными талантами, но они у него развиты изначально в слабой степени. Развитие того или иного таланта или развития смежных навыков определюет, что человек умеет делать хорошо, а что нет.
Возьмём к примеру шахматы - можно ли человека научить играть в шахматы - я думаю 100% можно. Зависит ли умение играть в шахматы от памяти (смежные области) - наверняка, но я бы сказал что шахматы развивают память (в основном визуальную) а не наоборот.Можно ли человека научить хорошо играть в шахматы. В основном да. Усердный труд приведут вас в кандидаты в мастера (как вашего покорного слугу). Можно ли научиться очень хорошо играть, т.е. стать гроссмейстером? Вероятно да, но надо либо иметь талант, либо посвятить себя данной профессии (а это 100% уже не хобби, а именно профессия).

Мне кстати нравиться такое определение: талант определяет КПД труда человека в той или иной деятельности. Даже если вы не очень талантливы но настойчивы, вы можете добиться такого же результата. талантливый человек просто достигнет этого же быстрее.

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

Постскриптум: Осталось найти методики позволяющие развивать эти способности и попытатся применить их на практике. Кто подскажет? :)


PS: Вот, что предлагает ТТУ на эту тему: Начальный курс программирования.

1 комментарий:

Unknown комментирует...

а вот что на эту же тему предлагает MIT - тыц!