Лінукс очима розробника: III - Чому розробка у GNU/Linux?

Опубліковано Vitovt 9 Листопад, 2008 - 10:27
версія для друкуSend to friendPDF version

Сьогодні читачів „Груша.org.ua - новини“ очікує остання стаття з циклу „Лінукс очима розробника - особисті враження“.. Більш детально про автора статті читайте в самому низу. Ті, хто вчасно підписався на розсилку могли вже давно ознайомитися з цією статтею. Також і надалі повідомляю, що підписка на розсилку новин даватиме вам можливість першими знайомитися з ексклюзивним матеріалом. Більш детально ознайомтися з умовами розсилки і підписатися на неї можна тут.


Чому розробка у GNU/Linux?

 

Якби люди знали інструменти grep, sed, awk, ніколи не з’явилося б стільки красивих програм.

 
  — Народна творчість

Починаючи обговорювати речі, які стосуються людських смаків, ми завжди ризикуємо розпалити священну війну. Тому домовмося, що мої слова — це не категорична істина, а вираження мого особистого смаку. А на колір і смак, як відомо, всі фломастери різні. От взяти, наприклад, популярний віднедавна принцип побудови інструментів для дизайнерів WYSIWYG (what you see is what you get). Багато хто ні про що інше й чути не хоче, а для мене це кіт в мішку. На вигляд документ неабиякий, а відомо кому, яка каша там всередині? WYWIWYG (what you want is what you get) — це справжній шлях. Розуміння цієї моделі почалося з часів командної оболонки[1] Unix. Користувач просить систему виконати якусь дію чи навіть послідовність дій, детально описуючи цільові об’єкти, особливості операцій. При цьому вважається, що користувач розуміє, що хоче, а система повинна покірно виконати саме замовлені дії без відхилень і примх.

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

Трохи роззирнувшись, можна помітити, що такий підхід переважає у системах на зразок Unix: командний інтерфейс налагоджувача GDB[2], системи підготовки до друку LaTeX[3] та LilyPond[4] тощо. Мабуть, недарма: їх створили інженери, які розуміли, що тільки усвідомлені дії можуть принести і хороший передбачуваний результат і справжнє задоволення від творіння у такому середовищі.

Все в цій системі — програмування, тобто насправді ніхто не заставляє, але якщо треба виконати десяток однотипних дій, то відразу відчувається доречність можливості. Мудро, наче в одному радянському мультфільмі: “Краще витратити годину, а потім за п’ять хвилин долетіти”.[5] Для програмістів така можливість — це особливе задоволення: з одного боку автоматизація вкрай проста, тому рідко бувають невдачі, а з іншого потім відчуваєш себе на голову вищим від індуса (даруйте, людини з конвеєру). Скриптування підтримують: командна оболонка[1], текстові редактори, налагоджувач[2], LaTeX[3], MetaPost[6], системи контролю версій і багато інших. І головне: просто, без занадто розумних слів та заплутаних технологій. Більше того, особливих надзвичайностей у різних, здавалося б, програмах зовсім небагато, адже не на порожньому місці всі вони будувалися. Так, всюди використовуються одні й ті самі регулярні вирази, для зчитування запитів командного рядка використовується одна й та сама бібліотека readline, ключі командного рядка повторюються від програми до програми…

Розробляєш прикладний сервер — будь готовий до можливих проблем, а ще морально підготуйся до того, що “на льоту доведеться міняти обшивку крил”. Це треба відчути на власній шкурі, бо стільки адреналіну виділяється тільки на рингу чи в затяжному стрибку (з того самого недобудованого крила!). А потім розумієш, що не пережив би той день, якби всі давно вивчені та полюблені інструменти не працювали через мережу прозоро, наче й не через мережу зовсім. Простіше не придумаєш: під’єднавшись до віддаленого сервера, отримуєш командну оболонку і відчуваєш … тепло й затишок рідного оточення. Завбачливо передаєш опцію -X — і милуєшся вікнами віддалено запущеної графічної програми (viva wireshark[7]!). Монтуєш директорію з вихідними кодами — і можеш розпочинати налагодження, не займаючись щохвилинно копіюванням. Рай на Землі!

Нарешті, є й унікальні речі, яких не знайти на інших платформах. От, прийшовши зі світу Win32, я відразу ж кинувся шукати спосіб перехоплення даних з послідовного порту. Справді, дуже потрібна штука той portmon[8], щоб зрозуміти, як байти бігають по дротах. А дзузьки, зовсім нічого нормального! І раптом осяйнуло: “А все те просто зайве, адже є strace[9]!” З прозрінням прийшло й розуміння: це все відкритість! Linux не ховає таємниці за сімома печатками, штовхаючи допитливих до відчайдушних способів злому, а радо ними ділиться. Якщо не віриться, поцікавтесь-но, як працює той самий portmon[8]. Проблеми бувають всюди, а щоб їх вирішити комусь доводиться танцювати з бубном, а хтось може зазирнути у вихідний код чи навіть підглянути, як все працює in vivo. Отже, в такій системі працювати не тільки приємно, але й легко!

І наостанок про ностальгію, тільки не про ту, що ту́га за втраченим, а про ту, яка теплий спогад про минуле. Я про університет: розумні й досвідчені викладачі, цікаві однодумці-студенти, щодня нові враження від навчання й життя. Зізнаюся відверто, те саме відчуваєш, працюючи з відкритою громадськістю. Тут ідеї, доробки — це знання, якими радо діляться, а не торгують. Це справді приємно!



[1] Командна оболонка — інтерпретатор команд операційної системи Unix.

[2] GNU debugger — налагоджувач програм у системі GNU

[3] LaTeX — набір макросів TeX для отримання PDF чи PostScript з тексту

[4] LilyPond — система підготовки до друку музичних творів, чимось нагадує LaTeX, тісно з ним взаємодіє.

[5] Крила… ноги… головне — хвіст!

[6] MetaPost — це пакет для креслення здебільшого математичних ілюстрацій, інтегрується з LaTeX.

[7] Wireshark — графічна програма для перехоплення мережевих даних, незамінний помічник у розробці.

[8] portmon — зручний перехоплювач даних з послідовного порту, буває в нагоді при налагодженні взаємодії з деяким спеціальним обладнанням.

[9] strace — маленький інструмент, що відображає взаємодію прикладної програми з ядром Linux, тобто відображає системні виклики.


Автором статті є Анатолій Сахнік. В свій час він закінчив український фізико-математичний ліцей при університеті Т.Шевченка (УФМЛ-КУ). В цому закладі вчилися обдаровані діти з усієї України. Ще в ліцеї Толік захоплювався програмуванням. Свої професійні навички удосконалив на радіофізичному факультеті університетму імені Т.Шевченка, де ми разом вчилися. Зараз професійно займється розробкою ПЗ.

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

Прохання залишити свої коментарі для автора.

Ще ніхто не проголосував
Додати поточну сторінку в соціальні закладки
Доданий в Опубліковано Vitovt 9 Листопад, 2008 - 10:27

Коментарі

Написати нове повідомлення

Вміст цього поля є приватним і не буде доступний широкому загалу.
  • Рядки та параграфи відокремлюються автоматично.
  • Дозволені теги HTML: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <table> <tbody> <tr> <td> <sub> <sup> <p> <br /> <div> <h2> <h3> <h4> <img /> <hr />

Детальніше про опції форматування

CAPTCHA
Це питання для того, щоб точно визначити, що ви людина, а не злісний спам-робот.
Фото Капча
Введіть букви та цифри показані на малюнку.
RSS-матеріал