in Մանկավարժի Նոթեր, ՏՏ

11193145_1646818045550754_2137049763_n

Մի դիտարկում եմ արել՝ երբ երեխաները (և ոչ միայն) սովորում են ծրագրավորման հիմունքները, ամենադժվար ընկալվող բանը ֆունկցիաներն են։ Ոչ թե ստանդարտ գրադարաններում գտնվող ֆունկցիաները, այլ այն ֆունկցիաները, որոնք իրենք պիտի ստեղծեն որևէ խնդիր ավելի էֆեկտիվ լուծելու համար։

Կուզեմ այս գաղափարի հաստատում կամ մերժում ստանալ ընթերցողից, ով դասավանդման փորձ ունի ․․․

Իմ զինանոցում մի քանի մեթոդ և մետաֆոր կա, որոնք ես օգտագործում եմ երբ փորձում եմ ֆունկցիաների գաղափարը, օգտագործումը և օգտակարությունը ցույց տալ։

1․ Ֆունկցիաները որպես պրոցեդուրաներ կամ մոդուլներ

Այս մոտեցումը ցուցադրելու համար նախ լուծում եմ որևէ խնդիր առանց ֆունկցնարի օգտագործման, իհարկե երկար է ստացվում ․․․ ապա ցույց  եմ տալիս նույն խնդրի լուծումը ամբողջական ծրագրային կոդը տրոհելու միջոցով և դրա տարբեր մասերից ֆունկցիաներ սարքելու եղանակով։ Հույս ունենալով, որ ավելի կարճ ծրագիրը գրավիչ կլինի։ Զուգահեռ պատմում եմ, որ ինչպես քաղաքականության մեջ, այնպես էլ ծրագրավորման ժամանակ աշխատում է «բաժանիր և տիրիր» սկզբունքը։ Այստեղ կարելի է նաև մոդուլյարության մասին խոսել։

2․ Թույլատրում եմ գնալ երկար կամ սխալ ճանապարհով, ապա ցույց եմ տալիս լուծումը ֆունկցիաներով

Օրինակ այս պարզ խնդրում թողնում եմ, որ տանջվեն ու ցիկլի մեջ ցիկլ խցկելով խնդիրը մի կերպ կամ լուծեն կամ էլ ոչ ։) Իրականում նպատակը հետո is_in_array()  ֆունկցիան ստեղծելով «բաժանել և տիրելն» է, ուսանողների կրած «տանջանքի» և ֆունկցիայի միջոցով լուծաման միջև կոնտրաստի հաշվին հոգեբանական այնպիսի վիճակ ստեղծելը, որ ֆունկցիաների օգտակարությունը ակնհայտ լինի։

3. ֆունկցիան՝ որպես բարդ պրոցեսները մեկ բառով արտահայտելու մետաֆոր

Այս մոտեցումը կա նաև «Արտահայտիչ ջավասքրիփթ» գրքում, այնտեղ ցուցադրվում է, որ մեկ բառի տակ կարող է մի ամբողջ ալգորիթմ թաքնված լինել։ Օրինակ՝  “պատրաստիր խորաված” հրամանի տակ ամբողջական մի ալգորիթմ է, որը մենք կարող են նաև չիմանալ , այլ միայն իմանալ, թե ինչպես անել տվյալ հրամանի կանչը, մետաֆորիկ լեզվով ասած ՝ ում զանգել և ինչպես ասել, որ մեզ համար խորոված պատրաստի։ Այս օրինակով կարելի է բացատրել ինկապսուլյացիայի՝ ներքին իրականացումը ֆունկցիայի ներսում  թաքցնելու գաղափարը։

4. Ֆունկցիա ստեղծելը ՝ որպես ծրագրիրը կատարողին (ինտերպրետատոր, կոմպիլյատոր)  կրթելու միջոց

