PHP Center
610 subscribers
11 photos
1 video
33 links
Прокачиваем знания в программировании
Download Telegram
Шаг 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. Эти знания помогут сфокусироваться на новых областях и не оглядываться назад на основы. Вот почему так важен последовательный подход.
Шаг 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.

Иииии… Все на сегодня. Продолжение следует
Шаг 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) найти источник информации (книга, видеокурс, блог) в котором будут затронуты перечисленные темы. Если глубины материала недостаточно, обращаться к другим источникам.

Помните: худшее, что вы можете для себя сделать - это учить наизусть все тонкости! Учить нужно принципы, а мелкие детали заносить в структурированную шпаргалку. Со временем шпаргалка станет не нужна.
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 🐘
Привет!
Практически каждый день я просматриваю резюме разработчиков и примерно раз в неделю провожу собеседования.
Появилась идея сделать большой пост о том, как писать резюме. Интересно? Голосуйте 👍👎

А пока, чтоб вы не скучали, новости из мира PHP 🐘
https://habr.com/p/472306/
Резюме Software Engineer 📄

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

В этом посте вы узнаете:

- Какая информация должна быть в резюме
- Почему резюме на 1 страницу - булшит
- О чем говорить не нужно
- Что написать начинающим

Сначала я пройдусь по основным блокам и дам информацию. Порядок блоков важен.

1⃣ Общая информация:

- Имя, фамилия
- Город
- Email
- Номер телефона

Стоит ли добавить фотографию

Если есть приличная фотка, добавляйте. Если нет, ничего страшного.

2⃣ Цель / Позиция.

Четко определитесь и укажите позицию, на которую претендуете: trainee, senior software engineer, team lead и т.д.

Указывать ли зарплатные ожидания? Решать вам.
Вопрос достаточно личный, потому я предпочитаю оговаривать его позже.

3⃣ Summary

Напишите два-три предложения о себе.

Веб-разработчик с опытом работы 6 лет. Работал с микросервисной архитектурой и распределенными системами. Есть опыт работы в качестве team lead.

4⃣ Ключевые навыки.

Читать резюме будет инженер, но поиском занимается recruiter / researcher. Этот человек должен увидеть все сильные стороны кандидата в одном блоке и на первой странице.

Здесь нужно указать технологии, которыми вы владеете на уровне production. Т.е. использовали в работающем проекте. В идеале это список из 7-12 технологий, которые являются определяющими в вашей специализации. Конечно же, в вашем активе может быть больше технологий / инструментов / опыта. Но не нужно писать в key skills весь перечень, вы сможете их вписать в описание опыта работы.

5⃣ 🔥 Опыт работы.

Самый важный блок. Здесь вы должны перечислить несколько последних мест работы с релевантным опытом. Я приведу общий шаблон и также отвечу на основные вопросы.

👉 Информация о компании:

- Название
- Краткое описание - 1 предложение.

Например:

LLC Nasty Elephant
Nasty Elephant разрабатывает продукт для учета рабочего времени: “My Tracker”

👉 Позиция

Frontend Developer

👉 Даты и общий срок работы.

2018-01-01 - 2019-02-15 (1 год и 2 месяца)

Обязательно напишите в скобках сколько времени всего отработали.

👉 Обязанности

Чем вы занимались на данном месте работы. Минимум 3 пункта, лучше 5.

- Оптимизация работы базы данных для системы закупок.
- Поддержка и мониторинг существующих проектов компании.
- Миграция проекта с PHP 5.6 на PHP 7.3.
- Интеграция с платежными системами: PayPal, Stripe, ...
- Разработка телеграм-ботов.

Часто я слышу фразу: “Сказать особо нечего…”. Серьезно? В месяц вы пишите тысячи строка кода. Подумайте, вам есть что рассказать.

👉 Достижения 🔥

Ради этого пункта я затеял данный пост. Это сердце вашего резюме.

Чаще всего описание опыта работы сводится к “работал над …”, а информация о достижениях, к сожалению, отсутствует. А зря. Не стесняйтесь рассказать о своих достижениях (3-5 пунктов к каждому месту работы). Обязательно пишите правду. Например:

- Провел оптимизацию запросов и конфигурацию базы данных, что позволило ускорить работу API в среднем на 30%.
- Внедрил CircleCI для автоматического запуска Unit тестов, что позволило уменьшить количество ошибок на production.
- Предложил и успешно перенес приложение на ... фреймворк, за счет чего удалось значительно увеличить скорость разработки новых фич.

👉 Технологии

