После полутора с небольшим лет праздной жизни, 8 последних месяцев я работаю как обычно - пн-пт, (9-11) - (18-22), сб-вс - выходной. Бывало и по выходным приходил. Потому что интересно. Писать для веба я начал весной 2005-го, 4.5 года назад, и буквально ненавидел то, с чем приходилось сталкиваться. Активная практика продолжалась немногим больше года, в течение которых прогресса по большому счёту не было. Осенью 2006-го года, за пару месяцев работы в StudioSvet я узнал о технологии больше, чем за всё время до того в Ideaprint. Да, в период 2007-2009 я чуток занимался фрилансом, с чем решил окончательно завязать, ибо в этом случае приходится иметь дело с заказчиком непосредственно, а они так или иначе переходят грань, после которой возникает желание запретить им доступ к компьютеру вообще. Такую "работу" не стоит считать практикой, потому что ничего качественно нового для себя я не использовал.
Длительный перерыв, как оказалось, пошёл на пользу. Руководствуясь подходом
softwarer'a, вспоминая сколько делал в одиночку Александр в StudioSvet и вдохновлённый тем, что руководитель проектов в Виенто похож на Дениса Зимина, я навёрстывал упущенное. Немного обидно было осознать, что AJAX, jQuery и конечно же PHP5 существовали ещё когда я программировал iWork в Ideaprint, и знай бы я о них тогда, история могла бы сложиться совсем иначе. Теперь у меня были и необходимость и возможность потратить время на изучение этих и других, не столь фундаментальных, но весьма полезных для конкретных задач вещей. Когда в скором времени ушёл старший программист (о людях речь пойдёт в следующем посте) я понял, что просто обязан писать лучше, чем когда-либо, поскольку это вопрос не только чести, но в первую очередь моей карьеры в Viento.
Примером для веб-программиста является сайт vkontakte.ru. Павел достаточно подробно рассказывает о развитии сайта и очень правильно обращает внимание, что настоящие сложности начинаются, когда счёт активных пользователей идёт на миллионы, трафик на гигабайты, а объём данных на терабайты. До решения таких задач мне, надеюсь, ещё предстоит дойти, а вот в точки зрения базовых технологий ничего из интерфейса ВКонтакте уже не вызывает реакции "оба-на, как это им удалось?!!"
Камнем преткновения в веб-программировании долгое время оставался интерфейс. Несмотря на то, что Javascript позволяет манипулировать готовым документом как угодно, практическая реализация хотя бы приближения к тому, с чем мы имеем дело в Windows выходила громоздкой, браузерозависимой и болезненно реагирующей на изменения. С появлением javascript-фреймворков (jQuery и Prototype) работать с интерфейсом стало даже проще, чем в Delphi! HTML и CSS, я считаю, дают большие возможности для реализации задумок дизайнера интерфейса, и программисту теперь ничего не стоит воплотить их в реальность.
AJAX - это первый шаг к устранению определяющего недостатка веб-приложений - отсутствия постоянного соединения между клиентом и сервером. С частичной загрузкой страниц нужно обращаться предельно аккуратно и по месту. Любая только-только освоенная новая мощная технология соблазняет тебя пользоваться ею и только ею.
Почти всегда это желание стоит остужать при первом же обнаружении. Злоупотребив AJAX-ом, можно легко замедлить работу сайта до невозможности или не заметить отличия в работе скрипта, расположенного как backend, и дорого заплатить за эту ошибку (я заплатил рублём в прошлом месяце). Выбирая технологию - а веб был есть и будет комплектом технологий - нужно отталкиваться от особенностей задачи.
О PHP. Прежде я бы расцеловал Дмитрия Котерова за эту
статью об особенностях PHP. (Его, впрочем, стоит если не расцеловать, то поддержать долларом за библиотеку DBSimple.) Сейчас я готов дискутировать с автором, потому что объявленные пиаровскими фичи языка реализованы в полном соответствии с замыслом и названием PHP - hypertext preprocessor. Веб технологии основаны на мягкой обработке ошибок. Браузеры прочтут любой контект, который выдаётся за html, javascript-ошибка не приведёт к закрытию странице (огромное количество сайтов работают и продолжают работать с ними), так почему же PHP должен вести себя иначе? Да, я ненавидел его за отсутствие типизации и мягкую реакцию на ошибки, но, вспоминая слова softwarer'a "нужно ещё понять, что баг, а что фича" старался запомнить, осмыслить поведение PHP, и теперь уже рад тому, что язык интерпретатор ведёт себя именно так, экономя мне уйму времени.
Наконец, я подружился ООП. Научился извлекать пользу из инкапсуляции и наследования, мыслить классами, но не отучился мыслить функциями.
И ещё одна тёмная прежде вещь - регулярные выражения. Сколько парсеров было написано, сколько времени потрачено на доводку вложенных циклов и контроля позиции в строке! Сколько сил ушло на то, что умещается в одну-две строчки regexp-а?! Его не вернёшь, но и в будущем уже не лишишься. Здесь тоже нужно быть осторожным - чем сложнее выражение, тем медленнее оно обрабатывается. Когда нет выгоды, нужно пользоваться простыми функциями для работы со строками.
Приятно идти на работу не только с чувством "столько ещё предстоит сделать", но и чувством "сделано уже немало". И сделано так, что переделывать не придётся. Время - лучший испытатель.