Однією з найскладніших наук, досліджуваних в школі, є, без сумніву, програмування. Здавалося б, що складного в тому, щоб навчитися видавати послідовність дій, які комп'ютер б перетворив в програму? Адже програмування, по суті, те саме перекладу. Точно також, як ми перекладаємо тексти з російської на англійську, програміст переклад послідовність дій в програму на одній з мов програмування. Що в цій схемі складного? Як не дивно, та сама магічна "послідовність дій", звана алгоритмом.
Алгоритм - це набір логічно пов'язаних, часто послідовних, дій, що приводить до заданого результату. Я не буду заглиблюватися в властивості теорії алгоритмів, в поняття дискретності, повноти і кінцівки, а зупинюся лише на фразі "логічно пов'язаних". Щоб програмувати необхідно знати і розуміти логіку і логічне мислення. У звичайному житті ми керуємося правилами. Програма - це жорсткий набір дій (за винятком декларативних мов, але вони - тема окремої розмови). Візьмемо найпростіше - заварку чаю. Ви коли-небудь замислювалися над тим, що необхідно зробити, щоб заварити чай. Пригадується "закип'ятити воду, налити в кухоль, покласти пакетик чаю і цукор, випити". Однак алгоритм, навіть приблизний, виглядав би по-іншому:
- взяти чайник
- Якщо в чайнику немає води, налити туди холодну воду.
- Поставити чайник і включити його.
- Чекати до тих пір, поки чайник не закипить.
- Коли чайник закипів, взяти кружку.
- Покласти в кружку пакетик з чаєм і цукор.
- Залити водою з чайника.
- Якщо чай не солодкий, то додати цукру.
- Повторювати п. 8 до отримання прийнятного смаку
І це - коротко. Щоб пояснити машині, що людина від неї хоче, потрібно набагато більше команд. В такому простому алгоритмі, який наш мозок ніяк не хоче розглядати, як складний, використовуються і умови, і цикли, і предикати. Зрозуміло, реальні програми складніше.
І ось тут у безлічі учнів виникає когнітивний дисонанс. Наприклад, ЯК змусити машину щось робити? Мозок відмовляється писати програму "в очевидному випадку", відмовляється розуміти "очевидне". Вивчення блок-схем і логіки може допомогти цьому процесу, але не до кінця. Розуміння приходить з практикою.
Тому з програмуванням так погано в звичайних школах. У гімназіях, особливо, фіз.-мат. справи йдуть трохи краще, так як таких дітей змушують думати ще в ранньому віці. Але без чіткого розуміння мети, без уміння розділити "складне на просте", без уміння вибудовувати логічні ланцюжки, не можна навчитися програмувати. Можна навчитися писати програми, схожі на ті, що вже проходили. Але щось нове завжди викликатиме ступор. Ступор, сформований в тому числі і сучасною системою освіти, в якій немає місця ні логіці, ні мислення.
До чого я вся ця розмова? До того, що, по-моєму, велику частину викладачів інформатики можна розділити на 2 класи: ідіоти (ті, які з комп'ютером на Ви, викладають за підручниками, самі розуміють з великими труднощами, якщо розуміють) і ті, які щось вивчили / усвідомили в силу віку, і тепер вважають це очевидним і щиро дивуються, які ж тупі діти, раз не можуть написати простеньку програму. Як приклад приведу реальний випадок завдання для учня 8 класу, яку мене попросили вирішити. Мені довелося витратити годину. При 7-річному досвіді роботи + 5 років матмех + 4 фіз.-мат. школи.
Коротке формулювання завдання: Потрібно намалювати в паскале кілька вікон, в кожному з яких бігає змійка, керована з клавіатури, яка змінює колір і "символ" при відскоку або зміні напрямку, вікна перемикаються після натискання клавіші Z.
При цьому цикли практично не проходили, функціональне програмування не вивчалось, взагалі, пояснень, як таких, не було. Питання: як таке завдання можуть вирішувати в 8 класі, за умови, що, власне, програмування в 8 класі і починається (в деяких школах)? При всьому своєму самоповазі і прочая, я не даю завдань подібної складності в 10 класі, коли діти мають набагато більше здорового глузду, ніж 8-класники. Не розумію.