SEC-S20W2 - How to Prepare Yourself for Programming?

in Ukraine on Steem3 months ago (edited)
Вітаю! От і пройшов перший тиждень нашого навчання. Радий вас запросити до другого уроку, він вже більш приземлений ніж перший. Більш практичний. Хто був на першому - продовжуйте, а хто щойно долучився- розпочинайте.


image.png

Та я все таки хочу повернутися до одного питання.

Основним питанням минулого домашнього завдання було

"What should you have done before to become a programmer in the future?"

А головне слово у цьому запитанні було "before".

Перед чим? Перед всім!! Перед тим як вирішили спробувати себе в програмуванні. Тобто задовго до навчання на програміста.

Наприклад прожили ви певний етап свого життя, і ніколи не думали про комп'ютери та програмування. І ось несподівано вирішили стати програмістом. Запитання було в тому, що треба було робити на отому етапі життя, щоб далі гарно здобувати професію програміста. Питання було свого роду головоломкою. І вірна відповідь - розв'язувати головоломки.

В школі найкраще для цього підходить математика(геометрія).

Геометрію можна представити як ящик з теоремами та аксіомами. Розв'язуючи задачі ви просто вибудовуєте пов'язуючи у ланцюг відомі аксіоми та теореми і породжуєте щось нове - нову теорему(чи розв'язуєте задачу).
Програміст робить те саме: він відомі йому команди пов'язує у ланцюжок і створює нову програму. А програма схожа на велику команду. Складність тут в тому, що треба відібрати одні теореми(команди), відкинути інші і побудувати ланцюжок доведення(послідовність команд) і вийде нова теорема(програма).

Саме тому математика як така треба не всім програмістам, вона треба була раніше, щоб у Вас розвинулося алгоритмічне мислення, логіка. Це більш потрібно всім програмістам. Математика ж певній частині програмістів. Інший приклад штанга та гантелі. Для чого вони Вам? Ви ж не будете носити їх у подальшому житті - вони потрібні були раніше, як інструмент, завдяки якому Ваше тіло отримало силу на витривалість.

А що робити коли математика важко дається, чи не подобається? Раз вона не всім програмістам потрібна.

Замість математики тут може виступити розв'язування різних головоломок.

Як же почати програмування?
І тут виходить парадокс.
Програмувати Ви не можете бо не знаєте команд((
А як вивчите команди - але це ще не значить що Ви знаєте мову програмування і можете програмувати.
А як вивчите мову - Ви все рівно не зможете програмувати.
Бо слід ще й знати як розв'язувати задачі.

Програмування — це, перш за все, вміння мислити логічно та системно, а мови — лише інструмент для реалізації цих думок.
Саме тому не так важливо з якої мови починати навчання, звісно це має бути одна з популярних сучасних мов, яка скоріш за все знадобиться, а не такі старі мови як Basic, Pascal, Fortran.

Логічне послідовне мислення зараз математикою Вам не розвинути, бо її треба вчити. А до математики або ще далеко, або вже далеко.

То як же бути.

Мислення, яке так важливе для програмування, можна розвивати не лише через математику. Якщо вона здається складною або не актуальною на даний момент, існують інші способи його тренування. Одним з найпростіших та найефективніших є головоломки.

Тобто це самі елементарні головоломки. Вони були ще до комп'ютерів, вони були на початку комп'ютеризації, бо була слабка графіка. А коли стала крута графіки всі стали грати в 3D, і логічні ігри відійшли на другий план. Вони були пережили друге народження на мобільних телефонах. Але зараз 3D прийшло і в мобільні телефони. Хто зараз грає в логічні ігри?

Сама мабуть класична головоломка це шахи. І звичайна гра сама по собі, і на сайтах де можна пограти в шахи є шахові головоломки. Знайдіть мат через три ходи. Знайдіть найкращий хід. І т.п.

Це скріншот з гри SmartSokoban, класичний перший рівень з 1980х років. Дана реалізація 2001 року вже дуже стара, не знаю чи вдасться її знайти в інтернеті.


image.png

Сокобан
Однієї з перших ігр в які я грав та які я програмував. Кожен рівень гри - склад, де стоять контейнери(ящики). Їх треба передвинути на відмічене місце. Вантажник може лише **штовхати** ящик, тянути і штовхати два не вийде. Тобто є лише чотири команди: вгору, вниз, вправо, вліво.

Можна скласти алгоритм(послідовність дій) для перетягування всих ящиків на місце.
Прослідкуйте:

вгору, вліво, вліво, вниз, вліво, вліво, 
вліво, вліво, вгору, вгору, вліво, вліво, вгору, вліво, вліво, вниз,
вправо-16 раз.

Після цих кроків контейнер буде на місці - це і була перша програма.
Послідовність дій що приводить до певної мета(загнати ящик на його місце)
Але якщо прослідкувати далі, задача стала не розв'язною, чому?




Спочатку такі ігри несвідомо готували до програмування, навчали послідовно ти логічно мислити.
А потім вже цілеспрямовано почали створювати такі "ігри". Тобто системи де не програмісти можуть програмувати.

Прикладом такого є blockly.games


image.png

Я спочатку вибрав головоломки, та мабуть для всіх вас вони будуть прості. Та з декількома варто позайматися.

image.png

Далі йде 10 завдань теми лабіринту Кожного разу вам дають певний набір команд. На перших рівнях це одна-дві. Треба використовуючи їх дістатися з пункту А в пункт Б. Може бути таке що треба повернути праворуч, але такої команди нема в наявності. Проте є команда ліворуч. То як же повернути праворуч? Далі будуть йти нові команди, але і завдання будуть складніші. В кінці навіть буде обмеження на кількість команд. То не поспішайте, задачу часто на перших порах виконують не враховуючи таке обмеження. а потім коли задачу розв'язано намагаються зменшити кількість кроків. Ще та й ще. Аж до ідеалу. А от тут можливо в таких задачах включаються в роботу математики-теоретики які винаходять більш оптимальні-швидкісні методи.

Ще прикладом такого роду навчання програмуванню є сайт code.org.
На цьому сайті дуже багато навчального матеріалу, з різними героями.

Мені сподобалося навчання з героями гри Майнкрафт,
Зареєструйтеся на цьому сайті,


image.png

Там є й більш серйозні навчальні матеріали, наприклад такі

image.png

Я навів пару прикладів сайтів де можна в ігровій формі, на інтуїтивному рівні ознайомитися з програмуванням.
Вже в наступному уроці все буде по справжньому, нам буде не до ігор - хіба що будемо самі їх робити.


Домашнє завдання


(+1,0) "What should you have done before to become a programmer in the future?"

Задаю повторно запитання з минулого уроку, адже воно досить важливе - хто минулого разу відповів - +1auto

(+1,0) Назвіть відому раніше або знайдіть якусь просту онлайн гру (логічну чи головоломку).

Поясніть на її прикладі як вона може допомогти майбутньому програмісту.


image.png

(+0,3) Вовк-коза-капуста

Гадаю що багато хто знаю класичну задачу про вовка, козу та капусту. Де чоловіку треба їх всіх перевезти в човні на інший берег, при умові що в човен він може взяти щось одне. А без чоловіка залишати їх самих не можна, бо з'їсть капусту, а вовк з'їсть козу.

(+0,3) Двоє чоловіків та двоє хлопчиків з човном:

До берега підійшли пара чоловіків, які хотіли перейти на інший бік річки. Вони побачили неподалік двох хлопчаків, які весело плавали у човні. Чоловіки вирішили попросити хлопчиків допомогти переправитися, але з’ясувалося, що човен дуже маленький. Він міг витримати або двох хлопчиків одночасно, або лише одного дорослого.
Дорослі задумалися, як їм потрапити на інший берег, якщо човен такий маленький. Хлопці погодилися допомогти і стали міркувати разом із ними. Завдання було непростим, але поміркувавши вони допомогли людям переправитися на інший берег.

(+0,3) Двоє чоловіків та один човен

Два чоловіки підійшли до річки. Біля пустинного берега стояв одинокий човен, в який міг поміститись тільки один чоловік. Поруч людей і хлопчиків як у попередній задачі не було. Все ж таки обидва мандрівники без будь-якої допомоги переправились на цьому човні через річку і продовжили свій шлях. Як вони це зробили? Гарно подумайте!

(+2.0 = 0.6 + 0.7 + 0.7)blockly.games

На сайті https://blockly.games/ в розділі Maze розв'язати перші сім завдань для себе, щоб навчитися. Останні три розв'язуєте і ділитеся у свій допис. Якщо не виходить 8,9,10 - то розв'язуйте 7,8,9. Але оцінка буде менша на (0,1) з кожним рівнем.
Завдання також треба розв'язати якнайкраще, як найефективніше - подумайте над цим.


image.png

У правому кутку, праворуч від вибору мови, є кнопка поділитися розв'язком.
Після розв'язування задачі поділіться в тексті свого допису цим посиланням. А у вікні буде видно програмний код Вашого розв'язку. Можете поділитися і ним.

moveForward();
moveForward();
turnLeft();


image.png

але щоб цей код з'явився задачу слід розв'язати, посилання ж генерується завжди при натисканні (не зловживайте цим)

(+3,0 = 0,7 + 0,7 + 0,8 + 0,8) code.org

На сайті code.org все майже так само, лише я не знайшов кнопку посилання(((
і програмний-код там можна побачити навіть не повністю розв'язавши задачу.
Завдання - пройти чотири останні рівні. І прозвітувати вказаним кодом.
a) https://studio.code.org/s/aquatic/lessons/1/levels/12
b) https://studio.code.org/s/mc/lessons/1/levels/14
можна обрати варіант a) або варіант b)

але так як тут нема посилання на завдання - то вставте і посилання на задачу. Щоб я знав яку Ви задачу розв'язували і зміг перевірити.


image.png

(+1.0) From 0 to 100

Навчилися кодувати?
Уявіть що у калькуляторі є лиш операція '+1'.
зараз на табло 0.
опишіть як отримати на табло 100.

Тепер додали ще одну операцію 'х2'
як можна з нуля одержати на табло 100 якнайшвидше, за меншу кількість кроків.

(+1.0) Знайдіть щось подібне до code.org та blockly.games

Знайдіть щось подібне до code.org та blockly.games
Напишіть про це, розв'яжіть звідти три задачі (аналогічно п.3 та п.4

  • Далі будемо вчити мову програмування С/С++.
    Оберіть собі як будете її вивчати, з книги, з блогу, з сайту.
    А так як навчання не за горами - то почніть читати/дивитися.

За гарно виконані всі завдання 10 балів.

Правила проведення конкурсу

Публікувати можна на будь-якій мові, в будь якій спільноті чи просто у власному блозі, посилання на вашу роботу додайте сюди коментарем

Щоб я швидко знайшов, перевірив та оцінив ваші роботи залиште посилання в коментарі під цим текстом а в роботі поставите тег #sec20w2sergeyk

Порекомендуйте прийняти участь своїм двом-трьом друзям.

Роботи слід опублікувати з Monday 16 Sep 24 to Sunday 22 Sep 24

Ваші роботи будуть мною оцінені та відібрані п'ять кращих робіт

Sort:  

Check your title...

S20W1 >> W2

 3 months ago 

(0,3) Ще з цього типу задач:
До берега підійшли пара чоловіків, які хотіли перейти на інший бік річки. Вони побачили неподалік двох хлопчаків, які весело плавали у човні. Чоловіки вирішили попросити хлопчиків допомогти переправитися, але з’ясувалося, що човен дуже маленький. Він міг витримати або двох хлопчиків одночасно, або лише одного дорослого.

(0,3) Дорослі задумалися, як їм потрапити на інший берег, якщо човен такий маленький. Хлопці погодилися допомогти і стали міркувати разом із ними. Завдання було непростим, але поміркувавши вони допомогли людям переправитися на інший берег.

З цим виходить 10.3 бала, якщо правильно розумію умовні позначення))