Процес розробки ПЗ та ЯП b> b> p>
Костін Г.В. h2>
Все в цій книзі може виявитися помилкою. p>
Р. Бах. Ілюзії p>
Оскільки
процес програмування є процес переносу думок від розробника до
комп'ютера, ЯП виконує роль інтерфейсу, шлюзу між людиною і комп'ютером p>
Для початку
введу поняття "карта". У психології "перцептивні карта
реальності "визначено як індивідуальна модель сприйняття кожного
людини, що є результатом його попереднього досвіду. Тобто що в людини
в голові. Припустимо, стіл асоціюється у російськомовного людини зі словом
стіл, у француза зі словом table, в англійця чи американця зі словом
Desktop. Перекладаючи на мову комп'ютерів, картка - це вміст пам'яті комп'ютера.
І людина і комп'ютер реагують на зовнішні події (тобто вхідну інформацію) в
Відповідно до вмістом своєї картки. Припустимо, індонезієць слово
"Кретин" сприйме як "кучерявий", а слово "сука"
як "любити". Про фразах "Хуліана, підерас лас охуелас?" --
"Юля, ти попpосішь млинчиків?" і "Ун трахе негро пара ми
Ньєто "-" Чорний костюм для мого племінника я вже не говорю.
Аналогічно, компілятор C + +, зустрівши "(" сприйме її як початок
логічного блоку, а компілятор Паскаля - як початок коментаря. p>
Для здійснення
комунікації (тобто для передачі інформації) між двома суб'єктами (комп'ютери,
люди ...) необхідно, щоб їх картки хоча б частково збігалися.
частина як раз і є мова. Припустимо, комп'ютер під Windows може спілкуватися з
NetWare сервером лише кажучи на його "мові" (інтерфейс
IPX/SPX). Працюючи з Unix, ви не зможете використовувати команди Dos, а з Dos --
Unix. Аналогічно, спілкуватися з іноземцями Ви зможете лише на відомому обом
мовою. Більш того для спілкування з професором і зі слюсарем Ви, ймовірно, теж
виберете різні "інтерфейси". У психології підбір інтерфейсу під
співрозмовника носить назви підстроювання. На ній заснований Еріксонівський гіпноз і
НЛП.С допомогу ю її можна навести транс і вивести людину з коми. p>
Для
здійснення ж не просто комунікації, а ефективної комунікації необхідно
більш повний збіг карт. Якщо мова спілкування не буде рідним, то суб'єкт
комунікації втрачатиме ресурси на "переклад". Припустимо сервер під ОС
Linux емуліруя сервер WinNT буде показувати значно меншу
продуктивність, ніж та на яку він здатний будь цей інтерфейс для нього
рідним. Аналогічно програміст, спілкуючись з бухгалтером, буде витрачати час на
переклад "проводок" в транзакції. p>
Процес
розробки ПЗ та ЯП p>
p>
На малюнку
зображений процес розробки ПЗ з точки зору ЯП. p>
Тут я
розгляну розробку програмного забезпечення як процес послідовної деталізації. p>
Справа
зображений користувач, від якого програмісту надходить невелика кількість
інформації. Зліва зображено комп'ютер, до якого, в кінцевому рахунку, розробник
повинен буде представити програму в бінарних кодах, тобто дуже велике
кількість інформації. p>
пунктирними
лініями зображені рівні деталізації, такі як ЯП C + + або Технічне
завдання. У процесі розробки програміст рухається справа наліво від
користувача до комп'ютера. На малюнку розробник знаходиться приблизно на рівні
проектування програми. p>
Деталізація
проводиться або автоматично, наприклад, використання генерації коду за
специфікаціям, припустимо, Corba IDL або генерація коду програми з графічним
специфікаціям інтерфейсу в JBuilder, або вручну, наприклад, кодування в
двійкових кодах підпрограми по специфікації на ЯПВУ або реалізація класу по
специфікаціям. p>
Природно,
перший варіант істотно підвищує продуктивність праці розробника. Тобто
допустимо якщо розробник на рівні технічного завдання витрачає 5 хвилин то на
рівні проектування йому буде потрібно 50, а на рівні реалізації 250. Саме
тому еволюція ЯП та й програмування в цілому рухається в напрямку від
комп'ютера до людини. p>
Я маю на увазі не всю тривалу і трудомістку
стадію аналізу, а лише формальний опис вимог до ПЗ на його рівні.
Тому наведені дані не слід розглядати як применшення значимості
стадії аналізу. p>
На кожному
рівні абстракції існують свої мови. ЯП ж виступає як інтерфейс на
різних рівнях. При цьому за специфікацією (праворуч пунктирних ліній на
малюнку) ховається специфікація (ліворуч пунктирних ліній на малюнку). Наприклад,
специфікація циклу For приховує його реалізацію також як специфікація класу
приховує специфікацію його. p>
Відносно
мови: p>
Чим ближче ЯП до
комп'ютера й далі від розробника, тим більше буде розмір вихідного коду
програми на ньому, складність його написання, широта можливостей, що надаються
мовою, і якість генерується коду. З близькості до людини будуть слідувати
переносимість розробляється ПЗ і його безпеку, низький рівень
деталізації і, природно, більш високий рівень ЯП. p>
Втім,
зазначу, що переваги та недоліки
ЯП обумовлені не тільки цими факторами, наприклад, типізація неадекватна ні
людині, ні машині. Вона виникає на проміжному рівні --
3GL відсутній на попередньому - асемблери і на подальших - сценарні і
неімператівние мови p>
Її
існування обумовлене лише небезошібочностью роботи людини і
неприпустимістю таких помилок у програмній інженерії. p>
Ширина
прямокутника ( "горизонтальний розмір мови") означає широту
засобів мови по рівнях абстракції. Поясню на прикладі. C + + - це мова з дуже
великий "шириною": він взяв до себе кошти і від нізкоуровнего
асемблера, і від ЯПВУ. На ньому можна реалізувати і драйвер, і АСУП. Притому в
випадку, якщо в мову будуть вставлені високорівневі засоби створення
інтерфейсу користувача, роботи з БД і т.д., як це пропонує Страуструп, то
він стане ще "ширше". Java - мова значно більше
"вузький". І драйвера на нього писати не вдасться. p>
прямокутника ( "вертикальний розмір мови") означає широту
засобів мови по областях застосування. Фактично спектр типів додатків, на
які цю мову розрахований. p>
Поясню на
прикладі - PL/1 і C + + однаково годяться і для розробки фінансового пакету, і
для комп'ютерної гри. Вони мають велику "висоту" коштів. p>
MatLab,
JavaScript мають маленьку "висоту". Їх можна ефективно використовувати
лише в тієї єдиної області, для якої вони створені (у даному випадку
математика та Web - скрипти). p>
Як відомо,
довжина, помножена на ширину, дає площа. Це обсяг коштів мови. p>
Є думка,
що складність і розмір мови повинні бути відповідні з розмірами завдання. p>
Хоча не всі
фахівці та вчені згодні з тезою, що складність і розмір мови повинні
бути відповідні з розмірами завдання. Приміром, Вірт розробив ОС Oberon на
дуже простою мовою Oberon з мінімальними засобами. p>
Тут є два
крайніх варіанти: p>
У ЯП слід
включати тільки такі концепції і конструкти, без яких абсолютно неможливо
обійтися. Яскравий приклад - Оберон p>
У ЯП слід
включати все, що коли - небудь може знадобитися розробнику - яскравий приклад --
Ада. На практиці, як правило, використовується щось між цими двома полюсами. p>
Відносно
складності ЯП зазначу таке: p>
Взагалі
складність ЯП і складність його використання для тих чи інших завдань поняття
різні і не завжди корелюють одна з одною. Спробуйте написати більше не
менш складну програму на оригінальному Basic ... p>
Тут слід
врахувати і людський фактор. p>
Простота
використання невисока у високорівневих коштів лише для завдання для яких
вони призначені. Приміром розробка простенькій БД в Accses значно
простіше, ніж Delphi. Але розробка серйозного клієнт - серверного АРМ'а на Delphi
може виявитися простіше. p>
Людський
фактор у ЯП p>
"... що на
зміна звичок і поведінки людей завжди йде набагато більше часу, ніж
хотілося б ... "Бьорн Страуструп p>
... дослідження
психологів ясно показали, що люди постійно помиляються: чи пишуть вони програми,
розробляють чи математичні докази, управляють чи літаком ... p>
Іноді
розробники занижують рівень мови. Приміром, розробляють на C + + програму,
яку можна було розробити на Perl за в кілька разів менший час p>
".. реагують
на цю мою позицію з шаленством, що виходять за рамки відносин, які я
вважаю доречними при обговоренні мови програмування. "Б'ярне Страуструп p>
Постійна
приплив у сферу розробки ПЗ "програмістів з нагоди". Вони додають
популярність і таких засобів, як Perl, TCL, 1C, PHP. p>
Обмежена
розмірність вирішуваних завдань. Програміст не може одночасно тримати в голові
докладно досить складний фрагмент коду. Тому в ЯП включаються кошти для
декомпозиції ПО - підпрограми, модулі, класи. p>
Не тільки ЯП
формує мислення, але і мислення - мова і навіть "залізо". p>
Наведу приклад.
p>
Контроль за
виходом індексу меж масиву майже не уповільнює виконання програми, тому що
перевірка у процесорів 80x86 реалізуються на апаратному рівні. p>
Таким чином,
така особливість людської психіки, як неможливість безпомилкової роботи
за коштами ЯП відбилася на залозі. p>
Легкість
розуміння програми людиною. Комп'ютер програму компілює, а читає і
модифікує її чоловік. Успішність цього процесу в значній мірі
залежить від легкості розуміння програми. Зокрема, синтаксису мови. p>
Стиль мислення.
p>
Нагадаю, що
"Мова формує наш спосіб мислення і визначає, про що ми можемо мислити.".
Парадигми програмування є і парадигмами мислення програміста ". P>
Якість
програми визначається якістю мислення. p>
Резюмуючи,
зазначу, що різниця між людиною і комп'ютером дуже велика. Мова служить
[проміжною ланкою] для подолання цієї різниці. p>
ЯП мови --
явище насамперед соціальне, а наукове. Умоглядні критерії та оцінки
переваг та недоліків мов, щонайменше, непереконливі - основний
критерій: практика масового використання. p>
умоглядно ми
можемо розглядати лише обмежену кількість абстрактних критеріїв. І не факт,
що виберемо основні. Тим більше, що необхідно врахувати і психологічні, і
економічні фактори. Єдина вимога до використання мови - це
адекватність застосування. p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.bugtraq.ru/
p>