Еволюція мов програмування, Різне, Програмування, статті

Михайло Пліскін

Критикою C # навіяно …

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

До написання цієї статті мене спонукала дискусія, розгорілася на одному з форумів dotSITE після появи там повідомлення, різко критикує C # – одну з основних складових нової платформи. NET від Microsoft. Повідомлення містило в собі вже стала досить банальною критику Microsoft взагалі і зокрема (Я тут не стверджую, що критикувати Microsoft не за що, просто ця критика вже порядно набила оскому), а також деякі висловлювання конкретно про C #. В ході розгорнулася дискусії було висловлено кілька цікавих зауважень, деякі ж питання залишилися непорушними. Все це і спонукало мене написати цю статтю, в якій робиться спроба «Примирити» в деякому роді носіїв рецензій на винятковості того чи іншого мови програмування. Я постараюся дати деякий історичний нарис розвитку різних мов і пояснити на прикладах деякі загальні тенденції. Можливо, мені вдасться переконати когось у марності проведення дискусій, аналогічних вищезгаданої. Я не претендую ні на об’єктивність (хоча постараюся бути таким), ні на повноту викладу. Це всього лише спроба «Стати навшпиньки і озирнутися» …

Перші універсальні мови

Отже, почнемо. Звернемося до витоків розвитку обчислювальної техніки. Згадаймо найперші комп’ютери і програми для них. Це була ера програмування безпосередньо в машинних кодах, а основним носієм інформації були перфокарти і перфострічки. Програмісти зобов’язані були знати архітектуру машини досконально. Програми були досить простими, що зумовлювалося, по-перше, вельми обмеженими можливостями цих машин, і, по-друге, великою складністю розробки і, головне, налагодження програм безпосередньо на машинній мові. Разом з тим такий спосіб розробки давав програмісту просто неймовірну влада над системою. Ставало можливим використання таких хитромудрих алгоритмів і способів організації програм, які і не снилися сучасним розробникам. Наприклад, могла застосовуватися (і застосовувалася!) така можливість, як самомодіфіцірующіхся код. Знання двійкового подання команд дозволяло іноді не зберігати деякі дані окремо, а вбудовувати їх в код як команди. І це далеко не повний список прийомів, володіння хоча б одним з яких зараз відразу ж просуває вас до рівня «гуру» екстра-класу.

Асемблер

Першим значним кроком представляється перехід до мови асемблера (Дозволимо собі маленьке ліричний відступ: англійське назва assembly language, або assembler, на російський переводять саме тим терміном, який був використаний вище. При цьому у новачка створюється враження, що мова названий на честь якогось чоловіка на ім’я асемблер. Досить кумедна ситуація, чи не так?). Не дуже помітний, здавалося б, крок – перехід до символічного кодуванню машинних команд – мав насправді величезне значення. Програмісту не треба було більше вникати в хитромудрі способи кодування команд на апаратній рівні. Більш того, часто однакові по суті команди кодувалися абсолютно різним чином в залежності від своїх параметрів (широко відомий приклад зі світу сучасних комп’ютерів – це кодування інструкції mov в процесорах Intel: існує кілька абсолютно по-різному кодованих варіантів команди; вибір того чи іншого варіанту залежить від операндів, хоча суть виконуваної операції незмінна: помістити вміст (Або значення) другого операнда в перший). З’явилася також можливість використання макросів і міток, що також спрощувало створення, модифікацію і налагодження програм. З’явилося навіть якусь подобу переносимості – існувала можливість розробки цілого сімейства машин з подібною системою команд і якогось загального ассемблера для них, при цьому не було потреби забезпечувати двійкову сумісність.

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

Фортран

У 1954 році в надрах корпорації IBM групою розробників на чолі з Джоном Бекуса (John Backus) був створений мову програмування Fortran. Значення цієї події важко переоцінити. Це перша мова програмування високого рівня. Вперше програміст міг по-справжньому абстрагуватися від особливостей машинної архітектури. Ключовий ідеєю, що відрізняє нову мову від асемблера, була концепція підпрограм. Нагадаємо, що це сучасні комп’ютери підтримують підпрограми на апаратному рівні, надаючи відповідні команди і структури даних (стек) прямо на рівні асемблера, в 1954 же році це було абсолютно не так. Тому компіляція Fortran’а була процесом аж ніяк не тривіальним. Крім того, синтаксична структура мови була досить складна для машинної обробки в першу чергу через те, що прогалини як синтаксичні одиниці взагалі не використовувалися. Це породжувало масу можливостей для прихованих помилок, таких, наприклад:

