Предлагаю вашему вниманию перевод статьи «Becoming PHP professional. Missing link».
Введение
Когда я читаю различные блоги, связанные с PHP, вопросы на Quora (англоязычный сервис вопрос-ответ, прим. переводчика), сообщества в Google+, газеты и журналы, я часто замечаю крайнюю поляризацию навыков программирования. Вопросы бывают или уровня «А как же мне подключиться к базе данных MySQL», или что-то из области «Как мне лучше распределить ресурсы моей почтовой системы для того, чтобы отправлять более одного миллиона писем в час без использования нового сервера?»
Лично я выделяю 4 четких уровня «славы» в PHP (применимо так же и для любого другого языка или профессии): новичок, среднячок, профессионал и элита.
Коротко обо всех уровнях
В PHP новички узнают о переменных, инклудах, о работе с html-формами. Они изучают простые логические конструкции; отправляют электронную почту, пользуясь при этом уроками-туториалами, а иногда даже затрагивают примеры, где используется объектно-ориентированное программирование, но даже понятия не имеют, что это вообще такое. Новички работают с WordPress (WP) и меняют несколько классов CSS. С этими знаниями они берутся за работу, но, к сожалению, не справляются с ней.
Профессионалы – люди, которые уделили немалую часть своей жизни различным проектам. Они разрабатывали коммерческие приложения на большинстве, если не на всех, фрэймворках (“каркас” вашего приложения или проекта), они эффективно сочетали РНР и различные базы данных, они посещали конференции и даже выступали на них. Они знают шаблоны проектирования и могут с легкостью спроектировать целый проект в одиночку – от построения диаграм до запуска проекта, и уже давно не пишут процедурный код.
Элитные программисты – те же профессионалы, которые потратили более 10000 часов на повышение своего уровня. Они используют в своих разработках расширения, написанные ими же, могут найти баг, просто просмотрев ваш код беглым взглядом, а также они крайне щепетильны к внешнему виду своего кода. Элита берется только за самые сложные проекты и находит альтернативные пути решения проблем, о которых люди даже и не догадываются. Они написали пару хорошо продаваемых книг о PHP, выступали на десятках конференций, возможно даже создали свое направление в PHP или даже очень успешный фрэймворк, а то и два.
Но кто же такие «среднячки»?
Недостающее звено
Так как же новичок может стать профессионалом? Если человек не знает ничего, кроме азов, то как же он может повышать свой уровень и начать практиковаться в более сложных задачах? Это тот вопрос, который мне задавали очень много новичков. Первый шаг для того, чтобы стать профессионалом – стать чем то средним, т.н. «среднячком».
Далее мы рассмотрим то, что должен сделать каждый на пути своего плавного перехода от новичка до среднего звена.
Забудьте «спагетти-код»
Большинство думает, что использование классов означает, что вы пишите объектно-ориентированный код, тогда как использование функций означает, что код – процедурный. Давайте соедим воедино распространенные мнения: процедурный код это тот, в котором вы не используете ни классы, ни объекты, а объектно-ориентированный код – с использование классов и объектов по максимуму.
Мой совет – полностью забыть о процедурном коде. Используйте ООП как можно чаще – пишите классы, применяйте инкапсуляцию, думайте реальными сущностями. Выигрыш процедурного кода в производительности над кодом, основаном на классах, выглядит ничтожно в сравнении с последующим использованием вашего проекта другими разработчиками. Часто встречаю фразу «Но ведь WordPress процедурный!». Честно говоря, и как бы это резко не звучало, но «разработчики» WP такие же PHP разработчики, как и люди с Instargam – фотографы. Но не стоит воспринимать это как то, что WP бесполезен – он идеален для блогов, простых вэб-сайтов и проектов-однодневок, на которые вы не хотите тратить много времени. Он идеально подходит для быстрого заработка или для людей, кто не настолько техничен, но использование WP никогда не сделает вас профессионалом в PHP – ведь WP это, по сути, длинный «спагетти код», который вряд ли научит вас правильным принципам проектирования.
Начните с малого. Обдумайте концепцию реального мира и попытайтесь возпроизвести ее испольюзуя ООП. Изучайте различные базовые туториалы и постепенно становитесь более опытными и продвинутыми. Работайте с ООП до тех пор, пока вы не разберетесь с классами в целом, перед тем как переходить к работе с фрэймворками и в недоумении смотреть на такие понятия, как «Model», «View» и «Controler» — это все слишком туманно без понимания ООП.
Анализируйте существующие проекты
Разбирайте уже существующий исходный код отовсюду, где его можно найти. Например, находите проекты на Github’e, установите их себе на компьютер и экспериментируйте с кодом. От файла к файлу, от строки к строке, и до тех пор, пока не поймете, что делает каждая строка в каждом файле.
Ищите такие проекты, которые хорошо раскомментированы и/или документированы, с хорошей структурой и до сих пор актуальны. Проекты, которые в последний раз обновлялись в 2008 году, вряд ли помогут вам разобраться с PHP версии 5.5 – вы можете упустить из виду новейшие и великолепнейшие функции, которые помогут вам выделяться среди других в этой области.
Научитесь настраивать свою среду разработки
Уметь устанавливать свою среду разработки – бесценный навык. Это не только позволяет вам хорошо настроить вашу среду, но также знакомит вас с процессом разработки расширений из исходного кода.
Забудьте про ОС Windows для разработки. Если у вас установлена операционная система Windows — установите виртуальную машину с ОС Linux на ней. Причина такого решения это окончание строк, а также другие странные противоречия на большинстве серверов с Windows, так что лучше всего разрабатывать на той ОС, которая больше всего похожа на ту, на которой вы будете запускать свой проект.
Виртуальные машины также помогают вам экспериментировать – если что-то пошло не так, вы можете перезапустить ее с нуля или просто сделать откат системы. В буквальном смысле, вы можете экспериментировать столько, сколько захотите, без страха того, что что-нибудь испортите. Средства разработки важны, равно как и рабочее место.
Различные эксперементы с вашими настройками могут познакомить вас с различными серверами – используете ли вы Apache или Nginx, или же ни тот, ни другой, и предпочитаете AppServer.
Приучайтесь к хорошему тону
Когда вы пишете свой код, убедитесь, что вы хорошо закомментировали его при помощи блоков документации, и ваш код хорошо структурирован и хорошо выглядит. После того, как вы создали класс, проект или библиотеку, воспользуйтесь хорошо известными инструментами документации (PHPDocumentor, ApiGen) для выделение блоков документации и их улучшения.
Хорошая среда разработки стоит занимаемому ей пространству в золоте – использование одного кросс-платформенного редактора поможет вам быстро разобраться с новой средой разработки, и вы сможете сразу погрузиться в код, не тратя время на настройку горячих клавиш и тем оформления. Убедитесь, что у вас есть резервная копия конфигурационных файлов вашей среды разработки на облачном хранилище, например, Google Drive, Dropbox, для того, чтобы вы могли использовать его в любой момент времени. Одна из хороших сред разработки – это PHPStorm, или же если вы не можете себе это позволить или у вас нет открытых проектов, для которого вы можете попросить бесплатную лицензию, Netbeans – бесплатная альтернатива. Обе среды являются кросс-платформенными.
Чем раньше вы приучитесь к хорошему тону, тем раньше ваш код смогут читать «не напрягаясь» другие разработчики. Найдите свой стиль и придерживайтесь его – это поможет и вам, и другим. Старайтесь придерживаться стандартов PSR (PSR-0, PSR-1, PSR-2, PSR-3) настолько, насколько можно – на то они и стандарты. Большинство из нас использует их и любит, а они, в свою очередь, делают код читаемым и позволяют использовать для своих нужд.
Так же, для новчика хорошо подойдет такой ресурс, как PHP The Right Way – свежие подсказки для начинающих и не только – пользуйтесь ими для того, чтобы глубже понять основы ООП, безопасности, запуска проектов, писать код в соответствии стандартов, которые были упомянуты ранее и многое другое.
Пробуйте разные фрэймворки, выберите один
Длительное время PHP был языком с самым большим количеством фреймворков для него (JavaScript обошел PHP лишь недавно). Так или иначе, это говорит о непоследовательности нашего сообщества или же о популярности языка, но факт остается фактом: выбор фрэймворка – это сложная задача, особенно для начинающих.
Попробовав многие из них, я могу искренне посоветовать вам Phalcon для знакомства с фрэймворками, т.к. он надежный и качественный, по факту, написан на C и устанавливается как расширение PHP (поэтому он быстрее, чем все существующие на данный момент фрэймворки). Тем не менее, попробуйте различные фрэймворки – это действительно неообходимо.
После того, как вы поработаете с ними, вы узнаете о новых подходах к обычным проблемам каждый раз. У каждого фрэймворка есть свои причуды, которые вам понравятся, а так же и свои минусы, которые вы будете ненавидеть. Но самое важное то, что вы поймете, как думают другие разработчики (в частности, разработчики данного фрэймворка). Вы увидите, сколько появилось новых возможностей и подходов, и очень хорошим упражнением будет перенос одного вашего проекта на столько фрэймворков, сколько вы сможете найти. Это поможет вам объективно оценить эффективность отдельно взятого фрэймворка: скорость разработки на нем и его производительность.
Читайте литературу
Не стоит пренебрегать советами и подсказками других. Читайте столько, сколько можете – если вы будете это делать, то это не займет у вас столько времени, сколько вам кажется. Найдите хорошие блоги, читайте туториалы на sitepoint.com, обсуждайте вопросы и ответы на StackOverflow, зайдите на форумы sitepoint.com, оформите подписку на газеты, следите за хорошими источниками на Google+. Не стоит читать стандартные учебники по PHP – они устарели еще в тот момент, когда вышли – вместо этого, сфокусируйтесь на личных заметках и уроках, где есть полезный и современный код, который вы можете найти повсюду вы сети. Даже если вы наткнулись на тему, с которой уже знакомы, попытайтесь прочесть ее снова – часто вы сможете найти новую пищу для размышлений и разные подходы к одним и тем же вещам.
Нет работы? Придумайте!
Всегда есть чем заняться. Никогда не говорите фразу «У меня нет проекта для работы» или, что еще хуже, «Мне скучно, я устал». Если у вас нет проекта для работы – создайте его. Вам приходится использовать что-то ежедневно и оно вас расстраивает недостаточной функциональностью? Создайте альтернативное, но лучше! Нет идей для нового проекта? Создайте уже существующий – попробуйте переписать, например, Facebook, воссоздайте то, что вы уже видели.
Самое главное – никогда не останавливаться. Нельзя накопить 10000 часов, если вы не проводите их за делом! Продолжайте работать, интересуйтесь новым, постоянно занимайте себя чем-то. Создайте простую адресную книгу. Потом сделайте ее на другом фрэймворке. Затем попробуйте другую базу данных (перейдите с MariaDB на Mongo, например). Займите себя чем то!
Найдите друга/наставника
Легче всего учить что-то, когда есть с кем это делать. Найдите человека, который разделяет вашу страсть. Возможно, вам повезет, и вы окажетесь одним из тех, кто разделяет интересы вашего партнера. Возможно, вы учитесь в школе или университете и у вас есть сверстники, которые хотят начать это удивительное приключение, но им нужна компания. Вы так же можете найти наставника и получить советы от эксперта.
Заключение
Когда вы сфокусируетесь на этих аспектах настолько, насколько можете, когда вы поймете, что вы хотите двигаться дальше – вы на пути к тому, чтобы стать профессиональным PHP разработчиком. Помните о дисциплине, никогда не сдавайтесь (даже если окружающие сдались) и практикуйтесь.
Автор: dMarley