Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
NikitchenkoNEWNEW.doc
Скачиваний:
26
Добавлен:
08.11.2019
Размер:
2.99 Mб
Скачать

2.2. Розвиток поняття програми з гносеологічної точки зору

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

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

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

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

  • приєднатися до однієї зі шкіл гносеології;

  • розробити власний гносеологічний підхід;

  • ігнорувати загальногносеологічні проблеми.

Кожна з можливостей має свої переваги та недоліки. Розробити власний підхід дуже складно. Це призведе до значних витрат на чисто філософську діяльність, займе багато часу. Ігнорування гносеологічних проблем призведе до примітивних помилок, які вже давно зрозумілі філософам. Тут є повна аналогія з теорією дебютів у шахах. Розробити власний дебют дуже важко, бо історія шахів нараховує тисячоліття і в ній зроблено надзвичайно багато. Ігнорування теорії дебютів призведе до програшу вже на початку партії. Тому шахісти, як правило, використовують вже розроблені та досліджені дебюти. Так і ми спробуємо використати певний гносеологічний підхід. Але який? Звичайно той, що стоїть найближче до практики програмування.

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

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

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

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

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

Наведені етапи дослідження предмета часто формулюють у вигляді наступної схеми: синкретичний етап (предмет не членується на складові, розглядаються зовнішні відношення), аналітичний етап (розглядається внутрішня структура та відношення між складовими) та синтетичний етап (об’єднуються зовнішні та внутрішні відношення та складові).

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

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

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

Нарешті, надамо певні пояснення категорії абстрактне – конкретне. Інколи ці терміни тлумачаться як уявне(ідеальне) – реальне. Тут ми беремо інше значення цих термінів. Абстрактне (походить від латинського abstraction – відволікання, виділення) означає одностороннє, просте, нерозвинуте. Конкретне (від латинського concretus – зрощене) означає єдність різних сторін, багатостороннє. Тут важливо відзначити, що конкретність розглядається саме як єдність, як системність.

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

Застосовуючи зазначені положення до програм, одержуємо наступний принцип.

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

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

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

  • вказувати рівень абстракції, що розглядається (принцип фіксації рівня абстракції);

  • при побудові умовиводів використовувати тільки такі властивості понять, що були явно визначені раніше (принцип достатньої підстави);

  • не використовувати властивості, задані на інших рівнях і явно не визначені на рівні, що розглядається (принцип інкапсуляції рівнів абстракції);

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

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

Підставою вибору того чи іншого напрямку розвитку є принцип єдності логічного та історичного. Цей принцип може розглядатися як певний варіант відомого гносеологічного принципу єдності теорії та практики.

Розвиток понять часто відбувається згідно з тріадою розвитку: теза – антитеза – синтез.

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

Наведений розвиток призвів до визначення терміна «теща», що приводиться у словниках: теща – мати дружини.

Рисунок 2.1. Тріада розвитку

Підсумовуючи наведені вище гносеологічні положення, можна говорити про наступне.

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

  2. Оскільки кожен предмет (крім дуже простих) має багато сторін, то неможливо визначити його одним визначенням.

  3. Зважаючи на неможливість охопити всі сторони предмета одним визначенням, спочатку зупиняються лише на деяких аспектах (тобто предмет спочатку розглядається абстрактно).

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

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

  6. Цей вибір аспектів, як правило, відповідає наступній схемі: зовнішні аспекти – внутрішні аспекти – взаємозв’язок аспектів.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]