Перший крок у програмування: вибір мови. Розвиток умінь програмування з використанням пакета Maple під час навчання інформатики на профільному рівні

💖 Подобається?Поділися з друзями посиланням

Наприкінці позаминулого тижня в Москві відбувся невеликий виступ, де він розповів гікам-початківцям про те, з якої мови варто почати свій професійний шлях і до якої майбутньої кар'єри з відповідними знаннями варто прагнути.

Деякі подробиці цієї зустрічі ви можете знайти в коментарях до запису, а поки давайте спробуємо тут з'ясувати: так яку мову вивчити першою?

Стара школа

Перші уроки інформатики, викладачі зі скрипом у серці підпускають дітей до шкільних комп'ютерів, щоб навчити їх першої мови програмування у житті. 15 років тому в більшості випадків це був процедурний мови Basicабо Pascal, але якщо вам дуже щастило з викладачем, могли заодно пізнати і C.

Останнє залишимо поки за дужками і розберемося: чи добре починати навчання з сильно обмежених мов. Плюси очевидні: простий синтаксис, схожий на звичайний англійською мовою, і можливість навчитися азам програмування лише за кілька годин. Але є й мінус: відсутність реального практичного застосуваннябез вивчення подальшого розвиткуцих мов (Visual Basic та Object Pascal). Та й у цьому випадку ви опинитеся далеко від розробки повноцінних сучасних додатків.

Тож якщо вам ще зовсім небагато років, вибирати майбутню професію не змушують обставини, то процедурні мови – чудовий вибір. Тренуватися, як кажуть, найкраще на кішках. Але якщо почати заробляти ви хочете вже завтра, то… Втім, трохи пізніше.

Сучасна школа

Як ви напевно знаєте, багато сучасних школярів починають свій шлях у програмування з якихось спрощених версій «великих» мов, таких як Scratch, Blockly або Logo. Загалом плюси можна було б переписати з процедурних мов, якби не одне «але»: дані мови та додатки, побудовані на їх основі – розважальний сервіс для дітей.

Тобто єдине, що можна винести з такого програмування – загальна структура програми, поняття циклів та операторів. А значить, якщо вам вже виповнилося 12 років, то забудьте про ці дитячі мови, вам настав час у світ дорослих.

Швидкий старт із перспективою

Припустимо, що, відкинувши всі прелюдії, ви хочете негайно приступити до вивчення однієї з ходових мов програмування, заразом вивчивши всі основи програмування. Тоді варто відповісти лише на одне просте запитання: чим ви хочете займатися? Якщо програмувати «залізо», тоді тут навіть дискусії бути не може: відповідь C, тобто мова C. У ньому поєднується все, що потрібно новачкові: простий синтаксис, великі можливості як для продовження роботи в цьому середовищі, так і подальшої перекваліфікації на « не залізний» профіль. При цьому майже в будь-якому великому магазині електротоварів ви зможете знайти налагоджувальні плати, стартові набори робототехніка та інші радості для новачка.

Якщо ж ви вважаєте своїм покликанням веб, тоді необхідно почати свій шлях стандартно з HTML і CSS. Це дозволить створювати статичні сторінки та отримати зразкове уявлення про те, з чим доведеться мати справу. Далі рекомендується взятися за Python. По-перше, тому що цю мову справді легко вивчити. По-друге, за деякими даними, Python найпопулярніша мова, якщо брати до уваги лише статистику учнів з 2011 року. По-третє, можливості цієї мови такі, що сьогодні з її допомогою ви створюєте веб (як DropBox або Google), а завтра починаєте розробку гри (Civilization IV).


Важко в навчанні легко в бою

Не відпускаючи тему Інтернету, в якості першої мови (фактично третьої після HTML та CSS) програмування ви можете вибрати JavaScript. Саме так робили на уроках інформатики 15 років тому і в цьому був цілком певний зміст: у статичних сторінок з додаванням буквально 4-5 рядків з'являється активна складова, що піднімає мотивацію працювати саме у цьому напрямі. При цьому працездатність не залежить від браузера або операційної системи. І це не говорячи про перспективи подальшого розвитку у бік Node.js.

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

Ну і нарешті до розробки програм. Три шляхи: Java, Swift, C #. Бажання розпочати своє навчання програмуванню з них – дуже серйозний виклик, який у разі відсутності працьовитості може виявитися дурістю, адже на кожний потрібно кілька місяців посиленого вивчення. Втім, перспективи теж можуть бути стимулом, чи то успішна кар'єра в мобільній сфері (Java - Android, Swift - iOS) чи ігровий (C#+Unity).

Одна з перших проблем, яка здається дуже важливою: «Яку мову обрати для навчання програмуванню?»

Перш ніж відповісти на це питання, я скажу, що особливого значення не має, яку мову програмування ви оберете для початку. Зовсім не обов'язково намагатися заощадити час і вчити корисну мову. Професійні програмісти володіють не однією, а кількома мовами програмування, крім того, ця галузь динамічна і ситуація постійно змінюється - немає сенсу шукати інструмент, яким можна користуватися все життя. Для кожного завдання – своя мова. Зрозуміло, дуже багато мов вирішують ті самі завдання, тому ще один критерій вибору — знайомство з мовою. Тобто ви використовуєте те, що підходить і те, що ви знаєте.