Այս մոտեցումը իրականացված է lego լեզվում (օրինակ` k-turtle, կրիա), այս լեզվում ֆունկցիայի հայտարարումը արվում է, ոչ թե function բառով , ինչպես շատ այլ լեզուներում, այլ  learn բառի միջոցով։ Այսպես , եթե ուզում ենք կրիային կրթել՝ սովորեցնել եռանկյունններ գծել, ապա կանենք այսպիսի մի բան:

Screenshot from 2016-06-10 17:04:23

 

Մենք կրթում/սովորեցնում ենք ինտերպրետատորին, ու «նա» սովորում է նոր հրամաններ կատարել, որոնք մինչ այդ չգիտեր։

5. Ստանդարտ գրադարանի ֆունկցիաների ռեվերս ինջինիրինգ

Սա ևս մի միջոց է ֆունկցիաների ընկալումը հեշտացնելու համար։ Վերցնում եմ ստանդարտ գրադարանի որևէ ֆունկցիա, ու գրում եմ այն ինքուրույն, դա կարող է լինել մաթեմատիկական ֆունկցիաներից որևէ մեկը max, min, pow …  Որոշ դեպքերում զանգվածների հետ աշխատող ֆունկցիաներից որևէ մեկը …

6․ Ֆունկցիան մաթեմատիկական իմաստով

Որևէ մաթեմատիկական արտահայտություն (ֆունկցիա) գրում եմ ծրագրավորման լեզվով։

7․ Ֆունկցիան բուն ֆունկցիոնալ իմաստով, ֆունկցիան առանց կողմնակի էֆեկտների

Սա ամենադժվար բաներից մեկն է։ Հիմա մտածում եմ, որ այս մոտեցումը կարող է աշխատել, եթե գտնեմ որևէ հանրահայտ արտադրական պրոցես, որտեղ ունենք հումք (մի քանի տեսակի հումք, որպես մուտքային արգումենտների մետաֆոր) և ունենք ելք որպես return֊ի մետաֆոր։ Ֆունկցիան այս տեսանկյունից կհանդիսանա մուտքային տվյալները տրանսֆորմացնող միջոց ՝ ֆաբրիկա, կոնվեյեր կամ այլ նման բան։  Տրանսֆորմացիայի գաղափարը հոգեբանական տեսանկյունից պիտի որ  լավ աշխատի ցանկացած տիպի տվյալների հետ՝ պրիմիտիվ տիպերի, զանգվածների և օբյեկնտների։

  • Ի՞նչ մետաֆոր կառաջարկեք 7֊րդ կետի համար
  • Դուք ի՞նչ մետաֆորներ կամ մեթոդներ եք օգտագործում

UPD:

8․ Ֆունկցիան որպես գործի մի մասը անող օգնական

Խնդրում եմ, որ ուսանողը որևէ մաթեմատիկական հաշվարկ անի։ Հետո ասում եմ, որ «ես օգտագործեցի քեզ որպես ֆունկցիա, խնդրիս մի մասը տալով քեզ, քո ականջները հանդիսացան  ֆորմալ արգումենտների մուտքերի կետեր, իսկ խոքդ որպես արժեքի վերադարձ»։ Դրանով ուսանողը ինքն իր ներսից հասկանում է, որ իր մտքում ահագին օպերացիաներ տեղի ունեցան, որոնք անտեսանելի են դրսից, բայց արդյունքը օգտագործվում է դուրսը ու պիտի ֆունկցիան «բերան» ունենա, արժեքը վերադարձնելու համար։

Դբա Լավը ։)

  1. 7֊րդ կետի վերաբերյալ քեզ, եթե չեմ սխալվում, ասել եմ։ Մենք մի խնդիր ունենք Ռոբոտիկս 1֊ի ժամանակ, որ ռոբոտը սեվ գծին հետևելով գնումա ու ամեն անգամ, որ խաչմերուկի հասավ, պիտի մի քանի գործողություն անի իրար հետևից։ Սկզբից ամեն մեկը հերթով գրում են իրար հետևից, հետո հենց իրանք հասկանում են, որ էտ նույն գործողություններն են, ու հարցնում են, թե չեն կարա էտ կրկնությունները անընդհատ չգրեն։

    Ինչ վերաբերումա արտադրական պրոցեսսի օրինակին, գուցե վերցնես գործարանում շշերի լվացման պրոցե՞սը։
    Մուտքը միշտ նույննա՝ շիշը, բայց կախված շշի աղտոտվածության, տարբեր մաքրման պրոցեսսներովա անցնում։

Comments are closed.