В Фортране наступна конструкція описує «цикл for до мітки 10 при зміні індексу від 1 до 100 »:

DO 10 I=1,100

Якщо ж тут замінити кому на крапку, то вийде оператор присвоювання:

DO10I = 1.100

Кажуть, що така помилка змусила ракету вибухнути під час старту!

Мова Фортран використовувався (і використовується за цього дня) для наукових обчислень. Він страждає від відсутності багатьох звичних мовних конструкцій і атрибутів, компілятор практично ніяк не перевіряє синтаксично правильну програму з точки зору семантичної коректності (Відповідність типів та ін.). У ньому немає підтримки сучасних способів структурування коду і даних. Це усвідомлювали і самі розробники. За визнанням самого Бекуса, перед ними стояло завдання швидше розробки компілятора, ніж мови. Розуміння самостійного значення мов програмування прийшло пізніше.

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

Cobol

У 1960 році був створена мова програмування Cobol. Він задумувався як мова для створення комерційних додатків, і він став таким. На Коболе написані тисячі прикладних комерційних систем. Відмінною особливістю мови є можливість ефективної роботи з великими масивами даних, що характерно саме комерційних додатків. Популярність Кобола настільки висока, що навіть зараз, при всіх його недоліках (за структурою і задумом Кобол багато в чому нагадує Фортран) з’являються нові його діалекти і реалізації. Так недавно з’явилася реалізація Кобола, сумісна з Microsoft. NET, що зажадало, ймовірно, внесення в мова деяких рис об’єктно-орієнтованої мови.

PL/1

У 1964 році все та ж корпорація IBM створила мову PL / 1, який був покликаний замінити Cobol і Fortran в більшості додатків. Мова володів винятковим багатством синтаксичних конструкцій. У ньому вперше з’явилася обробка виняткових ситуацій та підтримка паралелізму. Треба зауважити, що синтаксична структура мови була вкрай складною. Прогалини вже використовувалися як синтаксичні роздільники, але ключові слова не були зарезервовані. Зокрема, наступний рядок – це цілком нормальний оператор на PL / 1:

IF ELSE=THEN THEN THEN; ELSE ELSE

В силу таких особливостей розробка компілятора для PL / 1 була виключно складною справою. Мова так і не став популярний поза світом IBM.

BASIC

У 1963 році в Дартмурском коледжі (Dartmouth College) була створена мова програмування
BASIC (Beginners’ All-Purpose Symbolic Instruction Code — багатоцільовий мова символічних інструкцій для початківців). Мова замислювався в першу чергу як засіб навчання і як перший досліджуваний мову програмування. Він передбачався легко інтерпретується і компіляції. Треба сказати, що BASIC дійсно стала мовою, на якому навчаються програмувати (по крайней мере, так було ще кілька років тому; зараз ця роль відходить до Pascal). Було створено кілька потужних реалізацій BASIC, що підтримують найсучасніші концепції програмування (найяскравіший приклад
— Microsoft Visual Basic).

Algol

У 1960 році командою на чолі з Петером Науру (Peter Naur) була створена мова програмування Algol. Ця мова дав початок цілому сімейства Алгол-подібних мов (Найважливіший представник – Pascal). В 1968 році з’явився нова версія мови. Вона не знайшла такого широкого практичного застосування, як перша версія, але була вельми популярна в колах теоретиків. Мова був досить цікавий, тому що володів багатьма унікальними на так момент характеристиками.

Подальший розвиток мов програмування

У цьому місці я віддам перевагу зупинитися і зробити деякі зауваження. Створення кожного з вищезгаданих мов (За винятком, може бути, Algol’а) було викликано деякими практичними вимогами. Ці мови послужили фундаментом для пізніших розробок. Всі вони представляють одну і ту ж парадигму програмування. Наступні мови пішли істотно далі в своєму розвитку, в бік більш глибокого абстрагування.