Для навчання основ програмування необхідно вибирати мови, які підходять цього завдання, тобто. будуть досить прості для початку, мають багаті можливості, дозволяють отримати швидкий результат. Для вивчення програмування я можу порадити кілька варіантів: VBA, Python, JavaScript, Pascal ABC.

Розгляну докладніше переваги та недоліки цих варіантів.

VBA = Visual Basic for Application— це мова для створення макросів, яка включена до Microsoft Officeта деякі інші програми. Дуже зручно використовувати Excel. Натисніть Alt+F11 та … вперед! Якщо у вас вже є MS Office, то нічого не доведеться встановлювати - все вже є для початку роботи. VBA — серйозна та «доросла» мова, яка широко використовується для автоматизації роботи в Excel та інших програмах. Основна перевага: найшвидший результат! Ви можете зробити щось корисне ще на етапі навчання!

Python- Це скриптова мова. Його характерна риса полягає в тому, що він був створений однією людиною. Мова елегантна і красива настільки, що потім складно починати працювати з «класичними мовами для навчання» (С++, Pascal / Delphi), вони здаються непоказними і незручними. Python використовується для веб-програмування та для написання фрагментів коду для ігор. Python використовується в тих же областях, де PHP, Perl, Ruby і т.д. Основна перевага: елегантність та багаті можливості для всіх рівнів програмістів.

JavaScript— мова, яка використовується для пожвавлення веб-сторінок. Він виконується у браузері, тобто. на стороні клієнта. На стороні сервера працюють скриптові мови(PHP, Ruby, Python,…), вони формують веб-сторінку. Після завантаження в браузер за роботу динамічних елементів відповідають два інструменти - JavaScript та Flash. Основна перевага: можна використовувати під час створення свого сайту. UPD: На JS+HTML5 можна писати програми для смартфонів (усі платформи), Google Chromeта Вконтакті.

Pascal ABC- Навчальне середовище, засноване на мові Pascal. Зручно використовувати для початкового навчання програмування, для чого і було створено. Не можна створювати свої закінчені програми. Включає задачник, нерідко використовується у ВНЗ і дуже часто в школах. Pascal – основна мова для ЄДІ з інформатики. Остання і є основна перевага.

Напевно, існують інші зручні середовища та мови програмування для навчання основ. Надсилайте назви та аргументи на користь тієї чи іншої системи і я включу їх в огляд.

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

У нашій школі на першому етапі навчання використовується VBA (якщо на комп'ютері вже є Microsoft Office) або Python (якщо Ms Office немає або у вас на комп'ютері Linux). Повторюся ще раз: важлива не мова, а ті завдання, які в ній вирішуєте.

Тема №4 Мова програмування: еволюція, класифікація

(О.Л. Голіцина, І.І. Попов «Основи алгоритмізації та програмування» Стор. 38-45)

Еволюція мов програмування

У розвитку інструментального програмного забезпечення(Тобто програмного забезпечення, що служить для створення програмних засобів у будь-якій проблемній області) розглядають п'ять поколінь мов програмування (ЯП). Мови програмування як спілкування людини з ЕОМ від покоління до покоління покращували свої показники, стаючи, дедалі більш доступними освоєння непрофесіоналам.

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

Покоління ЯП

ЯП першого покоління являли собою набір машинних команд у двійковому (бінарному) чи вісімковому форматі, яким визначався архітектурою конкретної ЕОМ. Кожен тип ЕОМ мав свій ЯП, програми на якому були придатні лише для даного типуЕОМ. Від програміста вимагалося. добрі знанняяк машинного мови, а й архітектури ЕОМ.

ДругеПокоління ЯП характеризується створенням мов асемблерного типу (ассемблерів, макроассемблерів), що дозволяють замість двійкових та інших форматів машинних команд використовувати їх мнемонічні символьні позначення (імена). Будучи суттєвим кроком уперед, асемблерні мови все ще залишалися машинно-залежними, а програміст все також повинен був бути добре знайомий з організацією та функціонуванням апаратного середовища конкретного типу ЕОМ. При цьому асемблерні програми так само скрутні для читання, трудомісткі при налагодженні і вимагають великих зусиль для перенесення на інші типи ЕОМ. Однак і зараз асемблерні мови використовуються при необхідності розробки високоефективного програмного забезпечення (мінімального за обсягом та з максимальною продуктивністю).

ТретєПокоління ЯП починається з появи в 1956 р. першої мови високого рівня - Fortran, розробленого під керівництвом Дж. Бекуса у фірмі IВМ. За короткий час Fortran стає основним ЯП при вирішенні інженерно-технічних та наукових завдань. Спочатку Fortran мав дуже обмежені засоби забезпечення роботи з символьною інформацією і з системою введення-виведення. Однак постійний розвиток мови зробив його одним з найпоширеніших ЯВУ на ЕОМ всіх класів - від мікро-до суперЕОМ, а його версії використовуються і для обчислювальних засобів нетрадиційної паралельної архітектури.

