Показать сообщение отдельно
  #14 (permalink)  
Старый 14.02.2009, 22:31
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Философский вопрос.

(ниже получилось много текста, не касающегося конкретных языков, да, к тому же, являющегося прописными истинами, но, все же)

Ключевым моментом здесь является то, что обсуждается использование именно сторонних библиотек. И противопоставляются некий "чистый язык" (безотносительно конкретного JavaScript'a) и "кем-то написанная сторонняя библиотека".

Однако, что есть "чистый язык"? Это код, с использованием конструкций, идущих лишь с "коробкой"? Хорошо, пусть так. Будем писать на "чистом языке".

Но, можем ли мы, являясь программистами, оптимизировать наш код, улучшая его повторное использование и структуру? Т.е., вынося "рутинные", "каждодневные", "громоздкие и повторяющиеся", "часто использующиеся" конструкции в нечто, что можно будет вызвать одной строкой (например, в функции)? Можем, почему нет?

Можем ли мы логически объединить набор этих функций в нечто под общим именем, тем самым создавая "модули"? Конечно, можем, почему нет? Это удобно.

Можем ли мы собрать набор наших "модулей" воедино, тем самым создав систему? Систему, являющуюся кладезю решений от повседневных повторяющихся, монотонных "проблем". Естественно, можем. Назовем это (негласно) фреймворк. Почему негласно? Потому что мы просто оптимизируем код, вынося повторяющиеся куски кода в функции, чтобы вызывать их одной строкой, не более.

Поскольку, мы писали на "чистом языке", то и решения (наши решения!) из фреймворка являются решениями на "чистом языке". Поскольку фреймворк состоит из решений, то сам фреймворк - это решение на "чистом языке". Так? Так.

Далее, мы используем наши решения (иначе, зачем их писали?). Может ли кто-то сказать, что мы пишем уже не на "чистом языке". Нет, поскольку, это всего лишь наша оптимизация "повторяющихся кусков". Она написана нами, на "чистом языке".

Т.е. само использование библиотек абсолютно не "грешное" дело, поскольку мы сами эту библиотеку и написали.

Затем, мы хотим поделиться (альтруистски и энтузиастски ) с другими программистами. Они (с благодарностью, что мы избавили их от рутины) начинают писать с использованием наших решений. Пишут ли они на "чистом языке"? Нет. И вот здесь начинается их "обвинение". Но в чем их "вина"? В том, что они не потратили столько же времени и сами не написали эти решения? Возможно, но не нам их судить, поскольку мы на полном альтруизме отдали наши решения в свободное пользование. Может быть, в том, что они не понимают, как это работает внутри? Возможно, но мы сами выдали им этот новый уровень абстракции, создав черный ящик с легкими и запоминающимися названиями снаружи.

А, может, им даже и не нужно понимать, как оно работает внутри. Может, им достаточно абстрактного манипулирования объектами с нужными сообщениями. Кто они? Уже не программисты, если не понимают, как это работает внутри. Или может программисты следующего уровня абстракции? Или программисты, смотрящие на "мир" нашими "глазами". Не важно, но им нравится использовать наши быстрые, вызываемые одной строчкой, решения их повседневных проблем.

Нашими "глазами"... А потом, вдруг, выясняется, что мы сами не так поняли технологию (сами не под тем углом смотрели; возможно, в виду привычек к другой технологии, - не суть). И приходят люди, которые говорят нам об этом. Естественно, видя поголовное использование этой "ошибки" без, даже, желания задуматься, что это не в идеологии технологии, можно услышать, вполне понятные, высказывания о "недостаточном количестве ума" тех, кто использует эти решения (или наоборот, о присутствии достаточного количества ума у тех, кто не использует эти решения). Или, если не об ошибках, то можно говорить о жутких тормозах наших решений (т.к. для увеличения абстракции, нам пришлось пожертвовать ресурсами). И это тоже будет верным.

Но что было бы, если бы эту библиотеку (эти наши решения) написали те, кто указал нам на эти ошибки. Была бы она лучше? Да (т.к. мы согласились с тем, что все указания были верными). Но. Да - лишь до тех пор, пока не придут другие, которые не укажут уже на новые "ошибки".

Означает ли это, что писать библиотеки вообще не надо? Нет. - Поскольку мы в самом начале говорили об улучшении и оптимизации нашего кода. Что означает оптимизация и улучшение? Зачем она нам нужна? Язык плохо спроектирован? Может да, а может, нет. Но в большей мере, мы оптимизировали наши логические решения, не связанные с языком.

Получается, писать с использованием библиотек - это нормально и не подсудно, если ты сам ее написал (и здесь, как было сказано выше, мы пишем даже на "чистом языке", библиотека вливается в код "незаметно" и для нас не является библиотекой, а лишь - оптимизацией). Являются ли остальные случаи ненормальными и означающими отсутствие ума? Нет. - Поскольку, если бы библиотека была написана высшим профессионалом технологии, количество ее "ошибок" было бы сведено к минимуму.

Означает ли, что у тех, кто будет использовать эту библиотеку (не важно, какого уровня профессионалом написанную) будет меньший уровень знаний "чистого языка" (при условии, что они начинают писать на языке сразу с использованием нашей библиотеки)? Может да, а может, нет. - Все зависит от того, насколько сильно мы усилили (или лучше - изменили) абстракцию. Но, как правило - означает (и означает - 70%). Страшен ли этот факт для этих людей? Нет! Абсолютно нет! Просто они подключаются к программированию на новом уровне абстракции - придуманным нами. Интересует ли их то, как написано это внутри? Может да, а, может, нет. - Так же, как и нас - интересует или нет, на чем и как написан наш "чистый язык"? При этом, для тех, кто, все-таки, не захочет изучить "чистый язык", на котором написана библиотека, сама библиотека станет "чистым языком"!

А дальше... А дальше - они напишут новые языки и библиотеки, уже основанные на наших библиотеках. И так же - профи будут видеть недочёты, остальным - до этого мало будет дела, т.к. все будет вызываться в одну короткую, запоминающуюся строчку.

Поэтому, основным моментом внедрения библиотеки в массы, является то, кто стоял у руля этой библиотеки. И, если за ней стоят большие институты, которые спонсируют, документируют, сделают отличный PR и т.д., то она необратимо будет завоёвывать популярность. И т.д. И т.п. И т.д. И т.д.

И поэтому, использовать или нет библиотеки зависит от:

- уровня абстракции, на котором работает программист (ну не обязательно ему каждый раз писать на "чистом ассемблере" окна, если для этого есть API, который позволяет это делать одной строкой - ведь в его задаче будет 13212 окна);

- от уровня профессионализма и, главнее, - энтузиастских притязаний программиста (в этом случае, он, либо оптимизирует, доработает существующие библиотеки (если будут уж слишком серьезные ошибки), либо напишет свою; и, возможно, начнет продвигать ее в массы).

Но в любом случае, библиотека, как набор, кладезь решений - есть применение ранее накопленного опыта. Своего, или чужого (возможно, синтезированного со своим).

P.S.> писал уже похожее - http://anton.shevchuk.name/javascrip...#comment-32944, и еще там же коммент - http://anton.shevchuk.name/javascrip...#comment-33055
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 14.02.2009 в 22:35.
Ответить с цитированием