Будни быдлокодера: бытовое гегельянство |
[Jun. 29th, 2009|02:17 am] |
Сходу предупреждаю — рассуждения абсолютно дилетантские, см. тему, если что.
Есть очень чёткое ощущение такой гегелевской триады. тезис: LAMP, антитезис: J2EE, синтез: Python и всякие штуки на нём типа Django.
А также — тезис: Bugzilla, антитезис: Jira, синтез: Trac.
И т.д., и т.п.
Это я к чему? Есть две одинаково неприятные крайности: наколеночные говноскрипты (кто сказал "PHP"?) и то, что haron@lj чрезвычайно метко обозначил как "ёбаный энтерпрайз". Вопрос в том, можно ли осознать прелесть срединного пути, не наигравшись вдоволь с обеими этими крайностями?
Ну, вот есть хороший демотивирующий пример из соседней области — идея "объектов". Я вот учу людей программированию, да? И вижу, что вопреки раздающимся со времён Smalltalk'а воплям про естественность этой идеи на самом деле она абсолютно контринтуитивна для большинства людей. Программа как последовательность инструкций, циклы, ветвления, вызовы функций — всё это можно объяснить практически любому (на идее "возвращаемого значения" часто начинаются проблемы, но это отдельный разговор). А вот как только речь заходит об объектах, начинается путаница. Чаще всего человек просто не понимает, ни зачем это, ни что такое "методы", ни откуда в теле методов доступ к полям, и т.д., и т.п. И даже многократное успешное объяснение концепций ООП не гарантирует их удержания в голове ("А экземпляр класса и его потомок — это одна и та же вещь или разные?" — спросил меня недавно студент, меньше чем полгода назад довольно бодро рассказывавший на экзамене про наследование, инкапсуляцию и полиморфизм).
Единственный1 надёжный способ понять, зачем нужны объекты — попытаться написать большую программу в процедурном стиле, задолбаться и задуматься о том, как бы можно было упорядочить весь этот безобразный код и разбить его на малозависимые части.
Возможно, так и здесь — понимание, зачем это надо, приходит только к тем, кто уже набил шишки и об одну крайность, и об другую, а до этого неизбежно "ой, но ведь PHP — это же так просто!", "ой, но ведь ASP.NET — это ведь так мощно!" (к сожалению, не сохранил ссылку на феерический тред на каком-то дотнетовском форуме, где товарищ, которому надо было всего-то навсего разобрать GET-запрос, мутно и мучительно рассуждал об этом в терминах "объектов" и "классов", и, кажется, так и не решил в результате свою проблему — очень показательно, да)?
Мне бы, из чисто эстетических соображений, хотелось бы, чтобы инструменты для веба развивались бы примерно в этом направлении. Интересно, много ли тех, кому хочется примерно того же?
1На самом деле, видимо, ещё два способа объяснять, что такое объекты. Но я не пробовал ни тот, ни другой.
Во-первых, объекты очень легко (и, заметим, без прибивания к языку гвоздями специального "объектного" синтаксиса) описываются в функциональных языках, благодаря такой штуке, как замыкания. В SICP, например, это очень хорошо описано. Но я не пытался учить человека без хорошей математической подготовки сразу функциональному программированию и, честно говоря, вряд ли рискну, пока не увижу, что это удалось кому-то другому.
Во-вторых, объекты очень легко (и опять же без введения специально под них дополнительного синтаксиса) реализуются в параллельных языках с передачей сообщений, таких, как Erlang. Правда, там не очень понятно, зачем нам метафора объекта, когда у нас есть гораздо более богатая и естественная идея процесса.
|
|
|