Філософія програмування - трехнаправленное програмування

Програмування розглядається як процес створення комп'ютерних програм. Слово процес у цьому визначенні не зайве. Зазвичай міркують в дусі «подивіться, яку чудову структуру даних можна описати на даній мові програмування». Філософія програмування передбачає озирнутися по сторонах, так і в глиб копнути.

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

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

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

Наприклад така історія:
намагаючись розфарбувати карту округів Англії, Францис Гутрі сформулював проблему чотирьох фарб, зазначивши, що чотирьох кольорів достатньо, щоб розфарбувати карту так, щоб будь-які два суміжних регіону мали різні кольори. Його брат передав питання своєму вчителеві математики, Огастесу де Моргана, який згадав про нього у своєму листі Вільяму Гамільтону в 1852 році. Артур Келі підняв цю проблему на зустрічі Лондонського математичного співтовариства в 1878 році. У тому ж році Тейтом було запропоновано перше рішення цієї задачі.


Розумієте? Соціальний вимір. Тобто ви навчаєте не тільки код, але ви знаєте імена тих хто цей код придумав, ви не вивчаєте просто мова Сі, але і історію його створення. Це дає можливість рухатися далі в історичній перспективі, дає вам можливість усвідомити своє місцезнаходження в соціальній структурі і знайти де прикласти свої сили в новому для всього людства напрямку. Росіяни постійно винаходять нові мови програмування та алгоритми, з цим немає проблем, просто через незнання історії і філософії програмування ви изобретаете те, що вже винайдено. Або, що ще гірше ви изобретаете щось нове, але не маєте поняття, куди це подіти, якого «Лорду Гамільтону» написати про свою роботу, і на якому «засіданні лондонського клубу» зачитати доповідь. Доповідь-то ви напишете, і він, швидше за все, буде досконалим з технічної точки зору.

Хоча истемная інженерія передбачає аналіз і постановку завдання перед власне проектуванням, алгоритмированием, розробкою структур даних, кодування і налагодженням, але завдання ставить замовник. Замовник це «Господь Бог» у філософії програмування, він не осмислюється, оскільки не може бути осмислений, він — абсолют та вища сила. Можна тільки осмислювати його окремі вказівки і скаржитися на недосконалість «божих творінь». Самі відносини програміста і замовника в підручнику з Java не піднімають, це марксизм або протестантська етика: метафізика підпорядкування і обумовленість матеріальними цінностями. В америці є клас «супер програмістів», «старт-аперів», люди не мають замовника, вони знають життя настільки, що самі можуть побачити потреби. Тобто він не сидить і не чекає поки хтось, хто в житті розбирається краще за нього, прийде і скаже йому, що йому робити, він сам осмислює життя і знаходить куди рухатися щоб заробити і реалізуватися як діяч. Не пише програму, яку люди запитують, а сам створює запит, і сам же його задовольняє. Був запит на iphone коли Джобс його придумав? Або Джобс створив сам запит?

Філологи і філософи, тобто такі ж хлопці, як і програмісти, тільки з іншого факультету, вважають всіх інженерів недолюдьми. Для них програміст — це тваринка така, може робити чудові фокуси з технікою, але не людина. Тобто ти сидиш в кімнаті з компом, але не розумієш чому ти в ній сидиш. Тобто ти думаєш, що ти розумієш, але якщо філолог тебе запитає «навіщо і чому» ти почнеш описувати програму яку ти пишеш. Елементарний для філософа навик: перерахувати свої суспільні зв'язки і обумовленості, усвідомити свою історію і як вона привела тебе в це крісло тут і зараз, це — азбука самосвідомості.

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