Відомості про більш пізніх мовами я буду приводити в вигляді опису сімейств мов. Це дозволить краще простежити взаємозв’язку між окремими мовами

Pascal-подібні мови

У 1970 році Никлаусом Віртом був створив мову програмування Pascal. Мова чудовий тим, що це перший широко поширена мова для структурного програмування (Першим, строго кажучи, був Алгол, але він не отримав такого широкого поширення). Вперше оператор безумовного переходу перестав грати основну роль при управлінні порядком виконання операторів. У цій мові також впроваджена сувора перевірка типів, що дозволило виявляти багато помилки на етапі компіляції.

Негативною рисою мови була відсутність в ньому коштів для розбиття програми на модулі. Вірт усвідомлював це і розробив мову Modula-2 (1978), в якому ідея модуля стала однією з ключових концепцій мови. У 1988 році з’явилася Modula-3, в яку були додані об’єктно-орієнтовані риси. Логічним продовженням Pascal і Modula є мова Oberon і Oberon-2. Вони характеризуються рухом в сторону об’єктно-і компонентно-орієнтованості.

C-подібні мови

У 1972 році Керніганом і Рітчі була створена мова програмування C. Він створювався як мова для розробки операційної системи UNIX. C часто називають «стерпним асемблером », маючи на увазі те, що він дозволяє працювати з даними практично так само ефективно, як на асемблері, надаючи при цьому структуровані керуючі конструкції і абстракції високого рівня (Структури і масиви). Саме з цим пов’язана його величезна популярність і понині. І саме це є його ахіллесовою п’ятою. Компілятор C дуже слабо контролює типи, тому дуже легко написати зовні абсолютно правильну, але логічно помилкову програму.

У 1986 році Бьярн Страуструп створив першу версію мови C + +, додавши в мову C об’єктно-орієнтовані риси, взяті з Simula (див. нижче), і виправивши деякі помилки і невдалі рішення мови. C + + продовжує вдосконалюватися і в даний час, так в 1998 році вийшла нова (Третя) версія стандарту, містить в собі деякі досить істотні зміни. Мова став основою для розробки сучасних великих і складних проектів. У нього є, однак же, і слабкі сторони, що випливають з вимог ефективності.

У 1995 році в корпорації Sun Microsystems Кеном Арнольдом і Джеймсом Гослінгом був створена мова Java. Він успадкував синтаксис C і C + + і був позбавлений від деяких неприємних рис останнього. Відмінною особливістю мови є компіляція в код якоїсь абстрактної машини, для якої потім пишеться емулятор (Java Virtual Machine) для реальних систем. Крім того, в Java немає покажчиків і множини спадкування, що сильно підвищує надійність програмування.

У 1999-2000 роках в корпорації Microsoft була створена мова C #. Він достатньою мірою схожий з Java (І замислювався як альтернатива останньому), але має і відмінні риси. Орієнтований, в основному, на розробку багатокомпонентних Інтернет-додатків.

Мови Ada і Ada 95

У 1983 році під егідою Міністерства Оборони США була створена мова Ada. Мова чудова тим, що дуже багато помилок може бути виявлено на етапі компіляції. Крім того, підтримуються багато аспекти програмування, які часто віддаються на відкуп операційній системі (паралелізм, обробка виключень). У 1995 році був прийнятий стандарт мови Ada 95, який розвиває попередню версію, додаючи в неї об’екно-орієнтованість та виправляючи деякі неточності. Обидва цих мови не отримали широкого поширення поза військових і інших великомасштабних проектів (Авіація, залізничні перевезення). Основною причиною є складність освоєння мови і досить громіздкий синтаксис (Значно більше громіздкий, ніж
Pascal).

Мови обробки даних

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

APL

У 1957 році була зроблена спроба створення мови для опису математичної обробки даних. Мова був названий APL (Application Programming Language). Його відмінною особливістю було використання математичних символів (що ускладнювало застосування на текстових терміналах: появи графічних інтерфейсів зняло цю проблему) та дуже потужний синтаксис, який дозволяв проводити безліч нетривіальних операцій прямо над складними об’єктами, не вдаючись до розбиття їх на частини. Широкому застосуванню перешкодило, як уже зазначалося, використання нестандартних символів як елементів синтаксису.

