[personal profile] ichthuss

Джентльменський набір мов сьогоднішнього веб-дизайнера виглядає так: html, php, sql, javascript. Відкладемо поки що питання цілісної технології і поговоримо про ці мови.

HTML. Призначення: гіпертекст, верстка, оформлення. Про деякі проблеми HTML я вже згадував: гарно пристосований для гіпертексту, погано пристосований до верстки, особливо до верстки форм. В результаті народжуються п’ятиповерхові таблиці, плаваючі div’и в три шари та інші маленькі радощі веб-дизайнера. До всього в html, на відміну від xml, погано структуруються дані, тому робота з ними на стороні клієнта ускладнена.

PHP. Призначення: серверне програмування. Перша і головна моя претензія до php: скриптові мови взагалі не призначені для серйозного програмування. Скрипти — для сисадміна, програмісту потрібна мова зі строгою типізацією, здебільшого без автоматичного приведення типів, з компіляцією (принаймі, в байт-код). Простий тест: спитайте у знайомого веб-дизайнера, чи заважала б йому строга типізація в PHP. Якщо заважала б — то він не програміст, тому що кожен програміст знає, що насправді значно простіше слідкувати за перетвореннями типів, ніж потім розгрібати таємничі помилки, що виникают в результаті некоректного приведення.

Взагалі в php купа деталей, які ніби спеціально придумані, щоб сприяти неякісному написанню коду: перемішаність програмної логіки та інтерфейсного коду (html), поділ на файли по критерію результуючої сторінки, що, крім усього, часто розносить код, який працює з одним і тим самим набором даних, по декількох файлах; навіть така дрібниця, як директива include, що приймає аргументом шлях відносно основного скрипта, що сильно ускладнює дворівневе включення у тому випадку, коли проміжний файл включається в два скрипти, розташовані в різних каталогах. Я вже не кажу про такі речі, як відсутність послідовності в іменуванні функцій, вимогах до назв функція та змінних, дивна поведінка з глобальними змінними. Це все викладено в, НМД, трохи експресивному, але по суті вірному записі [livejournal.com profile] nuclight. Остаточно мене вбив ось цей приклад з документації розробника. Гірше такої мішанини з напівстатичних методів мені навіть важко щось уявити. Якщо програміст на момент написання функції ще не визначився, відноситься вона до об’єкту чи до класу, то йому терміново треба відійти від комп’ютера години на півтори і ще раз гарно все обдумати.

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

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

З JavaScript’ом я, на жаль, знайомий досить поверхово. Мушу сказати, що, змушений функціонувати в рамках DOM, javascript не є достатньо зручним засобом для модифікації як контенту, так і інтерфейсу. Хоча сама мова влаштована досить красиво.

Далі буде...

Частина перша. Історичний аспект.

Date: 2008-09-18 09:56 am (UTC)
From: (Anonymous)
Цитата : "Джентльменський набір мов сьогоднішнього веб-дизайнера виглядає так: html, php, sql, javascript."

Неплохой веб-дизайнер я тебе скажу;
наверное с терминологией ты погарячился, давай назовем "его" веб-мастер...

=)

Date: 2008-09-18 04:19 pm (UTC)
From: [identity profile] englishman.myopenid.com (from livejournal.com)
1) Ты забыл про CSS в джентльменском наборе.
2) Некоторые недостатки php вполне нивелируются грамотным написанием кода. Например, никто не заставляет смешивать программную логику с html.
3) Уязвимости можно найти на любом сайте, и далеко не всегда виноват в этом php.
Вообще, если кратко, php - это инструмент, и если им пользоваться разумно, то он дает отличные результаты по многим параметрам.

Date: 2008-09-21 08:30 am (UTC)
From: [identity profile] englishman.myopenid.com (from livejournal.com)
>Мова не про те, що можна зробити з використанням мови, а про те, до чого мова спонукає. ПХП однозначно спонукає до перемішування функціонального та інтерфейсного коду.
В принципе, согласен, но так же можно сказать, что Перл (да и Си в какой-то мере тоже) подталкивает программиста к написанию нечитаемого кода:)
>Якби змусити програмістів вказувати явно тип числових змінних і передавати дані в запит до БД не шляхом конкатенації, а через параметризований запит, то поняття sql-ін’єкції би зникло взагалі.
Может я и ошибаюсь, но тут как в либерализме - у всех равные возможности :) умный напишет правильно, неумный - так, как ему того захочется. Не ты ли первым выступал против того, что, например, Винда тебя заставляет что-то делать так, как ей кажется правильным? То же самое в Си - возможностей куча, нужно только их правильно применять.
>Те, що деяким інстументом можна досягти непоганого результату — ще не виправдання для інструменту. Врешті решт, і вордівськими макросами можна зробити щось пристойне.
Вордовскими макросами Facebook не напишешь.

Date: 2008-09-21 08:55 pm (UTC)
From: [identity profile] englishman.myopenid.com (from livejournal.com)
по первым двум пунктам спорить смысла нет, а вот насчет Facebook'а ты меня не переубедишь:)
На php это пишется в разы проще, чем на чем-то другом, и вполне получается нормальный сайт, без дырок, справляется с нагрузками и т.д. Никто не спорит, что на перле он скорее всего получился бы более быстрым, или меньше бы понадобилось серверов. Но вместе с тем, на php получается проще, быстрее и т.д. Так что это вопрос двоякий - в чем-то теряем, в чем-то выигрываем.

Date: 2008-09-18 04:23 pm (UTC)
From: [identity profile] englishman.myopenid.com (from livejournal.com)
Да, и тот пример на сайте php - просто чтобы показать, чем статический метод отличается от нестатического. Вообще, по strict standarts, если нестатический метод вызывается статически, то генерируется ошибка уровня E_STRICT. Т.е. потихоньку разработчики php намекают программистам, что так делать плохо :)

Profile

ichthuss

October 2017

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 20th, 2017 02:03 pm
Powered by Dreamwidth Studios