Є приказка, що людині властива ітерація, а Богу — рекурсія. В пошуку істини давно немає правильного напряму, люди розбрелися, релятивізм, плюралізм. Коли ми посилаємося на якийсь об'єкт, наш вислів одразу стає об'єктом, на який можна посилатися, а можна взагалі перейти на особистість, так ми отримаємо в будь-якому обговоренні, в коментах, відразу прояви постмодернізму (заміна об'єкта посиланням) і феноменализма — перехід на особистість в спробі уникнути утопания у графі смислів.

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

Програміст це як раб лампи, як батарейка матриці — якщо він раптом почне застосовувати свій мозок, свої небачені здатності оперування мовами, логікою, роботою з обсягами даних у звичайному житті — він може стати тим самим однооким, який король у країні сліпих. Светр облягає шию і тіло, пуловер має широкий отвір щоб його було зручніше натягувати (pull-over), кофта має ґудзики. У джемпера замість широкого отвору застібка. Це елементарно, можна написати один рядок коду. Але програмісту не зрозуміло одне, що ця інформація, це не про одяг, це — частина опису життя. Правда європейці частина відрізняються, є культура програмувати життя, особливо у англійців. Давно вони відкрили, що можна написати якийсь лист, наприклад «висилаю вам три мішки сукна, вишліть мені шість золотих» і раптом це можна повторювати знову і знову з'являється можливість керувати життям просто сидячи за своїм робочим столом і пишучи листи. Венеція, Ганза, Кембрію. Це якість успадкували і американці, і оскільки вони ж полюбили і комп'ютери та програмування вони вийшли на недосяжний рівень. Вони бачать третій вектор програмування: будь-код, будь-яка програма програмує не лише комп'ютер, не тільки процесор, але і користувачів.

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

Трехнаправленное програмування. Комп'ютер, програміст, користувач. Неможливо внести зміни в код, не внісши зміни у майбутнє користувача і програміста. Але можна про це не думати. Так простіше. Не думати — завжди простіше. Людина з усіх вхідних сигналів воліє приймати ті, які не вимагають осмислення, а лише відчуття. Смак пива, чиста сорочка, похвала, або навіть образи і наїзд начальства. З цих емоцій далі слід емоційне прийняття рішень. Приємний фреймворк. Ідіотський мову програмування. Тупий комент. Класна стаття. У мене виникла ідея написати свою реалізацію b-trees. Чому? Ну сподобалася ідея. Спілкування програмістів, найбільш логічно зайнятих свідомостей, зводиться до обміну емоціями. Це два вируючих потоку, зіштовхуються, відштовхуються, створюють вихори — як же вони взагалі можуть програмувати? Дуже просто, після години емоцій вони розходяться щоб читати книги. Тут включається думка. Киньте посилання, я почитаю. Мені сподобалося, є що-небудь почитати по цій темі? Два життя. Програміст особливо цікавий тим, що для нього навіть кодування це емоційне заняття, він кидає свої почуття в холодний екран, він намагається відчути логіку і оформити себе як розум у результаті. Російським програмістам це особливо властиво, а не властиво їм — міркувати, тим більше вголос, тим більше письмово. Більше того, людина здатний міркувати про свій проект викликає недовіру — він здається брехуном, який замість того, щоб дивитися в код, усвідомлювати структуру алгоритму, чомусь думає про соціальних проявах, піариться, — казки про Ельбрус і Фантом.

Тому в Росії немає Open Source. Тому що опенсорс це не вміння програмувати, це вміння спілкуватися. Це знання історії програм і програмістів. Ви можете викласти на гитхаб своє творіння, і навіть написати до нього статті та інструкції, але нікому цього буде читати. Або вони прочитають і напишуть «хочу приєднатися до проекту, тільки не знаю, що робити». «Студент, трохи знаю Яву, дуже цікавий проект, скажіть, що робити». Чому американський студент «знаючий Яву» відразу знає, що робити? Чому він може створити один опенсорс проект і приєднається до іншого? Питання більш соціальний, ніж філософський, наш соціум в іншому стані. Але філософу ясно, — людина не усвідомлює себе. Як говорить Гузєєва в «Давай одружимося» — «нічого про себе не розуміє». Він сидить у своїй кімнаті за компом, мама йому каже: «ну що ти в мене такий непристосований до життя». «Ой, відстала б ти, сама чи що розумна». Але мама розумна, це ти дурень. Точніше у неї інші вхідні сигнали, ти дивишся в монітор, вона дивиться по сторонах. Навіть відстаючи інтелектуально, навички логіки і роботи з інформацією, наявність великих вхідних сигналів з життя, про людей, про взаємини — робить людину розуміючим життя краще програміста.

Мама не дура, навіть по одягу і тарілках може твоє майбутнє передбачити не знаючи асинхронної обробки даних. Це не складно, і ти б міг, якби дивився на соціум і знав мову опису та програмування. По інстанціях помучитися. Зростає цінний кадр. Розумний хлопець з'явився. Виправити документи. Начальство примітило. Це API. Нічого складного. Програмісти можуть і повинні правити світом. Але поки що, тільки невеликий шар американський програмістів це зрозумів. Гейтс зрозумів, що програма може глючити коли її інструкції виконуються в комп'ютері, але вона не повинна глючити, коли її інструкції виконує користувач. Це не тільки цинізм, це розуміння своєї ролі, це дослідження поведінки, це вивчення API користувача і всього суспільства. Натисни сюди, що буде якщо користувач натискає цю кнопку? А якщо тут введений текст, як зробити, щоб він ввів текст і сюди? Відкрилося вікно вибору файлу, в якій папці за замовчуванням воно має бути відкрито? Скільки годин ви витратили на налагодження коду, чому ви не витратили в десять разів більше вивчаючи поведінку користувача? Гейтс витратив.

Люди записують на відео поведінку користувача за програмою, причому з моменту входу в кімнату. Найсмішніше, що ці люди це не програмісти, це запрошені люди — соціологи, навіть дресирувальники. Вони сидять і виконують роботу, яку по ідеї програміст повинен виконати ефективніше, адже це налагодження коду. Вносяться зміни. Але програма працює не швидше після цих змін, вона може бути працює повільніше і частіше глючить, в процесорі, на компі глючить, але в поведінці користувача вона працює краще, він швидше виконує операції (performance), частіше досягає мети (debug), він задоволений (energy saving). Він платить в кінці кінців. Все, що робив Джобс — це програмування користувача. Як він до цього дійшов? культура оточення? наркотики? особистий талант? Філософія. Канти-гегели, Гуссерли-расселы, Витгенштейны-сартры, тисячі їх. Вони створили чимало мов для опису реальності і API для її осмислення. Більшість розумних слів якими ми користуємося інтуїтивно, було ними колись введено і сформульовано. Не можна вживати слово «культура» і думати про консерваторії, говорити «консерваторія» і не знати, що це в першу чергу система викладання та відбору викладачів. Консервативна і консервуюча досвід. Для програміста, все чим він користується взявся нізвідки. Розумні люди розберуться, преподи в універі є для цього.

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

Ви смієтеся, що американці не можуть знайти на глобусі Ірак. А ви посмійтеся над собою, ви можете на глобусі історії логіки знайти Гегеля? Ви користуєтеся BASH, ви знаєте, хто і коли його створив і як він осмислює своє творіння після десятків років? Ви знаєте чому термінал називається термінал? Як він пов'язаний з телетайпом? Ви знаєте, що компанія IBM робила перепис населення в США понад сто років тому на гроші центробанку, а потім поставила ці механічні комп'ютери Гітлеру? Ви уявляєте, що пристрій і термінологія баз даних веде історію від тих перфокарт, а вони від каталогизаторов привезених з Англії на початку дев'ятнадцятого століття? Ви знаєте як творець Atari Бушнел не зрозумів ідеї свого працівника Джобса? Ви хоча б уявляєте роль Atari в історії обчислювальної техніки? Хто кого скопіював Atari або Sinclair? Мало знати пристрої та їх історію, треба в першу чергу знати людей, думки та їх історію. Батько Геделя був священником, а батько Святого Франциска був банкіром і торговцем. Що таке львівсько-варшавська школа логіки?

Ну гаразд, це ваше трехнаправленное програмування, зрозуміло, треба знати не тільки код і мова програмування, але і історію мови, знати себе і користувача та історію і мови, ну а як же налагодження? А що налагодження? Навіщо взагалі потрібен налагоджувач? Просто ви ще не вмієте мислити, ви все ще реагуєте і чекаєте підказок, ви не розумієте свою програму, ви зупиняєте її і чекаєте, що відладчик вам щось покаже. Тоді, сподіваєтеся ви, в голові з'являться ідеї. «У вашому налагоджувач незручно ставити брэкпойнты.» Метапрограмування це коли програма створює програму, теж свого роду рекурсія. Так само програма може дебажити програму, мета-налагодження, але для цього програміст повинен бути в два рази розумніший, він повинен утримувати в голові відразу дві програми. Люди які використовують printf() і сміються над отладчиками, просто краще розуміють, що роблять.

До речі, програма компонування теж не потрібен, рудимент перших трансляторів. А типизированые мови потрібні тільки тому, що зі ста програмістів тільки один вміє програмувати, решту треба за ручку водити. Навіть одна мавпа надрукує «Війну і мир», якщо розблокувати тільки потрібні клавіші і в потрібному порядку. Тому ми так любимо і підсвічування синтаксису і теми оформлення — це спосіб впливати на себе, на свій розум, сконцентрувати увагу, допомогти собі бачити більше. Зараз розмиваються межі, де вбудована документація, де інтернет, де компілятор, де інтерпретатор, де ходити на роботу, а де самозайнятість. В таких умовах бажання спертися на авторитет розвивається, як у дитини бажання схопити дорослого за рукав. Відданий погляд в очі Google коли вони викочують чергову технологію для розробників. Треба вставати на ноги і озирнутися у великому дорослому світі, де ти не вивчаєш технології, а створюєш їх, де ти бачиш не тільки мануал, але й руку, яка тобі його простягає і знаєш історію обох. Це основи, це називається філософія програмування.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.