Эволюция веб-разработчика: от PHP-новичка до Python-ниндзя

14 января 2014, 10:09

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

Извините, заголовок получился не совсем точным. Более правильное название для статьи звучало бы иначе: 

Эволюция веб-разработчика: От новичка до ниндзя не такого уж новичка

Просто мне не нравится употреблять в таких контекстах слова «ниндзя», или «рок-звезда», или «гуру». Но зачеркнутые слова в заголовках статей считаются моветоном.

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

Все 42 этапа, которые уже пройдены автором

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

1. Записал слова «Hello World» в файл «helloworld.php». Теперь они отображаются у меня в браузере. Уррра!

2. Ну, это было проще пареной репы. А теперь я сделал кое-что динамическое и могу включить в программу актуальную дату и время: «Hello World on 2011-08-10 00:47:02.355000».

3. Научился передавать параметры по URL в строке запроса. Все это напоминает этюды в командной строке с применением argc, argv — но на самом деле все интереснее.

4. Мама, посмотри, я научился выполнять запросы к базе данных!

5. Использую Javascript для запуска кое-какого клиентского кода. alert («Hello World!»).

6. Чистый PHP отвратителен. Чтобы немного приукрасить его, решил попробовать CodeIgniter. Повозился и с Cake, но все-таки остановился на CodeIgniter, в основном потому, что с ним имели дело мои друзья. Потратил пару часов, чтобы минимально освоиться в этом фреймворке. 

7. Осознал, что мои друзья будут вечно надо мной подтрунивать, если я так и буду писать на PHP. А язык Ruby показался мне странноватым. Наверное, он был придуман для хипстеров. Если бы у меня была собака, она бы гавкала по-Ruby.

8. Влюбился в Python с первого взгляда (возможно, в тот момент он и не ответил мне взаимностью, но я полюбил его навсегда). Язык красивый, чистый, все в нем на месте — как и должно быть в хорошем языке программирования. 

9. Прочитал «Python The Hard Way» из чистого интереса.

10. Руководство по Django оказалось не таким плохим. Единственный минус — этот ресурс слишком увлекательно описывает разработку опрашивающего приложения (всегда мечтал сам написать такую программу)! Задумываюсь о том, насколько сильно такие программерские руководства влияют на облик реальных приложений. Возможно, вокруг так много разного блогового софта, потому что такие приложения часто рассматриваются в качестве примеров. 

11. Написание CRUD-запросов с нуля — банальщина. Изучил объектно-реляционное отображение и абстракции баз данных в Django.

12. Ой, засада! Оказывается, объектно-реляционное отображение в Django не поддерживает составные первичные ключи? Никуда не годится! Буду писать собственный уровень базы данных.

13. Передумал писать собственный уровень базы данных. Все-таки я еще только учусь, обойдусь первичными автоинкрементными ключами. Всегда успею поправить попозже.

14. Открыл jQuery. Не представляю, как человечество существовало без jQuery.

15. Впервые воспользовался комбинацией «щелчок правой кнопкой-Inspect Element». FireBug навсегда изменил мою жизнь.

16. Оказывается, обрабатывать запросы POST не сложнее, чем запросы GET. Зато круче и никаких ограничений по длине.

17. Черт бы побрал этих спамеров. Занялся поиском хорошей библиотеки капчей. Думаю, recaptcha как раз подойдет.

18. Рассказали, что формирование SQL-запросов методом конкатенации строк — плохая идея. Учусь связывать параметры и экранировать строки. Неважно, какую модель объектно-реляционного отображения вы используете, рано или поздно вам придется писать прямые SQL-запросы. 

19. Благодаря управлению сессиями появляются признаки состояния в приложениях, которые не сохраняют состояние.

20. Вызовы базы данных очень медленные. Доступ к памяти быстрый. Memcached рулит!

21. AJAX совершенно преображает веб-приложения. (В душе вновь возношу хвалу Джону Резигу, создателю jQuery. Счастлив, что не отговорил его от этой безумной идеи много лет назад, когда мы впервые встретились).

22. Попробовал работать с SQLAlchemy. Кажется многообещающим, но в Django меня не устраивало лишь недоделанное объектно-реляционное отображение, что-то принципиально иное, нежели Django с его паттерном активной записи, меня не привлекает.

23. Научился вызывать другие сайты и приложения из моего кода. Увлекательно, но опасно. Или просто опасно.

24. Ах, какой лавкой чудес оказались эти Hacker News. Узнал о библиотеке запросов Python. Теперь она стала для меня эталоном всех других библиотек.

25. Оказалось, что все, кроме меня, пишут отвратительный HTML, не соответствующий стандарту XHTML, и любой парсер в нем запутается в два счета.

26. Узнал, что попытки обрабатывать дикорастущий HTML при помощи регулярных выражений граничат со смертным грехом. Тем не менее, оказалось, что Beautiful Soup — довольно красивая штука.

