
Філософія мови
Я знаходжу абсолютно дивовижну незворушність, з якою світова спільнота програмістів прийняла цього нотаційного монстра (Н. Вірт).
Уявіть собі, що таке заняття, як програмування отримало офіційний статус «Мистецтво». На сьогоднішній день, займаючись черговою прикладною програмою або web-порталом програміст не вирішує тих проблем, які вирішував би ще 5-10 років тому. Очевидно? Факт? З повсюдним приходом доступних крос-платформенних технологій, продуктивних обчислювальних ресурсів, швидкісних електронно-обчислювальних мереж, прийшла повсюдна розслабленість у професійних колах. Проблемі оцінки програмного коду присвячено чимало літератури, різні методи згортки та одиниці вимірювання якості. Я ж хочу зупинитися на майже непомітному, практично невідчутному - красі програмного коду.
Завдання
Ми легко можемо виділити красиву річ, звернути увагу на витончену сторінку в мережі, оцінити принадність нового спорт-кара. Займаючись груповою розробкою програмного забезпечення, часто можна виділити «непоганого програміста» і «школяра-домогосподарку». Що ж буде критеріями оцінки краси програмного коду? Чи можна спробувати систематизувати наші розуміння в цій галузі, незважаючи на те, що більша їх частина знаходиться на боці емоцій і почуттів?
Теза
Оцінку краси будь-якого об'єкта, на мою думку, слід проводити системно, а саме, розглядаючи не тільки сам об'єкт і зіставляючи його з якимось ідеалом (оптимумом, як це прийнято в теорії оптимізації), але і ряд пов'язаних з ним речей. Для програмного коду можна виділити:
- вирішуване завдання
- алгоритм вирішення
- засоби та інструменти реалізації
- реалізація (сам код)
- всілякі взаємодії перелічених елементів.
Розглядом перших двох аспектів, у цій статті зневагою, залишивши постановку завдання замовникам і аналітикам, а вибір алгоритмів рішення теоретикам-фізикам-ядерникам. Основну увагу в свою чергу, пропоную все ж таки, сконцентрувати на розгляді і вибір коштів та інструментів реалізації люб'язно складених нам алгоритмів. Тут-то і починається найцікавіше. Припустимо, що нас ніхто не обмежує у виборі улюбленої мови, IDE, бібліотек, та що там, навіть платформу підженуть під наше ПЗ, а що далі? Більшість розробників - вузькі фахівці і спасибі їм за це, але все ж, приходячи до вирішення певного завдання необхідно спиратися на заточеність коштів, а не своїх переконань. "Студентів, які раніше вивчали Бейсік, практично неможливо навчити хорошому програмуванню. Як потенційні програмісти вони зазнали незворотної розумової деградації ", сказав Дейкстра і, напевно, мав рацію, не знаю, мені не доводилося викладати програмування, але в його фразі добре розкрита тема невідповідності мови і завдання навчання. Так чорт забирай, чи треба вміти копати виделкою, коли є лопата? А якщо поруч стоїть бульдозер, навіщо взагалі бруднити руки?
Причини, завдання, поняття
Я вірю в те, що у всього створюваного є своя причина. Створюючи такий складний механізм, як мова програмування, автори, будь вони хоч люди, хоч роботи, спираються на причини, що спонукали їх на цей досить трудомісткий захід. Звідси завдання розробника, на мій погляд, вміти оцінити наявні продукти, розуміти причини їх створення і усвідомлювати свої завдання і зіставляти ці самі завдання з тими причинами, заради яких автори мов робили свої розробки. Немає і не буде універсальної мови програмування, немає і не буде універсального програміста. Краса реалізації коду, як у будь-якій мові (маю на увазі і натуральні) досягається безперервною практикою, тут ніякого секрету немає. Мистецтво - писати олійну картину пензлем, вміти це робити і, що чимало важливо, гідно оформити її в підходящому місці. Уявіть собі шикарну клумбу з живими квітами, красиво? А що, якщо ця клумба стоїть в неблагополучному районі десь на околиці мегаполісу, робочий квартал, темінь, бруд, розбиті дороги і п'яні бомжі? Виходить, що програмування (у вузькому розумінні - кодинг) не самоціль, аж ніяк. Розглядаючи вирішення проблеми як комплекс можна побачити красу або її відсутність.
Вивід
Мені здається, що люди повинні розуміти, що краса елемента ніколи не зрівнятися з красою композиції і тільки системний аналіз здатний хоча б трохи наблизити нас до об'єктивності. Ніклаус Вірт розмірковуючи про конструкції мови Сі, вирішував проблему синтаксичного аналізатора, навряд чи поет-пісняр, оцінив би створений самим Віртом (шанований мною як найкраща мова навчання) Паскаль.