Як я виріс без Кодабры

Двадцять років тому я написав першу стрічку коду:
10 CLS
. Саме так, не вітаючись з світом і не уявляючи, що мене чекає, я ввів слідом
RUN
та електронна машина також безцеремонно кинула мені перший виклик, стерши всі на екрані телевізора з насмішкою "ОК". Я був здивований, але не того, що можу наказати машині щось зробити, а тому, що вона може мені відповідати. Мені було 7, і це історія про непрості стосунки дитини з комп'ютером, через призму років очима відбувся програміста.

До часу написання першої програми, я був вже "просунутим користувачем" побутовою електронікою в будинку. Як відомо будь-якій дитині, якщо щось має кнопки або ручки, то ці кнопки повинні бути неодмінно натиснуті, а ручки викручені до упору. На щастя, мені ніхто не забороняв займатися цим досхочу і, як і очікувалося, одного разу ручок стало недостатньо і в хід пішли болти і шурупи, явивши моєму погляду чудовий світ друкованих плат і мікросхем. Батько явно схвалював мої нахили розбирати все підряд і спробував навчити мене ще й збирати ці речі назад, викладаючи основи радіотехніки на практиці. Мені подобалося паяти і збирати прості пристрої, але великого успіху я тут не досяг. Фізичний світ виглядав надто вже нудно в порівнянні з що з'явилася у мене в той час ігровою приставкою Dendy. І тут я досяг воістину видатних успіхів.
Важливим внеском ігор у розвиток комп'ютерних навичок у дитини, на мій погляд, є необхідність постійної взаємодії з різними користувацькими інтерфейсами, які, на відміну від комп'ютерних програм, у всіх іграх різні, але виконують стандартні функції. Це швидко розвиває "комп'ютерну кмітливість", підсвідомо виділяючи ті чи інші загальні шаблони (наприклад, налаштування гри), дозволяючи згодом досить швидко орієнтуватися навіть на незнайомому екрані. І, звичайно ж, кнопки. Освоївши геймпад, дитина легко освоїть і будь-яку клавіатуру.
Я витрачав на приставку майже весь вільний час, який виділяли мені батьки на телевізор. Неважко зрозуміти, що захопити дитину чимось іншим, коли у нього є ігри, завдання не з легких. Але одного разу батькам вдалося провернути воістину грандіозну прийом, купивши для мене "Навчальний комп'ютер Сюбор". Особливістю цього пристрою було те, що він володів повнорозмірною клавіатурою IBM, будучи за фактом тим же Dendy в комплекті з "навчальним картриджем", на якому було записано кілька програм, що підтримують введення з цієї клавіатури. Який ностальгує читач може перейти за посиланням на сайт "Залізні примари минулого", щоб згадати цю легендарну приставку. Програми на "навчальному картриджі" хоч і були не надто хорошої якості, але включали в себе цілих два інтерпретатора мови програмування Basic. Один називався "G-BASIC", а другий "F-BASIC". Зараз мені відомо, що це були сильно урізані клони Famicom BASIC і Applesoft Basic відповідно. Документація по "F-BASIC" була відсутня практично повністю, тому скільки-небудь освоїти його мені не вдалося. "G-BASIC" ж виявився досить цікавою річчю, тому що містив у собі редактор графіки на основі патернів, немов вирізаних з якоїсь версії "Маріо" і набір вбудованих спрайтів з того ж "Маріо", які можна було переміщати і анімувати за допомогою коду. Іншими словами, на нього можна було написати цілу гру!
image
фото 20 СТОЛІТТЯ
На жаль, це виявилося не зовсім правдою. Я навчився переміщувати спрайт по екрану досить швидко, графічний редактор теж не становило жодних проблем. Вдосталь награвшись з прикладами з цією книги, мені захотілося створити свою власну інтерпретацію коханої у той час ігри "Green Beret" (відомої також як "Rush'n Attack") і тут прийшло перше розчарування – намалювати свій власний спрайт було не можна, оператор
SPRITE
працював тільки з вбудованими спрайтами Маріо і його друзі, з очевидних причин, ніяк не підходили на ролі в грі про збройне протистояння СРСР і США. Проявивши кмітливість, я спробував намалювати "спецназівця" з допомогою ASCII-символів, але ця ідея була свідомо провальною. В той момент "сюбор" практично помер для мене. Від безвиході та тимчасової відсутності нових ігор на Dendy, довелося розібратися з циклами, введенням з клавіатури і написати програми для вирішення шкільних прикладів по математиці. До закінчення першого класу школи для мене залишилися тільки два загадкових оператора бейсика –
РОКЕ
та
РЕЙОК
, які були призначені для запису і читання даних з пам'яті. Підсвідомо я відчував у них якийсь величезний потенціал, так як все ще не залишав ідею намалювати власний спрайт і вірив у диво. Але практично повна відсутність документації та авторитетної допомоги зіграли свою роль, і я так і не зміг знайти реального застосування цих операторів, хоча і навчився читати пам'ять з довільною адресою і навіть міг змусити приставку перезавантажитися, записавши що-небудь в небезпечну область пам'яті.
Розмірковуючи зараз про роль "сюбора" у моєму становленні, як програміста, я не надаю йому великого значення. Було важко сприймати його, як щось більше, ніж просто чергову гру, при цьому не надто добре зроблену. Це був перший досвід зустрічі з поганим, але він дав поштовх до дослідження питання, адже мені тоді вже було відомо про "дорослих" комп'ютерах і на що вони здатні у порівнянні з моїм "сюбором". Я читав батьківські журнали "Радіо", гортаючи всі статті про електроніку і залипаючи на документах 16-ричных дампів програм для мікроконтролерів. Зрозуміти було нічого неможливо, але я б в той час багато чого віддав за комп'ютер, в який ці дампи хоча б можна було вводити.
Моя мрія збулася якраз під новий рік, але досить дивним чином. Замість IBM PC/XT c великим монітором і дисководом, я отримав непоказну коробку з черговою "клавіатурою" всередині під назвою "Побутовий комп'ютер Компаньон-2".
"Компаньйон" був російським клоном популярного раніше ZX Spectrum, мав 48 кб оперативної пам'яті, інтерфейсами для підключення джойстиків і магнітофона для збереження і завантаження даних з магнітної стрічки. Як і ігрову приставку, його потрібно було підключати до телевізора, або до спеціального монітора, якого у мене, звичайно, не було. Довелося повозитися з підключенням до телевізора (ТВ-вихід на моїй моделі комп'ютера виявився зламаний), зробити кабель для RGB-інтерфейсу і знайти підходящий магнітофон. І ось через якийсь час, екран заморгав вітальним курсором Sinclair BASIC. Бонусом до комп'ютера мені дісталася чудова книжка "Як написати гру для ZX Spectrum" і парочка касет з іграми, тому до моменту першого успішного включення комп'ютера, я вже знав, що треба робити. Звичайно ж запускати ігри.
image
фото Retro Tresaures
Через кілька днів відчайдушного перемотування касет і нескінченного очікування завантаження великих ігор під звуки записаних на плівці нулів і одиниць, що мчаться на швидкості 1535 бод прямо в ОЗП мого комп'ютера, я усвідомив, що всі ігри на "спектруме" абсолютно нікчемні в порівнянні з Dendy. Ця ситуація знову залишила мене один на один з бейсіком.
На відміну від "сюбора" з його іграшковим програмуванням, тут мова був повноцінним, не прив'язаним до дурної графіку з "Маріо" і з удвічі більшою кількістю операторів. Пропорційно можливостям, зросла і складність, а разом з нею і інтерес. Я чудово розумів, що зараз мене обмежують лише мої власні знання і навички, а не сама машина, тому довелося підійти до справи серйозно. Моєю метою було написати власну гру.
Першим ділом мені потрібні були спрайт і, так як описано в книзі програми "Art Studio" для малювання графіки у мене не було, довелося озброїтися зошитом у клітинку. Я поклеточно малював потрібні спрайт, а потім переносив їх на екран через код. Це була разюче монотонна і складна робота, в якій дуже легко було помилитися. Але результат був видний відразу, і це дуже надихнуло. На даному етапі мені навіть не потрібно зберігати свої програми, тому що вони були "замальовані" у мене в зошиті, а я кожен раз набирав код заново, щоб звикнути до нової клавіатурі. На "спектруме" майже всі команди бейсика були написані прямо на клавішах і, зазвичай, на набір однієї команди вимагалося лише одне натискання.
Через пару тижнів і зошитів у мене були спрайт "спецназівця", "ворогів", та деяких декорацій. Я навіть придумав назву для гри, поки малював – "Солдат удачі". Суть була стандартна – вбити всіх ворогів. Гравець міг керувати героєм і стріляти за допомогою джойстика, а вороги рухалися в хаотичному порядку, намагаючись вразити героя врукопашну. Додаткову складність вносили декорації у вигляді "джунглів", через які не можна було пройти і не пролітали кулі.
Навчити "спецназівця" ходити виявилося простим завданням, код для цього не сильно відрізнявся від "сюборовского", який я вже знав. А ось з ворогами виникла перша складне завдання в моїй программистской практиці. Пересувати спрайт в повністю рандомних напрямках було легко, але від цього гра набувала надто непередбачуваний характер, не кажучи вже про те, що ворогам було абсолютно наплювати на героя. Довелося винаходити якусь подобу "штучного інтелекту" для ворогів, щоб грати було цікаво. За цим заняттям я провів багато місяців, постійно експериментуючи і змінюючи логіку програми. Чим більше ставала моя програма, тим більше незручностей став доставляти бейсік з його нескінченними
GO TO
та
PAUSE
. Одного разу мені вдалося дістати другу книгу із серії "Як написати гру для ZX Spectrum", яка називалася "Як написати гру на асемблері для ZX Spectrum". Це був справжній хардкор для дитячих мізків, але я зачитувався, дивуючись можливостям, які надавав мова асемблера ZX80.
Була одна проблемка. У мене не було програми транслятор асемблера і я не міг відразу ж практикуватися, читаючи книгу. Зате у мене був бейсік і ті самі
POKE
та
PEEK
, весь потенціал яких я зміг усвідомити тільки зараз. Я поринув у світ пам'яті, адрес і непередбачуваних наслідків. Застереження в книзі про те, що не варто записувати що потрапило за адресами, призначення яких не знаєш, мене не надто зупиняли. Першим ділом я зайнявся експериментами з т. зв. "системними змінними" – адресами в пам'яті, за яким зберігалися дані для "операційної системи", що стосуються всіх сторін життя комп'ютера, від клавіатури до монітора. З бейсика це було просто, наприклад, вводиш
РОКЕ 23659,0
– і в твоєму розпорядженні весь екран, без системного вікна! Чи варто говорити, наскільки моя гра покращилася після додавання до неї тих можливостей, що давали "системні змінні"? Але пам'ятати адреси і числові значення, які можна туди писати, зовсім незручно, не кажучи вже про те, що я уявити собі не міг, як будуть працювати приклади асемблерного коду з книги. Тоді у мене народилася божевільна ідея – написати транслятор самому. Точніше, я зрозумів, що займаюся написанням транслятор асемблера, набагато пізніше, ніж приступив до цього. Просто у мене була таблиця ассемблерних мнемонік і відповідних їм шістнадцятиричних кодів і я подумав, чому б не написати програму для перекладу з однієї в іншу, адже з 16-ричными числами в бейсіку я вже вмів поводитися.
image
Скріншот Viva Games
Чим більше я поринав у світ асемблера, тим більше розумів, як же насправді працює мій комп'ютер і чому він працює саме так, а не інакше. За цим заняттям пролетіли роки, через які у мене з'явився "справжній" комп'ютер x86, відкривши собою нові горизонти пізнання. Тепер, завдяки "спекки", я вже точно знав, що з ним робити.
Озираючись зараз на свій перший досвід програмування на Basic, як перша мова, я не зовсім впевнений в його позитивній оцінці. Починаючи вивчати "великі" мови програмування, я зіткнувся з певними проблемами, викликаними звичкою думати в термінах рядків і безумовних переходів, переучуватися було трохи боляче. З ассемблером ж ситуація зрозуміліша. Хоча архітектури x86 і Z80 мають між собою мало спільного, але основоположні принципи не змінюються і ці знання досі допомагають мені навіть при програмуванні на мовах високого рівня, так що тут я абсолютно точно не помилився.
Як ви розумієте, мій шлях в програмування навряд чи можна назвати стандартним, навіть для 90-х років, в основному з-за специфіки обладнання, на якому доводилося вчитися. Адже в той час в Росії вже були поширені комп'ютери на базі x86 і багато мої знайомі програмісти починали свій шлях саме на них, не відчуваючи необхідності в буквальному сенсі "колупати залізо" у пошуках необхідної функції і писати самому собі редактори коду. Розмірковуючи над цим, я задаюся питанням про сучасних дітей і про те, як вивчають програмування вони зараз, через майже 50 років нестримного розвитку комп'ютерної техніки і проникнення комп'ютерів буквально в усі сфери людського життя. По щасливою випадковості, на життєвому шляху мені зустрілися хороші хлопці з "Кодабры", які і розкрили деякі секрети з життя сучасних школярів.
Для початку про школу. В мої часи уроки "інформатика" у школі виглядали вельми сумно, в основному із-за відсутності справді компетентних викладачів та обладнання. Мені було там нудно, а однокласники просто клеїли дурня від того, що нічого не розуміли. Чого варто тільки програмування в зошитах. Хто тільки міг придумати таку дурість? Програмування та комп'ютери нерозривно пов'язані. Можна виконувати код в розумі і можна записувати його маркером на вікні, але тільки коли ти вже точно знаєш, як він працює в комп'ютері, а для цього, природно, потрібен сам комп'ютер. На щастя, зараз таких проблем не залишилося навіть, напевно, в найвіддаленіших частинах нашої країни. Діти починають вивчати комп'ютер практично з початкових класів і навіть якщо у них немає дому свого, до 7 класу вони все одно стануть тими самими "Операторами ПК". А далі вже починається справжня інформатика, якість якої, як і в мої часи, сильно залежить від викладача і школи.
"Кодабры", звичайно, таких проблем не буває, так як всі її викладачі самі є професійними програмістами і будують свої уроки на практиці. Я не був здивований, дізнавшись, що і зараз саме ефективне викладання програмування для дітей, будується на іграх. З появою Unity, це заняття стало ще більш невимушеним і цікавим, а головне, без бейсика – тут для занять використовується З#. Хоча мені зараз і не доводиться часто використовувати C# в роботі, але не можна не визнати, що на даний момент це один з дуже вдало спроектованих сучасних мов програмування. Він не дуже підходить для навчання азам, але це і не потрібно. Для дітей молодшого віку практикуються візуальні мови програмування, такі як Scratch. Візуальне програмування – чудова ідея для знайомства з базовими поняттями в програмуванні, такими як змінна, умова або цикл, а ще там можна малювати кольорові спрайт!
Трохи шкода, що низькорівневі речі в останні роки все частіше опускаються при навчанні програмуванню або розглядаються поверхово, адже рухатися з високого рівня до низького набагато складніше, ніж навпаки. Але стрімко набирають популярність, у тому числі і в шкільних колах, Arduino, Raspberry Pi і зростаючий з кожним днем "інтернет речей", обіцяють скоро змінити ситуацію в кращу сторону. При правильному підході, Arduino може стати "другим спектрумом" для дитини, подарувати безцінні в майбутньому знання і зайняти на безліч захоплюючих годин.
Я бажаю "Кодабре" скоріше створити курси з низкорівневому програмування залозу і для дітей, і запрошую хабравчан відвідати "Фестиваль цифрового творчості
для дітей і підлітків Digitalfest" 4 грудня, на якому буде в тому числі і секція, присвячена інтернету речей і робототехніки, на яких можна познайомити дитини з не зовсім звичайними комп'ютерами.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.