PHP Center via @like
Безопасность? И так сойдет
Несколько дней назад на habrahabr появился интересный пост о нелепой ошибке на сайте государственной службы в сфере образования:
https://habrahabr.ru/post/347760
~14 млн документов об образовании и записи о бывших студентах, 1323 пользователя системы, 3391 учебное заведение. Это данные, которые могли попасть в руки недобросовестных лиц.
Причина банальна: отсутствие фильтрации данных, пришедших из формы. Как результат - возможность SQL инъекции.
Как такой код попал в продакшн? Подозреваю, что инженер, работавший над задачей, был недостаточно подкован в теме безопасности...
Всем, кто еще не успел посмотреть урок курса PHP UP о безопасности, рекомендую ознакомиться:
https://php-up.com/lesson/20
Несколько дней назад на habrahabr появился интересный пост о нелепой ошибке на сайте государственной службы в сфере образования:
https://habrahabr.ru/post/347760
~14 млн документов об образовании и записи о бывших студентах, 1323 пользователя системы, 3391 учебное заведение. Это данные, которые могли попасть в руки недобросовестных лиц.
Причина банальна: отсутствие фильтрации данных, пришедших из формы. Как результат - возможность SQL инъекции.
Как такой код попал в продакшн? Подозреваю, что инженер, работавший над задачей, был недостаточно подкован в теме безопасности...
Всем, кто еще не успел посмотреть урок курса PHP UP о безопасности, рекомендую ознакомиться:
https://php-up.com/lesson/20
Хабр
И так сойдёт… или как данные 14 миллионов россиян оказались у меня в руках
Одиноким вечером, глядя на свою пустую зачётку и осознавая, что конец близок, я снова задумался о том, как бы мне сейчас собрать сумку, или даже просто рюкзак, п...
PHP Center via @like
Обработка ошибок в PHP
Достаточно часто мне задают вопросы о том, как в PHP правильно
обрабатывать исключительные ситуации и ошибки.
В процессе подготовки статьи нашел отличный материал от Антона Шевчука и
желание писать статью отпало само собой :)
Делюсь с вами:
http://anton.shevchuk.name/php/php-for-beginners-error-handling/
По ссылке вы найдете информацию о том, какие виды ошибок существуют в PHP,
к чему может привести невнимательность при обработке ошибок, как использовать
исключения и многое другое. Приятного чтения!
Достаточно часто мне задают вопросы о том, как в PHP правильно
обрабатывать исключительные ситуации и ошибки.
В процессе подготовки статьи нашел отличный материал от Антона Шевчука и
желание писать статью отпало само собой :)
Делюсь с вами:
http://anton.shevchuk.name/php/php-for-beginners-error-handling/
По ссылке вы найдете информацию о том, какие виды ошибок существуют в PHP,
к чему может привести невнимательность при обработке ошибок, как использовать
исключения и многое другое. Приятного чтения!
Anton Shevchuk
PHP для начинающих. Обработка ошибок
Не совершает ошибок только тот, кто ничего не делает, и мы тому пример - трудимся не покладая рук над созданием рабочих мест для тестировщиков :) О да, в этой статье я поведу свой рассказа об ошибках в PHP, и том как их обуздать. Ошибки Разновидности в семействе…
PHP Center via @like
Продолжим тему работы с ошибками
Один из подписчиков канала поделился ссылкой на хороший материал по использованию исключений:
https://github.com/codedokode/pasta/blob/master/php/exceptions.md
Автор статьи очень доступно объясняет как и зачем используется этот инструмент (с примерами). Рекомендую
Один из подписчиков канала поделился ссылкой на хороший материал по использованию исключений:
https://github.com/codedokode/pasta/blob/master/php/exceptions.md
Автор статьи очень доступно объясняет как и зачем используется этот инструмент (с примерами). Рекомендую
GitHub
pasta/php/exceptions.md at master · codedokode/pasta
Уроки и черновики для изучающих PHP. Contribute to codedokode/pasta development by creating an account on GitHub.
PHP Center via @like
Нас уже почти 500!
Сегодня я решил дать вам интересную задачку!
Она скопирована с популярного ресурса, там же приведено и решение, потому ссылку на решение отправлю через неделю.
—------------------—
«Скобки»
Условие
На входе есть строка, содержащая только скобки из набора {}()[]. Необходимо определить, является ли она сбалансированной или нет.
Под сбалансированной подразумевается строка, в которой выполняются три условия:
1) для каждой открывающей скобки есть соответствующая закрывающая;
2) соответствующая закрывающая скобка должна быть после открывающей;
3) между двумя соответствующими скобками нет других скобок без соответствий между этими скобками.
То есть [([]{[]})] — сбалансированная, а {[}], [{)] и ]{}[ — нет.
Сегодня я решил дать вам интересную задачку!
Она скопирована с популярного ресурса, там же приведено и решение, потому ссылку на решение отправлю через неделю.
—------------------—
«Скобки»
Условие
На входе есть строка, содержащая только скобки из набора {}()[]. Необходимо определить, является ли она сбалансированной или нет.
Под сбалансированной подразумевается строка, в которой выполняются три условия:
1) для каждой открывающей скобки есть соответствующая закрывающая;
2) соответствующая закрывающая скобка должна быть после открывающей;
3) между двумя соответствующими скобками нет других скобок без соответствий между этими скобками.
То есть [([]{[]})] — сбалансированная, а {[}], [{)] и ]{}[ — нет.
PHP Center via @like
Давно здесь ничего не было...
За время молчания у меня появились интересные темы и материалы, планирую поделиться с вами!
Сегодня об индексах в MySQL.
Не раз приходилось сталкиваться с проблемами, вызванными неправильным использованием / отсутствием индекса.
Они могли существовать месяцами, а порой и дольше. Причина тому - недостаточная информированность разработчиков.
Предлагаю вашему вниманию неплохую статью:
https://ruhighload.com/%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+%D0%B2+mysql
Мне очень по душе подобного рода материалы, так как рассматриваются основные понятия и цели использования, не углубляясь в детали.
Также хотел бы добавить еще одну важную деталь. В статье написано:
"При каждом обновлении или добавлении данных в таблицу, происходит запись и обновление данных в индексе."
Перед добавлением индекса стоит задать себе вопрос: насколько часто происходят операции записи и чтения из таблицы?
Вполне возможно, что количество записей в вашем приложении будет существенно превышать количество выборок. В таком случае стоит задуматься об оптимальном решении.
За время молчания у меня появились интересные темы и материалы, планирую поделиться с вами!
Сегодня об индексах в MySQL.
Не раз приходилось сталкиваться с проблемами, вызванными неправильным использованием / отсутствием индекса.
Они могли существовать месяцами, а порой и дольше. Причина тому - недостаточная информированность разработчиков.
Предлагаю вашему вниманию неплохую статью:
https://ruhighload.com/%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+%D0%B2+mysql
Мне очень по душе подобного рода материалы, так как рассматриваются основные понятия и цели использования, не углубляясь в детали.
Также хотел бы добавить еще одну важную деталь. В статье написано:
"При каждом обновлении или добавлении данных в таблицу, происходит запись и обновление данных в индексе."
Перед добавлением индекса стоит задать себе вопрос: насколько часто происходят операции записи и чтения из таблицы?
Вполне возможно, что количество записей в вашем приложении будет существенно превышать количество выборок. В таком случае стоит задуматься об оптимальном решении.
PHP Center via @like
Доброе утро, коллеги!
Наверное, многие из вас используют для разработки замечательный инструмент - PHPStorm.
В данный момент JetBrains предлагает лицензии на свои продукты со скидкой 50%! Предложение будет действовать ещё около 33 часов.
https://www.jetbrains.com/promo/friends/
P.S. Это не реклама и не реферальная ссылка. Только что купил сам и делюсь информацией с вами ;)
Наверное, многие из вас используют для разработки замечательный инструмент - PHPStorm.
В данный момент JetBrains предлагает лицензии на свои продукты со скидкой 50%! Предложение будет действовать ещё около 33 часов.
https://www.jetbrains.com/promo/friends/
P.S. Это не реклама и не реферальная ссылка. Только что купил сам и делюсь информацией с вами ;)
JetBrains
Monthly and yearly plans with JetBrains Toolbox
PHP Center via @like
Доброе утро!
Сегодня в дайджесте на habrahabr нашел интересный тест по PHP: https://phptestquestions.com
Тест состоит из 10 вопросов (меняются при перезапуске) из разных категорий. Результаты и правильные ответы можно получить на почту, указав ее в конце теста.
P.S. Ссылка на PHP дайджест: https://habr.com/company/zfort/blog/423491/
Сегодня в дайджесте на habrahabr нашел интересный тест по PHP: https://phptestquestions.com
Тест состоит из 10 вопросов (меняются при перезапуске) из разных категорий. Результаты и правильные ответы можно получить на почту, указав ее в конце теста.
P.S. Ссылка на PHP дайджест: https://habr.com/company/zfort/blog/423491/
PHP Test Questions
10 Questions testing your PHP knowledge. How will you do? Come to the site and start the PHP Test Yourself quiz.
PHP Center via @like
Нашел отличный ресурс по шаблонам проектирования
https://refactoring.guru/ru/design-patterns/catalog
(также на сайте можно найти информацию по рефакторингу)
Отличительная особенность материалов в том, что авторы не привязываются к конкретному языку программирования, а делают ставку на детальное описание сути паттернов, иллюстрации, принципы реализации, схемы и примеры с псевдокодом.
После ознакомления Вы можете попробовать реализовать шаблоны на выбранном языке программирования. В случае, если это PHP, можете также обратиться к:
https://github.com/domnikl/DesignPatternsPHP - здесь есть готовые примеры.
https://refactoring.guru/ru/design-patterns/catalog
(также на сайте можно найти информацию по рефакторингу)
Отличительная особенность материалов в том, что авторы не привязываются к конкретному языку программирования, а делают ставку на детальное описание сути паттернов, иллюстрации, принципы реализации, схемы и примеры с псевдокодом.
После ознакомления Вы можете попробовать реализовать шаблоны на выбранном языке программирования. В случае, если это PHP, можете также обратиться к:
https://github.com/domnikl/DesignPatternsPHP - здесь есть готовые примеры.
refactoring.guru
Каталог паттернов проектирования
Список паттернов проектирования, сгруппированый по предназанчению, сложности и популярности паттернов. В каталог включены объектно ориентированные паттерны, а также некоторые архитектурные паттерны.
PHP Center via @like
Доброе утро
77 дней остается до ожидаемой даты релиза PHP 7.3. Не так уж много.
Может быть, вам уже попадалась на глаза публикация о нововведениях в версии 7.3 на хабре. Если нет, вот ссылка: https://habr.com/post/422507/
Но это ведь не очень интересно, да? ;)
Предлагаю вот такую статью:
https://www.tomasvotruba.cz/blog/2018/08/16/whats-new-in-php-73-in-30-seconds-in-diffs/
Здесь описаны возможности, которые, вероятно, будут полезны в ежедневной разработке.
Уверен, что немногим захочется заморачиваться и устанавливать версию 7.3, потому можно попробовать выполнить интересующий код на сайте: https://3v4l.org/ выбрав нужную версию.
p.s. https://kinsta.com/blog/php-7-3/ еще один материал (на английском языке).
77 дней остается до ожидаемой даты релиза PHP 7.3. Не так уж много.
Может быть, вам уже попадалась на глаза публикация о нововведениях в версии 7.3 на хабре. Если нет, вот ссылка: https://habr.com/post/422507/
Но это ведь не очень интересно, да? ;)
Предлагаю вот такую статью:
https://www.tomasvotruba.cz/blog/2018/08/16/whats-new-in-php-73-in-30-seconds-in-diffs/
Здесь описаны возможности, которые, вероятно, будут полезны в ежедневной разработке.
Уверен, что немногим захочется заморачиваться и устанавливать версию 7.3, потому можно попробовать выполнить интересующий код на сайте: https://3v4l.org/ выбрав нужную версию.
p.s. https://kinsta.com/blog/php-7-3/ еще один материал (на английском языке).
Хабр
PHP 7.3. Что нового
Синтаксис Смягчение требований к синтаксису Heredoc и Nowdoc Поддержка конечных запятых в вызовах функций и методов Ссылки в list() Устаревшие возможности (de...
PHP Center via @like
Доброе утро
Сегодня поднимем тему оптимизации SQL запросов.
В первую очередь хочу заметить: оптимизация - это не то, что можно отложить на потом.
Запрос может работать прекрасно во время разработки, но преподнести неожиданный сюрприз в production.
Анализировать оптимальность составленного запроса нужно здесь и сейчас. Если вы используете MySQL, он поддерживает удобнейший инструмент - оператор EXPLAIN.
На хабре есть хорошая статья с примерами: https://habr.com/post/211022/
После того, как вы ознакомитесь с новой информацией, просто заглядывайте в код (или в debug panel фреймворка), копируйте запросы, добавляйте к ним EXPLAIN и находите потенциальные проблемы.
Warning: До версии 5.6.3 MySQL поддерживает EXPLAIN только для запросов SELECT. Для более новых версий: SELECT, DELETE, INSERT, REPLACE, UPDATE.
На сегодня все :)
Сегодня поднимем тему оптимизации SQL запросов.
В первую очередь хочу заметить: оптимизация - это не то, что можно отложить на потом.
Запрос может работать прекрасно во время разработки, но преподнести неожиданный сюрприз в production.
Анализировать оптимальность составленного запроса нужно здесь и сейчас. Если вы используете MySQL, он поддерживает удобнейший инструмент - оператор EXPLAIN.
На хабре есть хорошая статья с примерами: https://habr.com/post/211022/
После того, как вы ознакомитесь с новой информацией, просто заглядывайте в код (или в debug panel фреймворка), копируйте запросы, добавляйте к ним EXPLAIN и находите потенциальные проблемы.
Warning: До версии 5.6.3 MySQL поддерживает EXPLAIN только для запросов SELECT. Для более новых версий: SELECT, DELETE, INSERT, REPLACE, UPDATE.
На сегодня все :)
Habr
Использование EXPLAIN. Улучшение запросов
Когда вы выполняете какой-нибудь запрос, оптимизатор запросов MySQL пытается придумать оптимальный план выполнения этого запроса. Вы можете посмотреть этот самый план используя запрос с ключевым...
PHP Center via @like
"Чем отличается composer.lock от composer.json?"
Вы не поверите, но около половины собеседований PHP разрабочиков можно заканчивать после этого вопроса 😞
Почему все так плохо? По-моему, причиной тому тесная связь современных php фреймворков и composer. Как правило, разрабочик получается проект где "все готово" и не нужно заморачиваться. И только со временем сталкивается с проблемами вроде версионирования, конфликтов в composer.lock, неправильным использованием install, update и т.д.
Вот что хочу посоветовать:
1) Первым делом изучаем принципы семантического версионирования: https://semver.org
2) Читаем документацию по composer, от корки до корки:
https://getcomposer.org/doc/
3) Читаем полезные практические советы:
https://habr.com/company/mailru/blog/346488/
4) Для закрепления создаем свою "hello world" библиотеку. С нуля. Устанавливаем эту библиотеку в свой проект, тестируем. Простой пример можно глянуть здесь: https://php-up.com/lesson/7
Вы не поверите, но около половины собеседований PHP разрабочиков можно заканчивать после этого вопроса 😞
Почему все так плохо? По-моему, причиной тому тесная связь современных php фреймворков и composer. Как правило, разрабочик получается проект где "все готово" и не нужно заморачиваться. И только со временем сталкивается с проблемами вроде версионирования, конфликтов в composer.lock, неправильным использованием install, update и т.д.
Вот что хочу посоветовать:
1) Первым делом изучаем принципы семантического версионирования: https://semver.org
2) Читаем документацию по composer, от корки до корки:
https://getcomposer.org/doc/
3) Читаем полезные практические советы:
https://habr.com/company/mailru/blog/346488/
4) Для закрепления создаем свою "hello world" библиотеку. С нуля. Устанавливаем эту библиотеку в свой проект, тестируем. Простой пример можно глянуть здесь: https://php-up.com/lesson/7
Semantic Versioning
Semantic Versioning 2.0.0
Semantic Versioning spec and website
PHP Center via @like
Доброе утро, коллеги!
Сегодня хочу поделиться последней в этом году технической заметкой.
Многим из вас знакомы классические шаблоны проектирования "Банды четырех". (Если нет, обязательно посмотрите).
Но даже разобравшись в них, мне всегда было непросто вспомнить все названия по порядку либо по принадлежности к группе. Слова просто крутятся и крутятся в голове, по несколько раз хочется сказать одно и то же название, а про какие-то просто забываешь.
В какой-то момент мне пришла в голову идея составить из названий шаблонов предложения со смыслом, чтоб проще было запомнить. Это называется "мнемотехника".
В итоге у меня получилось 4 предложения, хоть и не самой полезной смысловой нагрузки. Попробуйте или составьте предложения по своему вкусу. Это действительно работает!
---
Порождающие (5)
Строитель(1) одиночка(2) фабричными методами(3) создает прототип(4) абстрактной фабрики(5).
---
Структурные (7)
Заместитель(1) шерифа декорирует(2) фасад(3) моста(4) легковесными(5) гирляндами, скомпонованными(6) в одно целое и подключенными через адаптер(7) в розетку.
---
Поведенческие (11)
Хранитель(1) парка открыл замок и посетители(2) смогли купить у посредника(3) билеты на карусель цепочка(4), который находился в плохом состоянии(5), но работал.
На каждой итерации(6) команда(7) меняла шаблонные методы(8) и стратегию(9), но наблюдатели(10) интерпретировали(11) это как поражение.
Сегодня хочу поделиться последней в этом году технической заметкой.
Многим из вас знакомы классические шаблоны проектирования "Банды четырех". (Если нет, обязательно посмотрите).
Но даже разобравшись в них, мне всегда было непросто вспомнить все названия по порядку либо по принадлежности к группе. Слова просто крутятся и крутятся в голове, по несколько раз хочется сказать одно и то же название, а про какие-то просто забываешь.
В какой-то момент мне пришла в голову идея составить из названий шаблонов предложения со смыслом, чтоб проще было запомнить. Это называется "мнемотехника".
В итоге у меня получилось 4 предложения, хоть и не самой полезной смысловой нагрузки. Попробуйте или составьте предложения по своему вкусу. Это действительно работает!
---
Порождающие (5)
Строитель(1) одиночка(2) фабричными методами(3) создает прототип(4) абстрактной фабрики(5).
---
Структурные (7)
Заместитель(1) шерифа декорирует(2) фасад(3) моста(4) легковесными(5) гирляндами, скомпонованными(6) в одно целое и подключенными через адаптер(7) в розетку.
---
Поведенческие (11)
Хранитель(1) парка открыл замок и посетители(2) смогли купить у посредника(3) билеты на карусель цепочка(4), который находился в плохом состоянии(5), но работал.
На каждой итерации(6) команда(7) меняла шаблонные методы(8) и стратегию(9), но наблюдатели(10) интерпретировали(11) это как поражение.
PHP Center via @like
Доброе утро!
Не могу не озвучить приятную новость от GitHub.
Отныне бесплатным аккаунтам сервиса доступно безлимитное количество приватных репозиториев с участием до трех соавторов.
По-моему, это отличная возможность!
Не могу не озвучить приятную новость от GitHub.
Отныне бесплатным аккаунтам сервиса доступно безлимитное количество приватных репозиториев с участием до трех соавторов.
По-моему, это отличная возможность!
PHP Center via @like
Сегодня (23 сентября) до конца дня еще можно бесплатно посмотреть видео и книги на Packt:
https://www.packtpub.com/free-learning
https://www.packtpub.com/free-learning
Packt
Free Learning | Daily Programming eBook from Packt
A new free programming tutorial book every day! Develop new tech skills and knowledge with Packt Publishing’s daily free learning giveaway
PHP Center via @like
Просто оставлю это здесь:
Самая большая в Украине конференция для разработчиков высоконагруженных систем:
https://fwdays.com/event/highload-fwdays-2019
Онлайн трансляция. Сейчас
Самая большая в Украине конференция для разработчиков высоконагруженных систем:
https://fwdays.com/event/highload-fwdays-2019
Онлайн трансляция. Сейчас
Fwdays
Highload fwdays'19 - найбільша в Україні конференція для розробників високонавантажених систем
Конференція для розробників, які працюють з архітектурою та експлуатацією великих проектів, базами даних і системами зберігання, системним адмініструванням, навантажувальним тестуванням і іншими напрямами, пов'язані з високонавантаженими системами.
PHP Center via @like
Доброе утро!
Мне часто задают вопрос: “Что нужно знать/изучить начинающему PHP разработчику?”
Думаю настало время на него ответить. В посте я буду перечислять навыки по некоторым субъективным уровням.
Шаг 1⃣
Минимальный набор. Изучаем: PHP, реляционная база данных, веб-сервер.
На этом уровне и так все достаточно понятно: самые базовые знания для того, чтоб делать простые сайты.
PHP: синтаксис, основы, типы данных, работа с базой данных (PDO), глубокое понимание реализации ООП в PHP (классы, объекты, свойства, методы, области видимости, интерфейсы, трейты), сессии, анонимные функции, работа с файлами.
Не критично важно, но уже на этом уровне вам будет очень помогать xdebug (инструмент для отладки кода). Да, с ним трудно подружиться (поначалу может быть трудно настроить и разобраться с принципом работы), но когда вы это сделаете, он не раз спасет в сложных ситуациях.
Веб-сервер. Сейчас наиболее популярными являются nginx и apache. Если вы только начинаете, я бы посоветовал обратить внимание на nginx. Необходимо понимание virtual hosts, умение настроить окружение для локальной разработки (можно при помощи google/инструкции).
На этом уровне очень важно “набить руку”. Достаточно часто ученики стараются как можно быстрее перейти на более сложные темы (например, берутся за фреймворки) и позже тратят большое количество времени на простые задачи, вроде обхода вложенного массива в цикле или экспорта данных в csv файл.
Базы данных. Конечно же речь идет о реляционных БД, в частности о MySQL (хотя это может быть и PostgreSQL и другие). Пусть вас не сбивают с толку популярные NoSQL решения и заголовки о том, что реляционные базы уже не модные/отошли в прошлое и т.д. Уверенно заявляю: до сих пор (в 2019 году) реляционные базы данные - основа для работы с данными в веб приложениях (и не только). Добавлю, что сейчас на рынке существуют очень хорошие NoSQL решения и они прекрасно решают поставленные перед ними задачи. Но это все немного позже.
SQL не должен вас пугать: умение писать основные запросы, делать выборки из нескольких таблиц с агрегациями, условиями, базовые понимания о индексах и типах данных, скорости выполнения запросов - это необходимый минимум на данном этапе.
Терпение! 😁 Решите 200+ задач (я не шучу) на циклы, условные операторы, работу с файлами, функциями, взаимодействием с БД. Это основа работы любого программиста.
Мне часто задают вопрос: “Что нужно знать/изучить начинающему PHP разработчику?”
Думаю настало время на него ответить. В посте я буду перечислять навыки по некоторым субъективным уровням.
Шаг 1⃣
Минимальный набор. Изучаем: PHP, реляционная база данных, веб-сервер.
На этом уровне и так все достаточно понятно: самые базовые знания для того, чтоб делать простые сайты.
PHP: синтаксис, основы, типы данных, работа с базой данных (PDO), глубокое понимание реализации ООП в PHP (классы, объекты, свойства, методы, области видимости, интерфейсы, трейты), сессии, анонимные функции, работа с файлами.
Не критично важно, но уже на этом уровне вам будет очень помогать xdebug (инструмент для отладки кода). Да, с ним трудно подружиться (поначалу может быть трудно настроить и разобраться с принципом работы), но когда вы это сделаете, он не раз спасет в сложных ситуациях.
Веб-сервер. Сейчас наиболее популярными являются nginx и apache. Если вы только начинаете, я бы посоветовал обратить внимание на nginx. Необходимо понимание virtual hosts, умение настроить окружение для локальной разработки (можно при помощи google/инструкции).
На этом уровне очень важно “набить руку”. Достаточно часто ученики стараются как можно быстрее перейти на более сложные темы (например, берутся за фреймворки) и позже тратят большое количество времени на простые задачи, вроде обхода вложенного массива в цикле или экспорта данных в csv файл.
Базы данных. Конечно же речь идет о реляционных БД, в частности о MySQL (хотя это может быть и PostgreSQL и другие). Пусть вас не сбивают с толку популярные NoSQL решения и заголовки о том, что реляционные базы уже не модные/отошли в прошлое и т.д. Уверенно заявляю: до сих пор (в 2019 году) реляционные базы данные - основа для работы с данными в веб приложениях (и не только). Добавлю, что сейчас на рынке существуют очень хорошие NoSQL решения и они прекрасно решают поставленные перед ними задачи. Но это все немного позже.
SQL не должен вас пугать: умение писать основные запросы, делать выборки из нескольких таблиц с агрегациями, условиями, базовые понимания о индексах и типах данных, скорости выполнения запросов - это необходимый минимум на данном этапе.
Терпение! 😁 Решите 200+ задач (я не шучу) на циклы, условные операторы, работу с файлами, функциями, взаимодействием с БД. Это основа работы любого программиста.
PHP Center via @like
Шаг 2⃣
Тачку на прокачку! Прокачиваем: паттерны, начинаем погружаться в SOLID, composer, frameworks.
Паттерны. Не стоит переоценивать эту тему. Равно как не стоит и забивать. Начните с шаблонов: Factory, Singleton, Builder, Adapter, Decorator, Facade, Strategy, Observer. Гарантирую, что вы увидите их во всех без исключения популярных фреймворках (в том или ином виде). Следует отметить, что перечисленные выше паттерны относятся к сборнику паттернов GOF (google). Есть и другие группы шаблонов: архитектурные, инфраструктурные, шаблоны проектирования для баз данных. На данном этапе не стоит лезть глубоко в дебри, но ознакомиться и понять области применения - must have.
SOLID - вообще отдельная история. Нельзя просто взять и осознать эти принципы за день. Да, можно выучить теорию и разобрать несколько примеров - именно так и нужно начать. Но со временем вы будете все глубже понимать идеи, которые несет в себе SOLID, а также мотивацию для его применения.
Composer. Я не зря написал его перед фреймворками. Часто так бывает, что программисты “получают” composer в тот момент, когда начинают знакомиться с фреймворком и это играет злую шутку. Если не освоить этот инструмент, в будущем потраченное время и проблемы гарантированы. Постарайтесь ответить на следующие вопросы:
- Что такое semver?
- Чем отличается composer.lock от composer.json?
- Зачем нужен packagist?
- Что значит опция --dev?
- Что такое PSR-4?
Если хотя бы на один вопрос вы затрудняетесь дать ответ, сделайте паузу, изучите тему глубже.
PHP фреймворки. Да, без них сейчас никуда. Абсолютное большинство серьезных разработок сейчас ведут с использованием opensource фреймворков. Какой выбрать? Исходя из состояния рынка на данный момент (октябрь 2019), для себя я бы выбирал из Laravel и Symfony. Могу сказать, что внимания заслуживает любой из TOP10. Дело вкуса.
Как изучать фреймворк? Мой личный рецепт - это 2 этапа:
- Читаем документации и cookbooks (бегло, не заморачиваемся на деталях). Основная цель - понять какой набор инструментов у нас в руках (без тонкостей их реализации).
- С целью получения практического опыта повторяем основной функционал какого-то популярного сайта. Например, BlaBlaCar, Instagram, Booking. Естественно, будет достаточно повторить 3-5 основных особенностей. Например, регистрация, создание/поиск/бронирование поездок/жилья и т.д.
Если вы последовательно двигаетесь в обучении, то на момент знакомства с фреймворком у вас в арсенале: отличное понимание OOP, вы знаете 5-10 самых популярных шаблонов, без проблем используете composer, умеете писать запросы к БД на чистом SQL. Эти знания помогут сфокусироваться на новых областях и не оглядываться назад на основы. Вот почему так важен последовательный подход.
Тачку на прокачку! Прокачиваем: паттерны, начинаем погружаться в SOLID, composer, frameworks.
Паттерны. Не стоит переоценивать эту тему. Равно как не стоит и забивать. Начните с шаблонов: Factory, Singleton, Builder, Adapter, Decorator, Facade, Strategy, Observer. Гарантирую, что вы увидите их во всех без исключения популярных фреймворках (в том или ином виде). Следует отметить, что перечисленные выше паттерны относятся к сборнику паттернов GOF (google). Есть и другие группы шаблонов: архитектурные, инфраструктурные, шаблоны проектирования для баз данных. На данном этапе не стоит лезть глубоко в дебри, но ознакомиться и понять области применения - must have.
SOLID - вообще отдельная история. Нельзя просто взять и осознать эти принципы за день. Да, можно выучить теорию и разобрать несколько примеров - именно так и нужно начать. Но со временем вы будете все глубже понимать идеи, которые несет в себе SOLID, а также мотивацию для его применения.
Composer. Я не зря написал его перед фреймворками. Часто так бывает, что программисты “получают” composer в тот момент, когда начинают знакомиться с фреймворком и это играет злую шутку. Если не освоить этот инструмент, в будущем потраченное время и проблемы гарантированы. Постарайтесь ответить на следующие вопросы:
- Что такое semver?
- Чем отличается composer.lock от composer.json?
- Зачем нужен packagist?
- Что значит опция --dev?
- Что такое PSR-4?
Если хотя бы на один вопрос вы затрудняетесь дать ответ, сделайте паузу, изучите тему глубже.
PHP фреймворки. Да, без них сейчас никуда. Абсолютное большинство серьезных разработок сейчас ведут с использованием opensource фреймворков. Какой выбрать? Исходя из состояния рынка на данный момент (октябрь 2019), для себя я бы выбирал из Laravel и Symfony. Могу сказать, что внимания заслуживает любой из TOP10. Дело вкуса.
Как изучать фреймворк? Мой личный рецепт - это 2 этапа:
- Читаем документации и cookbooks (бегло, не заморачиваемся на деталях). Основная цель - понять какой набор инструментов у нас в руках (без тонкостей их реализации).
- С целью получения практического опыта повторяем основной функционал какого-то популярного сайта. Например, BlaBlaCar, Instagram, Booking. Естественно, будет достаточно повторить 3-5 основных особенностей. Например, регистрация, создание/поиск/бронирование поездок/жилья и т.д.
Если вы последовательно двигаетесь в обучении, то на момент знакомства с фреймворком у вас в арсенале: отличное понимание OOP, вы знаете 5-10 самых популярных шаблонов, без проблем используете composer, умеете писать запросы к БД на чистом SQL. Эти знания помогут сфокусироваться на новых областях и не оглядываться назад на основы. Вот почему так важен последовательный подход.
PHP Center via @like
Шаг 3⃣
Волк-одиночка - это плохо. Основы командной работы. Git, стандарты оформления кода.
Вы уже слышали о PSR-1, PSR-12? Да, я знаю, что к таким вещам лучше привыкать сразу. Но на практике вижу, что речь об оформлении кода заходит в основном тогда, когда код нужно кому-то показывать. В большинстве осмысленных проектов приняты некоторые стандарты оформления кода. Как правильно это PSR-1 и PSR-12 (PSR-2 - не так давно устарел).
На самом деле вам совсем не нужно знать наизусть все тонкости. Достаточно будет одного прочтения документации по стандартам. А соблюдать эти самые стандарты вам помогут специальные инструменты, например PHP_CodeSniffer и разнообразные плагины для PHPStorm.
Кстати, плохо оформленный код - признак того, что человек, скорее всего, еще не имел опыта работы в команде, а также одна из популярных причин забраковать тестовое задание.
Кстати, я надеюсь вы используете PHP Storm? Если нет, самое время переходить ✅
Sublime, brackets, netbeans и другие IDE очень от него отстали и не очень хорошо подходят для профессиональной разработки.
Git. Как не странно, но до какого-то момента можно успешно работать и без системы контроля версий. Но, как только в проекте появляется > 1 разработчика, работа без git становится адом.
Напротив, если все члены команды хорошо владеют VCS, у вас никогда не возникнет головной боли от обновления версий кода или потерянных изменений.
Эти команды вы должны знать и уметь пользоваться в консоли: git branch, git fetch, git checkout, git pull, git push, git reset, git revert, git rebase, git merge, git stash и, возможно, некоторые другие.
Да, кто-то может обоснованно возразить: зачем, ведь есть IDE и встроенные функции?
Все верно, многие ими пользуются и это есть хорошо (я в том числе). Однако, есть два важных момента:
- Вы обязаны знать что именно происходит, когда вы нажимаете на кнопку “Rebase” или любую другую. Это поможет понимать суть происходящего и в случае необходимости решить проблемы в ручном режиме.
IDE есть не везде.
- Иногда вам нужно будет работать с удаленным сервером через терминал.
Конечно же, знать наизусть аргументы всех функций невозможно, да и не нужно. Однако, у вас должно быть точное понимание принципов работы основных git команд. Хороший идея - иметь под рукой собственный документ-шпаргалку.
Не обязательно, но может быть полезно посмотреть подход gitflow.
Иииии… Все на сегодня. Продолжение следует
Волк-одиночка - это плохо. Основы командной работы. Git, стандарты оформления кода.
Вы уже слышали о PSR-1, PSR-12? Да, я знаю, что к таким вещам лучше привыкать сразу. Но на практике вижу, что речь об оформлении кода заходит в основном тогда, когда код нужно кому-то показывать. В большинстве осмысленных проектов приняты некоторые стандарты оформления кода. Как правильно это PSR-1 и PSR-12 (PSR-2 - не так давно устарел).
На самом деле вам совсем не нужно знать наизусть все тонкости. Достаточно будет одного прочтения документации по стандартам. А соблюдать эти самые стандарты вам помогут специальные инструменты, например PHP_CodeSniffer и разнообразные плагины для PHPStorm.
Кстати, плохо оформленный код - признак того, что человек, скорее всего, еще не имел опыта работы в команде, а также одна из популярных причин забраковать тестовое задание.
Кстати, я надеюсь вы используете PHP Storm? Если нет, самое время переходить ✅
Sublime, brackets, netbeans и другие IDE очень от него отстали и не очень хорошо подходят для профессиональной разработки.
Git. Как не странно, но до какого-то момента можно успешно работать и без системы контроля версий. Но, как только в проекте появляется > 1 разработчика, работа без git становится адом.
Напротив, если все члены команды хорошо владеют VCS, у вас никогда не возникнет головной боли от обновления версий кода или потерянных изменений.
Эти команды вы должны знать и уметь пользоваться в консоли: git branch, git fetch, git checkout, git pull, git push, git reset, git revert, git rebase, git merge, git stash и, возможно, некоторые другие.
Да, кто-то может обоснованно возразить: зачем, ведь есть IDE и встроенные функции?
Все верно, многие ими пользуются и это есть хорошо (я в том числе). Однако, есть два важных момента:
- Вы обязаны знать что именно происходит, когда вы нажимаете на кнопку “Rebase” или любую другую. Это поможет понимать суть происходящего и в случае необходимости решить проблемы в ручном режиме.
IDE есть не везде.
- Иногда вам нужно будет работать с удаленным сервером через терминал.
Конечно же, знать наизусть аргументы всех функций невозможно, да и не нужно. Однако, у вас должно быть точное понимание принципов работы основных git команд. Хороший идея - иметь под рукой собственный документ-шпаргалку.
Не обязательно, но может быть полезно посмотреть подход gitflow.
Иииии… Все на сегодня. Продолжение следует
PHP Center via @like
Шаг 4⃣
Становимся немножко DevOps. Углубляемся в основы функционирования операционной системы, виртуализации.
Под операционной системой, конечно же, я имею в виду Linux. Вы не обязаны пользоваться Linux в качестве основной рабочей ОС. Но эта операционная система будет использоваться для ваших приложений: веб-сервера, базы данных и т.д.
Что нужно обязательно знать и уметь:
- Общее понятие о дистрибутивах Linux.
- Базовые навыки работы в терминале.
- Умение работать с пакетами (packages): установка, обновление, удаление.
- Пользователи системы (группы, права).
- Файловая система.
- Освоить на базовом уровне один из популярных консольных редакторов: (nano, vim, emacs,...): уметь открыть, создать, редактировать, сохранить файл. Лично мне больше всего по душе nano. Он очень простой, но его функций мне хватает ровно на 100%. Рекомендую.
- ssh, curl и как ими пользоваться.
- Научиться использовать планировщик заданий cron. Многие задачи в работающих проектах выполняются по расписанию (например, еженедельная отправка отчетов по почте), потому умение обращаться с планировщиком очень актуально.
- Писать простые bash скрипты.
Можно еще много чего написать, но это - основное.
После того, как вы подружитесь с Linux, можно браться за Docker. При условии, что вы более или менее освоили Linux, разобраться с Docker будет намного проще.
Необходимо:
- Знать что такое image, container, volume, network (в контексте Docker).
- Уметь написать собственные Dockerfile, build image, публиковать их на docker hub.
- Научиться работать с docker-compose.
- Понимать что такое host, port, socket, как контейнеры “общаются” между собой.
Как учить? Я бы рекомендовал по каждой теме (отдельно linux, отдельно Docker) найти источник информации (книга, видеокурс, блог) в котором будут затронуты перечисленные темы. Если глубины материала недостаточно, обращаться к другим источникам.
Помните: худшее, что вы можете для себя сделать - это учить наизусть все тонкости! Учить нужно принципы, а мелкие детали заносить в структурированную шпаргалку. Со временем шпаргалка станет не нужна.
Становимся немножко DevOps. Углубляемся в основы функционирования операционной системы, виртуализации.
Под операционной системой, конечно же, я имею в виду Linux. Вы не обязаны пользоваться Linux в качестве основной рабочей ОС. Но эта операционная система будет использоваться для ваших приложений: веб-сервера, базы данных и т.д.
Что нужно обязательно знать и уметь:
- Общее понятие о дистрибутивах Linux.
- Базовые навыки работы в терминале.
- Умение работать с пакетами (packages): установка, обновление, удаление.
- Пользователи системы (группы, права).
- Файловая система.
- Освоить на базовом уровне один из популярных консольных редакторов: (nano, vim, emacs,...): уметь открыть, создать, редактировать, сохранить файл. Лично мне больше всего по душе nano. Он очень простой, но его функций мне хватает ровно на 100%. Рекомендую.
- ssh, curl и как ими пользоваться.
- Научиться использовать планировщик заданий cron. Многие задачи в работающих проектах выполняются по расписанию (например, еженедельная отправка отчетов по почте), потому умение обращаться с планировщиком очень актуально.
- Писать простые bash скрипты.
Можно еще много чего написать, но это - основное.
После того, как вы подружитесь с Linux, можно браться за Docker. При условии, что вы более или менее освоили Linux, разобраться с Docker будет намного проще.
Необходимо:
- Знать что такое image, container, volume, network (в контексте Docker).
- Уметь написать собственные Dockerfile, build image, публиковать их на docker hub.
- Научиться работать с docker-compose.
- Понимать что такое host, port, socket, как контейнеры “общаются” между собой.
Как учить? Я бы рекомендовал по каждой теме (отдельно linux, отдельно Docker) найти источник информации (книга, видеокурс, блог) в котором будут затронуты перечисленные темы. Если глубины материала недостаточно, обращаться к другим источникам.
Помните: худшее, что вы можете для себя сделать - это учить наизусть все тонкости! Учить нужно принципы, а мелкие детали заносить в структурированную шпаргалку. Со временем шпаргалка станет не нужна.
PHP Center via @like
5⃣ Вопросы - ответы
❔ English - Да
Чем лучше вы знаете английский язык, тем более качественная и актуальная информация вам доступна. Не буду утверждать, что нельзя научиться программировать не зная английского - можно. Но чем более глубокими будут ваши знания по программированию, тем тяжелее будет находить переведенную информацию, порой и вовсе невозможно.
❔ JavaScript (TS), frontend frameworks - Нет
Замечание: JavaScript (TS) - это очень хороший и интересный язык. Стоит ли с ним ознакомиться - однозначно. Это полезно и увлекательно. Но, если вы видите себя в роли backend разработчика, будьте им. Не нужно распыляться и тратить большое количество сил и времени на другие области.
❔ HTML, CSS - Нет
Расскажу личную историю. В 2010 году, когда я только начал серьезно интересоваться web-разработкой, интернет был совершенно другим. Мне пришлось потратить многие месяцы на изучение HTML, CSS (их принципы, тонкости, свойства, хитрые трюки). И все для того, чтоб просто сверстать сайт. Через несколько лет все эти знания стали бесполезным мусором.
Повторюсь: если вы видите себя в роли backend разработчика, будьте им.
❔ CMS - Нет
Можно ли зарабатывать деньги работая с CMS? Да!
Существуют ли среди CMS удачные решения актуальных проблем? Конечно!
Однако, по моему субъективному мнению, CMS - это не про инжиниринг. Большинство популярных систем управления контентом (WordPress, Joomla, 1С, …) - это какая-то альтернативная, не очень удачная с технической точки зрения ветка эволюции 😀
❓ Что еще можно посмотреть, изучить?
Если у вас есть достаточный запас времени, посмотрите гарвардский Computer Science 50. Особенно полезным он будет в случае, если у вас нет профильного образования и вы хотите заполнить пробелы.
Good luck, have fun 🐘
❔ English - Да
Чем лучше вы знаете английский язык, тем более качественная и актуальная информация вам доступна. Не буду утверждать, что нельзя научиться программировать не зная английского - можно. Но чем более глубокими будут ваши знания по программированию, тем тяжелее будет находить переведенную информацию, порой и вовсе невозможно.
❔ JavaScript (TS), frontend frameworks - Нет
Замечание: JavaScript (TS) - это очень хороший и интересный язык. Стоит ли с ним ознакомиться - однозначно. Это полезно и увлекательно. Но, если вы видите себя в роли backend разработчика, будьте им. Не нужно распыляться и тратить большое количество сил и времени на другие области.
❔ HTML, CSS - Нет
Расскажу личную историю. В 2010 году, когда я только начал серьезно интересоваться web-разработкой, интернет был совершенно другим. Мне пришлось потратить многие месяцы на изучение HTML, CSS (их принципы, тонкости, свойства, хитрые трюки). И все для того, чтоб просто сверстать сайт. Через несколько лет все эти знания стали бесполезным мусором.
Повторюсь: если вы видите себя в роли backend разработчика, будьте им.
❔ CMS - Нет
Можно ли зарабатывать деньги работая с CMS? Да!
Существуют ли среди CMS удачные решения актуальных проблем? Конечно!
Однако, по моему субъективному мнению, CMS - это не про инжиниринг. Большинство популярных систем управления контентом (WordPress, Joomla, 1С, …) - это какая-то альтернативная, не очень удачная с технической точки зрения ветка эволюции 😀
❓ Что еще можно посмотреть, изучить?
Если у вас есть достаточный запас времени, посмотрите гарвардский Computer Science 50. Особенно полезным он будет в случае, если у вас нет профильного образования и вы хотите заполнить пробелы.
Good luck, have fun 🐘
PHP Center via @like
Привет!
Практически каждый день я просматриваю резюме разработчиков и примерно раз в неделю провожу собеседования.
Появилась идея сделать большой пост о том, как писать резюме. Интересно? Голосуйте 👍👎
А пока, чтоб вы не скучали, новости из мира PHP 🐘
https://habr.com/p/472306/
Практически каждый день я просматриваю резюме разработчиков и примерно раз в неделю провожу собеседования.
Появилась идея сделать большой пост о том, как писать резюме. Интересно? Голосуйте 👍👎
А пока, чтоб вы не скучали, новости из мира PHP 🐘
https://habr.com/p/472306/
Habr
PHP-Дайджест № 166 (7 – 21 октября 2019)
Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4 RC4 и другие релизы, новости из PHP Internals, порция полезных инструментов, стримы, видео с конференций, подкасты и многое...