Snobol і Icon

У 1962 році з’явився мова Snobol (а в 1974 – його наступник Icon), призначений для обробки рядків. Синтаксис Icon нагадує С і Pascal одночасно. Відмінність полягає в наявності потужних вбудованих функцій роботи зі рядками і пов’язана з цими функціями особлива семантика. Сучасним аналогом Icon і Snobol є Perl – мова обробки рядків і текстів, в який додані деякі об’єктно-орієнтовані можливості. Вважається дуже практичним мовою, проте йому бракує елегантності.

SETL

У 1969 році був створена мова SETL – мова для опису операцій над множинами. Основний структурою даних в мові є безліч, а операції аналогічні математичних операцій над множинами. Корисний при написанні програм, що мають справу зі складними абстрактними об’єктами.

Lisp і йому подібні мови

У 1958 році з’явився мова Lisp – мова для обробки списків. Отримав досить широке поширення в системах штучного інтелекту. Має кілька нащадків: Planner (1967), Scheme (1975), Common Lisp (1984). Багато його риси були успадковані сучасними мовами функціонального програмування.

Скриптові мови

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

JavaScript

Мова був створений в компанії Netscape Communications в якості мови для опису складного поведінки веб-сторінок. Спочатку називався LiveScript, причиною зміни назви отримали маркетингові міркування. Інтерпретується браузером під час відображення веб-сторінки. За синтаксису схожий з Java і (віддалено) з C / C + +. Має можливість використовувати вбудовану в браузер об’єктну функціональність, однак справді об’єктно-орієнтованим мовою не є.

VBScript

Мова був створений в корпорації Microsoft в чому в Як альтернатива JavaScript. Має схожу область застосування. Синтаксично схожий з мовою Visual Basic (І є усіченою версією останнього). Так само, як і JacaScript, виповнюється браузером при відображенні веб-сторінок і має ту ж ступінь об’єктно-орієнтованості.

Perl

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

Python

Інтерпретується об’єктно-орієнтована мова програмування. За структурою і області застосування близький до Perl, проте менш поширений і більше строгий і логічний. Є реалізації для більшості існуючих платформ.

Об’єктно-орієнтовані мови

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

Simula

Першим об’єктно-оріентрованним мовою була мова Simula (1967). Ця мова була призначений для моделювання різних об’єктів і процесів, і об’єктно-орієнтовані риси з’явилися в ньому саме для опису властивостей модельних об’єктів.

Smalltalk

Популярність об’єктно-орієнтованого програмування приніс мова Smalltalk, створений в 1972 році. Мова призначався для проектування складних графічних інтерфейсів і був першим по-справжньому об’єктно-орієнтованою мовою. В ньому класи та об’єкти – це єдині конструкції програмування. Великим недоліком Smalltalk є великі вимоги до пам’яті і низька продуктивність отриманих програм. Це пов’язано з не дуже вдалою реалізацією об’єктно-орієнтованих особливостей. Популярність мов C + + і Ada 95 пов’язана саме з тим, що об’єктно-орієнтованість реалізована без істотного зниження продуктивності.

Eiffel

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

Мови паралельного програмування

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

Мова occam

Мова occam був створений в 1982 році і призначений для програмування трансп’ютерів – багатопроцесорних систем розподіленої обробки даних. Він описує взаємодію паралельних процесів у вигляді каналів – способів передачі інформації від одного процесу до іншому. Відзначимо особливість синтаксису мови occam – в ньому послідовний і паралельний порядки виконання операторів рівноправні, і їх необхідно явно вказувати ключовими словами PAR і SEQ.

Модель паралельних обчислень
Linda

У 1985 році була запропонована модель паралельних обчислень Linda. Основним її завданням є організація взаємодії між паралельно процесами, що виконуються. Це досягається за рахунок використання глобальної кортежной області (tuple space). Процес може помістити туди кортеж з даними (тобто сукупність декількох, можливо різнорідних, даних), а інший процес може очікувати появи в кортежной області деякого кортежу і, після його появи, прочитати кортеж з можливим наступним його видаленням. Зауважимо, що процес може, наприклад, помістити кортеж в область і завершитися, а інший процес може через деякий час скористатися цим кортежем. Таким чином забезпечується можливість асинхронного взаємодії. Очевидно, що при допомогою такої моделі може бути семуліровать і синхронне взаємодія. Linda – це модель паралельних обчислень, вона може бути додана в будь-яку мову програмування. Існують досить ефективні реалізації Linda, що по проблему існування глобальної кортежной області з потенційно необмеженим обсягом пам’яті.

