Имел небольшой опыт работы с Yii1, но сейчас приступил к изучению Yii2 и планирую изучить Symfony и Laravel (если хватит времени, т.к. есть свободных полгода, но об этом написал ниже). Изучаю по документации на сайте и по исходникам (начал с базовых классов и продвигаюсь). По исходникам значительно понятнее и интереснее.
Но я ни разу не устраивался на работу, где требовалось знание фреймворка, поэтому не понимаю что значит хорошо знать фреймворк. Концепции, паттерны и общие моменты понятны, но в фреймворке много разных мелочей. Например, в Yii2 более 100 классов и более 1000 методов в них (в сумме). На данный момент я изучил 14 классов от начала и до конца, т.е. по сути помню код любого метода и все свойства и отлично понимаю работу этих классов. Могу написать эти классы с нуля почти 1 в 1.
Но насколько нужно такое погружение? Не является ли это излишним? Что значит "хорошо знать фреймворк"? На что смотрят при собеседовании в этом плане?
Например, в Yii2 контроллеры весьма функциональны (если даже не говорить о разделении на console/web). Программист, хорошо знающий фреймворк, должен знать весь такой функционал или только основную часть, а остальное узнает, если будет необходимо?
Хорошо знать фреймворк - это понятие довольно субъективное, и каждый человек может в него вкладывать свой смысл. Если Вы планируете искать работу с акцентом на изучаемые фреймворки думаю Вам будет достаточно:
1. Знание общих принципов работы фреймворка (что как устроено внутри), но тут нужно понимать что не стоит изучать каждый класс от корки до корки, т.к. это бессмысленная работа, фреймворки постоянно развиваются и модифицируются. Например, Вы должны знать что такое DI, как оно организовано в фреймворке, и как с ним работать. Но не нужно прям досконально знать код.
2. Чтение документации это хорошо, но практика всегда нужна. Вы не просто должны знать фреймворк по документации, Вы должны иметь опыт работы с ним. Как вариант можете придумать для себя какой-нибудь тестовый проект и реализовать его.
3. Паттерны, архитектурные принципы и т.п. тоже важны, если Вы их знаете - тогда это плюс.
4. СУБД. Для большинства проектов базы используются, поэтому помимо фремворка Вы должны так же хорошо ориентироваться в них, уметь писать сложные запросы, проектировать их и т.п.
Спасибо за подробный ответ. С СУБД понятно, т.к. с ними давно работаю, а вот с фреймворками только начал. Про практику понял, планирую написать пару небольших проектов.
это значит, что когда тебе сказали запили фичу, то ты не сидишь ломая голову и изучая чужие примеры, пиля костыли, спрашивая на этом форуме, а делаешь сам зная какие модули надо использовать и как, знаешь мануал на столько, что тебе не нужны подсказки вроде "а как мне сделать такую-то шнягу?", ты просто знаешь, что её можно сделать так и так двумя-тремя способами, надо только глянуть на страницу мануала подсмотреть синтаксис функций.
Довольно просто, хорошо знать - значит знать ЧТО гуглить, чтобы решить проблему. Учить его - да что за дичь? он устареет через год, потом будет еще стопицот других, еще моднее.
Скажу не по фреймворку... но принцип везде один и тот же. Это то что объединяет всех Мастеров своего дела. Хорошо знать - значит детально знать базу, понимать как оно все работает и на базе накопленного опыта решать поставленные задачи быстро находя точки минимального воздействия.
просто тупо изучать классы - нет никакого смысла, нужно садиться и решать какие-то задачи. А помимо самого фреймворка, обычно идёт как минимум 5-10 must-have расширений из коммьюнити, с которыми так же стоит ознакомиться.
Нужно понять lifecycle фреймворка - пройтись с xdebug по стеку выполнения рендеренига простой страницы.
Понять принципы роутинга, обработки запросов, конфигурации, авторизации. DI, событий. И сразу применять на практике. Yii2 не простой фреймворк для первого знакомства с фреймворками в принципе, хоть и достаточно с низким порогом вхождения, но у него много специфических плюшек, после которых перестроиться на другие фреймворки может быть тяжелее - в частности виджеты, поведения, и сама специфика конфигурации компонентов с магией
В приемлемые сроки, забыли добавить.
Я могу написать сайт на Laravel - не боги горшки обжигают, - но, поскольку я только начал знакомство с ним, это займет несколько больше времени, чем хотелось бы работодателю... ;)