Джентльменський набір мов сьогоднішнього веб-дизайнера виглядає так: html, php, sql, javascript. Відкладемо поки що питання цілісної технології і поговоримо про ці мови.
HTML. Призначення: гіпертекст, верстка, оформлення. Про деякі проблеми HTML я вже згадував: гарно пристосований для гіпертексту, погано пристосований до верстки, особливо до верстки форм. В результаті народжуються пятиповерхові таблиці, плаваючі divи в три шари та інші маленькі радощі веб-дизайнера. До всього в html, на відміну від xml, погано структуруються дані, тому робота з ними на стороні клієнта ускладнена.
PHP. Призначення: серверне програмування. Перша і головна моя претензія до php: скриптові мови взагалі не призначені для серйозного програмування. Скрипти для сисадміна, програмісту потрібна мова зі строгою типізацією, здебільшого без автоматичного приведення типів, з компіляцією (принаймі, в байт-код). Простий тест: спитайте у знайомого веб-дизайнера, чи заважала б йому строга типізація в PHP. Якщо заважала б то він не програміст, тому що кожен програміст знає, що насправді значно простіше слідкувати за перетвореннями типів, ніж потім розгрібати таємничі помилки, що виникают в результаті некоректного приведення.
Взагалі в php купа деталей, які ніби спеціально придумані, щоб сприяти неякісному написанню коду: перемішаність програмної логіки та інтерфейсного коду (html), поділ на файли по критерію результуючої сторінки, що, крім усього, часто розносить код, який працює з одним і тим самим набором даних, по декількох файлах; навіть така дрібниця, як директива include, що приймає аргументом шлях відносно основного скрипта, що сильно ускладнює дворівневе включення у тому випадку, коли проміжний файл включається в два скрипти, розташовані в різних каталогах. Я вже не кажу про такі речі, як відсутність послідовності в іменуванні функцій, вимогах до назв функція та змінних, дивна поведінка з глобальними змінними. Це все викладено в, НМД, трохи експресивному, але по суті вірному записі
nuclight. Остаточно мене вбив ось цей приклад з документації розробника. Гірше такої мішанини з напівстатичних методів мені навіть важко щось уявити. Якщо програміст на момент написання функції ще не визначився, відноситься вона до обєкту чи до класу, то йому терміново треба відійти від компютера години на півтори і ще раз гарно все обдумати.
PHP, виходить, орієнтований не просто на початківця, а на початківця, який усіма силами намагається уникнути того, щоб бути змушеним писати нормальний код. В результаті маємо те, що маємо: ледве не на кожному сайті можна знайти численні серйозні уразливості.
Мабуть, найменше претензій у мене до мови SQL. Окрім таких завдань, як вибір строки з найменшим значенням одного з полів, я практично не стикався з завданням отримання або модифікації даних, яке не можна було б красиво реалізувати на sql.
З JavaScriptом я, на жаль, знайомий досить поверхово. Мушу сказати, що, змушений функціонувати в рамках DOM, javascript не є достатньо зручним засобом для модифікації як контенту, так і інтерфейсу. Хоча сама мова влаштована досить красиво.
Далі буде...
no subject
Date: 2008-09-18 09:56 am (UTC)Неплохой веб-дизайнер я тебе скажу;
наверное с терминологией ты погарячился, давай назовем "его" веб-мастер...
=)
no subject
Date: 2008-09-18 10:03 am (UTC)В широком смысле «веб-дизайном» называют веб-разработку, то есть дело создания сайта вообще: проектирование структуры, навигации и иногда даже движков сайта.
© Wikipedia
Хоча погоджуся, що веб-мастер точніше.
no subject
Date: 2008-09-18 04:19 pm (UTC)2) Некоторые недостатки php вполне нивелируются грамотным написанием кода. Например, никто не заставляет смешивать программную логику с html.
3) Уязвимости можно найти на любом сайте, и далеко не всегда виноват в этом php.
Вообще, если кратко, php - это инструмент, и если им пользоваться разумно, то он дает отличные результаты по многим параметрам.
no subject
Date: 2008-09-18 08:20 pm (UTC)Справді. Але придиратися я до нього не буду, тому що, врешті решт, всі засоби css входять в засоби html.
>2) Некоторые недостатки php вполне нивелируются грамотным написанием кода. Например, никто не заставляет
>смешивать программную логику с html.
Мова не про те, що можна зробити з використанням мови, а про те, до чого мова спонукає. ПХП однозначно спонукає до перемішування функціонального та інтерфейсного коду. Більше того, це подається як «простота»l і «зручність у вивченні».
>3) Уязвимости можно найти на любом сайте, и далеко не всегда виноват в этом php.
Якби змусити програмістів вказувати явно тип числових змінних і передавати дані в запит до БД не шляхом конкатенації, а через параметризований запит, то поняття sql-інєкції би зникло взагалі. Це лише один приклад.
>Вообще, если кратко, php это инструмент, и если им пользоваться разумно, то он дает отличные
>результаты по многим параметрам.
Професійний звукорежисер зможе змікшувати досить пристойний трек на ПК. Професійний гонщик на жигулях прослизне там, де автолюбитель не проїде взагалі. Фотограф навіть на мильниці отримає кадр, який пересічна людина не зробить з найкращою зеркалкою. Те, що деяким інстументом можна досягти непоганого результату ще не виправдання для інструменту. Врешті решт, і вордівськими макросами можна зробити щось пристойне. І навчитися програмувати на такому інструменті, який перешкоджає нормальній практиці програмування, неможливо.
no subject
Date: 2008-09-21 08:30 am (UTC)В принципе, согласен, но так же можно сказать, что Перл (да и Си в какой-то мере тоже) подталкивает программиста к написанию нечитаемого кода:)
>Якби змусити програмістів вказувати явно тип числових змінних і передавати дані в запит до БД не шляхом конкатенації, а через параметризований запит, то поняття sql-ін’єкції би зникло взагалі.
Может я и ошибаюсь, но тут как в либерализме - у всех равные возможности :) умный напишет правильно, неумный - так, как ему того захочется. Не ты ли первым выступал против того, что, например, Винда тебя заставляет что-то делать так, как ей кажется правильным? То же самое в Си - возможностей куча, нужно только их правильно применять.
>Те, що деяким інстументом можна досягти непоганого результату — ще не виправдання для інструменту. Врешті решт, і вордівськими макросами можна зробити щось пристойне.
Вордовскими макросами Facebook не напишешь.
no subject
Date: 2008-09-21 12:15 pm (UTC)>мере тоже) подталкивает программиста к написанию нечитаемого кода:)
В кожної мови своє поле для застосування. Perl мова скриптова, отже, НМД, не годиться для програмування. Її парафія автоматизація адміністрування. В цих умовах стилем програмування паритись необов'язково, і типізація не потрібна. Сі, як хтось дуже точно підмітив це portable assembler, тобто призначена для написання компактних, працюючих ледве не прямо з залізом програм, без глибокої абстракції, але з ефективним і компактним кодом. Годиться для, наприклад, написання прошивок, системних утиліт. Я бачив стек tcp/ip для мікроконтроллера на Сі, він займав в скомпільованому вигляді лічені кілобайти. До всього, той стек включав веб-сервер з підтримкою CGI, який займав 1500 інструкцій і 10 (!) байт оперативної пам'яті. Ще, пам'ятаю, в одній програмі для брутфорсу паролів на підмножині Сі можна було описувати порядок перебору, і йшли приклади програм давно я, чесно кажучи, не бачив настільки красивого коду перебору строк.
>Может я и ошибаюсь, но тут как в либерализме - у всех равные возможности :)
>умный напишет правильно, неумный - так, как ему того захочется.
Тут ситуація принципово відмінна. Строка типізація, явне приведення типів, параметризовані запити не тільки прискорюють роботу програми, вони абсолютно не обмежують функціонал того, що може написати програміст. Неявне приведення типів можна виписати явно, там, де в одній змінній зберігаються почергово числові та строкові дані, можна завести дві змінні, параметризований запит, врешту-решт, також можна отримати конкатенацією. Але така структура мови заставить людину при кожній з цих небезпечних операцій подумати а чи потрібно воно їй взагалі. Якщо потрібно, нема проблем. Якщо ні, то і не треба, від гріха подалі.
Ще раз якщо людина не знає, потрібна їй числова змінна чи строкова, статичний метод чи метод об'єкту, то їй нічого лізти в програмування більш-менш серйозного проекту.
>Вордовскими макросами Facebook не напишешь.
Макроси погано пристосовані для мережевої роботи. Локально можна щось схоже написати цілком.
no subject
Date: 2008-09-21 08:55 pm (UTC)На php это пишется в разы проще, чем на чем-то другом, и вполне получается нормальный сайт, без дырок, справляется с нагрузками и т.д. Никто не спорит, что на перле он скорее всего получился бы более быстрым, или меньше бы понадобилось серверов. Но вместе с тем, на php получается проще, быстрее и т.д. Так что это вопрос двоякий - в чем-то теряем, в чем-то выигрываем.
no subject
Date: 2008-09-21 11:26 pm (UTC)no subject
Date: 2008-09-18 04:23 pm (UTC)