C мертвий
Зміст статті
Навчання програмування за допомогою Сі еквівалентне розбещенню малолітніх А.А.Берс
Зміна парадигми
Майбутнє завжди настає повільно та незримо. Підкрадається, ніби ніндзя, підходить на м'яких лапках. Не можна прокинутися одного ранку і усвідомити - ось він, технотронний стрибок, адже замість чашки кави я візьму шприц і вколю прямо в серце суміш таурину з чистим адреналіном. Людина дуже обмежена у розумінні навколишнього світу, і нехай вона хоч тричі вогнекрила валькірія комп'ютерного андеграунду та шалений апологет духу робоцивілізації, зміну технопарадигми їй не помітити.
Навіть найпрогресивнішим з нас властивий консерватизм і будь-які, часом незначні зміни на краще ми готові зустріти в багнети. Особливо ми недолюблюємо, коли світ змінюється не навколо нас, а всередині, у своїй свідомості. Багато людей вважають себе глибоко законспірованими «живими втіленнями бога» (у народі: експертами), яким важко, часом неможливо, викинути з голови накопичені знання та досвід і почати все заново.
Не так важливо, чи ви помітили еволюційний перехід. Здатність до адаптації дозволить вам існувати на будь-якій стадії розвитку людства. Залишилося лише прийняти сам факт еволюційного стрибка.
Cага про три язики
«Якою мовою програмувати?» — чи не ключове питання в IT-сфері за останні 30 років, особливо актуальне для української консервативної індустрії програмування. «Правильна» мова має максимально сприяти «технічному» програмуванню, допомагати розвивати гарний стиль тощо. Певні речі "мова адекватного програмування" повинна і забороняти (наприклад, оператор безумовного переходу), а інші гарантувати (скорочене обчислення логічнихвиразів для грамотної організації циклів).
Оберон — найдосконаліший спадкоємець старого Паскаля, спроектований з ретельним урахуванням вимог ефективної професійної роботи. Проте науково-дослідні розробки Вірта щодо поглиблення та розширення можливостей мов були поховані жорсткою маркетинговою політикою фірми Борланд, виробника Турбо Паскаля. Тому частина програмістів пішла з Турбо Паскаля більш «сучасний», «справжній», «промисловий» продукт фірми Борланд — Дельфі. Система Дельфі, однак, заснована на версії Паскаля, в яку було бездумно додано безліч модних наворотів, що різко ускладнили мову. Для порівняння: мова Оберон, до якої Вірт також ввів ключові елементи об'єктно-орієнтованого програмування, порівняно з Паскалем та Модулою-2 виглядає значно простіше, а не складніше за старий Паскаль. Але Оберон якісно потужніший за «дельфійський» Паскаль, незважаючи на всю складність останнього (завдяки механізму автоматичного управління пам'яттю, до Оберона, що залишався прерогативою інтерпретованих мов). На майбутнє зауважимо, що Оберон існує в декількох варіантах, що мало відрізняються, одному з яких учні Вірта дали назву Компонентний Паскаль, щоб підкреслити близькість і пряму наступність зі старим Паскалем.
У самій індустрії ПЗ найбільшої популярності стали набувати проектиJava іC#, зроблені, хоч і інший синтаксичної основі, але під сильним впливом саме Оберона. Можна сказати, що індустрія ПЗ під тиском об'єктивної реальності зуміла краще розібратися в глибинній природі процесу створення ПЗ, ніж програмісти, які спокушаються поверхневою синтаксичною наступністю «дельфійського» Паскаля з первісним варіантом мови.
Тиранія мозку версіїЗ
Відхід у «дельфійський» Паскаль замість «правильного» Оберона — це лише один бік проблеми програмування. У хаосі останніх 10-15 років виявилася ще більш тривожна і небезпечна тенденція: поширенняC -подібних мов.
У 1970-х була створена й надалі широко поширилася у різних варіаціях (зокрема знаменитий Linux) дуже потужна операційна система Unix. Разом з нею у світ програмування «в'їхав» і набув поширення мовиC, використаний для її написання. Надалі на його основі був побудований (як і «дельфійський» Паскаль, бездумним прямим додаванням безлічі новомодних, найчастіше неперевірених засобів) моваC++.
МоваC була складена (саме складена, т.к. проектуванням це назвати не можна) з нехитро проінтерпретованих практичних міркувань як заміна асемблеру в написанні операційної системи Unix (яка сама по собі з'явилася, безумовно, проривною розробкою). При створенніC було проігноровано всю накопичену на той час мудрість створення високонадійних мов програмування. В результаті наC легко написати абсолютно нечитані конструкції. Наведу цитату з форуму:
При такому аморфному синтаксисі програміст зовсім не захищений від випадкових помилок (причому вC розсипано й багато інших «граблів»).
Було виявлено, що щільність помилок у великих програмних текстах мовоюC за інших рівних (кваліфікація розробників, обсяг і складність ПЗ, час розробки тощо) у 16 разів перевищує щільність помилок у програмах на найбільш досконалому нащадку Паскаля BlackBox'е (про цю мову йтиметься нижче).
Тим не менш, саме ті властивості мовиC, які роблять її використання джерелом дір у великих програмах,привели до його популярності серед незрілих кіддісів від програмування, що розглядають його як гру, змагання, арену демонстрації власного інтелекту. Важливо розуміти, що подібні явища не є специфічними для програмування: у філології та дитячій психології добре відоме аналогічне явище «дитячого фольклору» (страшилки тощо), яке демонструє стійкість протягом багатьох десятиліть. Таким чином, можна говорити про стихійне поширення своєрідної міфології навколо мовиC та її похідних, що корениться в природній нестачі знань і досвіду, а також в особливостях психіки юних програмерів — бажання самоствердитися серед однолітків («справжні програмери пишуть наC » і т.д.
Виникнення монструозно складної мовиC++, написаної шляхом тупого додавання доC без виправлення її численних дефектів модних конструкцій об'єктно-орієнтованого програмування (про недолікиC++ написані цілі трактати), тільки посилило ситуацію: багато хто за наївністю плутає складність і міць мови, про хибність чого постійно говорив М. Вірт.
Стихійне поширення серед молодих партизанів від програмування порочної міфології, що виникла навколо мовC/C++, має резони в примітивних архетипах підліткової психології. До цього стихійного явища не можна ставитися зневажливо з таких причин. По-перше, на прикладі програмістів, які вчилися на фортані ще в 1960-х р., ми бачимо, як довго і наполегливо зберігаються в зрілому віці емоційні уподобання та звички програмістського мислення, що зафіксувалися в юності (це явище відображено у старому анекдоті: «Літньому програмісту потрібна хатня робітниця, яка говорить на фортані »). Навчати сучасним ефективним методампрограмістів з звичками, що вже склалися, майже неможливо, і такі програмісти постійно «тягнуть» у серйозні проекти ці негідні інструменти. По-друге, маса фанатівC/C++ створює стадний ефект: з одного боку, на нього орієнтуються комерційні видавництва (які, як показує досвід, функціонують як потужний підсилювач будь-якого мракобісся, якщо тільки перебуває достатньо покупців; нагадаємо, що спочатку потреба знатиC була створена поширенням операційної системи Unix, а тепер і Linux). З іншого боку, новачки-самоуки (яких безліч) не мають іншого орієнтиру, крім правила «йди за натовпом». Нарешті, менеджери під тиском миттєвих обставин змушені орієнтуватися на «пропозицію» ринку робочої сили. Виникає порочне замкнене коло, яке розривається лише щодо специфічних класах додатків (вбудовані системи управління тощо.), де у гру вступає невблаганна об'єктивна реальність, що руйнує міфологію. По-третє (і це найголовніше), що продовжує зростати масив програм, написаних наC/C++, є постійне джерело проблем - від втрат часу користувачів (сучасні версії Windows продовжують регулярно падати, як і 15 років тому, хоч і навчилися краще зберігати роботу), до дірок безпеки, пов'язаних з дефектами програм (переповнення буфера, витоку пам'яті та ін.). Дефекти, породжені використанням таких небезпечних мов програмування, якC/C++, дуже важко усунути.
Взагалі, вся ситуація тут виглядає досконалим абсурдом: те, чого можна легко домогтися просто вибором якісної та простої мови програмування, вирішується… неймовірно складним і дорогим способом, а головною причиною, зрештою, виявляється розумова інерція.програмістів, які на початку кар'єри зазнали «зараження холероюC ». Звідси зрозуміло, чому серйозні фахівці вживають такі сильні висловлювання як «розбещення малолітніх», «інтелектуальна зараза» тощо, говорячи про мовиC/C++.
Успіх маркетингуJava залучив достатньо розробників, щоб перевагиJava у плані продуктивності через відмову від культової «свободи»C молі себе проявити. ПісляJava виникла і її «близнюк»С#. Однак, обидві ці мови — це, перш за все, інструменти конкурентної боротьби відповідних корпорацій за утримання розробників: саме тому ці мови постійно ускладнюються — це унеможливлює перенесення великих масивів програмних текстів іншими мовами, міцно прив'язуючи розробників до відповідної платформи. Розробники ж, з міфічних міркувань «ефективності» тощо. і не розуміючи довгострокову ціну своїх рішень, прагнуть використовувати всі засоби, що надаються мовою, «ув'язуючи» у пастці.
Вихід тут
Блекбокс (BlackBox) - дуже вдалий і найпопулярніший варіант Оберона, що реалізує мову програмування Компонентний Паскаль.
Блекбокс ізолює програміста та користувача від операційної системи, надаючи унікальні можливості розробки додатків з інтерактивною графікою як стандартного типу, так і, що найцікавіше, нестандартні. За відгуками професійних програмістів більш потужну і сучасну, ніж графічна система .NET.
Завдяки поєднанню ефективності, автоматичного управління пам'яттю та легкості створення спеціальної інтерактивної графіки Блекбокс виявився дуже привабливим для складних наукових розрахунків синтетичного характеру («розумні» чисельні алгоритми,символічна алгебра великого обсягу, системи обробки даних та моделювання). Наприклад, наБлекбоксі створено ПЗ для розрахунку бортових фазованих решіток винищувача Eurofighter; повний обсяг програмного забезпечення — близько мільйона рядків. На Блекбоксі зроблено систему управління найбільшого каскаду ГЕС на Амазонці (корпорація Astom Power), і навіть низку інших додатків, зокрема. для експериментальної та теоретичної ядерної фізики.
Всі Оберони відрізняються чудовою переносимістю, але Блекбокс ще забезпечує засоби хорошої інтеграції з операційною системою, в яку він занурений. Блекбокс може бути поставлений і на голе залізо, а також використовуватися як основа системи крос-розробки (наприклад, компонент Denia).
Підкреслимо, щоBlackBox, хоч і аналогічний віртуальним машинамJava і.NET, але працює з ефективним кодом, що компілюється. Завдяки цьому програми, написані на Компонентному Паскалі в Блекбоксі, якісно ефективніші, ніж програми наJava іС#. У той самий час зберігається можливість компілювати Компонентний Паскаль як у Java, і у MSIL (відомий компілятор GPCP — Gardens Point Component Pasca).