Здесь можете перечислить технологии с которыми пришлось работать на проекте. Этот пункт даст понимание работодателю об актуальности ваших знаний.

Вопросы к блоку “Опыт работы”

Что если мест работы очень много?

Выберите наиболее значимый и релевантный опыт.

Что если опыта нет вообще?

Это вообще тема для отдельного поста, но если в двух словах:
- Выберите один из популярных веб-сервисов (файлообменник, социальная сеть, туристический сайт) и попробуйте построить его упрощенную копию (очень упрощенную).
- Определите несколько (2-3) основных фичи.
- Реализуйте проект.
- Купите доменное имя и хостинг, задеплойте проект.
- Залейте код на github. Проведите самостоятельный code-review. Еще лучше - попросите посмотреть код кого-то более опытного в разработке. Внесите исправления в код по необходимости.
- Опишите что и как вам удалось сделать в этом тренировочном проекте, приложите ссылку на github.
6⃣ Образование

В этом блоке можно и нужно писать мало.

Напишите кратко об учебном заведении:
- Название
- Специальность
- Год окончания

Если у вас есть релевантные сертификаты в области computer science, тоже укажите их в этом блоке. Под релевантными я имею ввиду сертификации от aws, microsoft, cisco, zend и т.д.

Если вы начинающий разработчик, можете указать какие курсы проходили (coursera, udemy, …).

7⃣ Дополнительная информация

Просто напишите о себе без стандартных шаблонов.
Если у вас есть блог или персональные проекты - можете добавить ссылки.

Не пишите про водительское удостоверение категории B,C (и такое бывает). Это лишнее.


Дополнительные вопросы

Оформление и специальные “сервисы” для создания резюме

Мы занимается софтом, не дизайном и типографикой. Вам не нужно цветное резюме с “красивым” оформлением.

Еще одна вещь, от которой стоит избавиться - это уровень владения: 6 из 8 точек или еще какая-то шкала. Это субъективная оценка, которая не дает абсолютно ничего.

Почему резюме на 1 страницу - булшит?

Кто-то создал этот миф. Возможно, в ряде случаев такой подход даже принесет пользу. Но не в случае с разработчиком ПО.

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

У инженеров все наоборот. Не надо сокращать. Резюме на 3-4 страницы - это хорошо. На моей памяти был человек, который написал резюме на 9(!) страниц с осмысленным, детальным описанием опыта работы. Он прошел собеседование :)

30+ технологий

Иногда попадаются резюме, в которых указано вот очень много key skills, штук 30-40. Java, Python, PHP, Go, Python, C++, C# и еще штук 15 популярных языков программирования. К сожалению, практически всегда это преувеличение. Пишите о том, в чем уверены.

Указывать ли ссылку на гитхаб

Если есть что показать - прикрепите ссылку. Но убедитесь, что уровень проектов в соответствует позиции, на которую вы претендуете.

На этом все. Удачи вам 🙃
30 мая 2020 в Киеве состоится большая конференция для PHP разработчиков:
Только что была открыта регистрация и я уже купил билет. Go ;)

http://bit.ly/2Kga7ib
Забавные истории: Git

Наверняка вы слышали или работаете с этой системой контроля версий.
На английском сленге git означает «мерзавец»

У Git интересная история и она связана с разработкой ядра Linux.

В 2005 году над ядром Linux активно трудились тысячи программистов. Для совместной разработки использовался BitKeeper (платная система контроля версий). Однако, автор BitKeeper предоставил проекту Linux бесплатную лицензию.

В ходе работы над Linux разработчикам не хватало некоторых возможностей в BitKeeper и они написали несколько сопутствующих утилит. Автор BitKeeper посчитал это нарушением соглашения и отозвал бесплатную лицензию.

Линус Торвальдс взялся за создание новой системы контроля версий, так как ни одна из существующих открытых систем не позволяла решить задачу разработки.

Из wiki:

Начальная разработка велась меньше, чем неделю: 3 апреля 2005 года разработка началась, и уже 7 апреля код Git управлялся неготовой системой. 16 июня Linux был переведён на Git, а 25 июля Торвальдс отказался от обязанностей ведущего разработчика.

Круто ведь? 🔥

Торвальдс так саркастически отозвался о выбранном им названии:
Я эгоистичный ублюдок, и поэтому называю все свои проекты в честь себя. Сначала Linux, теперь git.
👍2
Дабы не отрывать вас от оливье 🙈, поздравляю с наступающим Новым годом! Пусть ваши знания, софт и железо всегда будут актуальными!

Заодно делюсь ссылкой (все еще полезной):
https://roadmap.sh/roadmaps

