Что должен знать junior php разработчик

Текст ниже перевод от сюда phpixie.com/blog/things-every-web-developer-should-know-part-1/

Общие познания в программировании:
1) Понимание нотации большого О. Что это значит и почему это важно.
2) Структура массива, представление его в оперативной памяти и обращение к n-му элементу.
3) Как минимум понимание еще одной фундаментальной структуры данных (связанный список, очередь, стек).
4) Знание и умение реализовать хотя бы один алгоритм сортировки со сложностью O(N lg N).
5) Понимание рекурсии.


ООП:
1) Инкапсуляция, наследование, полиморфизм.
2) Разница между интерфейсом и абстрактным классом.
3) Понимание, как минимум двух паттернов (шаблонов) каждого вида (Порождающие, Структурные, Поведенческие).
4) DRY принцип (Не повторяйте себя, проще говоря не пишите лишнего кода).
5) Почему паттерн "синглтон" зло.


АРХИТЕКТУРА:
1) Разница между MVC, VC и MVP архитектурами.
2) Почему микрофреймворки, как Slim не могут быть классифицированы, как MVC. Какая архитектура у них на самом деле.
3) Почему все фреймворки PHP MVC на самом деле не настоящие MVC.
4) Что такое разделение интересов.
5) Понимание ORM (Объектно-реляционное отображение) и паттерна ActiveRecord.


СЕТЬ:
1) Структура IP адреса.
2) Что такое порт, протокол и сокет.
3) Плюсы и минусы использование механизмов сессий и кукиесов (sessions, cookies). Знать когда какой использовать.
4) Уметь выполнить базовую настройку веб сервера.
5) Использовать Ajax.


SQL:
1) Проектирование нормализованных таблиц. Знать первые три нормальные формы.
2) Понимание индексов. Что такое полное сканирование таблицы и почему этого стоит избегать.
3) Уметь использовать EXPLAIN для анализа запросов.
4) Знать разницу типов джойнов (JOINS).
5) Myisam vs innoDB плюсы и минусы.
6) Знать про no-sql базы данных.


HTML, CSS и разметка:
1) Пользоваться шаблонизаторами.
2) Знание препроцессоров CSS.
3) Кроссбразорность.
4) Знать минимум несколько красивых css эффектов вроде тени, градиента или скругленных углов.
5) Понимание важности семантической разметки.
6) Знать DOM.


JAVASCRIPT:
1) Как джаваскрипт является объектно ориентированным языком без классов.
2) Как эмулировать классы в джаваскрипт.
3) Использовать JQuery.
4) Уметь писать хорошо структурированный код без колбеков.
5) Знать методы ускорения загрузки скриптов.


БЕЗОПАСНОСТЬ:
1) Подходы к авторизации и аутентификации.
2) OAuth.
3) Предотвращение SQL аттак.
4) Предотвращение XSS аттак.
5) Устойчивость в DDOS.
6) Хеш функции и почему MD5 больше не круто.


ОПТИМИЗАЦИЯ:
1) Кеширование.
2) Профилирование кода.
3) Понимание подходов к балансировки нагрузки.


PHP:
1) Типы данных PHP.
2) Обработка ошибок.
3) Наследование исключений и конструкции с несколькими catch.
4) Классы, интерфейсы.
5) Загрузка файлов.
6) Magic методы.
7) Продуктивно работать хотя бы с одним фреймворком и CMS.
8) Autoloading.
9) Позднее статическое связывание.



comments powered by Disqus