|
Рассказ об ученииОтсебятина от 06 ноября 2008 года. Теги: PHP Mysql Разработка сайта
В статье я расскажу, как сам изучал и изучаю веб-разработки и посоветую так же :)
После четырех месяцев поверхностного изучения PHP я написал свой первый сайт, который был на файлах. Я понял принцип “как сайт реагирует на действия пользователя”. Понимал, что впереди еще много чего - базы данных, страшное слово ООП, что знаний еще не достаточно для написания сайта под заказ, но, в тоже время, знал, что уже и с такими знаниями многие зарабатывают на жизнь.
Каждый новый сайт приносил мне новые знания, опыт, улучшения кода. Взгляд на прошлую работу после очередного творения примерно такой: "Жесть! И я это писал??!!". Судя по разговорам с другими программистами, я понял, что это — норма и, к счастью, хороший знак — налицо улучшения.
Но, чем дальше я заходил, тем больше понимал, что все, что я знал раньше - это примитив, по сравнению с тем, что необходимо узнать. Хотя без этого примитива не обойтись — база, как никак. Поэтому советую любому новичку начинать с написания простейшей гостевой на файлах. Не стоит в первую неделю обучения программированию писать супермегасайт с базой данных. Как показывает практика (по форуму заметно), те, кто так начинал — запутывались в огромном потоке информации, которую надо было изучить и научиться ей оперировать. Они прекращали программировать, либо пропускали этот материал и кодили с большим количеством грубых и опасных ошибок, не ведая, что делают.
Не стремитесь написать крупный сайт сразу. Начинайте изучение с написания небольших скриптов и функций. Со временем сформируется понимание, как работает сайт, как соединить эти функции.
Спустя год-два изучения возникнет мысль: "Ну вот, я написал крупный сайт. Значит и подобие Яндексу смогу". Конечно, вы без проблем сможете написать подобие яндекса за пару лет, но только ваш сайт будет в тысячу раз хуже: поиск не такой уникальный, пропускная способность низкая, плохая возможность расширения. Тут приходит понимание, что знаний ой как недостаточно. Перед вами открывается новый мир - архитектуры, ООП, оптимизации, кэши, распределения нагрузок, алгоритмы поиска, паттерны проектирования и прочее прочее. Сначала пухнет голова от всех определений, потом все постепенно укладывается по полочкам. Вооружившись книгами, статьями, мануалами, попробуйте спроектировать и разработать сайт с применением хотя бы большей части приведенных технологий. Для этого придумайте сайт с большим функционалом (не обязательно под заказ).
Важный этап - проектирование. Запомните это раз и навсегда. Прежде чем делать сайт, подумайте о его целях, направленности, функциональности. Распишите на бумаге функции, разделы и прочие атрибуты, нарисуйте их взаимодействие. Напишите список управляющих классов, нарисуйте базу данных. Представьте разработанную вами систему и попробуйте ей пользоваться мысленно. Все идеи и поправки сразу заносите на бумагу. После внесите поправки на нарисованной архитектуре. Думать, много думать. Большинство ошибок совершаются еще на стадии проектирования. Что-то не продумал, а потом, чтобы добавить это "что-то", надо перекапывать половину системы.
При написании сайта старайтесь придерживаться выбранной архитектуры. Смотрите чужие работы, чтобы перенять опыт (есть проблема – найти качественные работы). Следите за тем, чтобы система была гибкой (с легкостью модернизируемой), понятной и "легкой". Следите за стилистикой кода - комментарии, отступы.
Популярность ООП в том, что программисту, разрабатывающему новый модуль, вовсе не обязательно изучать, как обращаться к базе данных напрямую, как обрабатывать данные. Он просто передает запрос в качестве параметра в метод класса базы данных и получает результат выборки в виде массива. В то время как в класс работы с базой данных можно переписать под другую СУБД, не влияя напрямую на работу сайта и не затрагивая его остальные части. Это лишь простейший пример, почему объектный подход популярен среди веб-программистов. Но не так сладок мед, как кажется: программист, не зная, какие операции делаются с данными, которыми он оперирует, может сильно уменьшить быстродействие. Например, он прогоняет данные через десяток методов (всё может происходить незаметно - через наследование, инкапсуляцию), а потом еще и обрабатывает их своими функциями. Сам того не ведая, он перебирает один и тот же массив десяток с лишним раз.
Грубый пример, но наглядный, показывающий, что любой подход имеет свои + и -. В любом случае необходимо подходить к делу с умом, да и не промахнуться на стадии проектирования.
При написании запросов к базе данных следите за их громоздкостью. Проверяйте их через EXPLAIN. Старайтесь как можно меньше делать крупных выборок, вложенных запросов. Да и вообще, проектируйте базу так, чтобы запросов было как можно меньше, а не по 150 на страницу, как в одной из CMS (название точно не помню).
Хорошие статьи по этому поводу:
MySQL Performance real life Tips and Tricks
MySQL Performance real life Tips and Tricks. To be continued.
MySQL Performance real life Tips and Tricks. Part 3-rd.
(Статьи на русском)
Как не нужно составлять запросы
Изучайте более углубленно язык SQL и возможности вашей СУБД (особенно обратите внимание на оптимизацию и встроенные функции). Это сыграет вам на руку.
Позаботьтесь о кэшировании.
Для a href="http://www.codenet.ru/webmast/php/caching.php">клиентского создайте в базе таблицу с штампами изменений страниц или e-tags.
Для серверного можете ограничиться созданием обычных файлов с отрисованными html-страницами. Но лучше использовать кэширование в оперативной памяти. Наиболее популярная утилита — Memcache. Мы просто кладем с помощью PHP в memcache необходимые данные и вытаскиваем их оттуда, когда нам необходимо. Перед вами откроются новые возможности, как оптимизаторские, так и новаторские.
Прочтите книгу по паттернам программирования. Они помогут иногда избежать долгие изобретения велосипедов.
Со временем я буду наполнять статью ссылками по теме.
Еще одна вещь, которая, я считаю, может сказаться на профессионализме разработчика - понимание принципов работы компьютера, ну и, конечно же, знание математики.
Не зная, что происходит после обработки "текста" с помощью PHP, ,вы многое упускаете. Хороший веб-программист должен знать протокол HTTP, структуру сети, принципы Web, а так же внутренние взаимодействия в ОС. Он не должен отвечать на вопрос "Что происходит, когда я набираю адрес сайта в браузере" подобным образом: "Ну сервер присылает страничку". Конечно, никто не будет с вас требовать объяснения "а куда делся svchost в windows", достаточно будет просто упомянуть про этап получения IP (через hosts/dns) и отсылку заголовка с запросом на этот IP.
Математика и все её виды позволят вам писать оригинальные и производительные специализированные алгоритмы, распределять нагрузки итд.
Не грех осознавать работу встроенных PHP-функций изнутри. Особенно, функции сортировки массивов, типы сортировки.
Надеюсь, что запугал новичков ?, но указал верный путь.
|
|