Невдовзі після мови Fortran з'явилися такі широко відомі мови, як Аlgol, Соbоl, Ваsiс, РL/1, Раscal, АРL, АDА, С, Forth, Lisp, Моdula та ін. В даний час налічується понад 2000 різних мов високого рівня.

Мови четвертого покоління носять яскраво виражений непроцедурний характер, який визначається тим, що програми такими мовами описують щойно, а чи не як треба зробити. У програмах формуються швидше співвідношення, а чи не послідовності кроків виконання алгоритмів. Типовими прикладами непроцедурних мов є мови, використовувані завдання штучного інтелекту (наприклад, Рrolog, Langin). Так як непроцедурні мови мають мінімальну кількість синтаксичних правил, вони значно придатніші для застосування непрофесіоналами в галузі програмування.

Другою тенденцією розвитку ЯП четвертого покоління є об'єктно-орієнтовані мови, що базуються на понятті програмного об'єкта, вперше використаного в мові Simulа-67 і згодом становив основу відомої мови Smalltalk. Програмний об'єкт складається із структур даних та алгоритмів, при цьому кожен об'єкт знає, як виконувати операції зі своїми власними даними. Насправді різні об'єкти можуть користуватися зовсім різними алгоритмами при виконанні дій, визначених одним і тим же ключовим словом (так звана властивість поліморфізму). Наприклад, об'єкт з комплексними числами та масивами як дані буде використовувати різні алгоритми для виконання операції множення. Такими властивостями мають об'єктно-орієнтовані Pascal Basic, С++, Smalltalk, Simulа, та низку інших мов програмування.

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

І, нарешті, четвертим напрямком розвитку є мови паралельного програмування (модифікація ЯВУ Fortran, мови Оссаm, SISAL, FР та ін.), які орієнтовані створення програмного забезпечення для обчислювальних засобів паралельної архітектури (багатомашинні, мультипроцесорні середовища та інших.), на відміну від мов третього покоління, орієнтованих традиційну однопроцессорную архітектуру.

До того, що інтенсивно розвивається в даний час п'ятому поколінню належать мови штучного інтелекту, експертних систем, баз знань (InterLisp, ExpertLisp, IQLisp, SIAL та ін.), а також природні мови, що не вимагають освоєння якогось спеціального синтаксису (нині успішно використовуються природні ЯП з обмеженими можливостями - Clout , Q&А, НАL та ін).

Класифікація мов програмування

Щоб ЕОМ могла вирішувати завдання, складені людиною, вона повинна послідовно виконувати інструкції деякої програми-алгоритму. Сукупність таких інструкцій, спрямованих на вирішення конкретного завдання, називається комп'ютерна програма.Але це ще не все.

Комп'ютер не розуміє природну мову людини, а розуміє тільки свою мову - машинний код. Що стосується мови програмування, то вона за допомогою фіксованих систем позначень та правил дозволяє описувати алгоритми та структури даних, які згодом будуть перекладені. трансляторому машинний код.

Всі мови програмування можна розділити на мови низького, високого та надвисокого рівнів.

Мови низького рівня - це засіб запису інструкцій комп'ютера простими наказами-командами на апаратному рівні. Така мова залежить від структури конкретної ЕОМ і іноді називається машинно-орієнтованою мовою. Ця мова погано пристосована для використання людиною, адже запис програми цією мовою є послідовністю нулів і одиниць, і мало шансів, що складне завдання буде запрограмовано безпомилково. Для спрощення програмування було розроблено мову символічного кодування (автокод, або мову асемблера). Програма, написана такою мовою, ближче людині, але все одно вимагає від програміста широких знань у цій галузі.

Наступна група - мови програмування найвищого рівня.Це мови, які допускають опис завдання у наочному вигляді, що легко сприймається. Їхньою відмінністю є орієнтація не так на систему команд тієї чи іншої ЕОМ, але в систему інструкцій, притаманних запису алгоритмів певного класу. До мов програмування високого класу ставляться Бейсік, Фортран, Алгол, Паскаль, Сі та інших.

До мовами програмування надвисокого рівняможна віднести Алгол-68, в якому зроблено спробу формалізувати опис мови, що призвела до появи двох типів програм: абстрактної та конкретної. Перший тип програми – абстрактний – створюється програмістом, конкретний – виводиться з першого. Існує припущення, що за такого підходу принципово неможливо породити синтаксично (а на практиці і семантично) неправильну конкретну програму.

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

Елементи мов програмування можна розглядати на таких рівнях:

алфавіт - сукупність символів, що відображаються на пристроях друку та екранах та/або терміналу, що вводяться з клавіатури.

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

синтаксис - сукупність правил утворення мовних конструкцій, або пропозицій ЯП - блоків, процедур, складових операторів, умовних операторів, операторів циклу та ін. Особливістю синтаксису є принцип вкладеності (рекурсивність) правил побудови конструкцій. Це означає, що елемент синтаксису мови у своєму визначенні прямо чи опосередковано в одній із його частин містить сам себе. Наприклад, у визначенні оператора циклу тілом циклу є оператор, окремим випадком якого є той самий оператор циклу;

