Музыка: | Throbbing Gristle-Greatest Hits (Entertainment Through Pain) |
[Programmism] Выбор языка для Web-программирования
Свинский Хамелеон porkchameleon@lj спрашивает:
во ты можешь объективно и кратко объяснить тупому - почему везде они требуют ASP(.NET)?
Меня заебало читать безликое фуфло, пропагандирующее Майкрософт, я хочу человеское мнение.
Наш ответ Чемберлену Свинскому Хамелеону:
Элементарно, Ватсон.
Начнём с азов. Большинство людей, именующих себя программистами после окончания колледжа, уверены в одном из двух:
- либо им придётся писать решения совершенно новых задач (типа систем управления реакторами термоядерного синтеза), причём очень важна будет производительность программы и маленький объём используемой ею памяти.
Это подход, вдолбленный в курсы Computer Science в 1960-е, да так там и оставшийся. Тогда действительно большинство задач были новыми, а ресурсы компьютера - маленькими и, что важно, намного дороже времени программиста. Естественным образом из него выросли язык ассемблера и K&R C;
- либо задачи будут достаточно типовые, но большие, программированию будет предшествовать долгий процесс планирования, после чего программисту будет вручена спецификация и год-два-три его никто не будет тревожить. Каждое изменение будет сопровождаться не менее подробной спецификацией. Это подход, выработанный распространением компьютеров в бизнесе в 1970-е. Из него выросли PL/1 и COBOL.
На самом деле всё совсем не так. Абсолютно новых задач очень мало, большинство переизобретает велосипед или придумывает новые способы склейки готовых кусочков. Что важно, компьютеры стали дешёвыми, а программисты - дорогими. Вместо того, чтобы заставить программиста тратить несколько дней на то, чтобы уменьшить потребляемый программой объём памяти, дешевле купить дополнительный SIMM каждому из пользователей. Real life story - у меня как-то была прога, которая классно шла у меня на тестовом объёме данных, но вылетала у пользователя на реальном; после несколький дней борьбы, включившей в себя перекомпиляцию с отладочной информации и пошаговый проход в Turbo Debugger'e, я смог показать, что вылетает библиотечный вызов, который я вылечить, естественно, не мог; исправилось апгрейдом памяти с 8 Мб до 16 - даже тогда (1997) это было меньше $100
Соответственно, языки, требующие от программиста самому управлять распределением памяти (C, C++ и т.д.), идут боком. Потому как затраты на борьбу с утечками памяти в реальной жизни меньше, чем затраты на борьбу за предотвращение оных.
Очевидным образом, интерпретируемые языки делают компилируемые. The faster the Edit-Compile-Test loop, the more productive you will be. Опять-таки не для всех задач, но для большинства (и для подавляющего большинства Web-приложений).
Языки с понятным синтаксисом (Pascal, Basic) бьют языки с непонятным синтаксисом (C, Perl). Perl - штука замечательная, но это не язык, а целая философия, и иногда она даёт странные плоды: 1, 2).
Язык не должен требовать много лишнего для простых программок. Потому Java, где для простого Hello, World! нужно как минимум поключить 8 библиотек и написать новый класс с новым методом, идёт лесом.
Что имеем в сухом остатке? Для быстрого Web-программирования нужен язык, который:
1) интерпретируемый
1б) сам управляет распределением памяти и сборкой мусора
2) не требует больше 3-х строчек для того, чтобы написать Hello, World
3) не имеет странного и неочевидного синтаксиса
3б) желательно не зависит от регистра (возможность определять разные переменные под именем i и I, наверное, была жутко нужна Томпсону и Ричи, но зачем она сейчас?)
Грубо говоря, после отброса всех альтернатив приходим к следующему списку (я здесь не буду говорить за .Net . Я с этой платформой ещё не работал, и делать выводы на основании чтения статей не хочу и не буду):
- ASP с VBScript'ом;
- PHP;
- всякая экзотика типа Tcl/Tk, Python, Ruby;
- с натяжкой Java Server Pages;
- с натяжкой ASP с JScript'ом;
Далее, при выборе платформы руководствуются чем? Правильно, возможностью поддержки. А это исходит откуда? Правильно, из доступности относительно дешёвых программистов, которые могут заменить безвременно ушедших или дополнить команду в случае роста. Real life story 2 - я работал в конторе, где основным продуктом была скомпилированная Win32-программа. Казалось бы, естественно было бы взять за основу C++ или Delphi. Однако нет - C++ программисты на порядок дороже, а Delphi-программистов очень мало. С другой стороны, VB-шников полно, да и обучить народ просто, у нас был чувак с Java-опытом, мы его вообще не обучали, он сам всё схватил. Да и я, собственно, пришёл в ту контору, когда весь мой VB-опыт равнялся одному колледжскому классу по структурам данных.
И тогда сразу понятно, что из всего вышеперечисленного остаются ASP/VBScript, JSP и с натяжкой PHP.
Discuss