Надеюсь, это поможет вам найти ориентиры и не потеряться в 2020 году
Breaking news

Онлайн конференция PHP fwdays 2020 состоится уже совсем скоро - 30 и 31 мая!

На этой конференции я прочитаю доклад на тему "MySQL, который мы не знаем" (на русском языке)

Промо-код на скидку 15% - 6F1C7999F4

https://fwdays.com/en/event/php-fwdays-2020/review/things-you-dont-know-about-mysql

Добро пожаловать!
Конференция Авторов PHP fwdays'20 | Special edition, 6 июня 2020 🌟

Спикеры - авторы фреймворков, авторы книг, авторы библиотек, авторы PHP RFC, члены глобальных комьюнити и инженеры:

Sebastian Bergmann, Никита Попов, Jordi Boggiano, Rob Allen, Cal Evans, Marco Pivetta и Beth Tucker Long.

Встретятся 6 июня на PHP fwdays'20 | Special edition, чтобы представить свежие темы, ответить на ваши вопросы и дать развернутые интервью PHP-сообществу 💪

Присоединяйтесь 👉 https://bit.ly/3gPhqfr

Промо код на скидку 15%: E1995A5F3E
Скидка на PHP Storm 🤩
Forwarded from PHP Digest
25 лет PHP и скидка 50% на PhpStorm

8 июня 1995 года, программист родом из Гренландии Расмус Лердорф публикует в usenet анонс набора CGI-скриптов, который он назвал PHP Tools.

Иногда говорят, что первые версии PHP были написаны на Perl. Это, конечно же, неправда.

Главные факты и события из 25 лет истории PHP смотрите в таймлайне.

https://jb.gg/php25

Заревьюить и дополнить его помогли непосредственные участники событий: Andi Gutmans, Derick Rethans, Peter Kokot, Александр Макаров, Дмитрий Стогов и другие.

Еще 27 мая исполнилось 10 лет PhpStorm. Чтоб отметить сразу два дня рождения делаем скидку 50% на персональную годовую подписку. FAQ по скидке на Хабре.

С днем рождения PHP!
Запись моего доклада на конференции PHP fwdays'20:
"MySQL который мы не знаем. Мониторинг MySQL c Prometheus, Grafana, Anemometer"

https://www.youtube.com/watch?v=02UuCVJ2_cA&lc=Ugwdu1DYEj5O0bDQj_F4AaABAg

Код и тестовый стенд из доклада (попробуйте самостоятельно):
https://github.com/helters/mysql-playground

Много других интересных докладов можно бесплатно посмотреть на канале fwdays: https://www.youtube.com/user/fwdays/videos
AWS re:Invent – это бесплатная онлайн конференция по обучению для международного сообщества облачных вычислений. На мероприятии будут представлены важные объявления, возможности для обучения и сертификации, доступ к более чем 2500 техническим семинарам, выставка партнеров, вечерние мероприятия и многое другое.

https://reinvent.awsevents.com/
Уже совсем скоро, 4 сентября, пройдет самая большая и самая популярная в Украине конференция для PHP разработчиков — 𝗣𝗛𝗣 𝗳𝘄𝗱𝗮𝘆𝘀’𝟮𝟭🔥

https://bit.ly/php-fwdays-z

📆 Событие пройдет 4 сентября (суббота) и в будние дни с дополнительными форматами.

На девятой конференции PHP fwdays'21 будут местные и международные эксперты в сфере PHP, дискуссии с ТОП-специалистами, разбор актуальных кейсов

Спикеры расскажут о:
🔹 Fault tolerant workflow orchestration on PHP
🔹 Serverless. Реальный опыт успешного переноса Laravel микросервисов в AWS Lambda при помощи Vapor
🔹 Анализ и Дизайн-Принципы в ООП. Проблема запрета наследования в однопоточном PHP
🔹 Автор PHPUnit Sebastian Bergmann расскажет о том как качественно организовать и оптимизировать ваши Test Suits

А также практичный воркшоп Kubernetes for Developers, на котором вы узнаете как K8s упрощает жизнь для разработчиков.

Варианты участия:
🔹 Free Online (бесплатно, только трансляция),
🔹 Full Online (дополнительные опции, смотрите видео когда вам удобно),
🔹 Online Full Swag (для ценителей программерских футболок (отправка только по Украине)).

Детали по ссылке ➡️ https://bit.ly/php-fwdays-z

Используйте промокод InfopZin (5% скидка) при покупке Full Online или Online Full Swag билета или зарегистрируйтесь бесплатно 👉