семантика – смисловий зміст конструкцій, речень мови, семантичний аналіз – це перевірка смислової правильності конструкції. Наприклад, якщо ми у виразі використовуємо змінну, то вона має бути визначена раніше за текстом програми, а з цього визначення може бути отриманий тип. Виходячи з типу змінної, можна говорити про допустимість операції з цією змінною. Семантичні помилки виникають при неприпустимому використанні операцій, масивів, функцій, операторів та ін.

Транслятори

Програма, написана будь-якою мовою програмування, є вихідною програмою. Особливість таких програм, як ми пам'ятаємо, у тому, що вони складаються з інструкцій, зрозумілих людині, але з зрозумілих процесору комп'ютера. Щоб процесор міг виконати роботу відповідно до алгоритму, записаного у вихідній програмі, ця програма має бути переведена на машинна мова -мова команд процесора. Такий переклад програми називається трансляцією,а виконується він спеціальними програмами- Трансляторами.

Існує три види трансляторів: інтерпретатори, компілятори та асемблери.

Інтерпретатор -транслятор, що перекладає текст програми поетапно (покомандно) і відразу ж (тобто паралельно) виконує команду, що транслюється, вихідної програми.

Компілятортранслює текст програми в модуль машинною мовою, потім програма переписується в оперативну пам'ять і лише після цього виконується процесором комп'ютера. Саме з використанням трансляторів такого типу здійснюється переведення програми багатьма мовами програмування в машинний код. Тому розглянемо його трохи докладніше.

Схематично роботу компілятора ілюструє рис. 1.6.

Цифрою 1 на схемі позначений блок синтаксичного контролю тексту програми цифрою 2 - генератор машинного коду.


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

Останній вид трансляторів - асемблери.Вони призначені для перекладу програми, написаної мовою асемблера (автокоду), до програми машинною мовою.

Усі транслятори, незалежно від їхнього виду, вирішують такі основні завдання:

Виконують аналіз і перевіряють синтаксис програми, що транслюється;

генерують машинний код програми;

Розподіляють пам'ять для вихідної програми.

Сьогодні писав відповідь Ніні Шуміліної з Твері, на питання про Python, як першу мову програмування в школі.

Вона цитувала Костянтина Полякова, висновок його статті у вересневому номері "Інформатики":
З цих причин автор схильний підтримати думку І.А. Сукіна: Python гарний для професійних програмістів, але його використання як перша мова програмування може бути невдалим рішенням. Як зізнаються вчителі, які викладають на Python, ті, хто навчався програмувати на Python, не хочуть переходити на інші (нижчерівневі) мови. Навчивши школярів сортувати масиви викликом методу sort, складно потім пояснити, навіщо написані цілі томи про алгоритми сортування. А це може призвести до появи плеяди "програмістів-тільки-на-Python", не готових до подолання додаткових обмежень задля підвищення ефективності програми. Фактично вчитель потрапляє у ситуацію, яка добре описується фразою "У Python такі можливості є, але вчити так не можна!" (Е.В. Андрєєва). У той же час було б корисним вивчення Python як другої мови програмування в класах з поглибленим рівнем вивчення інформатики (наприклад, після Паскаля або C).

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

Безперечно, ставлення до Python різне. Дійсно, висловлюються побоювання, що динамічна типізація і занадто велика "високрівневість" мови шкідлива для навчання, що не можна підміняти поняття "масив" високорівневими списками, оскільки "обдурені" легкістю операцій зі списками школярі не розумітимуть принципів. внутрішньої організаціїі т.д.

Але на мій погляд подібна критика виходить в основному від "теоретиків", які жодного разу не пробували вчити програмування саме на Python, те ж Поляков хоч і почав публікувати в "Інформатиці" статті про Python, але, схоже, ніколи його не використовував для навчання . А ось практиків, що критикують Python, тобто людей, які спробували б вчити дітей на Python хоча б рік, а потім би відмовився, мені невідомо.

Наприклад, нібито процитована Поляковим Є.В.Андрєєва три роки тому вирішила спробувати вчити школярів 6-7 класу в "Інтелектуалі" на Python. До цього ставилася до цієї витівки досить скептично, але вирішила спробувати. Через півроку вона вже виступала на конференціях і говорила, що школярів у середній ланці найкраще вчити на Python, що вона в це не дуже вірила, але спробувала і за кілька місяців її погляди змінилися. Так що не знаю, що саме цитував Поляков і скільки років цій цитаті, але вчора я спеціально показав це листування Андрєєвої і попросив відповісти, на що вона написала "Відповідь Шуміліної - школярів середньої ланки безумовно треба вчити на Python".