27. Пометил в списке важных дел: обязательно выучить, как именно следует использовать CSS. В пятый раз планирую.

28 Осознал, что пишу отвратительный HTML, не соответствующий стандарту XHTML, и любой парсер в нем запутается в два счета.

29. Полдня искал библиотеки и фреймворки, которые помогли бы сделать CSS чуть менее убогими. Решил, что ни один из найденных инструментов пока не является «мейнстримовым». Внутренний голос подсказывает, что я упускаю нечто важное.

30. Ооо. Выдумал толковый способ применения JavaScript для вставки динамически скрываемых полей в формы. Помогает и отвадить спамеров, и не раздражать пользователей капчой. Позже узнал, что изобрел велосипед, эта идея появилась сто лет назад и с тех пор успешно применяется.

31. Начитался про куки. Потом про куки без ограничения срока действия. Потом про проблемы, связанные с кросс-доменным использованием куки. Затем посмотрел статистику: сколько пользователей отключают куки в браузере. Нашел в каком-то блоге статью о том, что в Европе использование куки может быть признано незаконным. Потом пошел на кухню и съел шоколадную печенюшку. Стало лучше.

32. Узнал, что есть способ возвращать из веб-приложения не только HTML, но и другую информацию. Пока не знаю, зачем это может понадобиться, ну а вдруг?

33. Обождите, я вас правильно понял? Неужели можно создавать динамические изображения прямо из кода? То есть теги <img> необязательно должны указывать на статические файлы в формате JPG/PNG, лежащие на сервере? Круто! Иду писать собственный мемогенератор. Уррра! 

34. Никогда не поверил бы, если бы не увидел своими глазами. Но SASS действительно значительно улучшает синтаксис CSS.

35. Итак, у меня есть объекты, образующие простую двухуровневую иерархию. Еще есть реляционная база данных (MySQL), а в Django есть механизм объектно-реляционного отображения (ORM). Итак, вы могли бы предположить, что ORM помогает брать объекты и отображать их на таблицы баз данных каким-то естественным образом. Ничего подобного, мусье (простите мне мой французский). На самом деле, этот механизм неправильно делает даже многие базовые вещи. 

36. Решил сделать Настоящую Пакость. Просто беру данные о моих дочерних объектах, запузыриваю их в JSON и пихаю все это в один столбец базы данных. Помогает справиться с некоторыми проблемами, свойственными Django, но привносит другие неудобства. Например, не удается сделать запрос к какому-либо из свойств этих объектов.

37. Стал читать о MongoDB. На первый взгляд довольно просто. Удается настроить и запустить эту базу данных за несколько минут. Чуть больше времени уходит на осваивание запросов и операций вставки. Теперь я могу хранить мои объекты как документы, причем их иерархия лишь слегка обозначена. И все это можно запрашивать. Не имею ничего против SQL, но MongoDB кажется более естественным инструментом для внедрения простых объектов в реляционную базу данных.

38. Ищу способы, как бы заставить MongoDB работать чище и проще. В ходе этих непростых поисков наткнулся на DictShield.  Поразительно полезная и простая библиотека. @j2labs — классный парень, поддерживающий код этой библиотеки практически в реальном времени, да еще и находящий время отвечать на элементарные вопросы, совершенно не связанные с DictShield).

39. На собственном горьком опыте обнаружил, что 32-битная версия MongoDB позволяет создавать базы данных не крупнее 2 Гб. Решил не жмотничать и перейти на 64-битную базу данных Amazon EC2. Оказывается, эта база данных быстро растет.

40. С сожалением обнаруживаю, что в MongoDB нет полнотекстового поиска (даже в MySQL он есть). Почитал о Elastic Search и обнаружил, что у Amazon есть новенький поисковый сервис, который выглядит очень функциональным. Диву даюсь, как быстро эти ребята из Amazon осваивают новые технологии — мог ли я когда-то подумать, что какой-то интернет-магазин однажды станет ключевым игроком в мире облачных вычислений?

41. С головой закопался в питоновский Natural Language Processing Toolkit. Голова болит. Да, нужно выучить кучу всего и сразу (или я просто нетерпелив)? Мне всего-то было нужно выполнить простую классификацию по Байесу (простую, как бы не так!). Попробовал новый Google Prediction API. Но пусть он и казался многообещающим, этот инструмент оказался практически непригоден для решения моей тривиальной задачи (требовалось сделать простую классификацию твитов). 

42. Стал читать «Natural Language Processing with Python». Не все там понял, но чувствую, что малость поумнел. 

Конечно, это далеко не вся история моего самообразования — многие незначительные этапы я опустил. А на какой ступеньке этой эволюционной лестницы сейчас находитесь вы? Может быть, уже до пункта 83 добрались? Расскажите обо всех основных вехах, которые встретились на вашем пути к овладению искусством веб-разработки.

Дхармеш Шах

Источник

 

 

подписка на главные новости 
недели != спам
# ит-новости
# анонсы событий
# вакансии
Обсуждение