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

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

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

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

VBA \u003d 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). Повторюся ще раз: важливий не мова, а ті завдання, які в на ньому вирішуєте.

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

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

Стара школа

Перші уроки інформатики, викладачі зі скрипом в серці підпускають дітей до шкільних комп'ютерів, щоб навчити їх першому мови програмування в їх житті. 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).

ПЛАН УРОКУ №1

Дата _____________

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

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

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

Мета уроку:

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

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

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

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

Матеріально - технічне оснащення уроку:лекція, ПК, електронний підручник.

Хід уроку

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

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

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

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

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

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

    Підведення підсумків уроку-3хв

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

Вступ

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

  2. Поколеніяязиков (Generations of Languages)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Перший етап програмування - це найбільш загальний, вищий ієрархічний рівень процесу програмування, а п'ятий - виконується автоматично комп'ютером - нижчий. Перераховані етапи програмування в точності відповідають поколінням мов (generation of languages, 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. Назвіть машинно - незалежні мови

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

Тема №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 \u003d * 1000
ніж
var a: array of integer;
...
for i: \u003d 1 to 1000 do
a [i]: \u003d 0;

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

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

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

Тепер щодо висловлення, що в мові багато високорівневих речей, і виникає спокуса їх використовувати, замість того, щоб вивчати, як це влаштовано. Ну так це проблема - методична, а не проблема мови програмування. Загальний методичний підхід тут такий - спочатку ми розуміємо, як це працює, потім дозволяється використовувати відповідний елемент мови. Наприклад, спочатку написали обмін значень двох змінних через допоміжну змінну, потім я показую, як це робиться за допомогою кортежів (a, b) \u003d (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", не готових до подолання додаткових обмежень заради підвищення ефективності програми. ". У якомусь сенсі, нічого поганого в цьому немає. Програмування стає все більш і більш масовою професією, і багато навичок програміста не відносяться до того, що є вищою освітою, тобто більшості програмістів і не потрібно вивчати томи, присвячені алгоритмам сортування. Складнощі алгоритмів сортування - це вже, безсумнівно, сфера вищої професійної освіти, ну а програмісти, які вміють написати сайт на PHP або програму для бухобліку
в 1С теж потрібні, і їх потрібно дуже багато. Таким програмістам в цілому необов'язково розбиратися в алгоритмах сортування, їм якраз необхідно вміти користуватися стандартною функцією sort для будь-яких завдання і знати, що вона вміє сортувати масиви краще, ніж якби вони це написали самостійно (і вже зовсім дивно вимагати від web-програміста знання алгоритмів швидкого сортування, звичайно, нічого поганого не буде в цьому знанні, але для роботи йому це абсолютно непотрібно). Так що система навчання програмістів повинна включати в себе і середню професійну освіту (на якому вчать прикладним речам і технологіями), і систему вищої освіти (де якраз доречно обговорювати питання складності алгоритмів сортування), точно так же, як це є в багатьох галузях, наприклад, в медицині (медик із середньою спеціальною освітою виконує стандартні медичні процедури, а медик з вищою освітою вміє призначати лікування, тобто аналізувати причини і приймати рішення). Так, спеціальності, пов'язані з програмуванням є і в середній спеціальній освіті, і у вищій освіті, але система тут не так збудована, як в тій же системі МЕДИЧНИЙ освіти. І, якщо чесно, я погано уявляю, що відбувається в середню професійну освіту з навчанням програмування.

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

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