У чому переваги Python? Не лише у простоті мови, а й у тому, що це – величезний, багатогранний, різнобічний світ програмування. У цьому світі легко почати програмувати, і переваги Python як першої мови програмування, здається, обговорювати сенс немає - нічого простіше явно не існує (з мов програмування загального призначення). Він набагато лаконічніший Pascal і програмування на ньому позбавлене необхідності метушні з великою кількістю технічних речей, що важко для початківців. Набагато простіше писати програми початківцям, якщо вони складаються з п'яти рядків, а не з п'ятнадцяти, алгоритми вони реалізують ті ж, а ось часу на написання та налагодження коду йде менше, а значить, і більше завдань можна вирішити, і далі просунутися, і далі для роботи з масивом ну куди зручніше написати:

a = * 1000
чим
var a: array of integer;
...
for i:= 1 to 1000 do
a[i]: = 0;

Результат для програміста – однаковий, виходить масив, заповнений нулями, але на Python – один рядок замість трьох, а сенс не змінюється. І тут скептики, звичайно, будуть говорити, що ось не можна так писати, як на Python, що школяр повинен розуміти, що масив - це безперервний фрагмент пам'яті, що ми повинні його оголосити, тобто зарезервувати для нього місце, що ми маємо його. проініціалізувати, заповнивши його нулями... Ну а наша відповідь скептикам - це те, сенс для програміста-початківця не змінюється, навпаки, рядок a = * 1000 краще відображає те, що школяр хоче отримати і відразу ж (хочу список з одного числа 0, повтореного 1000 разів), набагато простіше пишеться і дозволяє вирішити більше завдань!

Просто подивіться на два наведені вище фрагменти, який з них зрозуміліший? Який із них Вам подобається більше?

Отже, для початківців, безперечно, краще Python. Причому слабкі діти можуть і зупинитися, отримавши загальне уявлення про програмуванні. А ось сильні школярі можуть рухатися далі, і в їхньому розпорядженні буде сучасна універсальна мова програмування, яка реально використовується для розробки програмного забезпечення у провідних світових компаніях. Ось, наприклад, статистика - "На чому пишуть в Яндекс": http://blog.yandex.ru/post/ 77617/. На Python можна писати веб-сайти, комп'ютерні ігри, GUI, клієнт-серверні програми, ну тобто все, що завгодно.

Тепер щодо висловлювання, що в мові багато високорівневих речей, і виникає спокуса їх використовувати замість того, щоб вивчати, як це влаштовано. Ну так це проблема – методична, а не проблема мови програмування. Загальний методичний підхід тут такий – спочатку ми розуміємо, як це працює, потім дозволяється використати відповідний елемент мови. Наприклад, спочатку написали обмін значень двох змінних через допоміжну змінну, потім показую, як це робиться за допомогою кортежів (a, b) = (b, a). Спочатку написали максимум із двох, трьох чисел, потім можна використовувати функцію max. Потім написали програму пошуку максимуму в
послідовності (масив), після цього можна використовувати функцію max для списку. Спочатку написали сортування самі, потім можна користуватися функцією sort, і я навіть наполягають на тому, щоб школярі користувалися стандартною функцією sort – це швидше та зручніше, і дозволяє вирішити більше завдань, але тільки після того, як вони навчилися самі писати sort.

Насправді, вбудоване сортування є у будь-якому сучасною мовоюпрограмування (Java, C++, PHP), бо зараз так заведено. Немає її тільки в класичному Pascal (а ось у сучасному Delphi - є), немає в старих бейсиках (а в Visual Basic - є), але це не означає, що всіма цими мовами не можна користуватися, бо в них є вбудоване сортування? І нікому ж на думку не спаде забороняти вивчення цих мов у школі лише тому, що "а раптом вчитель навчить дітей користуватися вбудованим сортуванням, а потім цим дітям не поясниш, навіщо потрібно вивчати складності алгоритмів сортування". Тому проблема не в тому, якщо в мові програмування sort чи ні, а проблема в тому, як цим користуватися. Якимось школярам досить пояснити, що таке "сортування вибором" - воно зрозуміле і дуже легко пишеться на тому ж Python, а з кимось можна обговорювати і ефективні алгоритми сортування, і наявність вбудованого сортування цьому не заважає. Більше того, якщо я дітей навчаю програмування на тому ж C++, то я намагаюся навчити дітей і користуватися сортуванням sort з STL, причому ефективно його використовувати, і це не заважає вивченню алгоритмів сортування. У MIT (Massachusetts Institute of Technology) усі початкові курси програмування кілька років тому перевели на Python. На новому факультеті комп'ютерних наук ГУ ВШЕ, створеному в 2014 році за участю компанії "Яндекс", саме Python є першою мовою програмування, яку вивчають студенти. Тут наводжу саме новий факультет як приклад, т.к. у вузах з програмами, що вже склалися, важче щось змінити, наприклад, на факультеті ВМК МДУ спроба замінити Pascal на C, як перша мова програмування, виявилася безуспішною через небажання змінювати програми, що склалися, і контингент викладачів.