Неімператівние мови

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

Функціональні мови

Основна ідея, що лежить в основі функціонального програмування, – Це представлення програми в вигляді математичних функцій (тобто функцій, значення яких визначається лише їх аргументами, а НЕ контекстом виконання). Оператор присвоювання в таких мовах не використовується (або, як мінімум, його використання не заохочується). Імперативні можливості, як правило, є, але їх застосування обставлено серйозними обмеженнями. Існують мови з ледачою і з енергійною семантикою. Різниця полягає, грубо кажучи, в тому, що в мовах з енергійною семантикою обчислення виробляються в тому ж місці, де вони описані, а в разі ледачою семантики обчислення проводиться тільки тоді, коли воно дійсно необхідно. Перші мови мають більш ефективну реалізацію, в той час як другі – кращу семантику.

З мов з енергійної семантикою згадаємо ML і два його сучасних діалекту – Standard ML (SML) і CaML. Останній має об’єктно-орієнтованого нащадка
— Objective CaML (O’CaML).

Серед мов з ледачою семантикою найбільш поширені два: Haskell і його більш простий діалект Clean.

Більш докладні відомості про функціональні мовах наведені тут:

www.ssh.tepkom.ru/msk/Languages.Functional.html
.

Мови логічного програмування

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

Родоначальником більшості мов логічного програмування є мова Prolog (1971). У нього є ряд нащадків – Parlog (1983, орієнтований на паралельні обчислення), Delta Prolog та ін Логічне програмування, як і функціональне, – це окрема область програмування, і за більш докладними відомостями ми відсилаємо читача до спеціальної літературі.

Замість висновку

Дозволю собі виділити деяку загальну тенденцію в розвитку мов програмування. Проникливий читач, напевно, вже давно здогадався, про що я збираюся сказати. Мови розвиваються в сторону все більшої і більшої абстракції. І це супроводжується падінням ефективності. Питання: а чи варто цього абстракція? Відповідь: варто. Варто, так як підвищення рівня абстракції тягне за собою підвищення рівня надійності програмування. З низькою ефективністю можна боротися шляхом створення більш швидких комп’ютерів. Якщо вимоги до пам’яті занадто високі, можна збільшити її обсяг. Це, звичайно, вимагає часу і коштів, але це вирішити. А от з помилками в програмах можна боротися тільки одним способом: їх треба виправляти. А ще краще – не здійснювати. А ще краще максимально утруднити їх вчинення. І саме на це спрямовані всі дослідження в області мов програмування. А з втратою ефективності доведеться змиритися.

Метою даного огляду була спроба дати читачеві уявлення про всьому різноманітті існуючих мов програмування. Серед програмістів часто побутує думка про «загальної застосовності» того або іншої мови (C, C + +, Pascal і т.п.). Це думка виникає з кількох причин: брак інформації, звичка, інертність мислення. Я спробував злегка компенсувати перший фактор. З приводу інших можу лише сказати, що справжній професіонал повинен постійно прагнути підвищувати свої професійну кваліфікацію. А для цього потрібно не боятися експериментувати. Ну і що, що все навколо пишуть на C / С + + / VB / Pascal / Perl / Java / … (потрібне підкреслити)? А чому б не спробувати щось новеньке? А раптом це виявиться ефективніше? Зрозуміло, перш ніж братися використовувати нову мову, потрібно уважно вивчити всі його особливості, включаючи наявність ефективної реалізації, можливості взаємодії з існуючими модулями і т.п., і тільки після цього приймати рішення. Зрозуміло, завжди є ризик піти не тим шляхом, але … Не помиляється лише той, хто нічого не робить.

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

Ця стаття замислювалася як відповідь тим, хто кричить «мова X MUST DIE». Сподіваюся, що відповідь вийшла досить адекватним і переконливим. Сподіваюся також, що стаття має, крім полемічної, і пізнавальну цінність.

Схожі статті:


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

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*