Далі подивимося на вислів "А це може призвести до появи плеяди "програмістів-тільки-на-Python", не готових до подоланнядодаткових обмежень заради підвищення ефективності програми.". У якомусь сенсі нічого поганого в цьому немає. Програмування стає все більш масовою професією, і багато навичок програміста не належать до того, що є вищою освітою, тобто більшості програмістів і не Слід вивчати томи, присвячені алгоритмам сортування.
у 1С теж потрібні, і їх потрібно дуже багато. Таким програмістам в цілому необов'язково розбиратися в алгоритмах сортування, їм якраз необхідно вміти користуватися стандартною функцією sort для будь-яких завдань і знати, що вона вміє сортувати масиви краще, ніж якби вони написали це самостійно (і вже зовсім дивно вимагати від web-програміста знання алгоритмів швидкого сортування, звичайно, нічого поганого не буде в цьому знанні, але для роботи це зовсім непотрібно). Так що система навчання програмістів повинна включати і середню професійну освіту (на якій вчать прикладним речам і технологіями), і систему вищої освіти (де саме доречно обговорювати питання складності алгоритмів сортування), так само, як це є в багатьох галузях, наприклад, у медицині (медик із середньою спеціальною освітою виконує стандартні медичні процедури, а медик із вищою освітою вміє призначати лікування, тобто аналізувати причини та приймати рішення). Так, спеціальності, пов'язані з програмуванням, є і в середній спеціальній освіті, і у вищій освіті, але система тут не так вибудована, як у тій самій системі медичної освіти. І, якщо чесно, я погано уявляю, що відбувається в середній професійній освіті з програмуванням.

Одна з аналогій, яку я люблю тут наводити – це прогрес у розповсюдженні автомобілів. На початку та середині XX століття водій автомобіля повинен був знати пристрій автомобіля і сам робити досить складний ремонт. Будь-який водій має бути значною мірою механіком. Зараз багато водіїв ну якщо і мають спільне
уявлення про влаштування автомобіля, то вже точно ніколи не займаються його ремонтом, воліючи виконувати все технічне обслуговування в автосервісі. Добре це чи погано? Це, на мою думку, неминуче. Широта поширення автомобілів стала такою, що складно вимагати від усіх автолюбителів навичок ремонту та глибокого пізнання пристрою автомобіля. Широке поширення автомобіля неминуче призведе до того, що більшість водіїв не матиме глибоких знань про влаштування автомобіля. А автомобілі, у свою чергу, стають зручнішими і надійнішими, тому використовувати їх можна і без спеціальних навичок.

Так само і з програмуванням - програмування стає все більш поширеним, а самі мови програмування - все більш зручними та простими. Безперечно, кількість програмістів зростає і зростатиме (хоча все одно в галузі величезний брак кваліфікованих програмістів), при цьому рівень глибокого розуміння речей знижуватиметься. Це неминуче, але це не привід відмовлятися від сучасних високорівневих мов програмування, так само, як і не нікому на думку не спаде відмовлятися від сучасних автомобілів тільки тому, що вони надійніші та зручніші, і не вимагають спеціальних знань для постійного використання.

ПЛАН УРОКУ №1

Дата _____________

Спеціальністьінформаційні системи (за галузями ) групаІС-21

ПредметОснови алгоритмізації та програмування

Тема урокаВступ. Види класифікації та призначення мов програмування.

Цілі уроку:

ОСВІТНІ:дати короткий оглядпитань, що вивчаються в розділі “Програмування мовою Паскаль”, створити позитивну мотивацію до вивчення даного розділу, формувати уявлення у учнів про мову програмування, про складові мови програмування, про класифікацію мов програмування, про систему програмування, про її компоненти та їх призначення;

РОЗВИВАЮЧІ:вміння: переводити візуальну інформацію на вербальну, аналізувати інформацію, вибудовувати причинно-наслідкові зв'язку; розвивати навичку конспектуванняВИХОВНІ:виховувати інтерес до предмета.

Тип урокуТеоретичне заняття

Методи навчанняСловесний з використанням ІКТ

Матеріально – технічне оснащення уроку:лекція, комп'ютер, електронний підручник.

Хід уроку

    Організаційний момент -2 хв

    Постановка мети заняття перед учнями 1хв

    Перевірка знань та вмінь -20 хв

    Викладення нового матеріалу -31 хв

    Закріплення вивченого матеріалу -20 хв

    Домашнє завдання -3 хв

    Підбиття підсумків уроку-3хв

Питання викладу нового матеріалу:

Вступ

  1. Класифікація мов програмування

  2. Покоління мов (Generations of Languages)

  3. Машинно-незалежні мови

    Універсальні мови

Закріплення матеріалу, що вивчається

  1. Назвіть універсальні мови.

Підсумки уроку

Оцінка роботи групи та окремих учнів. Аргументація виставлених позначок, зауваження з уроку.

Домашнє завдання.. Види класифікації та призначення мов програмування

функціональним – за призначенням, виконуваним функціям (описові, логічні, математичні);

рівнем мови - тобто рівнем узагальнення в словах-операторах мови (низького, середнього, високого...);

галузі застосування - тобто де застосовується мова (системні, мережеві, вбудовані та ін.

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

Базова ієрархія мов програмування

Базова ієрархія мов програмування є системно-паралельною ієрархією, тобто пакетом тісно пов'язаних ієрархій: етапів програмування, поколінь мов програмування та самих мов - протоколів перетворення структурної та алгоритмічної інформації: структурно-дескриптивного опису даних та алгоритму їх обробки. Тому всі мови поділяються на два полярні типи: дескриптивні (декларативні) та алгоритмічні (командні). Однак, оскільки в будь-якому алгоритмі існує необхідність опису даних і структур, а в будь-якій конструкції - порядок її складання, то реальні мови є частково декларативними, а частково алгоритмічними, що відображається в наявності описової та командної (рецептурної) частин будь-якої комп'ютерної програми.

Розгляд пакета паралельних ієрархій мов програмування доцільно розпочинати з ієрархії етапів програмування.

Етап 1. Постановка задачі програмування- включає формалізацію мети програмування, часто кількісно-математичну, але завжди - формально-логічну, що дозволяє здійснити всі наступні етапи та досягти поставленої мети програмування після виконання його етапів.

Етап 2. Алгоритмізація- Включає побудову блок-схеми алгоритму, тобто послідовних кроків обробки даних і структури самих даних для роботи програми.

Етап 3. «Кодування»- (Від ам. Традиційного сленгу «coding») - написання тексту програми на базовій текстовій мові програмування, який може бути зрозумілий транслятору - програмі, що перетворює текст на бінарний код.

Етап 4. Трансляція- Переведення програми в бінарний «об'єктний» код, вироблена транслятором без участі людини, крім процесу налагодження.

Етап 5. Складання виконуваного модуля програми- являє собою автоматичне стикування всіх об'єктних модулів, необхідних для отримання працюючої програми - послідовності команд процесора комп'ютера, на якому виконується задуманий алгоритм у вигляді двійкового коду, зрозумілого процесору.

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

Покоління мов (Generations of Languages)

1GL покоління. Машинні мови, мови низького рівня- двійкові мови процесорів, що являють собою набір (алфавіт) команд, записаних у двійковому коді (0,1), які даний процесорможе виконати безпосередньо, якщо ці команди ввести в його пам'ять у вигляді послідовності або відразу подати в арифметично-логічне пристрій процесора. Приклади: мова процесора IBM-PC, мова процесора ARM.

2GL покоління. Асемблери, автокоди, системні мови, мови середнього рівня- текстові мови, зрозумілі людині та однозначно перекладаються (трансльовані) у мови низького рівня, тобто машинний двійковий код. Програмування на 2GL значно продуктивніше, ніж 1GL, оскільки зручніші для людського сприйняття. Приклади: Макросемблер, С, PL/1.

3GL покоління. Мови високого рівня- текстові мови, наближені за словником та синтаксисом до людської мови (зазвичай перебільшеної англійської, піндос), що дозволяють записувати програмні конструкції у формі, зручній для людського мислення та подібні до звичайного тексту - конспекту, стенограмі. Програмування на 3GL на порядок продуктивніше, ніж на 2GL, тому що більш зручні для людського сприйняття і на порядок коротше за асемблерні. Приклади: бейсик, фортран, PHP та практично всі мережеві мови.

4GL покоління. Мови візуального програмування- мови блок-схем, що дозволяють відображати алгоритми у програмних проектах, що полегшує створення та аналіз алгоритмів. Програмування на 4GL значно продуктивніше, ніж на 3GL. Приклади: RAD-системи, CAD-пакети, OLAP-системи.

Покоління 5GL. Інтелектуальні мови програмування- дозволяють передати функцію створення алгоритмів комп'ютера, а за людиною залишити лише постановку завдання. Програмування на 5GL значно продуктивніше, ніж на 4GL. Приклади: система MatCAD, експертні системи.

У системному програмуванні найкращі результати дають мови 2GL, бо у цій сфері важлива швидкість виконання та компактність коду. Для обробки тексту та мережевих завдань оптимальними є мови 3GL.

Безпосередньо пов'язаною з ієрархією поколінь є так звана «Стандартна модель OSI», що описує 7 рівнів ієрархії протоколів (мов) мережевого обміну інформацією, розглянута нижче.

Функціональна класифікація мов програмування

Існуючі мови програмування класифікують за чотирма основними функціональними групами: процедурні, об'єктно-орієнтовані, функціональні та логічні. Дамо короткі визначеннякожного підходу.

Процедурне програмування- таке програмування, коли програма відокремлена від даних і складається з послідовності команд, що обробляють дані. Дані зазвичай зберігаються у вигляді змінних. Весь процес обчислення зводиться зміну їх вмісту.

Декларативні мови програмування- це мови оголошень та побудови структур. До них відносяться функціональні та логічні мови програмування. У цих мовах немає алгоритмічних дій явно, тобто алгоритм не задається програмістом, а будується самої програмою. У декларативних мовах задається, виробляється побудова будь-якої структури чи системи, тобто декларуються (оголошуються) якісь властивості створюваного об'єкта. Ці мови набули широкого застосування в системах автоматизованого проектування(САПР), у про CAD-пакетах, в моделировнии, системах штучного інтелекту.

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

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

Машинно-орієнтовані мови

Машинно-орієнтовані мови- це мови, набори операторів та образотворчі засоби яких суттєво залежать від особливостей ЕОМ (внутрішньої мови, структури пам'яті тощо). Машинно-орієнтовані мови дозволяють використовувати всі можливості та особливості Машинно-залежних мов:

    висока якість створюваних програм(компактність та швидкість виконання);

    можливість використання конкретних апаратних ресурсів;

    передбачуваність об'єктного коду та замовлень пам'яті;

    для складання ефективних програм необхідно знати систему команд та особливості функціонування цієї ЕОМ;

    трудомісткість процесу складання програм (особливо на машинних мовахта ЯСК), погано захищеного від появи помилок;

    низька швидкість програмування;

    неможливість безпосереднього використання програм, складених цими мовами, на ЕОМ інших типів.

Машинно-орієнтовані мови за рівнем автоматичного програмування поділяються на класи.

Машинна мова. Як уже згадувалося у вступі, окремий комп'ютермає свій певнийМашинна мова(даліМ'Я), йому наказують виконання зазначених операцій над обумовленими ними операндами, томуМ'Яє командним. Однак, деякі сімейства ЕОМ (наприклад, ЄС ЕОМ, та ін) мають єдинийМ'Ядля ЕОМ різної потужності. У команді будь-якого з них повідомляється інформація про місцезнаходження операндів та тип виконуваної операції.

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

Продовжимо розповідь про командні мови, Мови Символічного Кодування(далі ЯСК), так само як і М'Яє командними. Однак коди операцій та адреси в машинних командах, що являють собою послідовність двійкових (у внутрішньому коді) або вісімкових (часто використовуваних при написанні програм) цифр, ЯСКзамінені на символи (ідентифікатори), форма написання яких допомагає програмісту легше запам'ятовувати зміст операції. Це забезпечує суттєве зменшення кількості помилок під час складання програм.

Автокоди. Є також мови, які включають всі можливостіЯСК, за допомогою розширеного введеннямакрокоманд - вони називаютьсяАвтокоди.

Макрокоманди переводяться в машинні команди двома шляхами. розстановкоюі генеруванням. У постановочній системі містяться "кістяки" - серії команд, що реалізують необхідну функцію, позначену макрокомандою. Макрокоманди забезпечують передачу фактичних параметрів, які у процесі трансляції вставляються в " кістяк " програми, перетворюючи їх у реальну машинну програму.

Макрос Мова, що є засобом для заміни послідовності символів, що описують виконання необхідних дій ЕОМ на більш стислу форму - називаєтьсяМакрос(Засіб заміни).

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

Машинно-незалежні мовиМашинно - незалежні мови - це засіб опису алгоритмів вирішення завдань та інформації, що підлягає обробці. Вони зручні у використанні широкого кола користувачів і вимагають від нього знання особливостей організації функціонування ЕОМ і ЗС.

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

Фортран, Алгол- мови, створені на вирішення математичних завдань;

Simula, Сленг- для моделювання;

Лісп, Снобол- до роботи з списковими структурами.

Універсальні мови.Універсальні мовибули створені для кола завдань: комерційних, наукових, моделювання і т.д. Перша універсальна мова була розроблена , що став у послідовності мовПл/1. Друга за потужністю універсальна мова називаєтьсяАлгол-68. Він дозволяє працювати із символами, розрядами, числами з фіксованою та плаваючою комою.Пл/1має розвинену систему операторів керувати форматами, до роботи з полями змінної довжини, з даними організованими у складні структури, й у ефективного використання каналів зв'язку. Мова враховує включені в багато машин можливості переривання і має відповідні оператори. Передбачено можливість паралельного виконання ділянок програм. Мова використовує багато властивостейФортрана, Алгола, Кобола. Однак він допускає не тільки динамічний, а й керований та статистичний розподіл пам'яті.

Діалогові мовиПоява нових технічних можливостей поставила завдання перед системними програмістами - створити програмні засоби, що забезпечують оперативну взаємодію людини з ЕОМ, їх назвали.діалоговими мовами.

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

Одним із прикладів діалогових мов є Бейсік. Бейсіквикористовує позначення подібні до звичайних математичних виразів. Багато операторів є спрощеними варіантами операторів мови Фортран. Тому ця мова дозволяє вирішувати досить широке коло завдань.

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

Дозволяючи чітко описувати як завдання, так і необхідні для її вирішення дії, таблиці рішень дають можливість у наочній формі визначити, які умови повинні бути виконані, перш ніж переходити до будь-якої дії. Одна таблиця рішень, що описує деяку ситуацію, містить усі можливі блок-схеми реалізацій алгоритмів розв'язання. Табличні методи легко освоюються фахівцями будь-яких професій. Програми, складені табличною мовою, зручно описують складні ситуації, що виникають при системному аналізі.

Питання закріплення

  1. Які класифікації мови програмування є

  2. Назвіть базові ієрархію мов програмування

  3. Які покоління мов (Generations of Languages) є?

  4. Які функціональні класифікації мов програмування?

  5. Назвіть машинно-орієнтовані мови

  6. Назвіть машинно-незалежні мови

    Назвіть універсальні мови.



Розповісти друзям